App-Music-ChordPro-Wx

 view release on metacpan or  search on metacpan

CHANGES  view on Meta::CPAN

0.974

	Show filename in window title.
	Show asterisk if file is modified.
	Disable Undo/Redo menu entries if t_source cannot do it.

0.972

	Fix missing Eb in prefs dialog.
	Add scandinavian notes.
	
0.97

	Better handling of errors and exceptions.
	Add support for multiple configs, notation systems and transcoding.
	Add setting of editor font and size.

0.96

0.84	Sep 22 2017

	Add checkbox to suppress user and legacy config files.
	Fix problem with (custom) config (needed prefs dialog to be picked up).

0.84	Jul 31 2017

	Bump.

0.83	Jul 24 2017

	Rework preferences to allow selection of preset configs.

0.79	Jul 12 2017

lib/App/Music/ChordPro/Wx/Main.pm  view on Meta::CPAN

	       '',
	       wxCONFIG_USE_LOCAL_FILE,
	     ));
    }

    $self->{_verbose} = $options->{verbose};
    $self->{_trace}   = $options->{trace};
    $self->{_debug}   = $options->{debug};

    $self->GetPreferences;
    my $font = $fonts[$self->{prefs_editfont}]->{font};
    $font->SetPointSize($self->{prefs_editsize});
    $self->{t_source}->SetFont($font);

    # Disable menu items if we cannot.
    $self->{main_menubar}->FindItem(wxID_UNDO)
      ->Enable($self->{t_source}->CanUndo);
    $self->{main_menubar}->FindItem(wxID_REDO)
      ->Enable($self->{t_source}->CanRedo);

    Wx::Log::SetTimestamp(' ');
    if ( @ARGV && -s $ARGV[0] ) {

lib/App/Music/ChordPro/Wx/Main.pm  view on Meta::CPAN

    $self->{_currentfile} = $file;
    if ( $self->{t_source}->GetValue =~ /^\{\s*t(?:itle)[: ]+([^\}]*)\}/m ) {
	my $n = $self->{t_source}->GetNumberOfLines;
	Wx::LogStatus("Loaded: $1 ($n line" .
		      ( $n == 1 ? "" : "s" ) .
		      ")");
	$self->{sz_source}->GetStaticBox->SetLabel($1);
    }
    $self->SetTitle( $self->{_windowtitle} = $file);

    $self->{prefs_xpose} = 0;
    $self->{prefs_xposesharp} = 0;
}

sub newfile {
    my ( $self ) = @_;
    undef $self->{_currentfile};
    $self->{t_source}->SetValue( <<EOD );
{title: New Song}

EOD
    Wx::LogStatus("New file");
    $self->{prefs_xpose} = 0;
    $self->{prefs_xposesharp} = 0;
}

my ( $preview_cho, $preview_pdf );
my ( $msgs, $fatal, $died );

sub _warn {
    Wx::LogWarning(@_);
    $msgs++;
}

lib/App/Music/ChordPro/Wx/Main.pm  view on Meta::CPAN


    @ARGV = ();			# just to make sure
    $::__EMBEDDED__ = 1;

    $msgs = $fatal = $died = 0;
    $SIG{__WARN__} = \&_warn;
