From 42773790e4a12d25fd8ca8bff24a236146f26f4a Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sat, 7 Jan 2023 02:04:21 +0100 Subject: [PATCH] Enable getting varaible values from conditions and actions --- src/macro-core/macro-action.cpp | 15 +++++++++++++ src/macro-core/macro-action.hpp | 6 ++--- src/macro-core/macro-condition.cpp | 16 +++++++++++++ src/macro-core/macro-condition.hpp | 6 ++--- src/macro-core/macro-segment.cpp | 36 ++++++++++++++++++++++++++++++ src/macro-core/macro-segment.hpp | 23 ++++++++++++++----- 6 files changed, 91 insertions(+), 11 deletions(-) diff --git a/src/macro-core/macro-action.cpp b/src/macro-core/macro-action.cpp index 41ebcf9d..2ba66dfc 100644 --- a/src/macro-core/macro-action.cpp +++ b/src/macro-core/macro-action.cpp @@ -1,6 +1,11 @@ #include "macro-action.hpp" #include "advanced-scene-switcher.hpp" +MacroAction::MacroAction(Macro *m, bool supportsVariableValue) + : MacroSegment(m, supportsVariableValue) +{ +} + bool MacroAction::Save(obs_data_t *obj) const { MacroSegment::Save(obj); @@ -19,11 +24,21 @@ void MacroAction::LogAction() const vblog(LOG_INFO, "performed action %s", GetId().c_str()); } +MacroRefAction::MacroRefAction(Macro *m, bool supportsVariableValue) + : MacroAction(m, supportsVariableValue) +{ +} + void MacroRefAction::ResolveMacroRef() { _macro.UpdateRef(); } +MultiMacroRefAction::MultiMacroRefAction(Macro *m, bool supportsVariableValue) + : MacroAction(m, supportsVariableValue) +{ +} + void MultiMacroRefAction::ResolveMacroRef() { for (auto &m : _macros) { diff --git a/src/macro-core/macro-action.hpp b/src/macro-core/macro-action.hpp index 1af7a3a7..f1dcd2eb 100644 --- a/src/macro-core/macro-action.hpp +++ b/src/macro-core/macro-action.hpp @@ -4,7 +4,7 @@ class MacroAction : public MacroSegment { public: - MacroAction(Macro *m) : MacroSegment(m) {} + MacroAction(Macro *m, bool supportsVariableValue = false); virtual ~MacroAction() = default; virtual bool PerformAction() = 0; virtual bool Save(obs_data_t *obj) const = 0; @@ -14,14 +14,14 @@ public: class MacroRefAction : virtual public MacroAction { public: - MacroRefAction(Macro *m) : MacroAction(m) {} + MacroRefAction(Macro *m, bool supportsVariableValue = false); void ResolveMacroRef(); MacroRef _macro; }; class MultiMacroRefAction : virtual public MacroAction { public: - MultiMacroRefAction(Macro *m) : MacroAction(m) {} + MultiMacroRefAction(Macro *m, bool supportsVariableValue = false); void ResolveMacroRef(); std::vector _macros; }; diff --git a/src/macro-core/macro-condition.cpp b/src/macro-core/macro-condition.cpp index a9aa6d7a..43b0a252 100644 --- a/src/macro-core/macro-condition.cpp +++ b/src/macro-core/macro-condition.cpp @@ -68,6 +68,11 @@ void DurationModifier::Reset() _dur.Reset(); } +MacroCondition::MacroCondition(Macro *m, bool supportsVariableValue) + : MacroSegment(m, supportsVariableValue) +{ +} + bool MacroCondition::Save(obs_data_t *obj) const { MacroSegment::Save(obj); @@ -146,11 +151,22 @@ void MacroCondition::SetDuration(double seconds) _duration.SetValue(seconds); } +MacroRefCondition::MacroRefCondition(Macro *m, bool supportsVariableValue) + : MacroCondition(m, supportsVariableValue) +{ +} + void MacroRefCondition::ResolveMacroRef() { _macro.UpdateRef(); } +MultiMacroRefCondtition::MultiMacroRefCondtition(Macro *m, + bool supportsVariableValue) + : MacroCondition(m, supportsVariableValue) +{ +} + void MultiMacroRefCondtition::ResolveMacroRef() { for (auto &m : _macros) { diff --git a/src/macro-core/macro-condition.hpp b/src/macro-core/macro-condition.hpp index 5698fc48..aa10e3d5 100644 --- a/src/macro-core/macro-condition.hpp +++ b/src/macro-core/macro-condition.hpp @@ -61,7 +61,7 @@ private: class MacroCondition : public MacroSegment { public: - MacroCondition(Macro *m) : MacroSegment(m) {} + MacroCondition(Macro *m, bool supportsVariableValue = false); virtual ~MacroCondition() = default; virtual bool CheckCondition() = 0; virtual bool Save(obs_data_t *obj) const = 0; @@ -83,14 +83,14 @@ private: class MacroRefCondition : virtual public MacroCondition { public: - MacroRefCondition(Macro *m) : MacroCondition(m) {} + MacroRefCondition(Macro *m, bool supportsVariableValue = false); void ResolveMacroRef(); MacroRef _macro; }; class MultiMacroRefCondtition : virtual public MacroCondition { public: - MultiMacroRefCondtition(Macro *m) : MacroCondition(m) {} + MultiMacroRefCondtition(Macro *m, bool supportsVariableValue = false); void ResolveMacroRef(); std::vector _macros; }; diff --git a/src/macro-core/macro-segment.cpp b/src/macro-core/macro-segment.cpp index 1ff6e92c..bf0e0b0e 100644 --- a/src/macro-core/macro-segment.cpp +++ b/src/macro-core/macro-segment.cpp @@ -8,6 +8,11 @@ #include #include +MacroSegment::MacroSegment(Macro *m, bool supportsVariableValue) + : _supportsVariableValue(supportsVariableValue), _macro(m) +{ +} + bool MacroSegment::Save(obs_data_t *obj) const { obs_data_set_bool(obj, "collapsed", static_cast(_collapsed)); @@ -39,6 +44,37 @@ bool MacroSegment::Highlight() return false; } +std::string MacroSegment::GetVariableValue() const +{ + if (_supportsVariableValue) { + return _variableValue; + } + return ""; +} + +void MacroSegment::SetVariableValue(const std::string &value) +{ + if (_variableRefs > 0) { + _variableValue = value; + } +} + +void MacroSegment::IncrementVariableRef() +{ + if (!_supportsVariableValue) { + return; + } + _variableRefs++; +} + +void MacroSegment::DecrementVariableRef() +{ + if (!_supportsVariableValue || _variableRefs == 0) { + return; + } + _variableRefs--; +} + MouseWheelWidgetAdjustmentGuard::MouseWheelWidgetAdjustmentGuard(QObject *parent) : QObject(parent) { diff --git a/src/macro-core/macro-segment.hpp b/src/macro-core/macro-segment.hpp index e8fba0a5..dc4d191d 100644 --- a/src/macro-core/macro-segment.hpp +++ b/src/macro-core/macro-segment.hpp @@ -9,7 +9,7 @@ class Macro; class MacroSegment { public: - MacroSegment(Macro *m) : _macro(m) {} + MacroSegment(Macro *m, bool supportsVariableValue); virtual ~MacroSegment() = default; Macro *GetMacro() const { return _macro; } void SetIndex(int idx) { _idx = idx; } @@ -22,15 +22,28 @@ public: virtual std::string GetId() const = 0; void SetHighlight(); bool Highlight(); + bool SupportsVariableValue() const { return _supportsVariableValue; } + virtual std::string GetVariableValue() const; + void IncrementVariableRef(); + void DecrementVariableRef(); protected: - int _idx = 0; - bool _collapsed = false; - // UI helper - bool _highlight = false; + void SetVariableValue(const std::string &value); + bool IsReferencedInVars() { return _variableRefs != 0; } private: + // Macro helpers Macro *_macro = nullptr; + int _idx = 0; + + // UI helper + bool _highlight = false; + bool _collapsed = false; + + // Variable helpers + const bool _supportsVariableValue = false; + int _variableRefs = 0; + std::string _variableValue; }; class Section;