App-Music-ChordPro
view release on metacpan or search on metacpan
lib/ChordPro/Wx/SettingsDialog.pm view on Meta::CPAN
}
$ctl->SetSelection($check);
}
# Transcodings
for my $ctl ( $self->{ch_xcode} ) {
$ctl->Clear;
my $n = 0;
my $check;
for ( sort keys %{$state{presets}{notations}} ) {
$ctl->Append( $state{presets}{notations}->{$_}->{title} .
" (" . $state{presets}{notations}->{$_}->{desc} . ")",
$state{presets}{notations}->{$_},
);
$check = $n
if $_ eq lc($preferences{preset_xcodes}[0]->{title});
$check //= $n
if $state{presets}{notations}->{$_}->{default};
$n++;
}
$ctl->SetSelection($check);
}
}
method fetch_prefs() {
# Transfer preferences to the dialog.
# Skip default (system, user, song) configs.
$self->{cb_usestdcfg}->SetValue(!$preferences{skipstdcfg});
if ( is_arrayref($preferences{preset_instruments})
&& @{$preferences{preset_instruments}} ) {
for ( $self->{ch_instrument} ) {
my $n = $_->FindString($preferences{preset_instruments}[0]);
$_->SetSelection($n)
unless $n == wxNOT_FOUND;
}
}
# Custom config file.
$self->{cb_configfile}->SetValue($preferences{enable_configfile});
$self->{fp_customconfig}->SetPath($preferences{configfile})
if $preferences{configfile};
# Custom library.
$self->{cb_customlib}->SetValue($preferences{enable_customlib});
$self->{dp_customlibrary}->SetPath($preferences{customlib})
if $preferences{customlib};
# New song template.
$self->{cb_tmplfile}->SetValue($preferences{enable_tmplfile});
$self->{fp_tmplfile}->SetPath($preferences{tmplfile})
if $preferences{tmplfile};
# Preferred filename extension.
$self->{t_prefext}->SetValue( $preferences{chordproext} );
# Editor.
$self->{fp_editor}->SetSelectedFont( Wx::Font->new($preferences{editfont}) );
$self->prefs2colours;
$self->{cb_editorwrap}->SetValue($preferences{editorwrap});
$self->{sp_editorwrap}->SetValue($preferences{editorwrapindent});
# Messages.
$self->{fp_messages}->SetSelectedFont( Wx::Font->new($preferences{msgsfont}) );
# Transcode.
$self->{cb_xcode}->SetValue( $preferences{enable_xcode} );
$self->OnCbTranscode(undef);
# PDF Viewer.
$self->{cb_pdfviewer}->SetValue($preferences{enable_pdfviewer});
$self->{t_pdfviewer}->SetValue($preferences{pdfviewer})
if $preferences{pdfviewer};
$self->{t_pdfviewer}->Enable($self->{cb_pdfviewer}->IsChecked);
# HTML Viewer.
$self->{cb_htmlviewer}->SetValue($preferences{enable_htmlviewer});
$self->enablecustom;
$state{_prefs} = clone(\%preferences);
# use DDP; p %preferences, as => "Fetched";
}
# C D E F G A B C
my @xpmap = qw( 0 1 1 2 3 3 4 5 6 6 7 8 8 9 10 10 11 12 );
my @sfmap = qw( 0 7 -5 2 9 -3 4 -1 6 -6 1 8 -4 3 10 -2 5 0 );
method store_prefs() {
# Transfer all preferences to the state.
my $parent = $self->GetParent;
# Skip default (system, user, song) configs.
$preferences{skipstdcfg} = !$self->{cb_usestdcfg}->IsChecked;
# Preset instrument.
my $n = $self->{ch_instrument}->GetSelection;
$preferences{preset_instruments} =
[ $self->{ch_instrument}->GetClientData($n) ];
# Preset style.
$n = $self->{ch_style}->GetSelection;
$preferences{preset_styles} =
[ $self->{ch_style}->GetClientData($n) ];
# Preset stylemods.
my $ctl = $self->{ch_stylemods};
my $cnt = $ctl->GetCount;
$preferences{preset_stylemods} = [];
for ( my $n = 0; $n < $cnt; $n++ ) {
next unless $ctl->IsChecked($n);
push( @{$preferences{preset_stylemods}}, $ctl->GetClientData($n) );
}
# Custom config file.
$preferences{enable_configfile} = $self->{cb_configfile}->IsChecked;
$preferences{configfile} = $self->{fp_customconfig}->GetPath;
$preferences{enable_configfile} = 0 if $preferences{configfile} eq "";
# Custom library.
$preferences{enable_customlib} = $self->{cb_customlib}->IsChecked;
$preferences{customlib} = $self->{dp_customlibrary}->GetPath;
$preferences{enable_customlib} = 0 if $preferences{customlib} eq "";
# New song template.
$preferences{enable_tmplfile} = $self->{cb_tmplfile}->IsChecked;
$preferences{tmplfile} = $self->{fp_tmplfile}->GetPath;
$preferences{enable_tmplfile} = 0 if $preferences{tmplfile} eq "";
# Preferred filename extension.
$preferences{chordproext} = $self->{t_prefext}->GetValue;
# Editor.
$preferences{editfont} = $self->{fp_editor}->GetSelectedFont->GetNativeFontInfoDesc;
$self->colours2prefs;
$preferences{editorwrap} = $self->{cb_editorwrap}->IsChecked;
$preferences{editorwrapindent} = $self->{sp_editorwrap}->GetValue;
# Messages.
$preferences{msgsfont} = $self->{fp_messages}->GetSelectedFont->GetNativeFontInfoDesc;
# Notation.
$n = $self->{ch_notation}->GetSelection;
if ( $n != wxNOT_FOUND ) {
$preferences{preset_notations} =
[ $self->{ch_notation}->GetClientData($n) ];
$preferences{preset_notations} = []
if $preferences{preset_notations}->[0]->{default};
}
else {
$preferences{preset_notations} = [];
}
# Transcode.
$preferences{enable_xcode} = $self->{cb_xcode}->IsChecked;
$n = $self->{ch_xcode}->GetSelection;
if ( $n >= 0 ) {
$preferences{preset_xcodes} =
[ $self->{ch_xcode}->GetClientData($n) ];
}
else {
$preferences{preset_xcodes} = [ $state{default_notation} ];
}
# PDF Viewer.
$preferences{enable_pdfviewer} = $self->{cb_pdfviewer}->IsChecked;
$preferences{pdfviewer} = $self->{t_pdfviewer}->GetValue;
# HTML Viewer.
$preferences{enable_htmlviewer} = $self->{cb_htmlviewer}->IsChecked;
# use DDP; p %preferences, as => "Stored";
}
method restore_prefs() {
%preferences = %{ $state{_prefs} };
# use DDP; p %preferences, as => "Restored";
}
method reload() {
# Temporary store dialog values into preferences.
local $preferences{skipstdcfg} = !$self->{cb_usestdcfg}->IsChecked;
local $preferences{customlib} = $self->{dp_customlibrary}->GetPath;
local $preferences{enable_customlib} = $self->{cb_customlib}->IsChecked;
# Rebuild the lists of config styles.
ChordPro::Wx::Config::setup_styles(1);
# Update the dialog.
$self->enablecustom;
}
method get_selected_theme() {
(qw(light dark auto))[$self->{ch_theme}->GetSelection];
}
method set_selected_theme($theme) {
$self->{ch_theme}->SetSelection
( $theme eq "light" ? 0 : $theme eq "dark" ? 1 : 2 );
}
lib/ChordPro/Wx/SettingsDialog.pm view on Meta::CPAN
( $self,
"The configuration file ".basename($path)." does not exist.".
"Create it?",
"Missing Configuration",
wxYES | wxICON_QUESTION );
my $ret = $md->ShowModal;
$md->Destroy;
return unless $ret == wxID_YES;
$self->_OnCreateConfig( $event, $path );
}
method OnCustomLib($event) {
my $n = $self->{cb_customlib}->IsChecked;
$self->{dp_customlibrary}->Enable($n);
$self->reload;
}
method OnCustomLibChanged($event) {
$self->reload;
}
method OnUseStdCfg($event) {
$event->Skip;
$self->reload;
}
method OnPresets($event) {
# $self->{ch_presets}->Enable( $self->{cb_presets}->GetValue );
$event->Skip;
}
method OnPrefExtChanged($event) {
$preferences{chordproext} = $self->{t_prefext}->GetValue;
$preferences{chordproext} =~ s;^\.*(\w+)?$;sprintf(".%s",$1//substr($state{_prefs}{chordproext},1));e
&& $self->{t_prefext}->ChangeValue($preferences{chordproext});
ChordPro::Wx::Config::setup_filters();
$event->Skip;
}
#### Notations and Transcode.
method OnChNotation($event) {
my $n = $self->{ch_notation}->GetSelection;
$event->Skip;
}
method OnChTranscode($event) {
my $n = $self->{ch_xcode}->GetSelection;
$event->Skip;
}
method OnCbTranscode($event) {
$self->{ch_xcode}->Enable( $self->{cb_xcode}->IsChecked );
}
#### Editor.
method OnEditorFontPickerChanged($event) {
my $ctl = $self->{t_editor};
return unless $ctl;
my $font = $self->{fp_editor}->GetSelectedFont;
$preferences{editfont} = $font->GetNativeFontInfoDesc;
$ctl->refresh;
}
method OnColourFGChanged( $event ) {
$self->colourchanged("fg");
}
method OnColourBGChanged( $event ) {
$self->colourchanged("bg");
}
method OnColourS1Changed( $event ) {
$self->colourchanged("s1");
}
method OnColourS2Changed( $event ) {
$self->colourchanged("s2");
}
method OnColourS3Changed( $event ) {
$self->colourchanged("s3");
}
method OnColourS4Changed( $event ) {
$self->colourchanged("s4");
}
method OnColourS5Changed( $event ) {
$self->colourchanged("s5");
}
method OnColourS6Changed( $event ) {
$self->colourchanged("s6");
}
method OnColourAnnFGChanged( $event ) {
$self->colourchanged("annfg");
}
method OnColourAnnBGChanged( $event ) {
$self->colourchanged("annbg");
}
method OnThemeChanged( $event ) {
$preferences{editortheme} = $self->get_selected_theme;
$self->prefs2colours;
}
method OnEditorWrap( $event ) {
$self->{$_}->Enable( $self->{cb_editorwrap}->IsChecked )
for qw( l_editorwrap sp_editorwrap );
$preferences{editorwrap} = $self->{cb_editorwrap}->IsChecked;
$preferences{editorwrapindent} = $self->{sp_editorwrap}->GetValue;
$self->{t_editor}->refresh;
}
method OnEditorWrapIndent( $event ) {
$preferences{editorwrapindent} = $self->{sp_editorwrap}->GetValue;
$self->{t_editor}->refresh;
}
method OnCbTmplFile($event) {
my $n = $self->{cb_tmplfile}->IsChecked;
$self->{fp_tmplfile}->Enable($n);
}
method OnTmplFileChanged($event) {
# my $file = $self->{fp_tmplfile}->GetPath;
# ellipsize( $self->{t_tmplfile}, text => $file );
}
#### Messages.
method OnMessagesFontPickerChanged($event) {
my $parent = $self->GetParent;
my $ctl = $parent->{t_messages};
return unless $ctl;
my $font = $self->{fp_messages}->GetSelectedFont;
$ctl->SetFont($font);
$preferences{msgsfont} = $font->GetString(wxC2S_HTML_SYNTAX);
}
# Previewer.
method OnPDFViewer($event) {
$self->{t_pdfviewer}->Enable( $self->{cb_pdfviewer}->GetValue );
}
method OnHTMLViewer($event) {
}
# System
method OnSysColourChanged($event) {
$self->GetParent->init_theme;
$self->OnThemeChanged($event);
$event->Skip;
}
method OnChangeInstrument( $event ) {
my $c = $event->GetClientData;
$self->set_instrument_desc($c->{desc});
}
method OnChangeStyle( $event ) {
my $c = $event->GetClientData;
$self->set_style_desc($c->{desc});
# $self->set_style_preview($c->{preview});
}
method OnChangeStylemods( $event ) {
my $n = $event->GetInt;
my $ctl = $self->{ch_stylemods};
my $data = $ctl->GetClientData($n);
my $desc = "";
my $xid = $ctl->IsChecked($n) ? $data->{exclude_id} : "";
# Collect descriptions.
# If checking a choice has an exclude_id, uncheck checked choices
# that use the same exclude_id.
for ( my $i = 0; $i < $ctl->GetCount; $i++ ) {
next unless $ctl->IsChecked($i);
$data = $ctl->GetClientData($i);
if ( $i != $n and $xid and ($data->{exclude_id}//"") eq $xid ) {
$ctl->Check( $i, 0 );
next;
}
if ( $data->{desc} ) {
$desc .= $checkpfx;
$desc .= ucfirst($data->{src}) . ": "
unless $data->{src} eq "std";
$desc .= $data->{desc} . "\n";
}
}
$self->set_stylemods_desc($desc);
}
################ Helpers ################
method set_style_desc( $desc ) {
( run in 1.228 second using v1.01-cache-2.11-cpan-5735350b133 )