App-GUI-Cellgraph
view release on metacpan or search on metacpan
lib/App/GUI/Cellgraph/Frame.pm view on Meta::CPAN
$help_menu->Append( 13300, "&About\tAlt+A", "Dialog with general information about the program" );
my $menu_bar = Wx::MenuBar->new();
$menu_bar->Append( $settings_menu, '&Settings' );
$menu_bar->Append( $image_menu, '&Image' );
$menu_bar->Append( $help_menu, '&Help' );
$self->SetMenuBar($menu_bar);
Wx::Event::EVT_MENU( $self, 11100, sub { $self->init });
Wx::Event::EVT_MENU( $self, 11200, sub { $self->open_settings_dialog });
Wx::Event::EVT_MENU( $self, 11400, sub { $self->write_settings_dialog });
Wx::Event::EVT_MENU( $self, 11500, sub { $self->Close });
Wx::Event::EVT_MENU( $self, 12300, sub { $self->draw });
Wx::Event::EVT_MENU( $self, 12400, sub { $self->save_image_dialog });
Wx::Event::EVT_MENU( $self, 13300, sub { $self->{'dialog'}{'about'}->ShowModal });
my $std_attr = &Wx::wxALIGN_LEFT|&Wx::wxGROW|&Wx::wxALIGN_CENTER_VERTICAL;
my $vert_attr = $std_attr | &Wx::wxTOP;
my $vset_attr = $std_attr | &Wx::wxTOP| &Wx::wxBOTTOM;
my $horiz_attr = $std_attr | &Wx::wxLEFT;
my $all_attr = $std_attr | &Wx::wxALL;
my $line_attr = $std_attr | &Wx::wxLEFT | &Wx::wxRIGHT ;
my $board_sizer = Wx::BoxSizer->new(&Wx::wxVERTICAL);
$board_sizer->Add( $self->{'board'}, 0, $all_attr, 5);
$board_sizer->Add( 0, 0, &Wx::wxEXPAND | &Wx::wxGROW);
my $paint_lbl = Wx::StaticText->new( $self, -1, 'Grid Status:' );
my $draw_sizer = Wx::BoxSizer->new( &Wx::wxHORIZONTAL );
$draw_sizer->Add( $paint_lbl, 0, $all_attr, 15 );
$draw_sizer->Add( $self->{'progress_bar'}, 0, &Wx::wxALIGN_CENTER_VERTICAL, 10 );
$draw_sizer->AddSpacer(5);
$draw_sizer->Add( $self->{'btn'}{'draw'}, 0, $all_attr, 5 );
$draw_sizer->Add( 0, 1, &Wx::wxEXPAND | &Wx::wxGROW);
my $setting_sizer = Wx::BoxSizer->new(&Wx::wxVERTICAL);
$setting_sizer->Add( $self->{'tabs'}, 1, &Wx::wxEXPAND | &Wx::wxGROW);
$setting_sizer->AddSpacer(10);
$setting_sizer->Add( $draw_sizer, 0, 0, 0);
$setting_sizer->AddSpacer(5);
# $setting_sizer->Add( 0, 1, &Wx::wxEXPAND | &Wx::wxGROW);
my $main_sizer = Wx::BoxSizer->new( &Wx::wxHORIZONTAL );
$main_sizer->Add( $board_sizer, 0, &Wx::wxEXPAND, 0);
$main_sizer->Add( $setting_sizer, 1, &Wx::wxEXPAND, 0);
$self->SetSizer($main_sizer);
$self->SetAutoLayout( 1 );
$self->{'tabs'}->SetFocus;
#$self->SetMinSize( $window_size );
$self->SetMaxSize( $window_size );
$self->SetSize( $window_size );
$self->update_recent_settings_menu();
$self->sketch( );
$self->SetStatusText( "settings in init state", 0 );
$self->{'last_file_settings'} = $self->get_settings;
$self;
}
sub update_recent_settings_menu {
my ($self) = @_;
my $recent = $self->{'config'}->get_value('last_settings');
return unless ref $recent eq 'ARRAY';
my $set_menu_ID = 11300;
$self->{'setting_menu'}->Destroy( $set_menu_ID );
my $Recent_ID = $set_menu_ID + 1;
$self->{'recent_menu'} = Wx::Menu->new();
for (reverse @$recent){
my $path = $_;
$self->{'recent_menu'}->Append($Recent_ID, $path);
Wx::Event::EVT_MENU( $self, $Recent_ID++, sub { $self->open_setting_file( $path ) });
}
$self->{'setting_menu'}->Insert( 2, $set_menu_ID, '&Recent', $self->{'recent_menu'}, 'recently saved settings' );
}
sub init {
my ($self) = @_;
$self->{'tab'}{ $_ }->init() for @{$self->{'tab_names'}};
$self->sketch( );
$self->SetStatusText( "all settings are set to default", 0);
$self->set_settings_save(1);
}
sub get_state { return { map { $_ => $_[0]->{'tab'}{$_}->get_state } @{$_[0]->{'tab_names'}} }}
sub get_settings { return { map { $_ => $_[0]->{'tab'}{$_}->get_settings } @{$_[0]->{'tab_names'}} }}
sub set_settings {
my ($self, $settings) = @_;
$self->{'tab'}{ $_ }->set_settings( $settings->{ $_ } ) for @{$self->{'tab_names'}};
$self->spread_setting_changes;
}
sub set_settings_save {
my ($self, $status) = @_;
$self->{'saved'} = $status;
$self->SetTitle( $self->{'title'} .($self->{'saved'} ? '': ' *'));
}
sub spread_setting_changes {
my ($self, $settings) = @_;
my $global = (ref $settings eq 'HASH') ? $settings->{'global'} : $self->{'tab'}{'global'}->get_settings;
$self->{'tab'}{'color'}->set_state_count( $global->{'state_count'} );
$self->{'tab'}{'color'}->set_settings( $settings->{'color'} ) if ref $settings eq 'HASH';
$self->{'tab'}{'global'}->set_settings( $settings->{'global'} ) if ref $settings eq 'HASH';
my @state_colors = $self->{'tab'}{'color'}->get_active_colors;
$self->{'tab'}{'start'}->update_cell_colors( @state_colors );
$self->{'tab'}{'rules'}->regenerate_rules( @state_colors );
$self->{'tab'}{'action'}->regenerate_rules( @state_colors );
$self->{'progress_bar'}->set_colors( @state_colors );
}
sub sketch {
my ($self) = @_;
$self->spread_setting_changes();
$self->{'board'}->sketch( $self->get_state );
$self->{'progress_bar'}->reset;
$self->set_settings_save( 0 );
}
sub draw {
my ($self) = @_;
$self->spread_setting_changes();
( run in 1.198 second using v1.01-cache-2.11-cpan-56fb94df46f )