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 )