From 38d922c57ad0fc88f4082462ee35a550199b29ce Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Fri, 4 Jun 2010 03:08:04 +0000 Subject: [PATCH] Remove time-consuming reparsing of the line in VisualTool::SetOverride Originally committed to SVN as r4430. --- aegisub/src/ass_dialogue.cpp | 2 +- aegisub/src/ass_dialogue.h | 1 + aegisub/src/ass_override.cpp | 5 +++++ aegisub/src/visual_tool.cpp | 11 +++++------ 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/aegisub/src/ass_dialogue.cpp b/aegisub/src/ass_dialogue.cpp index 31cbac83b..585f0a8c3 100644 --- a/aegisub/src/ass_dialogue.cpp +++ b/aegisub/src/ass_dialogue.cpp @@ -668,7 +668,7 @@ void AssDialogue::ConvertTagsToSRT () { ClearBlocks(); } -/// @brief Updates text from tags +/// @brief Updates text from tags void AssDialogue::UpdateText () { using std::vector; Text = _T(""); diff --git a/aegisub/src/ass_dialogue.h b/aegisub/src/ass_dialogue.h index e1eb27d32..9361880f4 100644 --- a/aegisub/src/ass_dialogue.h +++ b/aegisub/src/ass_dialogue.h @@ -177,6 +177,7 @@ public: ASS_BlockType GetType() { return BLOCK_OVERRIDE; } wxString GetText(); void ParseTags(); // Parses tags + void AddTag(wxString const& tag); /// Type of callback function passed to ProcessParameters typedef void (*ProcessParametersCallback)(wxString,int,AssOverrideParameter*,void *); diff --git a/aegisub/src/ass_override.cpp b/aegisub/src/ass_override.cpp index c887ab04b..62370f1f8 100644 --- a/aegisub/src/ass_override.cpp +++ b/aegisub/src/ass_override.cpp @@ -131,6 +131,11 @@ void AssDialogueBlockOverride::ParseTags () { curTag = _T("\\"); } } +void AssDialogueBlockOverride::AddTag(wxString const& tag) { + AssOverrideTag *newTag = new AssOverrideTag; + newTag->SetText(tag); + Tags.push_back(newTag); +} /// @brief Get Text representation /// @return diff --git a/aegisub/src/visual_tool.cpp b/aegisub/src/visual_tool.cpp index 555caa28a..4baa5ddef 100644 --- a/aegisub/src/visual_tool.cpp +++ b/aegisub/src/visual_tool.cpp @@ -776,23 +776,22 @@ void VisualTool::SetOverride(AssDialogue* line, wxString tag, wxStr // Get current block as plain or override AssDialogueBlockPlain *plain = dynamic_cast(block); AssDialogueBlockOverride *ovr = dynamic_cast(block); + assert(dynamic_cast(block) == NULL); if (plain) { line->Text = L"{" + insert + L"}" + line->Text; } else if (ovr) { - ovr->text += insert; - ovr->ParseTags(); - // Remove old of same - for (size_t i = 0; i < ovr->Tags.size() - 1; i++) { - wxString name = ovr->Tags.at(i)->Name; + for (size_t i = 0; i < ovr->Tags.size(); i++) { + wxString name = ovr->Tags[i]->Name; if (tag == name || removeTag == name) { - delete ovr->Tags.at(i); + delete ovr->Tags[i]; ovr->Tags.erase(ovr->Tags.begin() + i); i--; } } + ovr->AddTag(insert); line->UpdateText(); }