App-GUI-Cellgraph

 view release on metacpan or  search on metacpan

lib/App/GUI/Cellgraph/Frame/Tab/Rules.pm  view on Meta::CPAN


# panel to input subrule results

package App::GUI::Cellgraph::Frame::Tab::Rules;
use v5.12;
use warnings;
use Wx;
use base qw/Wx::Panel/;
use App::GUI::Cellgraph::Widget::RuleInput;
use App::GUI::Cellgraph::Widget::ColorToggle;
use App::GUI::Cellgraph::Compute::Rule;
use Graphics::Toolkit::Color qw/color/;

sub new {
    my ( $class, $parent, $subrule_calculator ) = @_;
    my $self = $class->SUPER::new( $parent, -1);

    $self->{'subrules'} = $subrule_calculator;
    $self->{'rules'}    = App::GUI::Cellgraph::Compute::Rule->new( $subrule_calculator );
    $self->{'rule_square_size'} = 20;
    $self->{'input_size'} = 0;
    $self->{'state_count'} = 0;
    $self->{'rule_mode'} = '';
    $self->{'state_colors'} = [];
    $self->{'call_back'}  = sub {};
    App::GUI::Cellgraph::Compute::Grid::set_rules_tab( $self );

    $self->{'rule_nr'}   = Wx::TextCtrl->new( $self, -1, 0, [-1,-1], [ 115, -1], &Wx::wxTE_PROCESS_ENTER );
    $self->{'rule_nr'}->SetToolTip('number of currently displayed rule, works only on small subrule counts');
    $self->{'button'}{'prev'}   = Wx::Button->new( $self, -1, '<',  [-1,-1], [30,25] );
    $self->{'button'}{'next'}   = Wx::Button->new( $self, -1, '>',  [-1,-1], [30,25] );
    $self->{'button'}{'sh_l'}   = Wx::Button->new( $self, -1, '<<', [-1,-1], [35,25] );
    $self->{'button'}{'sh_r'}   = Wx::Button->new( $self, -1, '>>', [-1,-1], [35,25] );
    $self->{'button'}{'sym'}    = Wx::Button->new( $self, -1, '<>', [-1,-1], [35,25] );
    $self->{'button'}{'inv'}    = Wx::Button->new( $self, -1, '!',  [-1,-1], [30,25] );
    $self->{'button'}{'opp'}    = Wx::Button->new( $self, -1, '%',  [-1,-1], [30,25] );
    $self->{'button'}{'rnd'}    = Wx::Button->new( $self, -1, '?',  [-1,-1], [30,25] );
    $self->{'button'}{'undo'}   = Wx::Button->new( $self, -1, '<=', [-1,-1], [30,25] );
    $self->{'button'}{'redo'}   = Wx::Button->new( $self, -1, '=>', [-1,-1], [30,25] );

    $self->{'button'}{'prev'}->SetToolTip('decrease rule number by one');
    $self->{'button'}{'next'}->SetToolTip('increase rule number by one');
    $self->{'button'}{'sh_l'}->SetToolTip('rotate binary rule number one to left');
    $self->{'button'}{'sh_r'}->SetToolTip('rotate binary rule number one to right');
    $self->{'button'}{'sym'}->SetToolTip('choose symmetric rule (every partial rule swaps result with symmetric partner)');
    $self->{'button'}{'inv'}->SetToolTip('choose inverted rule (every partial rule that produces white, goes black and vice versa)');
    $self->{'button'}{'opp'}->SetToolTip('choose opposite rule ()');
    $self->{'button'}{'rnd'}->SetToolTip('choose random rule');
    $self->{'button'}{'undo'}->SetToolTip('undo the last rule changes');
    $self->{'button'}{'redo'}->SetToolTip('redo - take back the rule change undo');

    $self->{'rule_plate'} = Wx::ScrolledWindow->new( $self );
    $self->{'rule_plate'}->ShowScrollbars(0,1);
    $self->{'rule_plate'}->EnableScrolling(0,1);
    $self->{'rule_plate'}->SetScrollRate( 1, 1 );

    my $std_attr = &Wx::wxALIGN_LEFT | &Wx::wxGROW | &Wx::wxALIGN_CENTER_HORIZONTAL;
    my $all_attr = &Wx::wxGROW | &Wx::wxALL | &Wx::wxALIGN_CENTER_HORIZONTAL;
    my $tb_attr  = $std_attr | &Wx::wxTOP | &Wx::wxBOTTOM;

    my $rule_sizer = Wx::BoxSizer->new( &Wx::wxHORIZONTAL );
    $rule_sizer->AddSpacer( 10 );
    $rule_sizer->Add( Wx::StaticText->new( $self, -1, 'Rule :' ), 0, $all_attr, 10 );
    $rule_sizer->Add( $self->{'rule_nr'},     0, $all_attr, 5 );
    $rule_sizer->AddSpacer( 5 );
    $rule_sizer->Add( $self->{'button'}{'prev'}, 0, $tb_attr, 5 );
    $rule_sizer->Add( $self->{'button'}{'next'}, 0, $tb_attr, 5 );
    $rule_sizer->AddSpacer( 23 );
    $rule_sizer->Add( $self->{'button'}{'undo'}, 0, $tb_attr, 5 );
    $rule_sizer->Add( $self->{'button'}{'redo'}, 0, $tb_attr, 5 );
    $rule_sizer->Add( 0, 1, &Wx::wxEXPAND | &Wx::wxGROW);

    my $rf_sizer = Wx::BoxSizer->new( &Wx::wxHORIZONTAL );
    $rf_sizer->AddSpacer( 63 );
    $rf_sizer->Add( $self->{'button'}{'sh_l'}, 0, $tb_attr, 5 );
    $rf_sizer->Add( $self->{'button'}{'sh_r'}, 0, $tb_attr, 5 );



( run in 1.181 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )