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 )