#    $SIG{__DIE__}  = \&_die;

    my $haveconfig;
    push( @ARGV, '--nosysconfig', '--nouserconfig', '--nolegacyconfig' )
      if $self->{prefs_skipstdcfg};
    if ( $self->{prefs_cfgpreset} ) {
	$haveconfig++;
	foreach ( @{ $self->{prefs_cfgpreset} } ) {
	    if ( $_ eq "custom" ) {
		push( @ARGV, '--config', $self->{prefs_configfile} );
	    }
	    else {
		push( @ARGV, '--config', $_ );
	    }
	}
    }
    if ( $self->{prefs_xcode} ) {
	$haveconfig++;
	push( @ARGV, '--transcode', $self->{prefs_xcode} );
    }
    if ( $self->{prefs_notation} ) {
	$haveconfig++;
	push( @ARGV, '--config', 'notes:' . $self->{prefs_notation} );
    }
    push( @ARGV, '--noconfig' ) unless $haveconfig;

    push( @ARGV, '--output', $preview_pdf );
    push( @ARGV, '--generate', "PDF" );

    push( @ARGV, '--transpose', $self->{prefs_xpose} )
      if $self->{prefs_xpose};

    push( @ARGV, $preview_cho );

    if ( $self->{_trace} || $self->{_debug}
	 || $self->{_verbose} && $self->{_verbose} > 1 ) {
	warn( "Command line: @ARGV\n" );
	warn( "$_\n" ) for split( /\n+/, _aboutmsg() );
    }
    my $options;
    eval {

lib/App/Music/ChordPro/Wx/Main.pm  view on Meta::CPAN

    $options->{silent} = 1;

    eval {
	App::Music::ChordPro::main($options)
    };
    _die($@), goto ERROR if $@ && !$died;

    if ( -e $preview_pdf ) {
	Wx::LogStatus("Output generated, starting previewer");

	if ( my $cmd = $self->{prefs_pdfviewer} ) {
	    if ( $cmd =~ s/\%f/$preview_pdf/g ) {
	    }
	    elsif ( $cmd =~ /\%u/ ) {
		my $u = _makeurl($preview_pdf);
		$cmd =~ s/\%u/$u/g;
	    }
	    else {
		$cmd .= " \"$preview_pdf\"";
	    }
	    Wx::ExecuteCommand($cmd);

lib/App/Music/ChordPro/Wx/Main.pm  view on Meta::CPAN

    my ( $self, $file ) = @_;
    $self->{t_source}->SaveFile($file);
    $self->SetTitle( $self->{_windowtitle} = $file);
    Wx::LogStatus( "Saved." );
}

sub GetPreferences {
    my ( $self ) = @_;
    my $conf = Wx::ConfigBase::Get;
    for ( keys( %$prefctl ) ) {
	$self->{"prefs_$_"} = $conf->Read( "preferences/$_", $prefctl->{$_} );
    }

    # Find config setting.
    my $p = lc( $self->{prefs_cfgpreset} ) || $prefctl->{cfgpreset};
    if ( ",$p" =~ quotemeta( "," . _T("Custom") ) ) {
	$self->{_cfgpresetfile} = $self->{prefs_configfile};
    }
    my @presets;
    foreach ( @{stylelist()} ) {
	if ( ",$p" =~ quotemeta( "," . $_ ) ) {
	    push( @presets, $_ );
	}
    }
    $self->{prefs_cfgpreset} = \@presets;

    # Find transcode setting.
    $p = lc $self->{prefs_xcode} || $prefctl->{xcode};
    if ( $p ) {
	if ( $p eq lc(_T("-----")) ) {
	    $p = $prefctl->{xcode};

	}
	else {
	    my $n = "";
	    for ( @{ $self->notationlist } ) {
		next unless $_ eq $p;
		$n = $p;
		last;
	    }
	    $p = $n;
	}
    }
    $self->{prefs_xcode} = $p;
}

sub SavePreferences {
    my ( $self ) = @_;
    return unless $self;
    my $conf = Wx::ConfigBase::Get;
    local $self->{prefs_cfgpreset} = join( ",", @{$self->{prefs_cfgpreset}} );
    for ( keys( %$prefctl ) ) {
	$conf->Write( "preferences/$_", $self->{"prefs_$_"} );
    }
    $conf->Flush;
}

################ Event handlers ################

# Event handlers override the subs generated by wxGlade in the _wxg class.

sub OnOpen {
    my ( $self, $event, $create ) = @_;

lib/App/Music/ChordPro/Wx/Main.pm  view on Meta::CPAN

    return unless $self->checksaved;
    $self->openfile( getresource( "examples/swinglow.cho" ) );
    undef $self->{_currentfile};
    $self->{t_source}->SetModified(1);
}

sub OnPreferences {
    my ($self, $event) = @_;

    use App::Music::ChordPro::Wx::PreferencesDialog;
    $self->{d_prefs} ||= App::Music::ChordPro::Wx::PreferencesDialog->new($self, -1, "Preferences");
    my $ret = $self->{d_prefs}->ShowModal;
    $self->SavePreferences if $ret == wxID_OK;
}

sub _aboutmsg {
    my ( $self ) = @_;

    my $firstyear = 2016;
    my $year = 1900 + (localtime(time))[5];
    if ( $year != $firstyear ) {
	$year = "$firstyear,$year";

lib/App/Music/ChordPro/Wx/PreferencesDialog.pm  view on Meta::CPAN

    "latin"	   => "Do, Re, Mi, Fa, Sol, ...",
    "scandinavian" => "C, ... A, A#/Bb, H",
    "solfege"	   => "Do, Re, Mi, Fa, So, ...",
    "solfège"	   => "Do, Re, Mi, Fa, So, ...",
    "nashville"	   => "1, 2, 3, ...",
    "roman"	   => "I, II, III, ...",
  };

sub get_configfile {
    my ( $self ) = @_;
    # warn("CF: ", $self->GetParent->{prefs_configfile} || "");
    $self->GetParent->{prefs_configfile} || ""
}

sub __set_properties {
    my ( $self ) = @_;
    $self->SUPER::__set_properties;
    my $parent = $self->GetParent;
    $self->{t_configfiledialog}->SetValue($parent->{prefs_configfile})
      if $parent->{prefs_configfile};
    $self->{t_pdfviewer}->SetValue($parent->{prefs_pdfviewer})
      if $parent->{prefs_pdfviewer};
    $self->{cb_skipstdcfg}->SetValue($parent->{prefs_skipstdcfg});

    my $ctl = $self->{ch_config};
    $ctl->Clear;
    for ( @{ $parent->stylelist } ) {
	my $t = ucfirst(lc($_));
	$t =~ s/_/ /g;
	$t =~ s/ (.)/" ".uc($1)/eg;
	$ctl->Append($t);
    }

    my $p = $parent->{prefs_cfgpreset};
    foreach ( @$p ) {
	my $t = ucfirst(lc($_));
	$t =~ s/_/ /g;
	$t =~ s/ (.)/" ".uc($1)/eg;
	my $n = $ctl->FindString($t);
	unless ( $n == wxNOT_FOUND ) {
	    $ctl->Check( $n, 1 );
	}
    }
    $self->_enablecustom;

    $ctl = $self->{ch_editfont};
    $ctl->SetSelection( $parent->{prefs_editfont} );
    $ctl = $self->{sp_editfont};
    $ctl->SetValue( $parent->{prefs_editsize} );

    $ctl = $self->{ch_notation};
    $ctl->Clear;
    my $n = 0;
    my $check = 0;
    for ( @{ $parent->notationlist } ) {
	my $s = ucfirst($_);
	$check = $n if $_ eq lc $parent->{prefs_notation};
	$s .= " (" . $notdesc->{lc($s)} .")" if $notdesc->{lc($s)};
	$ctl->Append($s);
	$ctl->SetClientData( $n, $_);
	$n++;
    }
    $ctl->SetSelection($check);

    $ctl = $self->{ch_transcode};
    $ctl->Clear;
    $ctl->Append("-----");
    $n = 1;
    for ( @{ $parent->notationlist } ) {
	my $s = ucfirst($_);
	$check = $n if $_ eq lc $parent->{prefs_xcode};
	$s .= " (" . $notdesc->{lc($s)} .")" if $notdesc->{lc($s)};
	$ctl->Append($s);
	$ctl->SetClientData( $n, $_);
	$n++;
    }
    $ctl->SetSelection($check);
}

sub _enablecustom {
    my ( $self ) = @_;

lib/App/Music/ChordPro/Wx/PreferencesDialog.pm  view on Meta::CPAN

	    $enablecustom++;
	}
    }
    $self->_enablecustom($enablecustom);
}

sub OnConfigFileDialog {
    my ( $self, $event ) = @_;
    my $fd = Wx::FileDialog->new
      ($self, _T("Choose config file"),
       "", $self->GetParent->{prefs_configfile} || "",
       "Config files (*.cfg,*.json)|*.cfg;*.json|All files|*.*",
       0|wxFD_OPEN,
       wxDefaultPosition);
    my $ret = $fd->ShowModal;
    if ( $ret == wxID_OK ) {
	my $file = $fd->GetPath;
	if ( -f $file ) {
	    $self->{t_configfiledialog}->SetValue($file);
	}
	else {

lib/App/Music/ChordPro/Wx/PreferencesDialog.pm  view on Meta::CPAN


    my $ctl = $self->{ch_config};
    my $cnt = $ctl->GetCount;
    my @p;
    my $styles = $self->GetParent->stylelist;
    for ( my $n = 0; $n < $cnt; $n++ ) {
	next unless $ctl->IsChecked($n);
	push( @p, $styles->[$n] );
	if ( $n == $cnt - 1 ) {
	    $self->GetParent->{_cfgpresetfile} =
	      $self->GetParent->{prefs_configfile} =
		$self->{t_configfiledialog}->GetValue;
	}
    }

    $self->GetParent->{prefs_skipstdcfg} =
      $self->{cb_skipstdcfg}->IsChecked ? 1 : 0;

    $self->GetParent->{prefs_cfgpreset} = \@p;

    my $n = $self->{ch_notation}->GetSelection;
    if ( $n > 0 ) {
	$self->GetParent->{prefs_notation} =
	  $self->{ch_notation}->GetClientData($n);
    }
    else {
       	$self->GetParent->{prefs_notation} = "";
    }

    $self->GetParent->{prefs_pdfviewer} = $self->{t_pdfviewer}->GetValue;

    $n = $xpmap[$self->{ch_xpose_to}->GetSelection]
      - $xpmap[$self->{ch_xpose_from}->GetSelection];
    $n += 12 if $n < 0;
    $n = $n - 12 if $self->{rb_xpose_flat }->GetValue;
    $self->GetParent->{prefs_xpose} = $n;

    $n = $self->{ch_transcode}->GetSelection;
    if ( $n > 0 ) {
	$self->GetParent->{prefs_xcode} =
	  $self->{ch_transcode}->GetClientData($n);
    }
    else {
       	$self->GetParent->{prefs_xcode} = "";
    }

    $event->Skip;
}

sub OnCancel {
    my ( $self, $event ) = @_;
    $event->Skip;
}

lib/App/Music/ChordPro/Wx/PreferencesDialog.pm  view on Meta::CPAN

    my $n = $self->{ch_transcode}->GetSelection;
    $event->Skip;
}

sub OnChEditFont {
    my ($self, $event) = @_;
    my $p = $self->GetParent;
    my $n = $self->{ch_editfont}->GetSelection;
    my $ctl = $p->{t_source};
    my $font = $p->fonts->[$n]->{font};
    $font->SetPointSize($p->{prefs_editsize});
    $ctl->SetFont($font);
    $p->{prefs_editfont} = $n;
    $event->Skip;
}

sub OnSpEditFont {
    my ($self, $event) = @_;
    my $p = $self->GetParent;
    my $n = $self->{sp_editfont}->GetValue;
    my $ctl = $p->{t_source};
    my $font = $ctl->GetFont;
    $font->SetPointSize($n);
    $ctl->SetFont($font);
    $p->{prefs_editsize} = $n;
    $event->Skip;
}

1;

lib/App/Music/ChordPro/Wx/PreferencesDialog.wxg  view on Meta::CPAN

<?xml version="1.0"?>
<!-- generated by wxGlade 0.9.0pre on Mon Oct  8 17:05:34 2018 -->

<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="PreferencesDialog_wxg.pm" source_extension=".cpp" top_window=...
    <object class="App::Music::ChordPro::Wx::PreferencesDialog_wxg" name="d_prefs" base="EditDialog">
        <title>Preferences</title>
        <style>wxDEFAULT_DIALOG_STYLE|wxMAXIMIZE_BOX|wxRESIZE_BORDER</style>
        <object class="wxBoxSizer" name="sz_prefs_outer" base="EditBoxSizer">
            <orient>wxVERTICAL</orient>
            <object class="sizeritem">
                <option>1</option>
                <border>0</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>
                        <object class="wxFlexGridSizer" name="sizer_2" base="EditFlexGridSizer">
                            <rows>10</rows>
                            <cols>2</cols>
                            <vgap>5</vgap>
                            <hgap>5</hgap>
                            <growable_rows>0</growable_rows>

lib/App/Music/ChordPro/Wx/PreferencesDialog.wxg  view on Meta::CPAN

                <flag>wxEXPAND</flag>
                <object class="spacer" name="spacer" base="EditSpacer">
                    <width>1</width>
                    <height>1</height>
                </object>
            </object>
            <object class="sizeritem">
                <option>0</option>
                <border>5</border>
                <flag>wxALL|wxEXPAND</flag>
                <object class="wxBoxSizer" name="sz_prefs_buttons" base="EditBoxSizer">
                    <orient>wxHORIZONTAL</orient>
                    <object class="sizeritem">
                        <option>1</option>
                        <border>0</border>
                        <flag>wxEXPAND</flag>
                        <object class="spacer" name="spacer" base="EditSpacer">
                            <width>5</width>
                            <height>1</height>
                        </object>
                    </object>
                    <object class="sizeritem">
                        <option>0</option>
                        <border>0</border>
                        <object class="wxButton" name="b_prefs_cancel" base="EditButton">
                            <events>
                                <handler event="EVT_BUTTON">OnCancel</handler>
                            </events>
                            <label>&amp;Cancel</label>
                            <stockitem>CANCEL</stockitem>
                        </object>
                    </object>
                    <object class="sizeritem">
                        <option>0</option>
                        <border>5</border>
                        <flag>wxLEFT</flag>
                        <object class="wxButton" name="b_prefs_ok" base="EditButton">
                            <events>
                                <handler event="EVT_BUTTON">OnAccept</handler>
                            </events>
                            <label>&amp;OK</label>
                            <default>1</default>
                            <stockitem>OK</stockitem>
                        </object>
                    </object>
                </object>
            </object>

lib/App/Music/ChordPro/Wx/PreferencesDialog_wxg.pm  view on Meta::CPAN

    $self->{l_xpose_from} = Wx::StaticText->new($self, wxID_ANY, _T("From"));
    $self->{ch_xpose_from} = Wx::Choice->new($self, wxID_ANY, wxDefaultPosition, wxDefaultSize, [_T("C"), _T("C#"), _T("Db"), _T("D"), _T("D#"), _T("Eb"), _T("E"), _T("F"), _T("F#"), _T("Gb"), _T("G"), _T("G#"), _T("Ab"), _T("A"), _T("A#"), _T("Bb"),...
    $self->{l_xpose_to} = Wx::StaticText->new($self, wxID_ANY, _T("To"));
    $self->{ch_xpose_to} = Wx::Choice->new($self, wxID_ANY, wxDefaultPosition, wxDefaultSize, [_T("C"), _T("C#"), _T("Db"), _T("D"), _T("D#"), _T("Eb"), _T("E"), _T("F"), _T("F#"), _T("Gb"), _T("G"), _T("G#"), _T("Ab"), _T("A"), _T("A#"), _T("Bb"), _...
    $self->{rb_xpose_sharp} = Wx::RadioButton->new($self, wxID_ANY, _T("Sharp"));
    $self->{rb_xpose_flat} = Wx::RadioButton->new($self, wxID_ANY, _T("Flat"));
    $self->{l_transcode} = Wx::StaticText->new($self, wxID_ANY, _T("Transcode to"));
    $self->{ch_transcode} = Wx::Choice->new($self, wxID_ANY, wxDefaultPosition, wxDefaultSize, [_T("-----"), _T("Common (C, D, E, F, G, A, B)"), _T("German (C, D, E, F, G, A, H)"), _T("Latin (Do, Re, Mi, Fa, Sol, ...)"), _T("Solf\N{U+00e8}ge (Do, Re,...
    $self->{l_pdfviewer} = Wx::StaticText->new($self, wxID_ANY, _T("PDF previewer"));
    $self->{t_pdfviewer} = Wx::TextCtrl->new($self, wxID_ANY, "");
    $self->{b_prefs_cancel} = Wx::Button->new($self, wxID_CANCEL, "");
    $self->{b_prefs_ok} = Wx::Button->new($self, wxID_OK, "");

    $self->__set_properties();
    $self->__do_layout();

    Wx::Event::EVT_CHECKLISTBOX($self, $self->{ch_config}->GetId, $self->can('OnChConfig'));
    Wx::Event::EVT_CHECKBOX($self, $self->{cb_skipstdcfg}->GetId, $self->can('OnSkipStdCfg'));
    Wx::Event::EVT_BUTTON($self, $self->{b_configfiledialog}->GetId, $self->can('OnConfigFileDialog'));
    Wx::Event::EVT_CHOICE($self, $self->{ch_editfont}->GetId, $self->can('OnChEditFont'));
    Wx::Event::EVT_SPINCTRL($self, $self->{sp_editfont}->GetId, $self->can('OnSpEditFont'));
    Wx::Event::EVT_CHOICE($self, $self->{ch_notation}->GetId, $self->can('OnChNotation'));
    Wx::Event::EVT_CHOICE($self, $self->{ch_xpose_from}->GetId, $self->can('OnXposeFrom'));
    Wx::Event::EVT_CHOICE($self, $self->{ch_xpose_to}->GetId, $self->can('OnXposeTo'));
    Wx::Event::EVT_RADIOBUTTON($self, $self->{rb_xpose_sharp}->GetId, $self->can('OnXposeSharp'));
    Wx::Event::EVT_RADIOBUTTON($self, $self->{rb_xpose_flat}->GetId, $self->can('onXposeFlat'));
    Wx::Event::EVT_CHOICE($self, $self->{ch_transcode}->GetId, $self->can('OnChTranscode'));
    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 __set_properties {
    my $self = shift;
    # begin wxGlade: App::Music::ChordPro::Wx::PreferencesDialog_wxg::__set_properties

lib/App/Music/ChordPro/Wx/PreferencesDialog_wxg.pm  view on Meta::CPAN

    $self->{t_configfiledialog}->SetToolTipString(_T("Select a custom config file by pressing the [...] button."));
    $self->{b_configfiledialog}->SetMinSize($self->{b_configfiledialog}->ConvertDialogSizeToPixels(Wx::Size->new(38, 14)));
    $self->{ch_editfont}->SetSelection(0);
    $self->{ch_notation}->SetSelection(0);
    $self->{ch_xpose_from}->SetSelection(0);
    $self->{ch_xpose_to}->SetSelection(0);
    $self->{rb_xpose_sharp}->SetToolTipString(_T("Use sharp chords"));
    $self->{rb_xpose_flat}->SetToolTipString(_T("Use flat chords"));
    $self->{ch_transcode}->SetSelection(0);
    $self->{t_pdfviewer}->SetToolTipString(_T("Alternative PDF previewer.\n  %f will be replaced by the file name\n  %u will be replaced by the file URL\nLeave empty to use the system default viewer."));
    $self->{b_prefs_ok}->SetDefault();
    # end wxGlade
}

sub __do_layout {
    my $self = shift;
    # begin wxGlade: App::Music::ChordPro::Wx::PreferencesDialog_wxg::__do_layout
    $self->{sz_prefs_outer} = Wx::BoxSizer->new(wxVERTICAL);
    $self->{sz_prefs_buttons} = Wx::BoxSizer->new(wxHORIZONTAL);
    $self->{sz_prefs_inner} = Wx::BoxSizer->new(wxVERTICAL);
    $self->{sizer_2} = Wx::FlexGridSizer->new(10, 2, 5, 5);
    $self->{sz_xpose} = Wx::BoxSizer->new(wxHORIZONTAL);
    $self->{sizer_3} = Wx::BoxSizer->new(wxHORIZONTAL);
    $self->{sizer_1} = Wx::BoxSizer->new(wxHORIZONTAL);
    $self->{sizer_2}->Add($self->{l_config}, 1, wxLEFT|wxTOP, 5);
    $self->{sizer_2}->Add($self->{ch_config}, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT|wxTOP, 5);
    $self->{sizer_2}->Add(5, 5, 0, wxEXPAND, 0);
    $self->{sizer_2}->Add($self->{cb_skipstdcfg}, 0, wxALIGN_CENTER_VERTICAL, 0);
    $self->{sizer_2}->Add($self->{l_cfgfile}, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5);
    $self->{sizer_1}->Add($self->{t_configfiledialog}, 1, wxEXPAND, 0);

lib/App/Music/ChordPro/Wx/PreferencesDialog_wxg.pm  view on Meta::CPAN

    $self->{sz_xpose}->Add($self->{ch_xpose_to}, 0, 0, 0);
    $self->{sz_xpose}->Add($self->{rb_xpose_sharp}, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5);
    $self->{sz_xpose}->Add($self->{rb_xpose_flat}, 0, wxALIGN_CENTER_VERTICAL, 0);
    $self->{sizer_2}->Add($self->{sz_xpose}, 1, wxEXPAND|wxRIGHT, 5);
    $self->{sizer_2}->Add($self->{l_transcode}, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5);
    $self->{sizer_2}->Add($self->{ch_transcode}, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT, 5);
    $self->{sizer_2}->Add($self->{l_pdfviewer}, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5);
    $self->{sizer_2}->Add($self->{t_pdfviewer}, 0, wxEXPAND|wxRIGHT, 5);
    $self->{sizer_2}->AddGrowableRow(0);
    $self->{sizer_2}->AddGrowableCol(1);
    $self->{sz_prefs_inner}->Add($self->{sizer_2}, 1, 0, 5);
    $self->{sz_prefs_outer}->Add($self->{sz_prefs_inner}, 1, wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 0);
    $self->{sz_prefs_outer}->Add(1, 1, 0, wxEXPAND, 0);
    $self->{sz_prefs_buttons}->Add(5, 1, 1, wxEXPAND, 0);
    $self->{sz_prefs_buttons}->Add($self->{b_prefs_cancel}, 0, 0, 0);
    $self->{sz_prefs_buttons}->Add($self->{b_prefs_ok}, 0, wxLEFT, 5);
    $self->{sz_prefs_outer}->Add($self->{sz_prefs_buttons}, 0, wxALL|wxEXPAND, 5);
    $self->SetSizer($self->{sz_prefs_outer});
    $self->{sz_prefs_outer}->Fit($self);
    $self->Layout();
    # end wxGlade
}

sub OnChConfig {
    my ($self, $event) = @_;
    # wxGlade: App::Music::ChordPro::Wx::PreferencesDialog_wxg::OnChConfig <event_handler>
    warn "Event handler (OnChConfig) not implemented";
    $event->Skip;
    # end wxGlade



( run in 2.384 seconds using v1.01-cache-2.11-cpan-0bb4e1dffa6 )