App-GUI-Cellgraph
view release on metacpan or search on metacpan
lib/App/GUI/Cellgraph/Frame/Tab/Rules.pm view on Meta::CPAN
$self->{'rule_result'}[$rule_index]->SetValue( $self->{'rules'}->get_subrule_result($rule_index) );
$self->{'rule_result'}[$rule_index]->SetCallBack( sub { $self->update_subrule_result( $rule_index, $_[0]); $self->{'call_back'}->(); });
$self->{'rule_result'}[$rule_index]->SetToolTip('result of partial rule '.($rule_index+1).'left or right click to change it (rotate states)');
$self->{'rule_occur'} [$rule_index] = Wx::TextCtrl->new( $self->{'rule_plate'}, -1, 0, [-1,-1], [ 60, -1], &Wx::wxTE_READONLY | &Wx::wxTE_RIGHT );
$self->{'rule_occur'} [$rule_index]->SetToolTip('how many times this sub rul was applied ?');
}
my $label_length = length $self->{'subrules'}->independent_count;
for my $rule_index ($self->{'subrules'}->index_iterator){
my $row_sizer = Wx::BoxSizer->new( &Wx::wxHORIZONTAL );
my $label = Wx::StaticText->new( $self->{'rule_plate'}, -1, sprintf('%0'.$label_length.'u',$rule_index+1).' : ' );
$row_sizer->AddSpacer(20);
$row_sizer->Add( $label, 0, $row, 6);
$row_sizer->Add( $self->{'rule_input'}[$rule_index], 0, $box, 3);
$row_sizer->AddSpacer(13);
$row_sizer->Add( $self->{'arrow'}[$rule_index], 0, $row, 6 );
$row_sizer->AddSpacer(10);
$row_sizer->Add( $self->{'rule_result'}[$rule_index], 0, $box, 3 );
$row_sizer->Add( $self->{'rule_occur'}[$rule_index], 0, $item, 60 );
$row_sizer->Add( 0, 1, &Wx::wxEXPAND | &Wx::wxGROW);
$self->{'plate_sizer'}->AddSpacer(10);
$self->{'plate_sizer'}->Add( $row_sizer, 0, $std_attr, 10);
}
$self->Layout if $refresh;
} elsif ($do_recolor) {
my @rgb = map {[$_->values]} @colors;
$self->{'rule_input'}[$_]->SetColors( @rgb ) for $self->{'subrules'}->index_iterator;
$self->{'rule_result'}[$_]->SetColors( @rgb ) for $self->{'subrules'}->index_iterator;
}
}
sub set_callback {
my ($self, $code) = @_;
return unless ref $code eq 'CODE';
$self->{'call_back'} = $code;
}
sub init { $_[0]->set_settings( { summary => '01001000' } ) }
sub set_settings {
my ($self, $settings) = @_;
return unless ref $settings eq 'HASH' and exists $settings->{'summary'};
$self->set_summary( $settings->{'summary'} );
}
sub get_settings { { summary => $_[0]->get_summary, } }
sub get_state { { summary => $_[0]->get_summary, calc => $_[0]->{'rules'} } }
sub get_result_values { map { $_[0]->{'rule_result'}[$_]->GetValue } $_[0]->{'subrules'}->index_iterator }
sub set_result_values {
my ($self, @values) = @_;
return unless @values == $self->{'subrules'}->independent_count;
$self->{'rule_result'}[$_]->SetValue( $values[$_], 'silent' ) for $self->{'subrules'}->index_iterator;
$self->update_widgets;
}
sub get_summary { join '', $_[0]->get_result_values }
sub set_summary {
my ($self, $summary) = @_;
my @values = split '', $summary;
my $return = $self->{'rules'}->set_subrule_results( @values );
$self->set_result_values( @values );
}
sub update_subrule_result {
my ($self, $index, $result) = @_;
my $summary = $self->{'rules'}->set_subrule_result( $index, $result );
$self->update_widgets;
}
sub update_subrule_occurance {
my ($self, @occurance) = @_;
for my $rule_index ($self->{'subrules'}->index_iterator){
$self->{'rule_occur'}[$rule_index]->SetValue( $occurance[$rule_index] );
}
}
sub update_widgets {
my ($self) = shift;
$self->{'rule_nr'}->SetValue( $self->{'rules'}->get_rule_nr );
$self->{'button'}{'undo'}->Enable( $self->{'rules'}->can_undo );
$self->{'button'}{'redo'}->Enable( $self->{'rules'}->can_redo );
}
1;
( run in 1.704 second using v1.01-cache-2.11-cpan-5a3173703d6 )