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 )