From 3e1e8d01b6351cceead67f9cf1dfcc2db2f96a7e Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Mon, 3 Oct 2022 11:29:43 +0200 Subject: [PATCH] Add option to check for value change --- data/locale/en-US.ini | 1 + src/macro-core/macro-condition-variable.cpp | 18 ++++++++++++++++++ src/macro-core/macro-condition-variable.hpp | 4 ++++ 3 files changed, 23 insertions(+) diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index d2cf2eff..572066df 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -350,6 +350,7 @@ AdvSceneSwitcher.condition.variable.type.empty="is empty" AdvSceneSwitcher.condition.variable.type.number="is a number" AdvSceneSwitcher.condition.variable.type.lessThan="is less than" AdvSceneSwitcher.condition.variable.type.greaterThan="is greater than" +AdvSceneSwitcher.condition.variable.type.valueChanged="value changed" AdvSceneSwitcher.condition.variable.regex="Use regular expressions" AdvSceneSwitcher.condition.variable.entry="{{variables}}{{conditions}}{{strValue}}{{numValue}}" diff --git a/src/macro-core/macro-condition-variable.cpp b/src/macro-core/macro-condition-variable.cpp index 38feef4d..3076989e 100644 --- a/src/macro-core/macro-condition-variable.cpp +++ b/src/macro-core/macro-condition-variable.cpp @@ -24,6 +24,8 @@ const static std::map "AdvSceneSwitcher.condition.variable.type.lessThan"}, {MacroConditionVariable::Type::GREATER_THAN, "AdvSceneSwitcher.condition.variable.type.greaterThan"}, + {MacroConditionVariable::Type::VALUE_CHANGED, + "AdvSceneSwitcher.condition.variable.type.valueChanged"}, }; static bool isNumber(const Variable &var) @@ -59,6 +61,15 @@ bool MacroConditionVariable::Compare(const Variable &var) const } } +bool MacroConditionVariable::ValueChanged(const Variable &var) +{ + bool changed = var.Value() != _lastValue; + if (changed) { + _lastValue = var.Value(); + } + return changed; +} + bool MacroConditionVariable::CheckCondition() { auto var = GetVariableByName(_variableName); @@ -77,6 +88,8 @@ bool MacroConditionVariable::CheckCondition() return compareNumber(*var, _numValue, true); case MacroConditionVariable::Type::GREATER_THAN: return compareNumber(*var, _numValue, false); + case MacroConditionVariable::Type::VALUE_CHANGED: + return ValueChanged(*var); } return false; @@ -258,6 +271,11 @@ void MacroConditionVariableEdit::SetWidgetVisibility() _strValue->hide(); _numValue->show(); break; + case MacroConditionVariable::Type::VALUE_CHANGED: + _regex->hide(); + _strValue->hide(); + _numValue->hide(); + break; } adjustSize(); diff --git a/src/macro-core/macro-condition-variable.hpp b/src/macro-core/macro-condition-variable.hpp index c85ce893..3ec4f41f 100644 --- a/src/macro-core/macro-condition-variable.hpp +++ b/src/macro-core/macro-condition-variable.hpp @@ -26,6 +26,7 @@ public: IS_NUMBER, LESS_THAN, GREATER_THAN, + VALUE_CHANGED, //... }; @@ -37,6 +38,9 @@ public: private: bool Compare(const Variable &) const; + bool ValueChanged(const Variable &); + + std::string _lastValue = ""; static bool _registered; static const std::string id;