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

Should fix bugs 763 and 896

This commit is contained in:
Leland Lucius 2015-05-17 01:57:40 -05:00
parent 913cfe23b4
commit 436fc86159
2 changed files with 34 additions and 31 deletions

View File

@ -401,15 +401,12 @@ void ExportFFmpegWMAOptions::OnOK(wxCommandEvent& WXUNUSED(event))
FFmpegPreset::FFmpegPreset(wxString &name) FFmpegPreset::FFmpegPreset(wxString &name)
{ {
mPresetName = new wxString(name); mPresetName = name;
mControlState = new wxArrayString(); mControlState.SetCount(FELastID - FEFirstID);
mControlState->SetCount(FELastID - FEFirstID);
} }
FFmpegPreset::~FFmpegPreset() FFmpegPreset::~FFmpegPreset()
{ {
delete mPresetName;
delete mControlState;
} }
WX_DEFINE_LIST(FFmpegPresetList); WX_DEFINE_LIST(FFmpegPresetList);
@ -437,6 +434,8 @@ FFmpegPresets::~FFmpegPresets()
void FFmpegPresets::ImportPresets(wxString &filename) void FFmpegPresets::ImportPresets(wxString &filename)
{ {
mPreset = NULL;
XMLFileReader xmlfile; XMLFileReader xmlfile;
xmlfile.Parse(this,filename); xmlfile.Parse(this,filename);
} }
@ -457,7 +456,7 @@ wxArrayString *FFmpegPresets::GetPresetList()
for (iter = mPresets->begin(); iter != mPresets->end(); ++iter) for (iter = mPresets->begin(); iter != mPresets->end(); ++iter)
{ {
FFmpegPreset *preset = *iter; FFmpegPreset *preset = *iter;
list->Add(*preset->mPresetName); list->Add(preset->mPresetName);
} }
return list; return list;
} }
@ -468,7 +467,7 @@ void FFmpegPresets::DeletePreset(wxString &name)
for (iter = mPresets->begin(); iter != mPresets->end(); ++iter) for (iter = mPresets->begin(); iter != mPresets->end(); ++iter)
{ {
FFmpegPreset *preset = *iter; FFmpegPreset *preset = *iter;
if (!preset->mPresetName->CmpNoCase(name)) if (!preset->mPresetName.CmpNoCase(name))
{ {
mPresets->erase(iter); mPresets->erase(iter);
break; break;
@ -483,7 +482,7 @@ FFmpegPreset *FFmpegPresets::FindPreset(wxString &name)
for (iter = mPresets->begin(); iter != mPresets->end(); ++iter) for (iter = mPresets->begin(); iter != mPresets->end(); ++iter)
{ {
FFmpegPreset *current = *iter; FFmpegPreset *current = *iter;
if (!current->mPresetName->CmpNoCase(name)) if (!current->mPresetName.CmpNoCase(name))
preset = current; preset = current;
} }
return preset; return preset;
@ -491,6 +490,8 @@ FFmpegPreset *FFmpegPresets::FindPreset(wxString &name)
void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name) void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
{ {
wxString format;
wxString codec;
FFmpegPreset *preset = FindPreset(name); FFmpegPreset *preset = FindPreset(name);
if (preset) if (preset)
{ {
@ -510,6 +511,7 @@ void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
wxMessageBox(_("Please select format before saving a profile")); wxMessageBox(_("Please select format before saving a profile"));
return; return;
} }
format = lb->GetStringSelection();
wnd = dynamic_cast<wxWindow*>(parent)->FindWindowById(FECodecID,parent); wnd = dynamic_cast<wxWindow*>(parent)->FindWindowById(FECodecID,parent);
lb = dynamic_cast<wxListBox*>(wnd); lb = dynamic_cast<wxListBox*>(wnd);
@ -518,6 +520,8 @@ void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
wxMessageBox(_("Please select codec before saving a profile")); wxMessageBox(_("Please select codec before saving a profile"));
return; return;
} }
codec = lb->GetStringSelection();
preset = new FFmpegPreset(name); preset = new FFmpegPreset(name);
mPresets->push_front(preset); mPresets->push_front(preset);
} }
@ -535,8 +539,10 @@ void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
switch(id) switch(id)
{ {
case FEFormatID: case FEFormatID:
preset->mControlState.Item(id - FEFirstID) = format;
break; break;
case FECodecID: case FECodecID:
preset->mControlState.Item(id - FEFirstID) = codec;
break; break;
// Spin control // Spin control
case FEBitrateID: case FEBitrateID:
@ -554,26 +560,26 @@ void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name)
case FEMuxRateID: case FEMuxRateID:
case FEPacketSizeID: case FEPacketSizeID:
sc = dynamic_cast<wxSpinCtrl*>(wnd); sc = dynamic_cast<wxSpinCtrl*>(wnd);
preset->mControlState->Item(id - FEFirstID) = wxString::Format(wxT("%d"),sc->GetValue()); preset->mControlState.Item(id - FEFirstID) = wxString::Format(wxT("%d"),sc->GetValue());
break; break;
// Text control // Text control
case FELanguageID: case FELanguageID:
case FETagID: case FETagID:
tc = dynamic_cast<wxTextCtrl*>(wnd); tc = dynamic_cast<wxTextCtrl*>(wnd);
preset->mControlState->Item(id - FEFirstID) = tc->GetValue(); preset->mControlState.Item(id - FEFirstID) = tc->GetValue();
break; break;
// Choice // Choice
case FEProfileID: case FEProfileID:
case FEPredOrderID: case FEPredOrderID:
ch = dynamic_cast<wxChoice*>(wnd); ch = dynamic_cast<wxChoice*>(wnd);
preset->mControlState->Item(id - FEFirstID) = wxString::Format(wxT("%d"),ch->GetSelection()); preset->mControlState.Item(id - FEFirstID) = wxString::Format(wxT("%d"),ch->GetSelection());
break; break;
// Check box // Check box
case FEUseLPCID: case FEUseLPCID:
case FEBitReservoirID: case FEBitReservoirID:
case FEVariableBlockLenID: case FEVariableBlockLenID:
cb = dynamic_cast<wxCheckBox*>(wnd); cb = dynamic_cast<wxCheckBox*>(wnd);
preset->mControlState->Item(id - FEFirstID) = wxString::Format(wxT("%d"),cb->GetValue()); preset->mControlState.Item(id - FEFirstID) = wxString::Format(wxT("%d"),cb->GetValue());
break; break;
} }
} }
@ -609,7 +615,7 @@ void FFmpegPresets::LoadPreset(ExportFFmpegOptions *parent, wxString &name)
case FEFormatID: case FEFormatID:
case FECodecID: case FECodecID:
lb = dynamic_cast<wxListBox*>(wnd); lb = dynamic_cast<wxListBox*>(wnd);
readstr = preset->mControlState->Item(id - FEFirstID); readstr = preset->mControlState.Item(id - FEFirstID);
readlong = lb->FindString(readstr); readlong = lb->FindString(readstr);
if (readlong > -1) lb->Select(readlong); if (readlong > -1) lb->Select(readlong);
break; break;
@ -629,20 +635,20 @@ void FFmpegPresets::LoadPreset(ExportFFmpegOptions *parent, wxString &name)
case FEMuxRateID: case FEMuxRateID:
case FEPacketSizeID: case FEPacketSizeID:
sc = dynamic_cast<wxSpinCtrl*>(wnd); sc = dynamic_cast<wxSpinCtrl*>(wnd);
preset->mControlState->Item(id - FEFirstID).ToLong(&readlong); preset->mControlState.Item(id - FEFirstID).ToLong(&readlong);
sc->SetValue(readlong); sc->SetValue(readlong);
break; break;
// Text control // Text control
case FELanguageID: case FELanguageID:
case FETagID: case FETagID:
tc = dynamic_cast<wxTextCtrl*>(wnd); tc = dynamic_cast<wxTextCtrl*>(wnd);
tc->SetValue(preset->mControlState->Item(id - FEFirstID)); tc->SetValue(preset->mControlState.Item(id - FEFirstID));
break; break;
// Choice // Choice
case FEProfileID: case FEProfileID:
case FEPredOrderID: case FEPredOrderID:
ch = dynamic_cast<wxChoice*>(wnd); ch = dynamic_cast<wxChoice*>(wnd);
preset->mControlState->Item(id - FEFirstID).ToLong(&readlong); preset->mControlState.Item(id - FEFirstID).ToLong(&readlong);
if (readlong > -1) ch->Select(readlong); if (readlong > -1) ch->Select(readlong);
break; break;
// Check box // Check box
@ -650,7 +656,7 @@ void FFmpegPresets::LoadPreset(ExportFFmpegOptions *parent, wxString &name)
case FEBitReservoirID: case FEBitReservoirID:
case FEVariableBlockLenID: case FEVariableBlockLenID:
cb = dynamic_cast<wxCheckBox*>(wnd); cb = dynamic_cast<wxCheckBox*>(wnd);
preset->mControlState->Item(id - FEFirstID).ToLong(&readlong); preset->mControlState.Item(id - FEFirstID).ToLong(&readlong);
if (readlong) readbool = true; else readbool = false; if (readlong) readbool = true; else readbool = false;
cb->SetValue(readbool); cb->SetValue(readbool);
break; break;
@ -677,23 +683,19 @@ bool FFmpegPresets::HandleXMLTag(const wxChar *tag, const wxChar **attrs)
if (!wxStrcmp(attr,wxT("name"))) if (!wxStrcmp(attr,wxT("name")))
{ {
FFmpegPreset *newpreset = FindPreset(value); mPreset = FindPreset(value);
if (!newpreset) if (!mPreset)
mPresets->push_front(new FFmpegPreset(value));
else
{ {
mPresets->remove(newpreset); mPreset = new FFmpegPreset(value);
mPresets->push_front(newpreset); mPresets->push_front(mPreset);
} }
} }
} }
return true; return true;
} }
else if (!wxStrcmp(tag,wxT("setctrlstate"))) else if (!wxStrcmp(tag,wxT("setctrlstate")) && mPreset)
{ {
FFmpegPreset *preset = mPresets->front();
long id = -1; long id = -1;
if (!preset) return false;
while (*attrs) while (*attrs)
{ {
const wxChar *attr = *attrs++; const wxChar *attr = *attrs++;
@ -711,7 +713,7 @@ bool FFmpegPresets::HandleXMLTag(const wxChar *tag, const wxChar **attrs)
else if (!wxStrcmp(attr,wxT("state"))) else if (!wxStrcmp(attr,wxT("state")))
{ {
if (id > FEFirstID && id < FELastID) if (id > FEFirstID && id < FELastID)
preset->mControlState->Item(id - FEFirstID) = wxString(value); mPreset->mControlState.Item(id - FEFirstID) = wxString(value);
} }
} }
return true; return true;
@ -760,12 +762,12 @@ void FFmpegPresets::WriteXML(XMLWriter &xmlFile)
{ {
FFmpegPreset *preset = *iter; FFmpegPreset *preset = *iter;
xmlFile.StartTag(wxT("preset")); xmlFile.StartTag(wxT("preset"));
xmlFile.WriteAttr(wxT("name"),*preset->mPresetName); xmlFile.WriteAttr(wxT("name"),preset->mPresetName);
for (long i = FEFirstID + 1; i < FELastID; i++) for (long i = FEFirstID + 1; i < FELastID; i++)
{ {
xmlFile.StartTag(wxT("setctrlstate")); xmlFile.StartTag(wxT("setctrlstate"));
xmlFile.WriteAttr(wxT("id"),wxString(FFmpegExportCtrlIDNames[i - FEFirstID])); xmlFile.WriteAttr(wxT("id"),wxString(FFmpegExportCtrlIDNames[i - FEFirstID]));
xmlFile.WriteAttr(wxT("state"),preset->mControlState->Item(i - FEFirstID)); xmlFile.WriteAttr(wxT("state"),preset->mControlState.Item(i - FEFirstID));
xmlFile.EndTag(wxT("setctrlstate")); xmlFile.EndTag(wxT("setctrlstate"));
} }
xmlFile.EndTag(wxT("preset")); xmlFile.EndTag(wxT("preset"));

View File

@ -290,8 +290,8 @@ public:
FFmpegPreset(wxString &name); FFmpegPreset(wxString &name);
~FFmpegPreset(); ~FFmpegPreset();
wxString *mPresetName; wxString mPresetName;
wxArrayString *mControlState; wxArrayString mControlState;
}; };
@ -320,6 +320,7 @@ public:
private: private:
FFmpegPresetList *mPresets; FFmpegPresetList *mPresets;
FFmpegPreset *mPreset; // valid during XML parsing only
}; };
#endif #endif