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 )