diff --git a/aegisub/src/ass_export_filter.h b/aegisub/src/ass_export_filter.h index 01803e9b0..093bd6bc5 100644 --- a/aegisub/src/ass_export_filter.h +++ b/aegisub/src/ass_export_filter.h @@ -46,8 +46,8 @@ class AssFile; class AssExportFilter; -class DialogExport; -class AssExporter; + +namespace agi { struct Context; } /// DOCME typedef std::list FilterList; @@ -111,9 +111,12 @@ public: virtual void ProcessSubs(AssFile *subs, wxWindow *parent_window=0)=0; /// Draw setup controls - virtual wxWindow *GetConfigDialogWindow(wxWindow *parent) { return 0; } + /// @param parent Parent window to add controls to + /// @param c Project context + virtual wxWindow *GetConfigDialogWindow(wxWindow *parent, agi::Context *c) { return 0; } /// Load settings to use from the configuration dialog /// @param is_default If true use default settings instead - virtual void LoadSettings(bool is_default) { } + /// @param c Project context + virtual void LoadSettings(bool is_default, agi::Context *c) { } }; diff --git a/aegisub/src/ass_exporter.cpp b/aegisub/src/ass_exporter.cpp index 5e6ebb2b1..4d42a9632 100644 --- a/aegisub/src/ass_exporter.cpp +++ b/aegisub/src/ass_exporter.cpp @@ -39,6 +39,7 @@ #include "ass_export_filter.h" #include "ass_exporter.h" #include "ass_file.h" +#include "include/aegisub/context.h" static inline std::list::const_iterator filter_list_begin() { return AssExportFilterChain::GetFilterList()->begin(); @@ -48,8 +49,8 @@ static inline std::list::const_iterator filter_list_end() { return AssExportFilterChain::GetFilterList()->end(); } -AssExporter::AssExporter(AssFile *subs) -: original_subs(subs) +AssExporter::AssExporter(agi::Context *c) +: c(c) , is_default(true) { } @@ -63,7 +64,7 @@ void AssExporter::DrawSettings(wxWindow *parent, wxSizer *target_sizer) { // Make sure to construct static box sizer first, so it won't overlap // the controls on wxMac. wxSizer *box = new wxStaticBoxSizer(wxVERTICAL, parent, (*cur)->GetName()); - wxWindow *window = (*cur)->GetConfigDialogWindow(parent); + wxWindow *window = (*cur)->GetConfigDialogWindow(parent, c); if (window) { box->Add(window, 0, wxEXPAND, 0); target_sizer->Add(box, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 5); @@ -99,10 +100,10 @@ wxArrayString AssExporter::GetAllFilterNames() { } AssFile *AssExporter::ExportTransform(wxWindow *export_dialog, bool copy) { - AssFile *subs = copy ? new AssFile(*original_subs) : original_subs; + AssFile *subs = copy ? new AssFile(*c->ass) : c->ass; for (filter_iterator cur = filters.begin(); cur != filters.end(); cur++) { - (*cur)->LoadSettings(is_default); + (*cur)->LoadSettings(is_default, c); (*cur)->ProcessSubs(subs, export_dialog); } diff --git a/aegisub/src/ass_exporter.h b/aegisub/src/ass_exporter.h index 5d208d8c9..938f8ea56 100644 --- a/aegisub/src/ass_exporter.h +++ b/aegisub/src/ass_exporter.h @@ -45,6 +45,7 @@ class AssExportFilter; class AssFile; +namespace agi { struct Context; } typedef std::list FilterList; @@ -62,15 +63,15 @@ class AssExporter { /// Filters which will be applied to the subtitles FilterList filters; - /// Input subtitle file - AssFile *original_subs; + /// Input context + agi::Context *c; /// Have the config windows been created, or should filters simply use /// their default settings bool is_default; public: - AssExporter(AssFile *subs); + AssExporter(agi::Context *c); ~AssExporter(); /// Get the names of all registered export filters diff --git a/aegisub/src/ass_file.cpp b/aegisub/src/ass_file.cpp index 172956a32..f0cdab566 100644 --- a/aegisub/src/ass_file.cpp +++ b/aegisub/src/ass_file.cpp @@ -47,7 +47,6 @@ #include "ass_attachment.h" #include "ass_dialogue.h" -#include "ass_exporter.h" #include "ass_file.h" #include "ass_override.h" #include "ass_style.h" @@ -224,12 +223,6 @@ void AssFile::SaveMemory(std::vector &dst,const wxString encoding) { } } -void AssFile::Export(wxString _filename) { - AssExporter exporter(this); - exporter.AddAutoFilters(); - exporter.Export(_filename,"UTF-8"); -} - bool AssFile::CanSave() { // ASS format? wxString ext = filename.Lower().Right(4); diff --git a/aegisub/src/ass_file.h b/aegisub/src/ass_file.h index 9c50bd289..051191cad 100644 --- a/aegisub/src/ass_file.h +++ b/aegisub/src/ass_file.h @@ -132,9 +132,6 @@ public: /// @brief Save to a memory buffer. Used for subtitle providers which support it /// @param[out] dst Destination vector void SaveMemory(std::vector &dst,const wxString encoding=""); - /// @brief Saves exported copy, with effects applied - /// @param file Path to save to; file name is never set to this - void Export(wxString file); /// Add file name to the MRU list void AddToRecent(wxString file); /// Can the file be saved in its current format? diff --git a/aegisub/src/dialog_export.cpp b/aegisub/src/dialog_export.cpp index 96e73d5b3..f7ee22cf6 100644 --- a/aegisub/src/dialog_export.cpp +++ b/aegisub/src/dialog_export.cpp @@ -55,7 +55,7 @@ DialogExport::DialogExport(agi::Context *c) : wxDialog(c->parent, -1, _("Export"), wxDefaultPosition, wxSize(200, 100), wxCAPTION | wxCLOSE_BOX, "Export") , c(c) -, exporter(new AssExporter(c->ass)) +, exporter(new AssExporter(c)) { wxArrayString filters = exporter->GetAllFilterNames(); filter_list = new wxCheckListBox(this, -1, wxDefaultPosition, wxSize(200, 100), filters); diff --git a/aegisub/src/export_framerate.cpp b/aegisub/src/export_framerate.cpp index de356b775..08bdb5a24 100644 --- a/aegisub/src/export_framerate.cpp +++ b/aegisub/src/export_framerate.cpp @@ -52,11 +52,13 @@ #include "ass_file.h" #include "ass_override.h" #include "export_framerate.h" +#include "include/aegisub/context.h" #include "utils.h" #include "video_context.h" AssTransformFramerateFilter::AssTransformFramerateFilter() : AssExportFilter(_("Transform Framerate"), _("Transform subtitle times, including those in override tags, from an input framerate to an output framerate.\n\nThis is useful for converting regular time subtitles to VFRaC time subtitles for hardsubbing.\nIt can also be used to convert subtitles to a different speed video, such as NTSC to PAL speedup."), 1000) +, c(0) , Input(0) , Output(0) { @@ -66,10 +68,10 @@ void AssTransformFramerateFilter::ProcessSubs(AssFile *subs, wxWindow *) { TransformFrameRate(subs); } -wxWindow *AssTransformFramerateFilter::GetConfigDialogWindow(wxWindow *parent) { +wxWindow *AssTransformFramerateFilter::GetConfigDialogWindow(wxWindow *parent, agi::Context *c) { wxWindow *base = new wxPanel(parent, -1); - LoadSettings(true); + LoadSettings(true, c); // Input sizer wxSizer *InputSizer = new wxBoxSizer(wxHORIZONTAL); @@ -130,13 +132,15 @@ wxWindow *AssTransformFramerateFilter::GetConfigDialogWindow(wxWindow *parent) { } void AssTransformFramerateFilter::OnFpsFromVideo(wxCommandEvent &) { - InputFramerate->SetValue(wxString::Format("%g", VideoContext::Get()->FPS().FPS())); + InputFramerate->SetValue(wxString::Format("%g", c->videoController->FPS().FPS())); } -void AssTransformFramerateFilter::LoadSettings(bool IsDefault) { - if (IsDefault) { - Input = &VideoContext::Get()->VFR_Input; - Output = &VideoContext::Get()->VFR_Output; +void AssTransformFramerateFilter::LoadSettings(bool is_default, agi::Context *c) { + this->c = c; + + if (is_default) { + Input = &c->videoController->VFR_Input; + Output = &c->videoController->VFR_Output; } else { double temp; @@ -148,7 +152,7 @@ void AssTransformFramerateFilter::LoadSettings(bool IsDefault) { t2 = temp; Output = &t2; } - else Output = &VideoContext::Get()->VFR_Output; + else Output = &c->videoController->VFR_Output; if (Reverse->IsChecked()) { std::swap(Input, Output); diff --git a/aegisub/src/export_framerate.h b/aegisub/src/export_framerate.h index d8b7fec5c..23016c93b 100644 --- a/aegisub/src/export_framerate.h +++ b/aegisub/src/export_framerate.h @@ -47,6 +47,7 @@ class wxTextCtrl; /// @class AssTransformFramerateFilter /// @brief Transform subtitle times, including those in override tags, from an input framerate to an output framerate class AssTransformFramerateFilter : public AssExportFilter { + agi::Context *c; AssDialogue *line; int newStart; int newEnd; @@ -92,6 +93,6 @@ public: /// Constructor AssTransformFramerateFilter(); void ProcessSubs(AssFile *subs, wxWindow *); - wxWindow *GetConfigDialogWindow(wxWindow *parent); - void LoadSettings(bool IsDefault); + wxWindow *GetConfigDialogWindow(wxWindow *parent, agi::Context *c); + void LoadSettings(bool is_default, agi::Context *c); }; diff --git a/aegisub/src/threaded_frame_source.cpp b/aegisub/src/threaded_frame_source.cpp index 78ba6833b..2f4454d25 100644 --- a/aegisub/src/threaded_frame_source.cpp +++ b/aegisub/src/threaded_frame_source.cpp @@ -45,6 +45,7 @@ #include "ass_exporter.h" #include "ass_file.h" #include "compat.h" +#include "include/aegisub/context.h" #include "include/aegisub/subtitles_provider.h" #include "video_provider_manager.h" @@ -86,7 +87,13 @@ std::tr1::shared_ptr ThreadedFrameSource::ProcFrame(int frameNum // other lines will probably not be viewed before the file changes // again), and if it's a different frame, export the entire file. if (singleFrame == -1) { - AssExporter exporter(subs.get()); + // This will crash if any of the export filters try to use + // anything but the subtitles, but that wouldn't be safe to + // do anyway + agi::Context c = { 0 }; + c.ass = subs.get(); + + AssExporter exporter(&c); exporter.AddAutoFilters(); exporter.ExportTransform();