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

View File

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