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 )