App-Music-ChordPro
view release on metacpan or search on metacpan
lib/ChordPro/Wx/SongbookExportPanel.pm view on Meta::CPAN
# Just fill in the defaults.
sub BUILDARGS( $class, $parent=undef, $id=wxID_ANY,
$pos=wxDefaultPosition, $size=wxDefaultSize,
$style=0, $name="" ) {
return( $parent, $id, $pos, $size, $style, $name );
}
BUILD {
# Setup logger.
$self->setup_logger;
# Setup WebView, if possible.
$self->setup_webview if $::options->{webview}//1;
# Single pane.
$self->unsplit;
}
################ ################
method name() { "Export Songbook" }
################ API Functions ################
method refresh() {
setup_logger($self);
$self->update_menubar( M_SONGBOOK );
$state{have_webview} = ref($self->{webview}) eq 'Wx::WebView';
# Flush pending messages.
if ( $state{msgs} ) {
$self->log( 'I', $_ ) for @{$state{msgs}};
$state{msgs} = [];
}
$self->log( 'I', "Using " .
( $state{have_webview}
? "embedded" : "external") . " PDF viewer" );
$self->{cb_recursive}->SetValue(1);
$self->{dp_folder}->SetPath( $state{sbe_folder} // "");
$self->{t_exporttitle}->SetValue($state{sbe_title} // basename($state{sbe_folder}//""));
$self->{t_exportstitle}->SetValue($state{sbe_subtitle} // "");
$self->{fp_cover}->SetPath($state{sbe_cover} // "");
$self->{cb_stdcover}->SetValue($state{sbe_stdcover} // 1);
$self->OnStdCoverChecked();
if ( $state{sbe_folder} && fs_test( d => $state{sbe_folder} ) ) {
$self->{dp_folder}->SetPath($state{sbe_folder});
$self->log( 'I', "Using folder " . $state{sbe_folder} );
$self->OnDirPickerChanged(undef);
}
$self->{w_rearrange}->SetSelection($state{from_songbook}-1)
if $state{from_songbook};
$state{from_songbook} = 0;
my $font = Wx::Font->new($preferences{msgsfont});
$self->{t_messages}->SetFont($font);
setup_messages_ctxmenu($self);
$self->previewtooltip;
$self->messagestooltip;
$self->set_focus;
}
method save_preferences() {
# Volatile (this run only).
$state{sbe_folder} = $self->{dp_folder}->GetPath // "";
$state{sbe_title} = $self->{t_exporttitle}->GetValue // "";
$state{sbe_subtitle} = $self->{t_exportstitle}->GetValue // "";
$state{sbe_cover} = $self->{fp_cover}->GetPath // "";
$state{sbe_stdcover} = $self->{cb_stdcover}->IsChecked // 0;
# Persistent.
$state{songbookexport}{folder} = $state{sbe_folder};
}
method update_preferences() {
}
method open_dir($dir) {
$dir =~ s/[\\\/]$//;
$self->{dp_folder}->SetPath( $state{sbe_folder} = $dir );
$state{sbe_title} //= basename( $state{sbe_folder} );
$state{sbe_subtitle} //= "";
$self->{t_exporttitle}->SetValue( $state{sbe_title} );
$self->{t_exportstitle}->SetValue( $state{sbe_subtitle} );
$self->OnDirPickerChanged;
}
method load_filelist($files) {
my $file = shift( @$files );
my @files;
my $dir = fn_dirname( fn_rel2abs( $file ) );
for ( @$files ) {
next unless $_;
next if m;^(#|//);;
if ( /--title(?:=|\s+)(.*)/ ) {
$self->{t_exporttitle}->SetValue($1);
$self->{cb_stdcover}->SetValue(1);
}
elsif ( /--subtitle(?:=|\s+)(.*)/ ) {
$self->{t_exportstitle}->SetValue($1);
}
elsif ( /--cover(?:=|\s+)(.*)/ ) {
$self->{fp_cover}->SetPath($1);
$self->{cb_stdcover}->SetValue(0);
}
else {
push( @files, $_ );
}
}
$self->{dp_folder}->SetPath($dir);
$self->{w_rearrange}->Set(\@files);
$self->{w_rearrange}->Check($_,1) for 0..$#files;
$self->{sz_rearrange}->Layout;
$state{sbe_folder} = $dir;
$state{sbe_files} = \@files;
$self->OnStdCoverChecked(undef);
$self->log( 'I', "Loaded file list from $file" );
( run in 0.951 second using v1.01-cache-2.11-cpan-5735350b133 )