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 )