view release on metacpan or search on metacpan
lib/ChordPro/Wx/Config.pm view on Meta::CPAN
wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL ),
# Sans serif
Wx::Font->new( FONTSIZE, wxFONTFAMILY_SWISS,
wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL ),
# Modern
Wx::Font->new( FONTSIZE, wxFONTFAMILY_MODERN,
wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL ),
);
my %prefs =
(
# (Old) config version.
settings_version => SETTINGS_VERSION - 1,
# Skip default (system, user, song) configs.
skipstdcfg => 1,
# Skip legacy (un-classified) configs.
skipoldcfg => 0,
# Presets.
lib/ChordPro/Wx/Config.pm view on Meta::CPAN
$preferences{settings_version} = SETTINGS_VERSION;
}
# Load all data from the persistent data store into %state.
# Adds information collected from the environment (e.g. config files).
# Try to compensate for incompatibilities (legacy).
method Load :common {
use Hash::Util qw( lock_keys unlock_keys );
unlock_keys(%preferences);
%preferences = ( %prefs );
while ( my ( $k, $v ) = each %prefs ) {
next unless $k =~ /^(editcolour)_(\w+)_(\w+)/;
$preferences{$1}{$2}{$3} = $v;
}
while ( my ( $k, $v ) = each %preferences ) {
delete $preferences{$k} if $k =~ /^(editcolour)_/;
}
%state = ( preferences => \%preferences,
recents => [],
);
$cb->SetPath($config_root);
my ( $ggoon, $group, $gindex ) = $cb->GetFirstGroup;
my %pp = $ggoon ? %prefs : ();
while ( $ggoon ) {
my $cp = $cb->GetPath;
$cb->SetPath($group);
$state{$group} = [] if $group eq "recents";
my ( $goon, $entry, $index ) = $cb->GetFirstEntry;
while ( $goon ) {
my $value = $cb->Read($entry);
# printf STDERR ( "$group.$entry:\t%s\n", $value );
lib/ChordPro/Wx/Editor.pm view on Meta::CPAN
package ChordPro::Wx::STCEditor;
use parent qw( -norequire Wx::StyledTextCtrl );
#use parent qw( -norequire Wx::Scintilla::TextCtrl );
use Wx ':everything';
use ChordPro::Wx::Config;
use ChordPro::Wx::Utils;
sub refresh( $self, $prefs = undef ) {
my $stc = $self;
$prefs //= \%preferences;
# RTI loading is currently too slow.
# $state{rti} = ChordPro::runtime_info();
$state{rti}->{directive_abbrevs} = ChordPro::Song::_directive_abbrevs();
$stc->SetLexer(wxSTC_LEX_CONTAINER);
$stc->SetKeyWords(0,
[qw( album arranger artist capo chord chorus
column_break columns comment comment_box
comment_italic composer copyright define
lib/ChordPro/Wx/Editor.pm view on Meta::CPAN
start_of_verse subtitle tempo time title
titles transpose year )
]);
Wx::Event::EVT_STC_STYLENEEDED( $stc, wxID_ANY,
sub { OnStyleNeeded($self, $_[1]) } );
Wx::Event::EVT_STC_CHANGE( $stc, wxID_ANY,
sub { OnChanged($self, $_[1]) } );
$self->SetModEventMask(0x01|0x02|0x10);
my $theme = $state{editortheme};
my $c = $prefs->{editcolour}{$theme};
my $fg = Wx::Colour->new($c->{fg});
my $bg = Wx::Colour->new($c->{bg});
$stc->SetBackgroundColour($bg);
$stc->SetCaretForeground($fg);
$stc->StyleSetForeground( wxSTC_STYLE_DEFAULT, $fg );
$stc->StyleSetBackground( wxSTC_STYLE_DEFAULT, $bg );
$stc->StyleClearAll;
lib/ChordPro/Wx/Editor.pm view on Meta::CPAN
$stc->StyleSetForeground( wxSTC_STYLE_LINENUMBER,
Wx::Colour->new( $c->{numfg} ) );
$stc->StyleSetBackground( wxSTC_STYLE_LINENUMBER,
Wx::Colour->new( $c->{numbg} ) );
# For annotations.
$self->{astyle} //= 1 + wxSTC_STYLE_LASTPREDEFINED;
$stc->StyleSetBackground( $self->{astyle}, Wx::Colour->new($c->{annbg}) );
$stc->StyleSetForeground( $self->{astyle}, Wx::Colour->new($c->{annfg}) );
$stc->SetFont( Wx::Font->new($prefs->{editfont}) );
# Wrapping.
if ( $prefs->{editorwrap} ) {
$stc->SetWrapMode(3); # wxSTC_WRAP_WHITESPACE );
$stc->SetWrapStartIndent( $prefs->{editorwrapindent} );
}
else {
$stc->SetWrapMode(0); # wxSTC_WRAP_NONE );
}
$self->style_text;
# Expert...
$stc->SetViewEOL( $state{vieweol} );
$stc->SetViewWhiteSpace( $state{viewws} );
$stc->SetViewLineNumbers(1);
lib/ChordPro/Wx/Editor.pm view on Meta::CPAN
sub new( $class, $parent, $id=undef ) {
my $self = $class->SUPER::new( $parent, wxID_ANY, "",
wxDefaultPosition, wxDefaultSize,
wxHSCROLL|wxTE_MULTILINE );
return $self;
}
sub refresh( $self, $prefs = undef ) {
my $ctrl = $self;
$prefs //= \%preferences;
my $mod = $self->IsModified;
# TextCtrl only supports background colour and font.
my $theme = $prefs->{editortheme};
my $c = $prefs->{editcolour}{$theme};
my $bgcol = Wx::Colour->new( $c->{bg} );
my $fgcol = Wx::Colour->new( $c->{fg} );
$ctrl->SetBackgroundColour($bgcol);
$ctrl->SetStyle( 0, $ctrl->GetLastPosition,
Wx::TextAttr->new( $fgcol, $bgcol ) );
$ctrl->SetFont( Wx::Font->new($prefs->{editfont}) );
$ctrl->SetModified($mod);
}
sub AddText( $self, $text ) {
$self->WriteText($text);
}
sub GetLineCount( $self ) {
$self->GetNumberOfLines;
lib/ChordPro/Wx/Main.pm view on Meta::CPAN
);
return $msg;
}
method check_saved() {
for ( panels ) {
return unless $self->{$_}->check_source_saved;
return unless $self->{$_}->check_preview_saved;
}
# Panels may save prefs to preferences.
$self->{$_}->save_preferences for panels;
1;
}
method setup_statusbar() {
# Add statusbar.
return unless $preferences{expert};
$self->{f_main_statusbar} = $self->CreateStatusBar(1);
$self->{f_main_statusbar}->SetStatusWidths(-1);
}
lib/ChordPro/Wx/Main.pm view on Meta::CPAN
$state{ffilters},
wxFD_OPEN|wxFD_FILE_MUST_EXIST );
my $ret = $fd->ShowModal;
if ( $ret == wxID_OK ) {
$self->select_mode("editor")->openfile( $fd->GetPath, 1 );
}
$fd->Destroy;
}
method OnPreferences($event) {
unless ( $self->{d_prefs} ) {
require ChordPro::Wx::SettingsDialog;
$self->{d_prefs} = ChordPro::Wx::SettingsDialog->new
( $self, wxID_ANY, "Settings" );
restorewinpos( $self->{d_prefs}, "prefs" );
}
else {
$self->{d_prefs}->refresh;
}
# The Settings dialog operates on the current $preferences.
my $ret = $self->{d_prefs}->ShowModal;
savewinpos( $self->{d_prefs}, "prefs" );
$state{panel}->set_focus unless $state{mode} eq "initial";
return unless $ret == wxID_OK;
# $preferences may have changed.
$self->save_preferences;
# Update the requestor.
$state{panel}->update_preferences unless $state{mode} eq "initial";
$self->setup_menubar;
lib/ChordPro/Wx/RenderDialog.pm view on Meta::CPAN
my $index = 0;
for my $task ( sort keys %{$state{presets}{tasks}} ) {
my $id = Wx::NewId();
$self->{sz_customtasks}->Add
( $self->{"cb_customtask_$index"} = Wx::CheckBox->new
($self, $id, $state{presets}{tasks}{$task}->{title} ),
0, 0, 0 );
$index++;
}
$self->{sz_customtasks}->Layout;
$self->{sz_prefs_inner}->Fit($self);
}
$state{"xpose_$_"} ||= 0
for qw( enabled semitones accidentals );
$self->refresh;
$self;
}
sub refresh {
my ( $self ) = @_;
lib/ChordPro/Wx/RenderDialog.wxg view on Meta::CPAN
<?xml version="1.0"?>
<!-- generated by wxGlade 1.1.1 on Mon Mar 16 09:12:52 2026 -->
<application encoding="UTF-8" for_version="2.8" header_extension=".h" indent_amount="4" indent_symbol="space" is_template="0" language="perl" mark_blocks="1" option="0" overwrite="1" path="RenderDialog_wxg.pm" source_extension=".cpp" top_window="d_pr...
<object class="ChordPro::Wx::RenderDialog_wxg" name="d_prefs" base="EditDialog">
<extracode_pre>use ChordPro::Wx::Utils;</extracode_pre>
<title>Preview Tasks</title>
<style>wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</style>
<affirmative>b_ok</affirmative>
<escape>b_cancel</escape>
<object class="wxBoxSizer" name="sz_prefs_outer" base="EditBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<option>0</option>
<border>5</border>
<flag>wxALL|wxEXPAND</flag>
<object class="wxStaticText" name="label_3" base="EditStaticText">
<foreground>#0068d9</foreground>
<font>
<size>18</size>
<family>default</family>
lib/ChordPro/Wx/RenderDialog.wxg view on Meta::CPAN
<face />
</font>
<style>wxALIGN_CENTER_HORIZONTAL</style>
<label>Preview Tasks</label>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<border>5</border>
<flag>wxLEFT|wxRIGHT|wxTOP|wxEXPAND</flag>
<object class="wxBoxSizer" name="sz_prefs_inner" base="EditBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<option>1</option>
<border>5</border>
<flag>wxEXPAND</flag>
<object class="wxGridBagSizer" name="sizer_2" base="EditGridBagSizer">
<rows>4</rows>
<cols>2</cols>
<vgap>5</vgap>
<hgap>5</hgap>
lib/ChordPro/Wx/RenderDialog_wxg.pm view on Meta::CPAN
$name = "" unless defined $name;
# begin wxGlade: ChordPro::Wx::RenderDialog_wxg::new
use ChordPro::Wx::Utils;
$style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER
unless defined $style;
$self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $style, $name );
$self->SetTitle(_T("Preview Tasks"));
$self->{sz_prefs_outer} = Wx::BoxSizer->new(wxVERTICAL);
my $label_3 = Wx::StaticText->new($self, wxID_ANY, _T("Preview Tasks"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER_HORIZONTAL);
$label_3->SetForegroundColour(Wx::Colour->new(0, 104, 217));
$label_3->SetFont(Wx::Font->new(18, wxDEFAULT, wxNORMAL, wxNORMAL, 0, ""));
$self->{sz_prefs_outer}->Add($label_3, 0, wxALL|wxEXPAND, 5);
$self->{sz_prefs_inner} = Wx::BoxSizer->new(wxVERTICAL);
$self->{sz_prefs_outer}->Add($self->{sz_prefs_inner}, 0, wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5);
$self->{sizer_2} = Wx::GridBagSizer->new(5, 5);
$self->{sz_prefs_inner}->Add($self->{sizer_2}, 1, wxEXPAND, 5);
my $label_1 = Wx::StaticText->new($self, wxID_ANY, _T("Tasks"));
$self->{sizer_2}->Add($label_1, Wx::GBPosition->new(0, 0), Wx::GBSpan->new(1, 1), wxLEFT|wxTOP, 5);
$self->{sizer_1} = Wx::BoxSizer->new(wxVERTICAL);
$self->{sizer_2}->Add($self->{sizer_1}, Wx::GBPosition->new(0, 1), Wx::GBSpan->new(1, 1), wxEXPAND|wxTOP, 5);
$self->{cb_task_no_diagrams} = Wx::CheckBox->new($self, wxID_ANY, _T("Suppress the chord diagrams"));
$self->{cb_task_no_diagrams}->SetToolTipString(_T("Do not include the chord diagrams"));
$self->{sizer_1}->Add($self->{cb_task_no_diagrams}, 0, 0, 0);
lib/ChordPro/Wx/RenderDialog_wxg.pm view on Meta::CPAN
$self->{ch_xpose_dir}->SetSelection(0);
$self->{sz_xpose}->Add($self->{ch_xpose_dir}, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5);
$self->{sz_xpose}->Add(10, 2, 1, wxEXPAND, 0);
$self->{ch_acc} = Wx::Choice->new($self, wxID_ANY, wxDefaultPosition, wxDefaultSize, [_T("Sharps when transposing up, flats when down"), _T("Always use sharps"), _T("Always use flats"), _T("Use song key")], );
$self->{ch_acc}->SetToolTipString(_T("How to treat chords that need accidentals after transposition.\nAuto is to use sharps when transposing up, and flats when transposing down. Key uses the transposed key of the song."));
$self->{ch_acc}->SetSelection(0);
$self->{sz_xpose}->Add($self->{ch_acc}, 0, wxEXPAND, 5);
$self->{sz_prefs_outer}->Add(1, 5, 1, wxEXPAND, 0);
my $static_line_1 = Wx::StaticLine->new($self, wxID_ANY);
$self->{sz_prefs_outer}->Add($static_line_1, 0, wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 10);
$self->{sz_tasks_buttons} = Wx::StdDialogButtonSizer->new();
$self->{sz_prefs_outer}->Add($self->{sz_tasks_buttons}, 0, wxALL|wxEXPAND, 5);
$self->{b_cancel} = Wx::Button->new($self, wxID_CANCEL, "");
$self->{b_cancel}->SetToolTipString(_T("Close the dialog without doing anything"));
$self->{sz_tasks_buttons}->AddButton($self->{b_cancel});
$self->{b_ok} = Wx::Button->new($self, wxID_OK, "");
$self->{b_ok}->SetToolTipString(_T("Generate the preview"));
$self->{b_ok}->SetDefault();
$self->{sz_tasks_buttons}->AddButton($self->{b_ok});
$self->{sz_tasks_buttons}->Realize();
$self->{sizer_2}->AddGrowableRow(1);
$self->{sizer_2}->AddGrowableCol(1);
$self->SetSizer($self->{sz_prefs_outer});
$self->{sz_prefs_outer}->Fit($self);
$self->SetAffirmativeId($self->{b_ok}->GetId());
$self->SetEscapeId($self->{b_cancel}->GetId());
$self->Layout();
Wx::Event::EVT_CHECKBOX($self, $self->{cb_xpose}->GetId, $self->can('OnCbTranspose'));
Wx::Event::EVT_BUTTON($self, $self->{b_cancel}->GetId, $self->can('OnCancel'));
Wx::Event::EVT_BUTTON($self, $self->{b_ok}->GetId, $self->can('OnAccept'));
# end wxGlade
lib/ChordPro/Wx/SettingsDialog.pm view on Meta::CPAN
use ChordPro::Files;
use ChordPro::Paths;
use ChordPro::Wx::Config;
use ChordPro::Wx::Utils;
use File::Basename;
use Ref::Util qw( is_arrayref );
use List::Util qw( first );
BUILD ( $parent, $id, $title ) {
$self->refresh;
$self->{sz_prefs_outer}->Fit($self);
$self->Layout;
Wx::Event::EVT_SYS_COLOUR_CHANGED( $self,
$self->can("OnSysColourChanged") );
Wx::Event::EVT_ENTER_WINDOW( $self->{ch_stylemods},
$self->{ch_stylemods}->can("OnEnter") );
Wx::Event::EVT_LEAVE_WINDOW( $self->{ch_stylemods},
$self->{ch_stylemods}->can("OnLeave") );
Wx::Event::EVT_MOTION( $self->{ch_stylemods},
$self->{ch_stylemods}->can("OnMotion") );
lib/ChordPro/Wx/SettingsDialog.pm view on Meta::CPAN
unless ( has_appearance() ) {
$self->{ch_theme}->Delete(2); # Follow System
}
$self;
}
my $checkpfx = "â ";
method refresh() {
$self->fetch_prefs;
$self->{t_editor}->refresh;
$self->{t_editor}->SetText(<<EOD);
{title: St. James Infirmary Blues}
{subtitle: Traditional}
# Song starts here.
I went [Em]down to the [Am]St James In[Em]firmary
I found my [Am]baby [B7]there
EOD
}
lib/ChordPro/Wx/SettingsDialog.pm view on Meta::CPAN
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]);
lib/ChordPro/Wx/SettingsDialog.pm view on Meta::CPAN
# 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;
lib/ChordPro/Wx/SettingsDialog.pm view on Meta::CPAN
# 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} =
lib/ChordPro/Wx/SettingsDialog.pm view on Meta::CPAN
# 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.
lib/ChordPro/Wx/SettingsDialog.pm view on Meta::CPAN
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 );
}
method colours2prefs {
my $theme = $state{editortheme};
$self->GetParent->init_theme;
die("INTERNAL ERROR: invalid theme1\n")
unless $theme eq "light" || $theme eq "dark";
$preferences{editcolour}{$theme}{fg} = $self->{cp_fg}->GetAsHTML;
$preferences{editcolour}{$theme}{bg} = $self->{cp_bg}->GetAsHTML;
if ( $state{have_stc} ) {
$preferences{editcolour}{$theme}{"s$_"} = $self->{"cp_s$_"}->GetAsHTML for 1..6;
$preferences{editcolour}{$theme}{annfg} = $self->{cp_annfg}->GetAsHTML;
$preferences{editcolour}{$theme}{annbg} = $self->{cp_annbg}->GetAsHTML;
}
$self->{t_editor}->refresh;
}
method prefs2colours() {
$self->set_selected_theme( $preferences{editortheme} );
if ( $preferences{editortheme} eq "auto" ) {
$self->GetParent->init_theme;
$self->{l_theme}->SetLabel( ucfirst $state{editortheme} );
}
else {
$state{editortheme} = $preferences{editortheme};
$self->{l_theme}->SetLabel("");
}
lib/ChordPro/Wx/SettingsDialog.pm view on Meta::CPAN
}
}
$self->{t_editor}->refresh;
}
################ Event handlers ################
#### General.
method OnAccept($event) {
$self->store_prefs;
$event->Skip;
}
method OnCancel($event) {
$self->restore_prefs;
$event->Skip;
}
# Only required for custom button.
# method OnIBDismiss($e) {
# $self->{w_infobar}->Dismiss;
# }
#### Configs etc.
lib/ChordPro/Wx/SettingsDialog.pm view on Meta::CPAN
$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;
lib/ChordPro/Wx/SettingsDialog.pm view on Meta::CPAN
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;
}
lib/ChordPro/Wx/SettingsDialog.pm view on Meta::CPAN
$self->{l_stylemods_desc}->SetLabel($desc);
# $self->{l_stylemods_desc}->Wrap(($self->{ch_stylemods}->GetSizeWH)[0]);
}
method set_instrument_desc( $desc ) {
$self->{l_instrument_desc}->SetLabel($desc);
# $self->{l_instrument_desc}->Wrap(($self->{ch_instrument}->GetSizeWH)[0]);
}
method colourchanged($index) {
$self->colours2prefs;
}
method setnomod( $ctl, $code ) {
Carp::confess("WHOAH!") unless $ctl;
my $mod = $ctl->IsModified;
$code->($self, $ctl);
$ctl->SetModified($mod);
}
1;
lib/ChordPro/Wx/SettingsDialog.wxg view on Meta::CPAN
<?xml version="1.0"?>
<!-- generated by wxGlade 1.1.1 on Thu Nov 20 08:12:14 2025 -->
<application encoding="UTF-8" for_version="3.0" header_extension=".h" indent_amount="4" indent_symbol="space" is_template="0" language="perl" mark_blocks="1" option="0" overwrite="1" path="SettingsDialog_wxg.pm" source_extension=".cpp" top_window="d_...
<object class="ChordPro::Wx::SettingsDialog_wxg" name="d_prefs" base="EditDialog">
<title>Settings</title>
<style>wxDEFAULT_DIALOG_STYLE</style>
<sizehints>1</sizehints>
<object class="wxBoxSizer" name="sz_main" base="EditBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<option>1</option>
<border>0</border>
<flag>wxEXPAND</flag>
<object class="wxBoxSizer" name="sz_prefs_outer" base="EditBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<option>1</option>
<border>5</border>
<flag>wxLEFT|wxRIGHT|wxEXPAND</flag>
<object class="wxNotebook" name="nb_preferences" base="EditNotebook">
<style>wxNB_TOP</style>
<tabs>
<tab window="nb_config">Presets</tab>
<tab window="nb_notations">Notations</tab>
lib/ChordPro/Wx/SettingsDialog.wxg view on Meta::CPAN
<flag>wxTOP|wxEXPAND</flag>
<object class="spacer" name="spacer" base="EditSpacer">
<width>20</width>
<height>5</height>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<border>5</border>
<flag>wxBOTTOM|wxALIGN_RIGHT</flag>
<object class="wxStdDialogButtonSizer" name="sz_prefs_buttons" base="EditStdDialogButtonSizer">
<orient>wxHORIZONTAL</orient>
<object class="sizeritem">
<option>0</option>
<border>0</border>
<flag>wxALIGN_CENTER_VERTICAL</flag>
<object class="wxButton" name="b_prefs_cancel" base="EditButton">
<events>
<handler event="EVT_BUTTON">OnCancel</handler>
</events>
<tooltip>Close the dialog, discarding changes</tooltip>
<label>&Cancel</label>
<stockitem>CANCEL</stockitem>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<border>0</border>
<flag>wxALIGN_CENTER_VERTICAL</flag>
<object class="wxButton" name="b_prefs_ok" base="EditButton">
<events>
<handler event="EVT_BUTTON">OnAccept</handler>
</events>
<tooltip>Apply the changes and close the dialog</tooltip>
<label>&OK</label>
<default>1</default>
<stockitem>OK</stockitem>
</object>
</object>
</object>
lib/ChordPro/Wx/SettingsDialog_wxg.pm view on Meta::CPAN
# begin wxGlade: ChordPro::Wx::SettingsDialog_wxg::new
$style = wxDEFAULT_DIALOG_STYLE
unless defined $style;
$self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $style, $name );
$self->SetTitle(_T("Settings"));
$self->{sz_main} = Wx::BoxSizer->new(wxVERTICAL);
$self->{sz_prefs_outer} = Wx::BoxSizer->new(wxVERTICAL);
$self->{sz_main}->Add($self->{sz_prefs_outer}, 1, wxEXPAND, 0);
$self->{nb_preferences} = Wx::Notebook->new($self, wxID_ANY);
$self->{sz_prefs_outer}->Add($self->{nb_preferences}, 1, wxEXPAND|wxLEFT|wxRIGHT, 5);
$self->{nb_config} = Wx::Panel->new($self->{nb_preferences}, wxID_ANY);
$self->{nb_preferences}->AddPage($self->{nb_config}, _T("Presets"));
$self->{sizer_1} = Wx::BoxSizer->new(wxVERTICAL);
my $label_1 = Wx::StaticText->new($self->{nb_config}, wxID_ANY, _T("Instrument and Style Presets"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER_HORIZONTAL);
$label_1->SetMinSize(Wx::Size->new(-1, 35));
$label_1->SetForegroundColour(Wx::Colour->new(0, 104, 217));
$label_1->SetFont(Wx::Font->new(18, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, 0, ""));
lib/ChordPro/Wx/SettingsDialog_wxg.pm view on Meta::CPAN
$self->{sizer_7}->Add($self->{sizer_14}, 0, wxEXPAND|wxLEFT|wxRIGHT, 15);
$self->{cb_htmlviewer} = Wx::CheckBox->new($self->{nb_html_preview}, wxID_ANY, _T("Preview with HTML"));
$self->{cb_htmlviewer}->SetToolTip(_T("Use HTML viewer"));
$self->{sizer_14}->Add($self->{cb_htmlviewer}, Wx::GBPosition->new(0, 0), Wx::GBSpan->new(1, 1), wxALIGN_CENTER_VERTICAL, 0);
my $label_10 = Wx::StaticText->new($self->{nb_html_preview}, wxID_ANY, _T("This is experimental, under development, incomplete, buggy, and so on.\n\nIn other words, do not use it."), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);
$label_10->Wrap(750);
$self->{sizer_7}->Add($label_10, 0, wxALL|wxEXPAND, 15);
$self->{sz_prefs_outer}->Add(20, 5, 0, wxEXPAND|wxTOP, 0);
$self->{sz_prefs_buttons} = Wx::StdDialogButtonSizer->new();
$self->{sz_prefs_outer}->Add($self->{sz_prefs_buttons}, 0, wxALIGN_RIGHT|wxBOTTOM, 5);
$self->{b_prefs_cancel} = Wx::Button->new($self, wxID_CANCEL, "");
$self->{b_prefs_cancel}->SetToolTip(_T("Close the dialog, discarding changes"));
$self->{sz_prefs_buttons}->AddButton($self->{b_prefs_cancel});
$self->{b_prefs_ok} = Wx::Button->new($self, wxID_OK, "");
$self->{b_prefs_ok}->SetToolTip(_T("Apply the changes and close the dialog"));
$self->{b_prefs_ok}->SetDefault();
$self->{sz_prefs_buttons}->AddButton($self->{b_prefs_ok});
$self->{sz_prefs_buttons}->Realize();
$self->{nb_html_preview}->SetSizer($self->{sizer_7});
$self->{sizer_12}->AddGrowableCol(1);
$self->{nb_pdf_preview}->SetSizer($self->{sizer_3});
$self->{sizer_11}->AddGrowableCol(1);
$self->{nb_messages}->SetSizer($self->{sizer_4});
lib/ChordPro/Wx/SettingsDialog_wxg.pm view on Meta::CPAN
Wx::Event::EVT_COLOURPICKER_CHANGED($self, $self->{cp_s4}->GetId, $self->can('OnColourS4Changed'));
Wx::Event::EVT_COLOURPICKER_CHANGED($self, $self->{cp_s5}->GetId, $self->can('OnColourS5Changed'));
Wx::Event::EVT_COLOURPICKER_CHANGED($self, $self->{cp_s6}->GetId, $self->can('OnColourS6Changed'));
Wx::Event::EVT_COLOURPICKER_CHANGED($self, $self->{cp_annfg}->GetId, $self->can('OnColourAnnFGChanged'));
Wx::Event::EVT_COLOURPICKER_CHANGED($self, $self->{cp_annbg}->GetId, $self->can('OnColourAnnBGChanged'));
Wx::Event::EVT_TEXT($self, $self->{t_prefext}->GetId, $self->can('OnPrefExtChanged'));
Wx::Event::EVT_CHECKBOX($self, $self->{cb_tmplfile}->GetId, $self->can('OnCbTmplFile'));
Wx::Event::EVT_FONTPICKER_CHANGED($self, $self->{fp_messages}->GetId, $self->can('OnMessagesFontPickerChanged'));
Wx::Event::EVT_CHECKBOX($self, $self->{cb_pdfviewer}->GetId, $self->can('OnPDFViewer'));
Wx::Event::EVT_CHECKBOX($self, $self->{cb_htmlviewer}->GetId, $self->can('OnHTMLViewer'));
Wx::Event::EVT_BUTTON($self, $self->{b_prefs_cancel}->GetId, $self->can('OnCancel'));
Wx::Event::EVT_BUTTON($self, $self->{b_prefs_ok}->GetId, $self->can('OnAccept'));
# end wxGlade
return $self;
}
sub OnChangeInstrument {
my ($self, $event) = @_;
# wxGlade: ChordPro::Wx::SettingsDialog_wxg::OnChangeInstrument <event_handler>