App-GUI-Cellgraph
view release on metacpan or search on metacpan
lib/App/GUI/Cellgraph/Frame/Tab/Action.pm view on Meta::CPAN
$row_sizer->Add( $self->{'arrow'}[$i], 0, $v_attr );
$row_sizer->AddSpacer(0);
$row_sizer->Add( $self->{'action_result'}[$i], 0, $v_attr );
$row_sizer->Add( $self->{'action_spread'}[$i], 0, $v_attr );
$row_sizer->Add( 0, 1, &Wx::wxEXPAND | &Wx::wxGROW);
$self->{'plate_sizer'}->AddSpacer(10);
$self->{'plate_sizer'}->Add( $row_sizer, 0, $std_attr, 0);
}
$self->Layout if $refresh;
} elsif ($do_recolor) {
my @rgb = map {[$_->values]} @colors;
$self->{'rule_input'}[$_]->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]->change_values_command( 'result', 'init', );
$_[0]->change_values_command( 'spread', 'init', );
}
sub set_settings {
my ($self, $settings) = @_;
return unless ref $settings eq 'HASH' and exists $settings->{'result_summary'} and exists $settings->{'spread_summary'};
$self->set_result_values( list_from_summary( $settings->{'result_summary'} ) );
$self->set_spread_values( list_from_summary( $settings->{'spread_summary'} ) );
}
sub get_settings {
my ($self) = @_;
my $state = $self->get_state;
delete $state->{'result_list'};
delete $state->{'spread_list'};
return $state;
}
sub get_state {
my ($self) = @_;
my @results = $self->get_result_values;
my @spreads = $self->get_spread_values;
{
result_summary => summary_from_list(@results),
spread_summary => summary_from_list(@spreads),
result_list => [@results],
spread_list => [@spreads],
}
}
sub get_result_values { map { $_[0]->{'action_result'}[$_]->GetValue } $_[0]->{'subrules'}->index_iterator }
sub get_spread_values { map { $_[0]->{'action_spread'}[$_]->GetValue } $_[0]->{'subrules'}->index_iterator }
sub set_result_values {
my ($self, @values) = @_;
return unless @values == $self->{'subrules'}->independent_count;
$self->{'action_result'}[$_]->SetValue( $values[$_], 'silent' ) for $self->{'subrules'}->index_iterator;
$self->update_result_history( );
}
sub update_result_history {
my ($self, $nr) = @_;
return if defined $nr and not exists $self->{'action_result'}[$nr];
$self->{'result_history'}->add_value( summary_from_list( $self->get_result_values ), (defined $nr) ? ($nr, time) : () );
$self->update_button_state;
}
sub set_spread_values {
my ($self, @values) = @_;
return unless @values == $self->{'subrules'}->independent_count;
$self->{'action_spread'}[$_]->SetValue( $values[$_], 'silent' ) for $self->{'subrules'}->index_iterator;
$self->update_spread_history( );
}
sub update_spread_history {
my ($self, $nr) = @_;
return if defined $nr and not exists $self->{'action_spread'}[$nr];
$self->{'spread_history'}->add_value( summary_from_list( $self->get_spread_values ), (defined $nr) ? ($nr, time) : () );
$self->update_button_state
}
sub update_button_state {
my ($self) = @_;
$self->{'button'}{'result'}{'undo'}->Enable( $self->{'result_history'}->can_undo );
$self->{'button'}{'result'}{'redo'}->Enable( $self->{'result_history'}->can_redo );
$self->{'button'}{'spread'}{'undo'}->Enable( $self->{'spread_history'}->can_undo );
$self->{'button'}{'spread'}{'redo'}->Enable( $self->{'spread_history'}->can_redo );
}
sub list_from_summary { split ',', $_[0] }
sub summary_from_list { join ',', @_ }
########################################################################
sub change_values_command {
my ($self, $type, $command) = @_;
my $sub_rule_count = $self->{'subrules'}->independent_count;
if ($type eq 'result'){
my @values = $self->get_result_values;
if ($command eq 'init'){ @values = map { 0.65 } @values }
elsif ($command eq 'copy'){ @values = map { $values[0]} @values }
elsif ($command eq 'add') { @values = map { $_ + 0.02 } @values }
elsif ($command eq 'sub') { @values = map { $_ - 0.02 } @values }
elsif ($command eq 'mul') { @values = map { $_ * 1.1 } @values }
elsif ($command eq 'div') { @values = map { $_ / 1.2 } @values }
elsif ($command eq 'wave'){ @values = map { ($_ % 2) ? ($values[$_] - 0.1) : ($values[$_] + 0.1) } 0 .. $#values }
elsif ($command eq '+rnd'){ @values = map { $_ + ((rand 0.2)-0.1)} @values }
elsif ($command eq 'rnd') { @values = map { (rand 2) - 1} @values }
else { return; }
$self->set_result_values( @values );
} elsif ($type eq 'spread'){
my @values = $self->get_spread_values;
if ($command eq 'init'){ @values = map { 0.2 } @values }
elsif ($command eq 'copy'){ @values = map { $values[0]} @values }
elsif ($command eq 'add') { @values = map { $_ + 0.02 } @values }
elsif ($command eq 'sub') { @values = map { $_ - 0.02 } @values }
elsif ($command eq 'mul') { @values = map { $_ * 1.05 } @values }
elsif ($command eq 'div') { @values = map { $_ / 1.1 } @values }
elsif ($command eq 'wave'){ @values = map { ($_ % 2) ? ($values[$_] - 0.1) : ($values[$_] + 0.1) } 0 .. $#values }
elsif ($command eq '+rnd'){ @values = map { $_ + ((rand 0.2)-0.1)} @values }
elsif ($command eq 'rnd') { @values = map { (rand 2) - 1} @values }
else { return; }
$self->set_spread_values( @values );
}
}
1;
( run in 0.611 second using v1.01-cache-2.11-cpan-97f6503c9c8 )