1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-01 08:09:41 +02:00

Bug 1180 - Custom FFmpeg Export: an empty presets list can be Exported

Also added help button, per 1180 comments.
This commit is contained in:
James Crook 2019-07-15 10:52:22 +01:00
parent 582d8afdcb
commit 1f6e4ce037
2 changed files with 57 additions and 11 deletions

View File

@ -61,6 +61,7 @@
#include "../Tags.h"
#include "../TranslatableStringArray.h"
#include "../widgets/AudacityMessageBox.h"
#include "../widgets/HelpSystem.h"
#include "Export.h"
@ -560,17 +561,25 @@ FFmpegPreset *FFmpegPresets::FindPreset(wxString &name)
return NULL;
}
void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
// return false if overwrite was not allowed.
bool FFmpegPresets::OverwriteIsOk( wxString &name )
{
wxString format;
wxString codec;
FFmpegPreset *preset = FindPreset(name);
if (preset)
{
wxString query = wxString::Format(_("Overwrite preset '%s'?"),name);
int action = AudacityMessageBox(query,_("Confirm Overwrite"),wxYES_NO | wxCENTRE);
if (action == wxNO) return;
if (action == wxNO) return false;
}
return true;
}
bool FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
{
wxString format;
wxString codec;
FFmpegPreset *preset;
{
wxWindow *wnd;
@ -581,7 +590,7 @@ void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
if (lb->GetSelection() < 0)
{
AudacityMessageBox(_("Please select format before saving a profile"));
return;
return false;
}
format = lb->GetStringSelection();
@ -590,7 +599,7 @@ void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
if (lb->GetSelection() < 0)
{
AudacityMessageBox(_("Please select codec before saving a profile"));
return;
return false;
}
codec = lb->GetStringSelection();
}
@ -656,6 +665,7 @@ void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
}
}
}
return true;
}
void FFmpegPresets::LoadPreset(ExportFFmpegOptions *parent, wxString &name)
@ -884,6 +894,7 @@ void FFmpegPresets::WriteXML(XMLWriter &xmlFile) const
BEGIN_EVENT_TABLE(ExportFFmpegOptions, wxDialogWrapper)
EVT_BUTTON(wxID_OK,ExportFFmpegOptions::OnOK)
EVT_BUTTON(wxID_HELP,ExportFFmpegOptions::OnGetURL)
EVT_LISTBOX(FEFormatID,ExportFFmpegOptions::OnFormatList)
EVT_LISTBOX(FECodecID,ExportFFmpegOptions::OnCodecList)
EVT_BUTTON(FEAllFormatsID,ExportFFmpegOptions::OnAllFormats)
@ -1595,7 +1606,7 @@ void ExportFFmpegOptions::PopulateOrExchange(ShuttleGui & S)
S.EndStatic();
//S.EndScroller();
S.SetBorder( 5 );
S.AddStandardButtons();
S.AddStandardButtons(eOkButton | eCancelButton | eHelpButton );
}
S.EndVerticalLay();
}
@ -1829,15 +1840,24 @@ void ExportFFmpegOptions::OnDeletePreset(wxCommandEvent& WXUNUSED(event))
///
///
void ExportFFmpegOptions::OnSavePreset(wxCommandEvent& WXUNUSED(event))
{ const bool kCheckForOverwrite = true;
SavePreset(kCheckForOverwrite);
}
// Return false if failed to save.
bool ExportFFmpegOptions::SavePreset(bool bCheckForOverwrite)
{
wxComboBox *preset = dynamic_cast<wxComboBox*>(FindWindowById(FEPresetID,this));
wxString name = preset->GetValue();
if (name.empty())
{
AudacityMessageBox(_("You can't save a preset without name"));
return;
AudacityMessageBox(_("You can't save a preset without a name"));
return false;
}
mPresets->SavePreset(this,name);
if( bCheckForOverwrite && !mPresets->OverwriteIsOk(name))
return false;
if( !mPresets->SavePreset(this,name) )
return false;
int index = mPresetNames.Index(name,false);
if (index == -1)
{
@ -1846,6 +1866,7 @@ void ExportFFmpegOptions::OnSavePreset(wxCommandEvent& WXUNUSED(event))
mPresetCombo->Append(mPresetNames);
mPresetCombo->Select(mPresetNames.Index(name,false));
}
return true;
}
///
@ -1894,6 +1915,20 @@ void ExportFFmpegOptions::OnImportPresets(wxCommandEvent& WXUNUSED(event))
///
void ExportFFmpegOptions::OnExportPresets(wxCommandEvent& WXUNUSED(event))
{
const bool kCheckForOverwrite = true;
// Bug 1180 save any pending preset before exporting the lot.
// If saving fails, don't try to export.
if( !SavePreset(!kCheckForOverwrite) )
return;
wxArrayString presets;
mPresets->GetPresetList( presets);
if( presets.Count() < 1)
{
AudacityMessageBox(_("No presets to export"));
return;
}
wxString path;
FileDialogWrapper dlg(this,
_("Select xml file to export presets into"),
@ -2050,6 +2085,7 @@ void ExportFFmpegOptions::OnCodecList(wxCommandEvent& WXUNUSED(event))
DoOnCodecList();
}
///
///
void ExportFFmpegOptions::OnOK(wxCommandEvent& WXUNUSED(event))
@ -2070,4 +2106,10 @@ void ExportFFmpegOptions::OnOK(wxCommandEvent& WXUNUSED(event))
return;
}
void ExportFFmpegOptions::OnGetURL(wxCommandEvent & WXUNUSED(event))
{
HelpSystem::ShowHelp(this, wxT("Custom_FFmpeg_Export_Options#Presets"));
}
#endif

View File

@ -195,6 +195,7 @@ public:
~ExportFFmpegOptions();
void PopulateOrExchange(ShuttleGui & S);
void OnOK(wxCommandEvent& event);
void OnGetURL(wxCommandEvent& event);
void OnFormatList(wxCommandEvent& event);
void DoOnFormatList();
void OnCodecList(wxCommandEvent& event);
@ -206,6 +207,8 @@ public:
void OnDeletePreset(wxCommandEvent& event);
void OnImportPresets(wxCommandEvent& event);
void OnExportPresets(wxCommandEvent& event);
bool SavePreset( bool bCheckForOverwrite);
// Static tables
static CompatibilityEntry CompatibilityList[];
@ -335,8 +338,9 @@ public:
void GetPresetList(wxArrayString &list);
void LoadPreset(ExportFFmpegOptions *parent, wxString &name);
void SavePreset(ExportFFmpegOptions *parent, wxString &name);
bool SavePreset(ExportFFmpegOptions *parent, wxString &name);
void DeletePreset(wxString &name);
bool OverwriteIsOk( wxString &name );
FFmpegPreset *FindPreset(wxString &name);
void ImportPresets(wxString &filename);