Commit 819ecb33 authored by twanvl's avatar twanvl

Delayed updating of scripts on keyword changes

parent a80dc093
...@@ -56,6 +56,9 @@ Context& Set::getContext(const CardP& card) { ...@@ -56,6 +56,9 @@ Context& Set::getContext(const CardP& card) {
void Set::updateFor(const CardP& card) { void Set::updateFor(const CardP& card) {
script_manager->updateStyles(card); script_manager->updateStyles(card);
} }
void Set::updateDelayed() {
script_manager->updateDelayed();
}
Context& Set::getContextForThumbnails() { Context& Set::getContextForThumbnails() {
assert(!wxThread::IsMain()); assert(!wxThread::IsMain());
......
...@@ -68,6 +68,8 @@ class Set : public Packaged { ...@@ -68,6 +68,8 @@ class Set : public Packaged {
Context& getContext(const CardP& card); Context& getContext(const CardP& card);
/// Update styles for a card /// Update styles for a card
void updateFor(const CardP& card); void updateFor(const CardP& card);
/// Update scripts that were delayed
void updateDelayed();
/// A context for performing scripts /// A context for performing scripts
/** Should only be used from the thumbnail thread! */ /** Should only be used from the thumbnail thread! */
Context& getContextForThumbnails(); Context& getContextForThumbnails();
......
...@@ -131,6 +131,9 @@ void KeywordsPanel::destroyUI(wxToolBar* tb, wxMenuBar* mb) { ...@@ -131,6 +131,9 @@ void KeywordsPanel::destroyUI(wxToolBar* tb, wxMenuBar* mb) {
tb->DeleteTool(ID_KEYWORD_REMOVE); tb->DeleteTool(ID_KEYWORD_REMOVE);
// Menus // Menus
mb->Remove(2); mb->Remove(2);
// This is also a good moment to propagate changes
if (set) set->updateDelayed();
} }
void KeywordsPanel::onUpdateUI(wxUpdateUIEvent& ev) { void KeywordsPanel::onUpdateUI(wxUpdateUIEvent& ev) {
......
...@@ -84,6 +84,7 @@ Context& SetScriptContext::getContext(const CardP& card) { ...@@ -84,6 +84,7 @@ Context& SetScriptContext::getContext(const CardP& card) {
SetScriptManager::SetScriptManager(Set& set) SetScriptManager::SetScriptManager(Set& set)
: SetScriptContext(set) : SetScriptContext(set)
, delay(0)
{ {
// add as an action listener for the set, so we receive actions // add as an action listener for the set, so we receive actions
set.actions.addListener(this); set.actions.addListener(this);
...@@ -143,7 +144,7 @@ void SetScriptManager::onAction(const Action& action, bool undone) { ...@@ -143,7 +144,7 @@ void SetScriptManager::onAction(const Action& action, bool undone) {
value->keyword.prepare(set.game->keyword_parameter_types, true); value->keyword.prepare(set.game->keyword_parameter_types, true);
set.keyword_db.clear(); set.keyword_db.clear();
} }
updateAllDependend(set.game->dependent_scripts_keywords); delay |= DELAY_KEYWORDS;
return; return;
} }
// find the affected card // find the affected card
...@@ -199,6 +200,13 @@ void SetScriptManager::updateStyles(const CardP& 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) { void SetScriptManager::updateValue(Value& value, const CardP& card) {
Age starting_age; // the start of the update process Age starting_age; // the start of the update process
deque<ToUpdate> to_update; deque<ToUpdate> to_update;
......
...@@ -58,9 +58,12 @@ class SetScriptManager : public SetScriptContext, public ActionListener { ...@@ -58,9 +58,12 @@ class SetScriptManager : public SetScriptContext, public ActionListener {
SetScriptManager(Set& set); SetScriptManager(Set& set);
~SetScriptManager(); ~SetScriptManager();
// Update all styles for a particular card /// Update all styles for a particular card
void updateStyles(const CardP& card); void updateStyles(const CardP& card);
/// Update expensive things that were previously delayed
void updateDelayed();
/// Update all fields of all cards /// Update all fields of all cards
/** Update all set info fields /** Update all set info fields
* Doesn't update styles * Doesn't update styles
...@@ -93,6 +96,13 @@ class SetScriptManager : public SetScriptContext, public ActionListener { ...@@ -93,6 +96,13 @@ class SetScriptManager : public SetScriptContext, public ActionListener {
/// Schedule all things in deps to be updated by adding them to to_update /// Schedule all things in deps to be updated by adding them to to_update
void alsoUpdate(deque<ToUpdate>& to_update, const vector<Dependency>& deps, const CardP& card); void alsoUpdate(deque<ToUpdate>& to_update, const vector<Dependency>& deps, const CardP& card);
/// Delayed update for (bitmask)...
enum Delay
{ DELAY_KEYWORDS = 0x01
, DELAY_CARDS = 0x02
};
int delay;
protected: protected:
/// Respond to actions by updating scripts /// Respond to actions by updating scripts
void onAction(const Action&, bool undone); void onAction(const Action&, bool undone);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment