bool FFmpegPresets::HandleXMLTag(const wxChar *tag, const wxChar **attrs) { if (!wxStrcmp(tag,wxT("ffmpeg_presets"))) { return true; } else if (!wxStrcmp(tag,wxT("preset"))) { while (*attrs) { const wxChar *attr = *attrs++; wxString value = *attrs++; if (!value) break; if (!wxStrcmp(attr,wxT("name"))) { FFmpegPreset *newpreset = FindPreset(value); if (!newpreset) mPresets->push_front(new FFmpegPreset(value)); else { mPresets->remove(newpreset); mPresets->push_front(newpreset); } } } return true; } else if (!wxStrcmp(tag,wxT("setctrlstate"))) { FFmpegPreset *preset = mPresets->front(); long id = -1; if (!preset) return false; while (*attrs) { const wxChar *attr = *attrs++; const wxChar *value = *attrs++; if (!value) break; if (!wxStrcmp(attr,wxT("id"))) { for (long i = FEFirstID; i < FELastID; i++) if (!wxStrcmp(FFmpegExportCtrlIDNames[i - FEFirstID],value)) id = i; } else if (!wxStrcmp(attr,wxT("state"))) { if (id > FEFirstID && id < FELastID) preset->mControlState->Item(id - FEFirstID) = wxString(value); } } return true; } return false; }
virtual void Load(void) { setValue(FindPreset(m_lnb)); }
void FFmpegPresets::LoadPreset(ExportFFmpegOptions *parent, wxString &name) { FFmpegPreset *preset = FindPreset(name); if (!preset) { wxMessageBox(wxString::Format(wxT("Preset '%s' does not exist."),name.c_str())); return; } wxListBox *lb; wxSpinCtrl *sc; wxTextCtrl *tc; wxCheckBox *cb; wxChoice *ch; for (int id = FEFirstID; id < FELastID; id++) { wxWindow *wnd = parent->FindWindowById(id,parent); if (wnd != NULL) { wxString readstr; long readlong; bool readbool; switch(id) { // Listbox case FEFormatID: case FECodecID: lb = dynamic_cast<wxListBox*>(wnd); readstr = preset->mControlState->Item(id - FEFirstID); readlong = lb->FindString(readstr); if (readlong > -1) lb->Select(readlong); break; // Spin control case FEBitrateID: case FEQualityID: case FESampleRateID: case FECutoffID: case FEFrameSizeID: case FEBufSizeID: case FECompLevelID: case FELPCCoeffsID: case FEMinPredID: case FEMaxPredID: case FEMinPartOrderID: case FEMaxPartOrderID: case FEMuxRateID: case FEPacketSizeID: sc = dynamic_cast<wxSpinCtrl*>(wnd); 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)); break; // Choice case FEProfileID: case FEPredOrderID: ch = dynamic_cast<wxChoice*>(wnd); preset->mControlState->Item(id - FEFirstID).ToLong(&readlong); if (readlong > -1) ch->Select(readlong); break; // Check box case FEUseLPCID: case FEBitReservoirID: cb = dynamic_cast<wxCheckBox*>(wnd); preset->mControlState->Item(id - FEFirstID).ToLong(&readlong); if (readlong) readbool = true; else readbool = false; cb->SetValue(readbool); break; } } } }
void FFmpegPresets::SavePreset(ExportFFmpegOptions *parent, wxString &name) { FFmpegPreset *preset = FindPreset(name); if (preset) { wxString query = wxString::Format(_("Overwrite preset '%s'?"),name.c_str()); int action = wxMessageBox(query,_("Confirm Overwrite"),wxYES_NO | wxCENTRE); if (action == wxNO) return; } else { preset = new FFmpegPreset(name); mPresets->push_front(preset); } wxListBox *lb; wxSpinCtrl *sc; wxTextCtrl *tc; wxCheckBox *cb; wxChoice *ch; for (int id = FEFirstID; id < FELastID; id++) { wxWindow *wnd = dynamic_cast<wxWindow*>(parent)->FindWindowById(id,parent); if (wnd != NULL) { switch(id) { case FEFormatID: lb = dynamic_cast<wxListBox*>(wnd); if (lb->GetSelection() < 0) { wxMessageBox(wxT("Please select format before saving a profile")); return; } preset->mControlState->Item(id - FEFirstID) = lb->GetString(lb->GetSelection()); break; case FECodecID: lb = dynamic_cast<wxListBox*>(wnd); if (lb->GetSelection() < 0) { wxMessageBox(wxT("Please select codec before saving a profile")); return; } preset->mControlState->Item(id - FEFirstID) = lb->GetString(lb->GetSelection()); break; // Spin control case FEBitrateID: case FEQualityID: case FESampleRateID: case FECutoffID: case FEFrameSizeID: case FEBufSizeID: case FECompLevelID: case FELPCCoeffsID: case FEMinPredID: case FEMaxPredID: case FEMinPartOrderID: case FEMaxPartOrderID: case FEMuxRateID: case FEPacketSizeID: sc = dynamic_cast<wxSpinCtrl*>(wnd); 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(); break; // Choice case FEProfileID: case FEPredOrderID: ch = dynamic_cast<wxChoice*>(wnd); preset->mControlState->Item(id - FEFirstID) = wxString::Format(wxT("%d"),ch->GetSelection()); break; // Check box case FEUseLPCID: case FEBitReservoirID: cb = dynamic_cast<wxCheckBox*>(wnd); preset->mControlState->Item(id - FEFirstID) = wxString::Format(wxT("%d"),cb->GetValue()); break; } } } }