From c40aa7080ac6be25b9dd143e3c0f33337ebd0537 Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Fri, 9 Jul 2010 07:31:48 +0000 Subject: [PATCH] Eliminate almost all uses of AssFile::top. Originally committed to SVN as r4669. --- aegisub/src/auto4_lua_assfile.cpp | 3 +- aegisub/src/base_grid.cpp | 12 --- aegisub/src/dialog_attachments.cpp | 29 +++--- aegisub/src/dialog_attachments.h | 32 +------ aegisub/src/dialog_export.cpp | 4 +- aegisub/src/dialog_export.h | 2 +- aegisub/src/dialog_fonts_collector.cpp | 9 +- aegisub/src/dialog_fonts_collector.h | 18 +--- aegisub/src/dialog_kara_timing_copy.cpp | 2 +- aegisub/src/dialog_properties.cpp | 28 +----- aegisub/src/dialog_properties.h | 16 +--- aegisub/src/dialog_resample.cpp | 4 +- aegisub/src/dialog_shift_times.cpp | 2 +- aegisub/src/dialog_style_editor.cpp | 2 +- aegisub/src/dialog_style_manager.cpp | 30 +++---- aegisub/src/frame_main.cpp | 112 ++++++++++++------------ aegisub/src/frame_main.h | 3 +- aegisub/src/frame_main_events.cpp | 40 ++++----- aegisub/src/subs_grid.cpp | 11 +-- aegisub/src/subs_grid.h | 2 +- 20 files changed, 137 insertions(+), 224 deletions(-) diff --git a/aegisub/src/auto4_lua_assfile.cpp b/aegisub/src/auto4_lua_assfile.cpp index 345929330..75de23f76 100644 --- a/aegisub/src/auto4_lua_assfile.cpp +++ b/aegisub/src/auto4_lua_assfile.cpp @@ -1014,9 +1014,8 @@ namespace Automation4 { description = wxString(lua_tostring(L, 1), wxConvUTF8); lua_pop(L, 1); } - AssFile::top->Commit(description); + laf->ass->Commit(description); - laf->ass = AssFile::top; // make sure we're still working on the most recent undo point return 0; } diff --git a/aegisub/src/base_grid.cpp b/aegisub/src/base_grid.cpp index 5527e512b..2210ba23d 100644 --- a/aegisub/src/base_grid.cpp +++ b/aegisub/src/base_grid.cpp @@ -981,18 +981,6 @@ void BaseGrid::SetColumnWidths() { endLen = fw + 10; } - // Style length - if (false && AssFile::top) { - AssStyle *curStyle; - for (entryIter curIter=AssFile::top->Line.begin();curIter!=AssFile::top->Line.end();curIter++) { - curStyle = dynamic_cast(*curIter); - if (curStyle) { - dc.GetTextExtent(curStyle->name, &fw, &fh, NULL, NULL, &font); - if (fw > styleLen) styleLen = fw; - } - } - } - // Finish actor/effect/style if (actorLen) actorLen += 10; if (effectLen) effectLen += 10; diff --git a/aegisub/src/dialog_attachments.cpp b/aegisub/src/dialog_attachments.cpp index 37b996fd3..8609df51a 100644 --- a/aegisub/src/dialog_attachments.cpp +++ b/aegisub/src/dialog_attachments.cpp @@ -62,8 +62,9 @@ /// @brief Constructor /// @param parent /// -DialogAttachments::DialogAttachments(wxWindow *parent) +DialogAttachments::DialogAttachments(wxWindow *parent, AssFile *ass) : wxDialog(parent,-1,_("Attachment List"),wxDefaultPosition,wxDefaultSize,wxDEFAULT_DIALOG_STYLE) +, ass(ass) { // Set icon SetIcon(BitmapToIcon(GETIMAGE(attach_button_24))); @@ -111,7 +112,7 @@ void DialogAttachments::UpdateList() { // Fill list AssAttachment *attach; - for (std::list::iterator cur = AssFile::top->Line.begin();cur != AssFile::top->Line.end();cur++) { + for (std::list::iterator cur = ass->Line.begin();cur != ass->Line.end();cur++) { attach = dynamic_cast(*cur); if (attach) { // Add item @@ -132,14 +133,14 @@ DialogAttachments::~DialogAttachments() { // Remove empty attachments sections from the file - std::list::iterator cur = AssFile::top->Line.end(); + std::list::iterator cur = ass->Line.end(); --cur; bool found_attachments = false; bool removed_any = false; wxString last_section_name; - while (cur != AssFile::top->Line.begin()) { + while (cur != ass->Line.begin()) { if (!((*cur)->group == L"[Fonts]" || (*cur)->group == L"[Graphics]")) break; @@ -151,15 +152,15 @@ DialogAttachments::~DialogAttachments() { // found section heading with no attachments in, remove it wxString delgroup = (*cur)->group; std::list::iterator di = cur; - while (++di != AssFile::top->Line.end() && (*di)->group == delgroup) { + while (++di != ass->Line.end() && (*di)->group == delgroup) { delete *di; - AssFile::top->Line.erase(di); + ass->Line.erase(di); di = cur; } di = cur; --cur; delete *di; - AssFile::top->Line.erase(di); + ass->Line.erase(di); removed_any = true; continue; } @@ -174,7 +175,7 @@ DialogAttachments::~DialogAttachments() { } if (removed_any) { - AssFile::top->Commit(_("remove empty attachments sections")); + ass->Commit(_("remove empty attachments sections")); } } @@ -220,10 +221,10 @@ void DialogAttachments::OnAttachFont(wxCommandEvent &event) { return; } newAttach->group = _T("[Fonts]"); - AssFile::top->InsertAttachment(newAttach); + ass->InsertAttachment(newAttach); } - AssFile::top->Commit(_("attach font file")); + ass->Commit(_("attach font file")); // Update UpdateList(); @@ -258,10 +259,10 @@ void DialogAttachments::OnAttachGraphics(wxCommandEvent &event) { return; } newAttach->group = _T("[Graphics]"); - AssFile::top->InsertAttachment(newAttach); + ass->InsertAttachment(newAttach); } - AssFile::top->Commit(_("attach graphics file")); + ass->Commit(_("attach graphics file")); // Update UpdateList(); @@ -312,11 +313,11 @@ void DialogAttachments::OnDelete(wxCommandEvent &event) { // Loop through items in list int i = listView->GetFirstSelected(); while (i != -1) { - AssFile::top->Line.remove((AssEntry*)wxUIntToPtr(listView->GetItemData(i))); + ass->Line.remove((AssEntry*)wxUIntToPtr(listView->GetItemData(i))); i = listView->GetNextSelected(i); } - AssFile::top->Commit(_("remove attachment")); + ass->Commit(_("remove attachment")); // Update list UpdateList(); diff --git a/aegisub/src/dialog_attachments.h b/aegisub/src/dialog_attachments.h index 418f5e3aa..7ae86744e 100644 --- a/aegisub/src/dialog_attachments.h +++ b/aegisub/src/dialog_attachments.h @@ -34,27 +34,17 @@ /// @ingroup tools_ui /// - - - -/////////// -// Headers - - -////////////// -// Prototypes +class AssFile; class wxListView; class wxListEvent; - - /// DOCME /// @class DialogAttachments /// @brief DOCME /// /// DOCME class DialogAttachments : public wxDialog { -private: + AssFile *ass; /// DOCME wxListView *listView; @@ -74,31 +64,17 @@ private: void UpdateList(); public: - DialogAttachments(wxWindow *parent); + DialogAttachments(wxWindow *parent, AssFile *ass); ~DialogAttachments(); DECLARE_EVENT_TABLE() }; - -/////// -// IDs +/// Event IDs enum { - - /// DOCME BUTTON_ATTACH_FONT = 1300, - - /// DOCME BUTTON_ATTACH_GRAPHICS, - - /// DOCME BUTTON_EXTRACT, - - /// DOCME BUTTON_DELETE, - - /// DOCME ATTACHMENT_LIST }; - - diff --git a/aegisub/src/dialog_export.cpp b/aegisub/src/dialog_export.cpp index 88c4f4be6..2d552cb40 100644 --- a/aegisub/src/dialog_export.cpp +++ b/aegisub/src/dialog_export.cpp @@ -54,12 +54,12 @@ /// @brief Constructor /// @param parent /// -DialogExport::DialogExport (wxWindow *parent) +DialogExport::DialogExport (wxWindow *parent, AssFile *subs) : wxDialog (parent, -1, _("Export"), wxDefaultPosition, wxSize(200,100), wxCAPTION | wxCLOSE_BOX, _T("Export")) { // Filter list wxSizer *TopSizer = new wxStaticBoxSizer(wxVERTICAL,this,_("Filters")); - Export = new AssExporter(AssFile::top); + Export = new AssExporter(subs); wxArrayString filters = Export->GetAllFilterNames(); FilterList = new wxCheckListBox(this, Filter_List_Box, wxDefaultPosition, wxSize(200,100), filters); diff --git a/aegisub/src/dialog_export.h b/aegisub/src/dialog_export.h index 11a1dd505..35db5fb40 100644 --- a/aegisub/src/dialog_export.h +++ b/aegisub/src/dialog_export.h @@ -104,7 +104,7 @@ private: void RefreshOptions(); public: - DialogExport(wxWindow *parent); + DialogExport(wxWindow *parent, AssFile *subs); ~DialogExport(); DECLARE_EVENT_TABLE() diff --git a/aegisub/src/dialog_fonts_collector.cpp b/aegisub/src/dialog_fonts_collector.cpp index 6270cbfed..30d0eebb2 100644 --- a/aegisub/src/dialog_fonts_collector.cpp +++ b/aegisub/src/dialog_fonts_collector.cpp @@ -88,8 +88,9 @@ DEFINE_EVENT_TYPE(EVT_ADD_TEXT) /// @brief Constructor /// @param parent /// -DialogFontsCollector::DialogFontsCollector(wxWindow *parent) +DialogFontsCollector::DialogFontsCollector(wxWindow *parent, AssFile *ass) : wxDialog(parent,-1,_("Fonts Collector"),wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) +, subs(ass) { // Set icon SetIcon(BitmapToIcon(GETIMAGE(font_collector_button_24))); @@ -100,7 +101,7 @@ DialogFontsCollector::DialogFontsCollector(wxWindow *parent) // Destination box wxString dest = lagi_wxString(OPT_GET("Path/Fonts Collector Destination")->GetString()); if (dest == _T("?script")) { - wxFileName filename(AssFile::top->filename); + wxFileName filename(subs->filename); dest = filename.GetPath(); } while (dest.Right(1) == _T("/")) dest = dest.Left(dest.Length()-1); @@ -232,14 +233,14 @@ void DialogFontsCollector::OnStart(wxCommandEvent &event) { } // Start thread - wxThread *worker = new FontsCollectorThread(AssFile::top,foldername,this); + wxThread *worker = new FontsCollectorThread(subs,foldername,this); worker->Create(); worker->Run(); // Set options if (action == 1 || action == 2) { wxString dest = foldername; - wxFileName filename(AssFile::top->filename); + wxFileName filename(subs->filename); if (filename.GetPath() == dest) { dest = _T("?script"); } diff --git a/aegisub/src/dialog_fonts_collector.h b/aegisub/src/dialog_fonts_collector.h index b12f7c0a0..98b984937 100644 --- a/aegisub/src/dialog_fonts_collector.h +++ b/aegisub/src/dialog_fonts_collector.h @@ -34,11 +34,6 @@ /// @ingroup tools_ui font_collector /// - - - -//////////// -// Includes #ifndef AGI_PRE #include #include @@ -48,9 +43,6 @@ #include #endif - -////////////// -// Prototypes class AssFile; class AssOverrideParameter; class DialogFontsCollector; @@ -58,16 +50,12 @@ class FrameMain; class wxZipOutputStream; class ScintillaTextCtrl; - - /// DOCME /// @class FontsCollectorThread /// @brief DOCME /// /// DOCME class FontsCollectorThread : public wxThread { -private: - /// DOCME AssFile *subs; @@ -114,8 +102,6 @@ public: static void GetFonts (wxString tagName,int par_n,AssOverrideParameter *param,void *usr); }; - - /// DOCME /// @class DialogFontsCollector /// @brief DOCME @@ -124,7 +110,7 @@ public: class DialogFontsCollector : public wxDialog { friend class FontsCollectorThread; -private: + AssFile *subs; /// DOCME wxTextCtrl *DestBox; @@ -158,7 +144,7 @@ private: void Update(int value=-1); public: - DialogFontsCollector(wxWindow *parent); + DialogFontsCollector(wxWindow *parent, AssFile *subs); ~DialogFontsCollector(); DECLARE_EVENT_TABLE() diff --git a/aegisub/src/dialog_kara_timing_copy.cpp b/aegisub/src/dialog_kara_timing_copy.cpp index d616b6ac6..0eeb856c9 100644 --- a/aegisub/src/dialog_kara_timing_copy.cpp +++ b/aegisub/src/dialog_kara_timing_copy.cpp @@ -829,7 +829,7 @@ DialogKanjiTimer::DialogKanjiTimer(wxWindow *parent, SubtitlesGrid *_grid) SetIcon(BitmapToIcon(GETIMAGE(kara_timing_copier_24))); // Variables - subs = AssFile::top; + subs = _grid->ass; grid = _grid; currentSourceLine = subs->Line.begin(); currentDestinationLine = subs->Line.begin(); diff --git a/aegisub/src/dialog_properties.cpp b/aegisub/src/dialog_properties.cpp index e6e3d82ed..10dde4de2 100644 --- a/aegisub/src/dialog_properties.cpp +++ b/aegisub/src/dialog_properties.cpp @@ -34,9 +34,6 @@ /// @ingroup secondary_ui /// - -/////////// -// Headers #include "config.h" #ifndef AGI_PRE @@ -61,15 +58,13 @@ /// @brief Constructor /// @param parent /// -DialogProperties::DialogProperties (wxWindow *parent) +DialogProperties::DialogProperties (wxWindow *parent, AssFile *subs) : wxDialog(parent, -1, _("Script Properties"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) +, subs(subs) { // Set icon SetIcon(BitmapToIcon(GETIMAGE(properties_toolbutton_24))); - // Setup - AssFile *subs = AssFile::top; - // Script details crap wxSizer *TopSizer = new wxStaticBoxSizer(wxHORIZONTAL,this,_("Script")); wxStaticText *TitleLabel = new wxStaticText(this,-1,_("Title:")); @@ -173,23 +168,16 @@ DialogProperties::DialogProperties (wxWindow *parent) CenterOnParent(); } - - /// @brief Destructor /// DialogProperties::~DialogProperties () { } - -/////////////// -// Event table BEGIN_EVENT_TABLE(DialogProperties,wxDialog) EVT_BUTTON(wxID_OK,DialogProperties::OnOK) EVT_BUTTON(BUTTON_FROM_VIDEO,DialogProperties::OnSetFromVideo) END_EVENT_TABLE() - - /// @brief Apply changes /// @param event /// @@ -211,23 +199,17 @@ void DialogProperties::OnOK(wxCommandEvent &event) { count += SetInfoIfDifferent(_T("Collisions"),col[collision->GetSelection()]); count += SetInfoIfDifferent(_T("ScaledBorderAndShadow"),ScaleBorder->GetValue()? _T("yes") : _T("no")); - if (count) AssFile::top->Commit(_("property changes")); + if (count) subs->Commit(_("property changes")); EndModal(count?1:0); } - - /// @brief Only set script info if it changed /// @param key /// @param value /// @return /// int DialogProperties::SetInfoIfDifferent(wxString key,wxString value) { - // Get script - AssFile *subs = AssFile::top; - - // Compare if (subs->GetScriptInfo(key) != value) { subs->SetScriptInfo(key,value); return 1; @@ -235,8 +217,6 @@ int DialogProperties::SetInfoIfDifferent(wxString key,wxString value) { else return 0; } - - /// @brief Set res to match video /// @param event /// @@ -245,5 +225,3 @@ void DialogProperties::OnSetFromVideo(wxCommandEvent &event) { ResY->SetValue(wxString::Format(_T("%i"),VideoContext::Get()->GetHeight())); event.Skip(); } - - diff --git a/aegisub/src/dialog_properties.h b/aegisub/src/dialog_properties.h index 7ad8a2ae7..d39e5ea8e 100644 --- a/aegisub/src/dialog_properties.h +++ b/aegisub/src/dialog_properties.h @@ -34,17 +34,13 @@ /// @ingroup secondary_ui /// - - - -/////////// -// Headers #ifndef AGI_PRE #include #include #include #endif +class AssFile; /// DOCME /// @class DialogProperties @@ -52,7 +48,7 @@ /// /// DOCME class DialogProperties : public wxDialog { -private: + AssFile *subs; /// DOCME wxTextCtrl *TitleEdit; @@ -106,19 +102,13 @@ private: int SetInfoIfDifferent(wxString key,wxString value); public: - DialogProperties(wxWindow *parent); + DialogProperties(wxWindow *parent, AssFile *subs); ~DialogProperties(); DECLARE_EVENT_TABLE() }; - -/////// // IDs enum { - - /// DOCME BUTTON_FROM_VIDEO = 1100 }; - - diff --git a/aegisub/src/dialog_resample.cpp b/aegisub/src/dialog_resample.cpp index 7e81fd147..46b6d2052 100644 --- a/aegisub/src/dialog_resample.cpp +++ b/aegisub/src/dialog_resample.cpp @@ -64,7 +64,7 @@ DialogResample::DialogResample(wxWindow *parent, SubtitlesGrid *_grid) SetIcon(BitmapToIcon(GETIMAGE(resample_toolbutton_24))); // Variables - AssFile *subs = AssFile::top; + AssFile *subs = _grid->ass; grid = _grid; // Margins @@ -224,7 +224,7 @@ void DialogResample::DoResampleTags (wxString name,int n,AssOverrideParameter *c /// void DialogResample::OnResample (wxCommandEvent &event) { // Resolutions - AssFile *subs = AssFile::top; + AssFile *subs = grid->ass; int x1,y1; subs->GetResolution(x1,y1); long x2 = 0; diff --git a/aegisub/src/dialog_shift_times.cpp b/aegisub/src/dialog_shift_times.cpp index 52e89c745..196f72eaf 100644 --- a/aegisub/src/dialog_shift_times.cpp +++ b/aegisub/src/dialog_shift_times.cpp @@ -260,7 +260,7 @@ void DialogShiftTimes::OnOK(wxCommandEvent &event) { if (didSomething) { if (backward) len = -len; wxString message = _T(""); - wxFileName assfile(AssFile::top->filename); + wxFileName assfile(grid->ass->filename); wxString filename = assfile.GetFullName(); // File diff --git a/aegisub/src/dialog_style_editor.cpp b/aegisub/src/dialog_style_editor.cpp index 7e293401d..e36b8b43a 100644 --- a/aegisub/src/dialog_style_editor.cpp +++ b/aegisub/src/dialog_style_editor.cpp @@ -581,7 +581,7 @@ void DialogStyleEditor::Apply (bool apply,bool close) { *style = *work; style->UpdateData(); if (isLocal) { - AssFile::top->Commit(_("style change")); + grid->ass->Commit(_("style change")); grid->CommitChanges(); } diff --git a/aegisub/src/dialog_style_manager.cpp b/aegisub/src/dialog_style_manager.cpp index 093128e6d..f36c21f25 100644 --- a/aegisub/src/dialog_style_manager.cpp +++ b/aegisub/src/dialog_style_manager.cpp @@ -194,7 +194,7 @@ DialogStyleManager::DialogStyleManager (wxWindow *parent,SubtitlesGrid *_grid) // Populate lists LoadCatalog(); - LoadCurrentStyles(AssFile::top); + LoadCurrentStyles(grid->ass); //Set key handlers for lists CatalogList->PushEventHandler(new DialogStyleManagerEvent(this)); @@ -227,7 +227,7 @@ DialogStyleManager::DialogStyleManager (wxWindow *parent,SubtitlesGrid *_grid) DialogStyleManager::~DialogStyleManager() { int sel = CatalogList->GetSelection(); if (sel != wxNOT_FOUND) { - AssFile::top->SetScriptInfo(_T("Last Style Storage"),CatalogList->GetString(sel)); + grid->ass->SetScriptInfo(_T("Last Style Storage"),CatalogList->GetString(sel)); } CatalogList->PopEventHandler(true); StorageList->PopEventHandler(true); @@ -268,7 +268,7 @@ void DialogStyleManager::LoadCatalog () { // Set to default if available StorageActions(false); - wxString pickStyle = AssFile::top->GetScriptInfo(_T("Last Style Storage")); + wxString pickStyle = grid->ass->GetScriptInfo(_T("Last Style Storage")); if (pickStyle.IsEmpty()) pickStyle = _T("Default"); int opt = CatalogList->FindString(pickStyle, false); if (opt != wxNOT_FOUND) { @@ -568,11 +568,11 @@ void DialogStyleManager::OnCopyToCurrent (wxCommandEvent &) { } if (addStyle) { AssStyle *temp = new AssStyle(*styleStorageMap.at(selections[i])); - AssFile::top->InsertStyle(temp); + grid->ass->InsertStyle(temp); copied.push_back(styleName); } } - LoadCurrentStyles(AssFile::top); + LoadCurrentStyles(grid->ass); for (list::iterator name = copied.begin(); name != copied.end(); ++name) { CurrentList->SetStringSelection(*name, true); } @@ -619,8 +619,8 @@ void DialogStyleManager::OnCurrentCopy (wxCommandEvent &) { DialogStyleEditor editor(this,temp,grid,true,&Store,true); int modified = editor.ShowModal(); if (modified) { - AssFile::top->InsertStyle(temp); - LoadCurrentStyles(AssFile::top); + grid->ass->InsertStyle(temp); + LoadCurrentStyles(grid->ass); CurrentList->SetStringSelection(temp->name); // but even without this, the copy/delete/copy-to-storage buttons stay enabled? } else delete temp; @@ -671,12 +671,12 @@ void DialogStyleManager::PasteToCurrent() { try { s = new AssStyle(st.GetNextToken().Trim(true)); if (s->Valid) { - while (AssFile::top->GetStyle(s->name) != NULL) + while (grid->ass->GetStyle(s->name) != NULL) s->name = _T("Copy of ") + s->name; s->UpdateData(); - AssFile::top->InsertStyle(s); - LoadCurrentStyles(AssFile::top); + grid->ass->InsertStyle(s); + LoadCurrentStyles(grid->ass); grid->ass->Commit(_("style paste")); grid->CommitChanges(); @@ -753,8 +753,8 @@ void DialogStyleManager::OnCurrentNew (wxCommandEvent &) { DialogStyleEditor editor(this,temp,grid,true,&Store,true); int modified = editor.ShowModal(); if (modified) { - AssFile::top->InsertStyle(temp); - LoadCurrentStyles(AssFile::top); + grid->ass->InsertStyle(temp); + LoadCurrentStyles(grid->ass); } else delete temp; UpdateMoveButtons(); @@ -869,7 +869,7 @@ void DialogStyleManager::OnCurrentImport(wxCommandEvent &) { // The GetString->FindString mess is a silly workaround for the fact that to vsfilter // (and the duplicate check a few lines above), style names aren't case sensitive, but to the // rest of Aegisub they are. - *(AssFile::top->GetStyle(CurrentList->GetString(CurrentList->FindString(styles[selections[i]], false)))) = *temp.GetStyle(styles[selections[i]]); + *(grid->ass->GetStyle(CurrentList->GetString(CurrentList->FindString(styles[selections[i]], false)))) = *temp.GetStyle(styles[selections[i]]); } continue; } @@ -878,7 +878,7 @@ void DialogStyleManager::OnCurrentImport(wxCommandEvent &) { modified = true; AssStyle *tempStyle = new AssStyle; *tempStyle = *temp.GetStyle(styles[selections[i]]); - AssFile::top->InsertStyle(tempStyle); + grid->ass->InsertStyle(tempStyle); } // Update @@ -963,7 +963,7 @@ void DialogStyleManager::OnCurrentSort (wxCommandEvent &) { MoveStyles(false,4); /// @param type void DialogStyleManager::MoveStyles(bool storage, int type) { // Variables - AssFile *subs = AssFile::top; + AssFile *subs = grid->ass; wxListBox *list; if (storage) list = StorageList; else list = CurrentList; diff --git a/aegisub/src/frame_main.cpp b/aegisub/src/frame_main.cpp index b644371e5..0209055f7 100644 --- a/aegisub/src/frame_main.cpp +++ b/aegisub/src/frame_main.cpp @@ -570,7 +570,7 @@ void FrameMain::InitMenu() { /// @brief Initialize contents void FrameMain::InitContents() { - AssFile::top = new AssFile; + AssFile::top = ass = new AssFile; // Set a background panel StartupLog(_T("Create background panel")); Panel = new wxPanel(this,-1,wxDefaultPosition,wxDefaultSize,wxTAB_TRAVERSAL | wxCLIP_CHILDREN); @@ -589,7 +589,7 @@ void FrameMain::InitContents() { // Subtitles area StartupLog(_T("Create subtitles grid")); - SubsGrid = new SubtitlesGrid(this,Panel,-1,wxDefaultPosition,wxSize(600,100),wxWANTS_CHARS | wxSUNKEN_BORDER,_T("Subs grid")); + SubsGrid = new SubtitlesGrid(this,Panel,-1,ass,wxDefaultPosition,wxSize(600,100),wxWANTS_CHARS | wxSUNKEN_BORDER,_T("Subs grid")); BottomSizer->Add(SubsGrid,1,wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM,0); videoBox->videoSlider->grid = SubsGrid; VideoContext::Get()->grid = SubsGrid; @@ -637,7 +637,7 @@ void FrameMain::DeInitContents() { SubsGrid->ClearMaps(); delete EditBox; delete videoBox; - delete AssFile::top; + delete ass; HelpButton::ClearPages(); VideoContext::Get()->audio = NULL; } @@ -670,7 +670,7 @@ void FrameMain::UpdateToolbar() { /// @param charset void FrameMain::LoadSubtitles (wxString filename,wxString charset) { // First check if there is some loaded - if (AssFile::top && AssFile::top->loaded) { + if (ass && ass->loaded) { if (TryToCloseSubs() == wxCANCEL) return; } @@ -707,7 +707,7 @@ void FrameMain::LoadSubtitles (wxString filename,wxString charset) { // Proceed into loading SubsGrid->ClearMaps(); if (isFile) { - AssFile::top->Load(filename,charset); + ass->Load(filename,charset); SubsGrid->UpdateMaps(); if (SubsGrid->GetRows()) { SubsGrid->SetActiveLine(SubsGrid->GetDialogue(0)); @@ -768,13 +768,13 @@ void FrameMain::LoadSubtitles (wxString filename,wxString charset) { bool FrameMain::SaveSubtitles(bool saveas,bool withCharset) { // Try to get filename from file wxString filename; - if (saveas == false && AssFile::top->CanSave()) filename = AssFile::top->filename; + if (saveas == false && ass->CanSave()) filename = ass->filename; // Failed, ask user if (filename.IsEmpty()) { VideoContext::Get()->Stop(); wxString path = lagi_wxString(OPT_GET("Path/Last/Subtitles")->GetString()); - wxFileName origPath(AssFile::top->filename); + wxFileName origPath(ass->filename); filename = wxFileSelector(_("Save subtitles file"),path,origPath.GetName() + _T(".ass"),_T("ass"),AssFile::GetWildcardList(1),wxFD_SAVE | wxFD_OVERWRITE_PROMPT,this); } @@ -785,7 +785,7 @@ bool FrameMain::SaveSubtitles(bool saveas,bool withCharset) { OPT_SET("Path/Last/Subtitles")->SetString(STD_STR(filepath.GetPath())); // Fix me, ghetto hack for correct relative path generation in SynchronizeProject() - AssFile::top->filename = filename; + ass->filename = filename; // Synchronize SynchronizeProject(); @@ -799,7 +799,7 @@ bool FrameMain::SaveSubtitles(bool saveas,bool withCharset) { // Save try { - AssFile::top->Save(filename,true,true,charset); + ass->Save(filename,true,true,charset); UpdateTitle(); } catch (const wchar_t *err) { @@ -819,7 +819,6 @@ bool FrameMain::SaveSubtitles(bool saveas,bool withCharset) { /// @param enableCancel /// @return int FrameMain::TryToCloseSubs(bool enableCancel) { - AssFile *ass = AssFile::top; if (ass->IsModified()) { int flags = wxYES_NO; if (enableCancel) flags |= wxCANCEL; @@ -878,14 +877,14 @@ void FrameMain::SetDisplayMode(int video, int audio) { /// @brief Update title bar void FrameMain::UpdateTitle() { // Determine if current subs are modified - bool subsMod = AssFile::top->IsModified(); + bool subsMod = ass->IsModified(); // Create ideal title wxString newTitle = _T(""); #ifndef __WXMAC__ if (subsMod) newTitle << _T("* "); - if (AssFile::top->filename != _T("")) { - wxFileName file (AssFile::top->filename); + if (ass->filename != _T("")) { + wxFileName file (ass->filename); newTitle << file.GetFullName(); } else newTitle << _("Untitled"); @@ -894,8 +893,8 @@ void FrameMain::UpdateTitle() { // Apple HIG says "untitled" should not be capitalised // and the window is a document window, it shouldn't contain the app name // (The app name is already present in the menu bar) - if (AssFile::top->filename != _T("")) { - wxFileName file (AssFile::top->filename); + if (ass->filename != _T("")) { + wxFileName file (ass->filename); newTitle << file.GetFullName(); } else newTitle << _("untitled"); @@ -915,9 +914,6 @@ void FrameMain::UpdateTitle() { /// @brief Updates subs with video/whatever data /// @param fromSubs void FrameMain::SynchronizeProject(bool fromSubs) { - // Gather current data - AssFile *subs = AssFile::top; - // Retrieve data from subs if (fromSubs) { // Reset the state @@ -927,7 +923,7 @@ void FrameMain::SynchronizeProject(bool fromSubs) { double videoZoom = 0.; // Get AR - wxString arString = subs->GetScriptInfo(_T("Video Aspect Ratio")); + wxString arString = ass->GetScriptInfo(_T("Video Aspect Ratio")); if (arString.Left(1) == _T("c")) { videoAr = 4; arString = arString.Mid(1); @@ -936,21 +932,21 @@ void FrameMain::SynchronizeProject(bool fromSubs) { else if (arString.IsNumber()) arString.ToLong(&videoAr); // Get new state info - subs->GetScriptInfo(_T("Video Position")).ToLong(&videoPos); - subs->GetScriptInfo(_T("Video Zoom Percent")).ToDouble(&videoZoom); - wxString curSubsVideo = DecodeRelativePath(subs->GetScriptInfo(_T("Video File")),AssFile::top->filename); - wxString curSubsVFR = DecodeRelativePath(subs->GetScriptInfo(_T("VFR File")),AssFile::top->filename); - wxString curSubsKeyframes = DecodeRelativePath(subs->GetScriptInfo(_T("Keyframes File")),AssFile::top->filename); - wxString curSubsAudio = DecodeRelativePath(subs->GetScriptInfo(_T("Audio File")),AssFile::top->filename); - wxString AutoScriptString = subs->GetScriptInfo(_T("Automation Scripts")); + ass->GetScriptInfo(_T("Video Position")).ToLong(&videoPos); + ass->GetScriptInfo(_T("Video Zoom Percent")).ToDouble(&videoZoom); + wxString curassVideo = DecodeRelativePath(ass->GetScriptInfo(_T("Video File")),ass->filename); + wxString curassVFR = DecodeRelativePath(ass->GetScriptInfo(_T("VFR File")),ass->filename); + wxString curassKeyframes = DecodeRelativePath(ass->GetScriptInfo(_T("Keyframes File")),ass->filename); + wxString curassAudio = DecodeRelativePath(ass->GetScriptInfo(_T("Audio File")),ass->filename); + wxString AutoScriptString = ass->GetScriptInfo(_T("Automation Scripts")); // Check if there is anything to change int autoLoadMode = OPT_GET("App/Auto/Load Linked Files")->GetInt(); bool hasToLoad = false; - if (curSubsAudio != audioBox->audioName || - curSubsVFR != VideoContext::Get()->GetTimecodesName() || - curSubsVideo != VideoContext::Get()->videoName || - curSubsKeyframes != VideoContext::Get()->GetKeyFramesName() + if (curassAudio != audioBox->audioName || + curassVFR != VideoContext::Get()->GetTimecodesName() || + curassVideo != VideoContext::Get()->videoName || + curassKeyframes != VideoContext::Get()->GetKeyFramesName() #ifdef WITH_AUTOMATION || !AutoScriptString.IsEmpty() || local_scripts->GetScripts().size() > 0 #endif @@ -970,8 +966,8 @@ void FrameMain::SynchronizeProject(bool fromSubs) { if (doLoad) { // Video - if (curSubsVideo != VideoContext::Get()->videoName) { - LoadVideo(curSubsVideo); + if (curassVideo != VideoContext::Get()->videoName) { + LoadVideo(curassVideo); if (VideoContext::Get()->IsLoaded()) { VideoContext::Get()->SetAspectRatio(videoAr,videoArValue); videoBox->videoDisplay->SetZoom(videoZoom); @@ -979,20 +975,20 @@ void FrameMain::SynchronizeProject(bool fromSubs) { } } - VideoContext::Get()->LoadTimecodes(curSubsVFR); - VideoContext::Get()->LoadKeyframes(curSubsKeyframes); + VideoContext::Get()->LoadTimecodes(curassVFR); + VideoContext::Get()->LoadKeyframes(curassKeyframes); // Audio - if (curSubsAudio != audioBox->audioName) { - if (curSubsAudio == _T("?video")) LoadAudio(_T(""),true); - else LoadAudio(curSubsAudio); + if (curassAudio != audioBox->audioName) { + if (curassAudio == _T("?video")) LoadAudio(_T(""),true); + else LoadAudio(curassAudio); } // Automation scripts #ifdef WITH_AUTOMATION local_scripts->RemoveAll(); wxStringTokenizer tok(AutoScriptString, _T("|"), wxTOKEN_STRTOK); - wxFileName subsfn(subs->filename); + wxFileName assfn(ass->filename); wxString autobasefn(lagi_wxString(OPT_GET("Path/Automation/Base")->GetString())); while (tok.HasMoreTokens()) { wxString sfnames = tok.GetNextToken().Trim(true).Trim(false); @@ -1000,7 +996,7 @@ void FrameMain::SynchronizeProject(bool fromSubs) { sfnames.Remove(0, 1); wxString basepath; if (sfnamel == _T("~")) { - basepath = subsfn.GetPath(); + basepath = assfn.GetPath(); } else if (sfnamel == _T("$")) { basepath = autobasefn; } else if (sfnamel == _T("/")) { @@ -1027,7 +1023,7 @@ void FrameMain::SynchronizeProject(bool fromSubs) { SetDisplayMode(1,1); } - // Store data on subs + // Store data on ass else { // Setup wxString seekpos = _T("0"); @@ -1043,22 +1039,22 @@ void FrameMain::SynchronizeProject(bool fromSubs) { } // Store audio data - subs->SetScriptInfo(_T("Audio File"),MakeRelativePath(audioBox->audioName,AssFile::top->filename)); + ass->SetScriptInfo(_T("Audio File"),MakeRelativePath(audioBox->audioName,ass->filename)); // Store video data - subs->SetScriptInfo(_T("Video File"),MakeRelativePath(VideoContext::Get()->videoName,AssFile::top->filename)); - subs->SetScriptInfo(_T("Video Aspect Ratio"),ar); - subs->SetScriptInfo(_T("Video Zoom Percent"),zoom); - subs->SetScriptInfo(_T("Video Position"),seekpos); - subs->SetScriptInfo(_T("VFR File"),MakeRelativePath(VideoContext::Get()->GetTimecodesName(),AssFile::top->filename)); - subs->SetScriptInfo(_T("Keyframes File"),MakeRelativePath(VideoContext::Get()->GetKeyFramesName(),AssFile::top->filename)); + ass->SetScriptInfo(_T("Video File"),MakeRelativePath(VideoContext::Get()->videoName,ass->filename)); + ass->SetScriptInfo(_T("Video Aspect Ratio"),ar); + ass->SetScriptInfo(_T("Video Zoom Percent"),zoom); + ass->SetScriptInfo(_T("Video Position"),seekpos); + ass->SetScriptInfo(_T("VFR File"),MakeRelativePath(VideoContext::Get()->GetTimecodesName(),ass->filename)); + ass->SetScriptInfo(_T("Keyframes File"),MakeRelativePath(VideoContext::Get()->GetKeyFramesName(),ass->filename)); // Store Automation script data // Algorithm: // 1. If script filename has Automation Base Path as a prefix, the path is relative to that (ie. "$") - // 2. Otherwise try making it relative to the subs filename - // 3. If step 2 failed, or absolut path is shorter than path relative to subs, use absolute path ("/") - // 4. Otherwise, use path relative to subs ("~") + // 2. Otherwise try making it relative to the ass filename + // 3. If step 2 failed, or absolut path is shorter than path relative to ass, use absolute path ("/") + // 4. Otherwise, use path relative to ass ("~") #ifdef WITH_AUTOMATION wxString scripts_string; wxString autobasefn(lagi_wxString(OPT_GET("Path/Automation/Base")->GetString())); @@ -1070,22 +1066,22 @@ void FrameMain::SynchronizeProject(bool fromSubs) { if (i != 0) scripts_string += _T("|"); - wxString autobase_rel, subsfile_rel; + wxString autobase_rel, assfile_rel; wxString scriptfn(script->GetFilename()); autobase_rel = MakeRelativePath(scriptfn, autobasefn); - subsfile_rel = MakeRelativePath(scriptfn, AssFile::top->filename); + assfile_rel = MakeRelativePath(scriptfn, ass->filename); - if (autobase_rel.size() <= scriptfn.size() && autobase_rel.size() <= subsfile_rel.size()) { + if (autobase_rel.size() <= scriptfn.size() && autobase_rel.size() <= assfile_rel.size()) { scriptfn = _T("$") + autobase_rel; - } else if (subsfile_rel.size() <= scriptfn.size() && subsfile_rel.size() <= autobase_rel.size()) { - scriptfn = _T("~") + subsfile_rel; + } else if (assfile_rel.size() <= scriptfn.size() && assfile_rel.size() <= autobase_rel.size()) { + scriptfn = _T("~") + assfile_rel; } else { scriptfn = _T("/") + wxFileName(scriptfn).GetFullPath(wxPATH_UNIX); } scripts_string += scriptfn; } - subs->SetScriptInfo(_T("Automation Scripts"), scripts_string); + ass->SetScriptInfo(_T("Automation Scripts"), scripts_string); #endif } } @@ -1347,8 +1343,8 @@ bool FrameMain::LoadList(wxArrayString list) { /// @brief Sets the descriptions for undo/redo void FrameMain::SetUndoRedoDesc() { - editMenu->SetHelpString(0,_T("Undo ")+AssFile::top->GetUndoDescription()); - editMenu->SetHelpString(1,_T("Redo ")+AssFile::top->GetRedoDescription()); + editMenu->SetHelpString(0,_T("Undo ")+ass->GetUndoDescription()); + editMenu->SetHelpString(1,_T("Redo ")+ass->GetRedoDescription()); } /// @brief Check if ASSDraw is available diff --git a/aegisub/src/frame_main.h b/aegisub/src/frame_main.h index 8b99921c9..893694411 100644 --- a/aegisub/src/frame_main.h +++ b/aegisub/src/frame_main.h @@ -46,7 +46,7 @@ #include #endif - +class AssFile; class VideoDisplay; class VideoSlider; class VideoZoomSlider; @@ -73,6 +73,7 @@ class FrameMain: public wxFrame { friend class SubtitlesGrid; private: + AssFile *ass; /// DOCME diff --git a/aegisub/src/frame_main_events.cpp b/aegisub/src/frame_main_events.cpp index a9f4b9493..c6d7786f8 100644 --- a/aegisub/src/frame_main_events.cpp +++ b/aegisub/src/frame_main_events.cpp @@ -435,16 +435,16 @@ void FrameMain::OnMenuOpen (wxMenuEvent &event) { else if (curMenu == editMenu) { // Undo state wxMenuItem *item; - wxString undo_text = _("&Undo") + wxString(_T(" ")) + AssFile::top->GetUndoDescription() + wxString(_T("\t")) + Hotkeys.GetText(_T("Undo")); + wxString undo_text = _("&Undo") + wxString(_T(" ")) + ass->GetUndoDescription() + wxString(_T("\t")) + Hotkeys.GetText(_T("Undo")); item = editMenu->FindItem(Menu_Edit_Undo); item->SetItemLabel(undo_text); - item->Enable(!AssFile::top->IsUndoStackEmpty()); + item->Enable(!ass->IsUndoStackEmpty()); // Redo state - wxString redo_text = _("&Redo") + wxString(_T(" ")) + AssFile::top->GetRedoDescription() + wxString(_T("\t")) + Hotkeys.GetText(_T("Redo")); + wxString redo_text = _("&Redo") + wxString(_T(" ")) + ass->GetRedoDescription() + wxString(_T("\t")) + Hotkeys.GetText(_T("Redo")); item = editMenu->FindItem(Menu_Edit_Redo); item->SetItemLabel(redo_text); - item->Enable(!AssFile::top->IsRedoStackEmpty()); + item->Enable(!ass->IsRedoStackEmpty()); // Copy/cut/paste wxArrayInt sels = SubsGrid->GetSelection(); @@ -765,7 +765,7 @@ void FrameMain::OnExportSubtitles(wxCommandEvent &) { } #endif - DialogExport exporter(this); + DialogExport exporter(this, ass); exporter.ShowModal(); } @@ -927,7 +927,7 @@ void FrameMain::OnShift(wxCommandEvent&) { /// @brief Open properties void FrameMain::OnOpenProperties (wxCommandEvent &) { VideoContext::Get()->Stop(); - DialogProperties Properties(this); + DialogProperties Properties(this, ass); int res = Properties.ShowModal(); if (res) { SubsGrid->CommitChanges(); @@ -946,7 +946,7 @@ void FrameMain::OnOpenStylesManager(wxCommandEvent&) { /// @brief Open attachments void FrameMain::OnOpenAttachments(wxCommandEvent&) { VideoContext::Get()->Stop(); - DialogAttachments attachments(this); + DialogAttachments attachments(this, ass); attachments.ShowModal(); } @@ -955,7 +955,7 @@ void FrameMain::OnOpenTranslation(wxCommandEvent&) { VideoContext::Get()->Stop(); int start = SubsGrid->GetFirstSelRow(); if (start == -1) start = 0; - DialogTranslation Trans(this,AssFile::top,SubsGrid,start,true); + DialogTranslation Trans(this,ass,SubsGrid,start,true); Trans.ShowModal(); } @@ -968,7 +968,7 @@ void FrameMain::OnOpenSpellCheck (wxCommandEvent &) { /// @brief Open Fonts Collector void FrameMain::OnOpenFontsCollector (wxCommandEvent &) { VideoContext::Get()->Stop(); - DialogFontsCollector Collector(this); + DialogFontsCollector Collector(this, ass); Collector.ShowModal(); } @@ -1170,7 +1170,7 @@ void FrameMain::OnUndo(wxCommandEvent&) { VideoContext::Get()->Stop(); std::vector selected_lines = SubsGrid->GetAbsoluteSelection(); int active_line = SubsGrid->GetDialogueIndex(SubsGrid->GetActiveLine()); - AssFile::top->Undo(); + ass->Undo(); UpdateTitle(); SubsGrid->UpdateMaps(); SubsGrid->SetSelectionFromAbsolute(selected_lines); @@ -1182,7 +1182,7 @@ void FrameMain::OnRedo(wxCommandEvent&) { VideoContext::Get()->Stop(); std::vector selected_lines = SubsGrid->GetAbsoluteSelection(); int active_line = SubsGrid->GetDialogueIndex(SubsGrid->GetActiveLine()); - AssFile::top->Redo(); + ass->Redo(); UpdateTitle(); SubsGrid->UpdateMaps(); SubsGrid->SetSelectionFromAbsolute(selected_lines); @@ -1354,22 +1354,22 @@ void FrameMain::OnSelect (wxCommandEvent &) { /// @brief Sort subtitles by start time void FrameMain::OnSortStart (wxCommandEvent &) { - AssFile::top->Sort(); - AssFile::top->Commit(_("sort")); + ass->Sort(); + ass->Commit(_("sort")); SubsGrid->UpdateMaps(); SubsGrid->CommitChanges(); } /// @brief Sort subtitles by end time void FrameMain::OnSortEnd (wxCommandEvent &) { - AssFile::top->Sort(AssFile::CompEnd); - AssFile::top->Commit(_("sort")); + ass->Sort(AssFile::CompEnd); + ass->Commit(_("sort")); SubsGrid->UpdateMaps(); SubsGrid->CommitChanges(); } /// @brief Sort subtitles by style name void FrameMain::OnSortStyle (wxCommandEvent &) { - AssFile::top->Sort(AssFile::CompStyle); - AssFile::top->Commit(_("sort")); + ass->Sort(AssFile::CompStyle); + ass->Commit(_("sort")); SubsGrid->UpdateMaps(); SubsGrid->CommitChanges(); } @@ -1385,9 +1385,9 @@ void FrameMain::OnOpenStylingAssistant (wxCommandEvent &) { void FrameMain::OnAutoSave(wxTimerEvent &) { // Auto Save try { - if (AssFile::top->loaded) { + if (ass->loaded) { // Set path - wxFileName origfile(AssFile::top->filename); + wxFileName origfile(ass->filename); wxString path = lagi_wxString(OPT_GET("Path/Auto/Save")->GetString()); if (path.IsEmpty()) path = origfile.GetPath(); wxFileName dstpath(path); @@ -1406,7 +1406,7 @@ void FrameMain::OnAutoSave(wxTimerEvent &) { wxFileName temp = dstpath; temp.SetName(dstpath.GetName() + ".temp"); - AssFile::top->Save(temp.GetFullPath(),false,false); + ass->Save(temp.GetFullPath(),false,false); wxRenameFile(temp.GetFullPath(), dstpath.GetFullPath()); // Set status bar diff --git a/aegisub/src/subs_grid.cpp b/aegisub/src/subs_grid.cpp index 9ed1a0bd5..90aee14d2 100644 --- a/aegisub/src/subs_grid.cpp +++ b/aegisub/src/subs_grid.cpp @@ -100,12 +100,12 @@ END_EVENT_TABLE() /// @param style /// @param name /// -SubtitlesGrid::SubtitlesGrid(FrameMain* parentFr, wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) - : BaseGrid(parent,id,pos,size,style,name) +SubtitlesGrid::SubtitlesGrid(FrameMain* parentFr, wxWindow *parent, wxWindowID id, AssFile *subs, const wxPoint& pos, const wxSize& size, long style, const wxString& name) +: BaseGrid(parent,id,pos,size,style,name) +, ass(subs) { // Vars byFrame = false; - ass = NULL; editBox = NULL; parentFrame = parentFr; } @@ -789,7 +789,6 @@ void SubtitlesGrid::OnAudioClip(wxCommandEvent &event) { /// @param _ass /// void SubtitlesGrid::LoadDefault () { - ass = AssFile::top; ass->LoadDefault(); UpdateMaps(); @@ -815,8 +814,6 @@ void SubtitlesGrid::UpdateMaps() { line_iter_map.clear(); BaseGrid::ClearMaps(); - ass = AssFile::top; - BaseGrid::UpdateMaps(); for (entryIter it = ass->Line.begin(); it != ass->Line.end(); ++it) { @@ -1160,7 +1157,7 @@ void SubtitlesGrid::AdjoinLines(int n1,int n2,bool setStart) { } // Commit - AssFile::top->Commit(_("adjoin")); + ass->Commit(_("adjoin")); CommitChanges(); } diff --git a/aegisub/src/subs_grid.h b/aegisub/src/subs_grid.h index adc94c4de..11b994808 100644 --- a/aegisub/src/subs_grid.h +++ b/aegisub/src/subs_grid.h @@ -101,7 +101,7 @@ public: /// DOCME AssFile *ass; - SubtitlesGrid(FrameMain* parentFrame,wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxWANTS_CHARS, const wxString& name = wxPanelNameStr); + SubtitlesGrid(FrameMain* parentFrame,wxWindow *parent, wxWindowID id, AssFile *subs, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxWANTS_CHARS, const wxString& name = wxPanelNameStr); ~SubtitlesGrid(); void LoadDefault();