App-GUI-Harmonograph

 view release on metacpan or  search on metacpan

lib/App/GUI/Harmonograph/Frame/Panel/Pendulum.pm  view on Meta::CPAN

        freq_damp   => $self->{'freq_damp'}->GetValue,
        freq_damp_type => $self->{'freq_damp_type'}->GetValue,
        freq_damp_acc => $self->{'freq_damp_acc'}->GetValue,
        freq_damp_type => $self->{'freq_damp_type'}->GetValue,
        freq_damp_acc_type  => $self->{'freq_damp_acc_type'}->GetValue,
        offset      => (0.5 * $self->{'half_off'}->IsChecked)
                     + (0.25 * $self->{'quarter_off'}->IsChecked)
                     + ($self->{'offset'}->GetValue / 400),
        radius       => $self->{'radius'}->GetValue / 100,
        radius_factor => $const{$self->{'radius_factor'}->GetValue},
        radius_damp    => $self->{'radius_damp'}->GetValue,
        radius_damp_acc => $self->{'radius_damp_acc'}->GetValue,
        radius_damp_type => $self->{'radius_damp_type'}->GetValue,
        radius_damp_acc_type => $self->{'radius_damp_acc_type'}->GetValue,
    }
}

sub set_settings {
    my ( $self, $settings ) = @_;
    return unless ref $settings eq 'HASH' and exists $settings->{'frequency'}
        and exists $settings->{'offset'} and exists $settings->{'radius'};

    $self->{ 'freq_factor'}->SetValue( 1 );
    $self->{ 'radius_factor'}->SetValue( 1 );
    if (exists $settings->{'freq_factor'} and $settings->{'freq_factor'}){
        for my $label (@const_names) {
            $self->{ 'freq_factor'}->SetValue( $label ) if abs($const{ $label } - $settings->{'freq_factor'}) < 0.0001;
        }
    }
    if (exists $settings->{'radius_factor'} and $settings->{'radius_factor'}){
        for my $label (@const_names) {
            $self->{ 'radius_factor'}->SetValue( $label ) if abs($const{ $label } - $settings->{'radius_factor'}) < 0.0001;
        }
    }
    $self->{ 'on' }->SetValue( $settings->{'on'} );
    $self->{ 'invert_dir' }->SetValue( $settings->{'invert_dir'} );
    $self->{ 'invert_freq' }->SetValue( $settings->{'invert_freq'} );
    $self->{ 'neg_freq' }->SetValue( $settings->{'neg_freq'} );
    $self->{ 'neg_radius' }->SetValue( $settings->{'neg_radius'} );
    $self->{ 'frequency'}->SetValue( int $settings->{'frequency'}, 'passive' );
    $self->{ 'freq_dez' }->SetValue( int( 1000 * ($settings->{'frequency'} - int $settings->{'frequency'} ) ), 'passive' );

    $self->{ 'freq_damp' }->SetValue( $settings->{'freq_damp'}, 'passive' );
    $self->{ 'freq_damp_acc' }->SetValue( $settings->{'freq_damp_acc'}, 'passive' );
    $self->{ 'freq_damp_type'}->SetValue(  $settings->{ 'freq_damp_type'} // '-' );
    $self->{ 'freq_damp_acc_type'}->SetValue(  $settings->{ 'freq_damp_acc_type'} // '+' );
    $self->{ 'half_off' }->SetValue( $settings->{'offset'} >= 0.5 );
    $settings->{ 'offset' } -= 0.5 if $settings->{'offset'} >= 0.5;
    $self->{ 'quarter_off' }->SetValue( $settings->{'offset'} >= 0.25 );
    $settings->{ 'offset' } -= 0.25 if $settings->{'offset'} >= 0.25;
    $self->{ 'offset'}->SetValue( int( $settings->{'offset'} * 400 ), 'passive');
    $self->{ 'radius' }->SetValue( $settings->{'radius'} * 100, 'passive' );
    $self->{ 'radius_damp' }->SetValue( $settings->{'radius_damp'}, 'passive' );
    $self->{ 'radius_damp_acc' }->SetValue( $settings->{'radius_damp_acc'}, 'passive');
    $self->{ 'radius_damp_type'}->SetValue(  $settings->{ 'radius_damp_type'} // '-' );
    $self->{ 'radius_damp_acc_type'}->SetValue(  $settings->{ 'radius_damp_acc_type'} // '+' );
    $self->update_enable;
    1;
}

sub update_enable {
    my ($self) = @_;
    my $val = $self->{ 'on' }->IsChecked;
    $self->{$_}->Enable( $val ) for qw/
        freq_dez freq_factor invert_freq invert_dir neg_freq half_off quarter_off offset
        frequency freq_damp freq_damp_acc freq_damp_type freq_damp_acc_type
        radius radius_factor neg_radius reset_radius
        radius_damp radius_damp_acc radius_damp_type radius_damp_acc_type/;
}

1;



( run in 1.175 second using v1.01-cache-2.11-cpan-39bf76dae61 )