App-GUI-Harmonograph
view release on metacpan or search on metacpan
lib/App/GUI/Harmonograph/Frame/Tab/Visual.pm view on Meta::CPAN
$flow_sizer->AddSpacer( 50 );
$flow_sizer->Add( $self->{'widget'}{'invert_flow_speed'}, 0, $box_attr, 5);
$flow_sizer->AddSpacer( 10 );
$flow_sizer->Add( $self->{'widget'}{'color_flow_speed'}, 0, $box_attr, 5);
$flow_sizer->Add( 0, 1, &Wx::wxEXPAND | &Wx::wxGROW);
my $sizer = Wx::BoxSizer->new(&Wx::wxVERTICAL);
$sizer->AddSpacer( 10 );
$sizer->Add( $self->{'label'}{'line'}, 0, &Wx::wxALIGN_CENTER_HORIZONTAL, 0);
$sizer->Add( $line_sizer, 0, $std_attr|&Wx::wxTOP, 10);
$sizer->Add( $l2_sizer, 0, $std_attr|&Wx::wxTOP, 10);
$sizer->Add( Wx::StaticLine->new($self, -1), 0, $box_attr, 10);
$sizer->Add( $self->{'label'}{'random'}, 0, &Wx::wxALIGN_CENTER_HORIZONTAL, 0);
$sizer->Add( $random_sizer, 0, $std_attr|&Wx::wxTOP, 10);
$sizer->Add( Wx::StaticLine->new($self, -1), 0, $box_attr, 10);
$sizer->Add( $self->{'label'}{'dense'}, 0, &Wx::wxALIGN_CENTER_HORIZONTAL, 0);
$sizer->Add( $dense_sizer, 0, $std_attr|&Wx::wxTOP, 10);
$sizer->Add( Wx::StaticLine->new($self, -1), 0, $box_attr, 10);
$sizer->Add( $self->{'label'}{'time'}, 0, &Wx::wxALIGN_CENTER_HORIZONTAL, 0);
$sizer->Add( $time_sizer, 0, $std_attr|&Wx::wxTOP, 10);
$sizer->Add( Wx::StaticLine->new($self, -1), 0, $box_attr, 10);
$sizer->Add( $self->{'label'}{'flow'}, 0, &Wx::wxALIGN_CENTER_HORIZONTAL, 0);
$sizer->Add( $color_sizer, 0, $std_attr|&Wx::wxTOP, 10);
$sizer->Add( $flow_sizer, 0, $std_attr|&Wx::wxTOP, 10);
$sizer->Add( Wx::StaticLine->new($self, -1), 0, $box_attr, 10);
$sizer->Add( 0, 1, $std_attr );
$self->SetSizer( $sizer );
$self->init();
$self;
}
sub init { $_[0]->set_settings( $default_settings ) }
sub set_settings {
my ( $self, $settings ) = @_;
return unless ref $settings eq 'HASH' and exists $settings->{'draw'};
for (@state_keys){
$settings->{ $_ } = $default_settings->{ $_ } unless exists $settings->{ $_ } and defined $settings->{ $_ } and $settings->{ $_ } ne ' ';
}
$self->{'widget'}{ $_ }->SetValue( $settings->{ $_ } ) for @state_widgets;
$self->{'widget'}{'draw'}->SetSelection(
lc $settings->{'draw'} eq lc $self->{'widget'}{'draw'}->GetString(1) ? 1 : 0);
$self->{'widget'}{ 'duration_min' }->SetValue( int($settings->{ 'duration'} / 60), 'passive');
$self->{'widget'}{ 'duration_s' }->SetValue( $settings->{ 'duration'} % 60, 'passive');
$self->{'widget'}{ '100dots_per_second'}->SetValue( int($settings->{ 'dot_density'} / 100), 'passive');
$self->{'widget'}{ 'dots_per_second' }->SetValue( $settings->{ 'dot_density'} % 100, 'passive');
$self->update_enable;
1;
}
sub get_settings {
my ( $self ) = @_;
my $settings = { map { $_ => ($self->{'widget'}{$_}->GetValue ? $self->{'widget'}{$_}->GetValue : 0) } @state_widgets};
$settings->{'duration'} = ($self->{'widget'}{ 'duration_min' }->GetValue * 60)
+ $self->{'widget'}{ 'duration_s' }->GetValue;
$settings->{'dot_density'} = ($self->{'widget'}{ '100dots_per_second' }->GetValue * 100)
+ $self->{'widget'}{ 'dots_per_second' }->GetValue;
$settings->{'draw'} = $self->{'widget'}{'draw'}->GetString( $self->{'widget'}{ 'draw' }->GetSelection );
$settings;
}
sub update_enable {
my ( $self ) = @_;
my $type = $self->{'widget'}{'color_flow_type'}->GetValue;
if ($type eq 'no'){
$self->{'widget'}{$_}->Enable(0) for qw/color_flow_speed invert_flow_speed colors_used color_flow_dynamic/;
} elsif ($type eq 'one_time'){
$self->{'widget'}{$_}->Enable(1) for qw/color_flow_speed invert_flow_speed colors_used color_flow_dynamic/;
$self->{'widget'}{'color_flow_speed'}->Enable(0);
$self->{'widget'}{'invert_flow_speed'}->Enable(0);
} else {
$self->{'widget'}{$_}->Enable(1) for qw/color_flow_speed invert_flow_speed colors_used color_flow_dynamic/;
}
}
sub SetCallBack {
my ( $self, $code) = @_;
return unless ref $code eq 'CODE';
$self->{'callback'} = $code;
}
1;
( run in 0.547 second using v1.01-cache-2.11-cpan-39bf76dae61 )