Finish killing FrameMain::SaveSubtitles

Originally committed to SVN as r5246.
This commit is contained in:
Thomas Goyne 2011-01-20 05:57:15 +00:00
parent 5270a3bf3a
commit cecaff404b
3 changed files with 32 additions and 45 deletions

View File

@ -303,7 +303,30 @@ struct subtitle_properties : public Command {
} }
}; };
static void save_subtitles(agi::Context *c, wxString filename) {
if (filename.empty()) {
c->videoController->Stop();
wxString path = lagi_wxString(OPT_GET("Path/Last/Subtitles")->GetString());
wxFileName origPath(c->ass->filename);
filename = wxFileSelector(_("Save subtitles file"), path, origPath.GetName() + ".ass", "ass", AssFile::GetWildcardList(1), wxFD_SAVE | wxFD_OVERWRITE_PROMPT, c->parent);
}
if (filename.empty()) {
return;
}
try {
c->ass->Save(filename, true, true);
}
catch (const agi::Exception& err) {
wxMessageBox(lagi_wxString(err.GetMessage()), "Error", wxOK | wxICON_ERROR, NULL);
}
catch (const wchar_t *err) {
wxMessageBox(wxString(err), _T("Error"), wxOK | wxICON_ERROR, NULL);
}
catch (...) {
wxMessageBox(_T("Unknown error"), _T("Error"), wxOK | wxICON_ERROR, NULL);
}
}
/// Saves subtitles. /// Saves subtitles.
struct subtitle_save : public Command { struct subtitle_save : public Command {
@ -313,7 +336,7 @@ struct subtitle_save : public Command {
STR_HELP("Saves subtitles.") STR_HELP("Saves subtitles.")
void operator()(agi::Context *c) { void operator()(agi::Context *c) {
wxGetApp().frame->SaveSubtitles(false); save_subtitles(c, c->ass->CanSave() ? c->ass->filename : "");
} }
}; };
@ -326,7 +349,7 @@ struct subtitle_save_as : public Command {
STR_HELP("Saves subtitles with another name.") STR_HELP("Saves subtitles with another name.")
void operator()(agi::Context *c) { void operator()(agi::Context *c) {
wxGetApp().frame->SaveSubtitles(true); save_subtitles(c, "");
} }
}; };

View File

@ -421,44 +421,6 @@ void FrameMain::LoadSubtitles(wxString filename,wxString charset) {
} }
} }
/// @brief Save subtitles
/// @param saveas
/// @param withCharset
/// @return
bool FrameMain::SaveSubtitles(bool saveas) {
wxString filename;
if (!saveas && context->ass->CanSave()) {
filename = context->ass->filename;
}
if (filename.empty()) {
context->videoController->Stop();
wxString path = lagi_wxString(OPT_GET("Path/Last/Subtitles")->GetString());
wxFileName origPath(context->ass->filename);
filename = wxFileSelector(_("Save subtitles file"), path, origPath.GetName() + ".ass", "ass", AssFile::GetWildcardList(1), wxFD_SAVE | wxFD_OVERWRITE_PROMPT, this);
}
if (filename.empty()) {
return false;
}
try {
context->ass->Save(filename, true, true);
}
catch (const agi::Exception& err) {
wxMessageBox(lagi_wxString(err.GetMessage()), "Error", wxOK | wxICON_ERROR, NULL);
return false;
}
catch (const wchar_t *err) {
wxMessageBox(wxString(err), _T("Error"), wxOK | wxICON_ERROR, NULL);
return false;
}
catch (...) {
wxMessageBox(_T("Unknown error"), _T("Error"), wxOK | wxICON_ERROR, NULL);
return false;
}
return true;
}
/// @brief Try to close subtitles /// @brief Try to close subtitles
/// @param enableCancel /// @param enableCancel
/// @return /// @return
@ -468,13 +430,15 @@ int FrameMain::TryToCloseSubs(bool enableCancel) {
if (enableCancel) flags |= wxCANCEL; if (enableCancel) flags |= wxCANCEL;
int result = wxMessageBox(_("Save before continuing?"), _("Unsaved changes"), flags,this); int result = wxMessageBox(_("Save before continuing?"), _("Unsaved changes"), flags,this);
if (result == wxYES) { if (result == wxYES) {
(*cmd::get("subtitle/save"))(context.get());
// If it fails saving, return cancel anyway // If it fails saving, return cancel anyway
if (SaveSubtitles(false)) return wxYES; return context->ass->IsModified() ? wxCANCEL : wxYES;
else return wxCANCEL;
} }
return result; return result;
} }
else return wxYES; else {
return wxYES;
}
} }
/// @brief Set the video and audio display visibilty /// @brief Set the video and audio display visibilty
@ -1173,7 +1137,8 @@ void FrameMain::OnAudioClose()
void FrameMain::OnSubtitlesCommit() { void FrameMain::OnSubtitlesCommit() {
if (OPT_GET("App/Auto/Save on Every Change")->GetBool()) { if (OPT_GET("App/Auto/Save on Every Change")->GetBool()) {
if (context->ass->IsModified() && !context->ass->filename.empty()) SaveSubtitles(false); if (context->ass->IsModified() && context->ass->CanSave())
(*cmd::get("subtitle/save"))(context.get());
} }
UpdateTitle(); UpdateTitle();

View File

@ -87,7 +87,6 @@ public:
void StatusTimeout(wxString text,int ms=10000); void StatusTimeout(wxString text,int ms=10000);
void SetDisplayMode(int showVid,int showAudio); void SetDisplayMode(int showVid,int showAudio);
void LoadSubtitles(wxString filename,wxString charset=""); void LoadSubtitles(wxString filename,wxString charset="");
bool SaveSubtitles(bool saveas=false);
void DetachVideo(bool detach=true); void DetachVideo(bool detach=true);
void LoadVFR(wxString filename); void LoadVFR(wxString filename);