From ee6f0b9df7d8c9f99de48a9330d792b5aa7c328d Mon Sep 17 00:00:00 2001 From: twanvl Date: Tue, 15 May 2007 16:43:13 +0000 Subject: [PATCH] Delayed updating of scripts on keyword changes git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@383 0fc631ac-6414-0410-93d0-97cfa31319b6 --- src/data/set.cpp | 3 +++ src/data/set.hpp | 2 ++ src/gui/set/keywords_panel.cpp | 3 +++ src/script/script_manager.cpp | 10 +++++++++- src/script/script_manager.hpp | 12 +++++++++++- 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/data/set.cpp b/src/data/set.cpp index 788ccb00..f7549d7f 100644 --- a/src/data/set.cpp +++ b/src/data/set.cpp @@ -56,6 +56,9 @@ Context& Set::getContext(const CardP& card) { void Set::updateFor(const CardP& card) { script_manager->updateStyles(card); } +void Set::updateDelayed() { + script_manager->updateDelayed(); +} Context& Set::getContextForThumbnails() { assert(!wxThread::IsMain()); diff --git a/src/data/set.hpp b/src/data/set.hpp index 28d2fc05..bf6836fe 100644 --- a/src/data/set.hpp +++ b/src/data/set.hpp @@ -68,6 +68,8 @@ class Set : public Packaged { Context& getContext(const CardP& card); /// Update styles for a card void updateFor(const CardP& card); + /// Update scripts that were delayed + void updateDelayed(); /// A context for performing scripts /** Should only be used from the thumbnail thread! */ Context& getContextForThumbnails(); diff --git a/src/gui/set/keywords_panel.cpp b/src/gui/set/keywords_panel.cpp index 54fad800..0b199ca7 100644 --- a/src/gui/set/keywords_panel.cpp +++ b/src/gui/set/keywords_panel.cpp @@ -131,6 +131,9 @@ void KeywordsPanel::destroyUI(wxToolBar* tb, wxMenuBar* mb) { tb->DeleteTool(ID_KEYWORD_REMOVE); // Menus mb->Remove(2); + + // This is also a good moment to propagate changes + if (set) set->updateDelayed(); } void KeywordsPanel::onUpdateUI(wxUpdateUIEvent& ev) { diff --git a/src/script/script_manager.cpp b/src/script/script_manager.cpp index 4ef35325..3416bbd7 100644 --- a/src/script/script_manager.cpp +++ b/src/script/script_manager.cpp @@ -84,6 +84,7 @@ Context& SetScriptContext::getContext(const CardP& card) { SetScriptManager::SetScriptManager(Set& set) : SetScriptContext(set) + , delay(0) { // add as an action listener for the set, so we receive actions set.actions.addListener(this); @@ -143,7 +144,7 @@ void SetScriptManager::onAction(const Action& action, bool undone) { value->keyword.prepare(set.game->keyword_parameter_types, true); set.keyword_db.clear(); } - updateAllDependend(set.game->dependent_scripts_keywords); + delay |= DELAY_KEYWORDS; return; } // find the affected card @@ -199,6 +200,13 @@ void SetScriptManager::updateStyles(const CardP& card) { } } +void SetScriptManager::updateDelayed() { + if (delay & DELAY_KEYWORDS) { + updateAllDependend(set.game->dependent_scripts_keywords); + } + delay = 0; +} + void SetScriptManager::updateValue(Value& value, const CardP& card) { Age starting_age; // the start of the update process deque to_update; diff --git a/src/script/script_manager.hpp b/src/script/script_manager.hpp index 6c973b78..05426798 100644 --- a/src/script/script_manager.hpp +++ b/src/script/script_manager.hpp @@ -58,9 +58,12 @@ class SetScriptManager : public SetScriptContext, public ActionListener { SetScriptManager(Set& set); ~SetScriptManager(); - // Update all styles for a particular card + /// Update all styles for a particular card void updateStyles(const CardP& card); + /// Update expensive things that were previously delayed + void updateDelayed(); + /// Update all fields of all cards /** Update all set info fields * Doesn't update styles @@ -93,6 +96,13 @@ class SetScriptManager : public SetScriptContext, public ActionListener { /// Schedule all things in deps to be updated by adding them to to_update void alsoUpdate(deque& to_update, const vector& deps, const CardP& card); + /// Delayed update for (bitmask)... + enum Delay + { DELAY_KEYWORDS = 0x01 + , DELAY_CARDS = 0x02 + }; + int delay; + protected: /// Respond to actions by updating scripts void onAction(const Action&, bool undone);