App-Music-ChordPro-Wx
view release on metacpan or search on metacpan
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++;
}
sub _die {
Wx::LogError(@_);
$msgs++;
$fatal++;
$died++;
}
sub preview {
my ( $self ) = @_;
# We can not unlink temps because we do not know when the viewer
# is ready. So the best we can do is reuse the files.
unless ( $preview_cho ) {
( undef, $preview_cho ) = tempfile( OPEN => 0 );
$preview_pdf = $preview_cho . ".pdf";
$preview_cho .= ".cho";
unlink( $preview_cho, $preview_pdf );
}
my $mod = $self->{t_source}->IsModified;
$self->{t_source}->SaveFile($preview_cho);
$self->{t_source}->SetModified($mod);
#### ChordPro
@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 {
$options = App::Music::ChordPro::app_setup( "ChordPro", $VERSION );
};
_die($@), goto ERROR if $@ && !$died;
$options->{verbose} = $self->{_verbose} || 0;
$options->{trace} = $self->{_trace} || 0;
$options->{debug} = $self->{_debug} || 0;
$options->{diagformat} = 'Line %n, %m';
$options->{silent} = 1;
eval {
App::Music::ChordPro::main($options)
};
_die($@), goto ERROR if $@ && !$died;
if ( -e $preview_pdf ) {
( run in 2.135 seconds using v1.01-cache-2.11-cpan-5511b514fd6 )