Cache results of GUIObject::isConditionTrue()
Signed-off-by: Vojtech Bocek <vbocek@gmail.com>
Change-Id: Ia50f7c365b2dc0a65ee046bb42972e3594264878
diff --git a/gui/object.cpp b/gui/object.cpp
index b6010d7..41cc822 100644
--- a/gui/object.cpp
+++ b/gui/object.cpp
@@ -29,6 +29,8 @@
GUIObject::GUIObject(xml_node<>* node)
{
+ mConditionsResult = true;
+
// Break out early, it's too hard to check if valid every step
if (!node) return;
@@ -78,13 +80,7 @@
bool GUIObject::isConditionTrue()
{
- std::vector<Condition>::iterator iter;
- for (iter = mConditions.begin(); iter != mConditions.end(); iter++)
- {
- if (!isConditionTrue(&(*iter)))
- return false;
- }
- return true;
+ return mConditionsResult;
}
bool GUIObject::isConditionTrue(Condition* condition)
@@ -159,12 +155,15 @@
return !mConditions.empty();
}
-void GUIObject::NotifyPageSet()
+int GUIObject::NotifyVarChange(const std::string& varName, const std::string& value)
{
+ mConditionsResult = true;
+
+ const bool varNameEmpty = varName.empty();
std::vector<Condition>::iterator iter;
- for (iter = mConditions.begin(); iter != mConditions.end(); iter++)
+ for (iter = mConditions.begin(); iter != mConditions.end(); ++iter)
{
- if (iter->mCompareOp == "modified")
+ if(varNameEmpty && iter->mCompareOp == "modified")
{
string val;
@@ -176,7 +175,14 @@
}
iter->mLastVal = val;
}
+
+ if(varNameEmpty || iter->mVar1 == varName || iter->mVar2 == varName)
+ iter->mLastResult = isConditionTrue(&(*iter));
+
+ if(!iter->mLastResult)
+ mConditionsResult = false;
}
+ return 0;
}
bool GUIObject::isMounted(string vol)