From 5d8e24c19afd88c95667e5824fda87558587465b Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Wed, 29 Nov 2023 17:59:56 +0100 Subject: [PATCH] Add temp variable support to Macro condition --- data/locale/en-US.ini | 5 ++ src/macro-core/macro-condition-macro.cpp | 94 ++++++++++++++++++------ src/macro-core/macro-condition-macro.hpp | 6 +- 3 files changed, 81 insertions(+), 24 deletions(-) diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index fb397ad1..582202f6 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -1484,6 +1484,11 @@ AdvSceneSwitcher.tempVar.midi.note="Note" AdvSceneSwitcher.tempVar.midi.value1="Value 1" AdvSceneSwitcher.tempVar.midi.value2="Value 2" +AdvSceneSwitcher.tempVar.macro.runCount="Run count" +AdvSceneSwitcher.tempVar.macro.runCount.description="The number of times a macro was executed." +AdvSceneSwitcher.tempVar.macro.matchedCount="Matched count" +AdvSceneSwitcher.tempVar.macro.matchedCount.description="The number of macros of which the condition state was true." + AdvSceneSwitcher.selectScene="--select scene--" AdvSceneSwitcher.selectPreviousScene="Previous Scene" AdvSceneSwitcher.selectCurrentScene="Current Scene" diff --git a/src/macro-core/macro-condition-macro.cpp b/src/macro-core/macro-condition-macro.cpp index 914b1b6c..8c161a0a 100644 --- a/src/macro-core/macro-condition-macro.cpp +++ b/src/macro-core/macro-condition-macro.cpp @@ -77,6 +77,8 @@ bool MacroConditionMacro::CheckMultiStateCondition() } } + SetTempVarValue("matchedCount", std::to_string(matchedCount)); + switch (_multiSateCondition) { case MacroConditionMacro::MultiStateCondition::BELOW: return matchedCount < _multiSateCount; @@ -126,6 +128,8 @@ bool MacroConditionMacro::CheckCountCondition() return false; } + SetTempVarValue("runCount", std::to_string(macro->RunCount())); + switch (_counterCondition) { case CounterCondition::BELOW: return macro->RunCount() < _count; @@ -207,7 +211,7 @@ bool MacroConditionMacro::Load(obs_data_t *obj) bool MacroConditionMacro::PostLoad() { - return MacroRefCondition::PostLoad() && + return MacroCondition::PostLoad() && MacroRefCondition::PostLoad() && MultiMacroRefCondtition::PostLoad(); } @@ -216,6 +220,45 @@ std::string MacroConditionMacro::GetShortDesc() const return _macro.Name(); } +void MacroConditionMacro::SetType(Type type) +{ + _type = type; + SetupTempVars(); +} + +void MacroConditionMacro::SetupTempVars() +{ + MacroCondition::SetupTempVars(); + switch (_type) { + case Type::COUNT: + AddTempvar( + "runCount", + obs_module_text( + "AdvSceneSwitcher.tempVar.macro.runCount"), + obs_module_text( + "AdvSceneSwitcher.tempVar.macro.runCount.description")); + break; + case Type::STATE: + break; + case Type::MULTI_STATE: + AddTempvar( + "matchedCount", + obs_module_text( + "AdvSceneSwitcher.tempVar.macro.matchedCount"), + obs_module_text( + "AdvSceneSwitcher.tempVar.macro.matchedCount.description")); + break; + case Type::ACTION_DISABLED: + break; + case Type::ACTION_ENABLED: + break; + case Type::PAUSED: + break; + default: + break; + } +} + static inline void populateTypeSelection(QComboBox *list) { for (auto entry : macroConditionTypes) { @@ -352,7 +395,7 @@ void MacroConditionMacroEdit::SetupWidgets() SetWidgetVisibility(); ClearLayouts(); - switch (_entryData->_type) { + switch (_entryData->GetType()) { case MacroConditionMacro::Type::COUNT: SetupCountWidgets(); break; @@ -432,35 +475,39 @@ void MacroConditionMacroEdit::SetupPauseWidgets() void MacroConditionMacroEdit::SetWidgetVisibility() { _macros->setVisible( - _entryData->_type == MacroConditionMacro::Type::COUNT || - _entryData->_type == MacroConditionMacro::Type::STATE || - _entryData->_type == + _entryData->GetType() == MacroConditionMacro::Type::COUNT || + _entryData->GetType() == MacroConditionMacro::Type::STATE || + _entryData->GetType() == MacroConditionMacro::Type::ACTION_DISABLED || - _entryData->_type == + _entryData->GetType() == MacroConditionMacro::Type::ACTION_ENABLED || - _entryData->_type == MacroConditionMacro::Type::PAUSED); - _counterConditions->setVisible(_entryData->_type == + _entryData->GetType() == MacroConditionMacro::Type::PAUSED); + _counterConditions->setVisible(_entryData->GetType() == MacroConditionMacro::Type::COUNT); - _count->setVisible(_entryData->_type == + _count->setVisible(_entryData->GetType() == MacroConditionMacro::Type::COUNT); - _currentCount->setVisible(_entryData->_type == + _currentCount->setVisible(_entryData->GetType() == MacroConditionMacro::Type::COUNT); - _resetCount->setVisible(_entryData->_type == + _resetCount->setVisible(_entryData->GetType() == MacroConditionMacro::Type::COUNT); - _macroList->setVisible(_entryData->_type == + _macroList->setVisible(_entryData->GetType() == MacroConditionMacro::Type::MULTI_STATE); _multiStateConditions->setVisible( - _entryData->_type == MacroConditionMacro::Type::MULTI_STATE); - _multiStateCount->setVisible(_entryData->_type == + _entryData->GetType() == + MacroConditionMacro::Type::MULTI_STATE); + _multiStateCount->setVisible(_entryData->GetType() == MacroConditionMacro::Type::MULTI_STATE); _actionIndex->setVisible( - _entryData->_type == + _entryData->GetType() == MacroConditionMacro::Type::ACTION_DISABLED || - _entryData->_type == MacroConditionMacro::Type::ACTION_ENABLED); - if (_entryData->_type == MacroConditionMacro::Type::MULTI_STATE || - _entryData->_type == MacroConditionMacro::Type::ACTION_DISABLED || - _entryData->_type == MacroConditionMacro::Type::ACTION_ENABLED || - _entryData->_type == MacroConditionMacro::Type::PAUSED) { + _entryData->GetType() == + MacroConditionMacro::Type::ACTION_ENABLED); + if (_entryData->GetType() == MacroConditionMacro::Type::MULTI_STATE || + _entryData->GetType() == + MacroConditionMacro::Type::ACTION_DISABLED || + _entryData->GetType() == + MacroConditionMacro::Type::ACTION_ENABLED || + _entryData->GetType() == MacroConditionMacro::Type::PAUSED) { _pausedWarning->hide(); } @@ -476,7 +523,7 @@ void MacroConditionMacroEdit::UpdateEntryData() SetupWidgets(); _macros->SetCurrentMacro(_entryData->_macro); - _types->setCurrentIndex(static_cast(_entryData->_type)); + _types->setCurrentIndex(static_cast(_entryData->GetType())); _counterConditions->setCurrentIndex( static_cast(_entryData->_counterCondition)); _count->SetValue(_entryData->_count); @@ -548,7 +595,7 @@ void MacroConditionMacroEdit::TypeChanged(int type) } auto lock = LockContext(); - _entryData->_type = static_cast(type); + _entryData->SetType(static_cast(type)); SetupWidgets(); } @@ -584,7 +631,8 @@ void MacroConditionMacroEdit::UpdatePaused() auto macro = _entryData->_macro.GetMacro(); _pausedWarning->setVisible( _entryData && - _entryData->_type != MacroConditionMacro::Type::MULTI_STATE && + _entryData->GetType() != + MacroConditionMacro::Type::MULTI_STATE && macro && macro->Paused()); adjustSize(); updateGeometry(); diff --git a/src/macro-core/macro-condition-macro.hpp b/src/macro-core/macro-condition-macro.hpp index 62a453ba..15d3b4f7 100644 --- a/src/macro-core/macro-condition-macro.hpp +++ b/src/macro-core/macro-condition-macro.hpp @@ -41,7 +41,8 @@ public: ACTION_ENABLED, PAUSED, }; - Type _type = Type::STATE; + void SetType(Type); + Type GetType() const { return _type; } enum class CounterCondition { BELOW, @@ -67,6 +68,9 @@ private: bool CheckActionStateCondition(); bool CheckPauseState(); + void SetupTempVars(); + + Type _type = Type::STATE; static bool _registered; static const std::string id; };