From 14afce006eb382d86391891b6f89f9a67bfceb3e Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Thu, 7 Feb 2013 08:31:08 -0800 Subject: [PATCH] Remove AssStyleStorage's dependencies on other Aegisub classes --- aegisub/src/ass_style_storage.cpp | 34 +++++++++++++--------------- aegisub/src/ass_style_storage.h | 9 +++++--- aegisub/src/dialog_style_manager.cpp | 4 ++-- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/aegisub/src/ass_style_storage.cpp b/aegisub/src/ass_style_storage.cpp index a8f38db39..aeae259d8 100644 --- a/aegisub/src/ass_style_storage.cpp +++ b/aegisub/src/ass_style_storage.cpp @@ -37,41 +37,39 @@ #include "ass_style_storage.h" #include "ass_style.h" -#include "options.h" -#include "text_file_reader.h" -#include "text_file_writer.h" -#include "utils.h" #include -#include +#include +#include +#include #include -#include AssStyleStorage::~AssStyleStorage() { - delete_clear(style); + agi::util::delete_clear(style); } void AssStyleStorage::Save() const { - if (storage_name.empty()) return; + if (file.empty()) return; - agi::fs::CreateDirectory(config::path->Decode("?user/catalog/")); + agi::fs::CreateDirectory(file.parent_path()); + + agi::io::Save out(file); + out.Get() << "\xEF\xBB\xBF"; - TextFileWriter file(config::path->Decode("?user/catalog/" + storage_name + ".sty"), "UTF-8"); for (const AssStyle *cur : style) - file.WriteLineToFile(cur->GetEntryData()); + out.Get() << cur->GetEntryData() << std::endl; } -void AssStyleStorage::Load(std::string const& name) { - storage_name = name; +void AssStyleStorage::Load(agi::fs::path const& filename) { + file = filename; Clear(); try { - TextFileReader file(config::path->Decode("?user/catalog/" + name + ".sty"), "UTF-8"); - - while (file.HasMoreLines()) { + std::unique_ptr in(agi::io::Open(file)); + for (auto const& line : agi::line_iterator(*in)) { try { - style.push_back(new AssStyle(file.ReadLineFromFile())); + style.push_back(new AssStyle(line)); } catch(...) { /* just ignore invalid lines for now */ } @@ -83,7 +81,7 @@ void AssStyleStorage::Load(std::string const& name) { } void AssStyleStorage::Clear() { - delete_clear(style); + agi::util::delete_clear(style); } void AssStyleStorage::Delete(int idx) { diff --git a/aegisub/src/ass_style_storage.h b/aegisub/src/ass_style_storage.h index d6dab605e..25e237d3a 100644 --- a/aegisub/src/ass_style_storage.h +++ b/aegisub/src/ass_style_storage.h @@ -32,6 +32,9 @@ /// @ingroup style_editor /// +#include + +#include #include #include #include @@ -39,7 +42,7 @@ class AssStyle; class AssStyleStorage { - std::string storage_name; + agi::fs::path file; std::deque style; public: @@ -74,6 +77,6 @@ public: void Save() const; /// Load stored styles from a file - /// @param name Catalog name (note: not file name) - void Load(std::string const& name); + /// @param filename Catalog filename. Does not have to exist. + void Load(agi::fs::path const& filename); }; diff --git a/aegisub/src/dialog_style_manager.cpp b/aegisub/src/dialog_style_manager.cpp index 3d1639fdd..565fcf5b3 100644 --- a/aegisub/src/dialog_style_manager.cpp +++ b/aegisub/src/dialog_style_manager.cpp @@ -314,7 +314,7 @@ void DialogStyleManager::UpdateStorage() { void DialogStyleManager::OnChangeCatalog() { std::string catalog(from_wx(CatalogList->GetStringSelection())); c->ass->SetScriptInfo("Last Style Storage", catalog); - Store.Load(catalog); + Store.Load(config::path->Decode("?user/catalog/" + catalog + ".sty")); UpdateStorage(); } @@ -327,7 +327,7 @@ void DialogStyleManager::LoadCatalog() { // Create a default storage if there are none if (CatalogList->IsListEmpty()) { - Store.Load("Default"); + Store.Load(config::path->Decode("?user/catalog/Default.sty")); Store.push_back(new AssStyle); Store.Save(); CatalogList->Append("Default");