diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index f51af003..73085e89 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -1763,6 +1763,9 @@ AdvSceneSwitcher.tempVar.source.height="Source height" AdvSceneSwitcher.tempVar.source.setting="Setting value" AdvSceneSwitcher.tempVar.source.settings="Settings string" +AdvSceneSwitcher.tempVar.filter.setting="Setting value" +AdvSceneSwitcher.tempVar.filter.settings="Settings string" + AdvSceneSwitcher.selectScene="--select scene--" AdvSceneSwitcher.selectPreviousScene="Previous Scene" AdvSceneSwitcher.selectCurrentScene="Current Scene" diff --git a/plugins/base/macro-condition-filter.cpp b/plugins/base/macro-condition-filter.cpp index 1f793197..f73f004f 100644 --- a/plugins/base/macro-condition-filter.cpp +++ b/plugins/base/macro-condition-filter.cpp @@ -47,17 +47,19 @@ bool MacroConditionFilter::CheckConditionHelper(const OBSWeakSource &filter) case Condition::DISABLED: ret = !obs_source_enabled(filterSource); break; - case Condition::SETTINGS_MATCH: + case Condition::SETTINGS_MATCH: { ret = CompareSourceSettings(filter, _settings, _regex); - if (IsReferencedInVars()) { - SetVariableValue(GetSourceSettings(filter)); - } + const auto settings = GetSourceSettings(filter); + SetVariableValue(settings); + SetTempVarValue("settings", settings); break; + } case Condition::SETTINGS_CHANGED: { - std::string settings = GetSourceSettings(filter); + const auto settings = GetSourceSettings(filter); ret = !_currentSettings.empty() && settings != _currentSettings; _currentSettings = settings; SetVariableValue(settings); + SetTempVarValue("settings", settings); break; } case Condition::INDIVIDUAL_SETTING_MATCH: { @@ -68,6 +70,7 @@ bool MacroConditionFilter::CheckConditionHelper(const OBSWeakSource &filter) ret = _regex.Enabled() ? _regex.Matches(*value, _settings) : value == std::string(_settings); SetVariableValue(*value); + SetTempVarValue("setting", *value); break; } case Condition::INDIVIDUAL_SETTING_CHANGED: { @@ -78,6 +81,7 @@ bool MacroConditionFilter::CheckConditionHelper(const OBSWeakSource &filter) ret = _currentSettingsValue != value; _currentSettingsValue = *value; SetVariableValue(*value); + SetTempVarValue("setting", *value); break; } default: @@ -122,7 +126,8 @@ bool MacroConditionFilter::Load(obs_data_t *obj) MacroCondition::Load(obj); _source.Load(obj); _filter.Load(obj, _source, "filter"); - _condition = static_cast(obs_data_get_int(obj, "condition")); + SetCondition( + static_cast(obs_data_get_int(obj, "condition"))); _settings.Load(obj, "settings"); _regex.Load(obj); // TOOD: remove in future version @@ -142,6 +147,37 @@ std::string MacroConditionFilter::GetShortDesc() const return ""; } +void MacroConditionFilter::SetCondition(Condition cond) +{ + _condition = cond; + SetupTempVars(); +} + +void MacroConditionFilter::SetupTempVars() +{ + MacroCondition::SetupTempVars(); + switch (_condition) { + case Condition::ENABLED: + break; + case Condition::DISABLED: + break; + case Condition::SETTINGS_MATCH: + case Condition::SETTINGS_CHANGED: + AddTempvar("settings", + obs_module_text( + "AdvSceneSwitcher.tempVar.filter.settings")); + break; + case Condition::INDIVIDUAL_SETTING_MATCH: + case Condition::INDIVIDUAL_SETTING_CHANGED: + AddTempvar("setting", + obs_module_text( + "AdvSceneSwitcher.tempVar.filter.setting")); + break; + default: + break; + } +} + static inline void populateConditionSelection(QComboBox *list) { for (const auto &[_, name] : filterConditionTypes) { @@ -263,8 +299,8 @@ void MacroConditionFilterEdit::ConditionChanged(int index) } auto lock = LockContext(); - _entryData->_condition = - static_cast(index); + _entryData->SetCondition( + static_cast(index)); SetWidgetVisibility(); } @@ -283,7 +319,7 @@ void MacroConditionFilterEdit::GetSettingsClicked() } QString value; - if (_entryData->_condition == + if (_entryData->GetCondition() == MacroConditionFilter::Condition::SETTINGS_MATCH) { value = FormatJsonString(GetSourceSettings(filters.at(0))); } else { @@ -346,21 +382,22 @@ void MacroConditionFilterEdit::RefreshVariableSourceSelectionValue() void MacroConditionFilterEdit::SetWidgetVisibility() { const bool showSettingsControls = - _entryData->_condition == + _entryData->GetCondition() == MacroConditionFilter::Condition::SETTINGS_MATCH || - _entryData->_condition == + _entryData->GetCondition() == MacroConditionFilter::Condition::INDIVIDUAL_SETTING_MATCH; _settings->setVisible(showSettingsControls); _getSettings->setVisible(showSettingsControls); _regex->setVisible(showSettingsControls); _settingSelection->setVisible( - _entryData->_condition == MacroConditionFilter::Condition:: - INDIVIDUAL_SETTING_MATCH || - _entryData->_condition == MacroConditionFilter::Condition:: - INDIVIDUAL_SETTING_CHANGED); + _entryData->GetCondition() == + MacroConditionFilter::Condition::INDIVIDUAL_SETTING_MATCH || + _entryData->GetCondition() == + MacroConditionFilter::Condition:: + INDIVIDUAL_SETTING_CHANGED); _refreshSettingSelection->setVisible( - _entryData->_condition == MacroConditionFilter::Condition:: - INDIVIDUAL_SETTING_MATCH && + _entryData->GetCondition() == + MacroConditionFilter::Condition::INDIVIDUAL_SETTING_MATCH && (_entryData->_source.GetType() == SourceSelection::Type::VARIABLE || _entryData->_filter.GetType() == @@ -377,7 +414,8 @@ void MacroConditionFilterEdit::UpdateEntryData() _sources->SetSource(_entryData->_source); _filters->SetFilter(_entryData->_source, _entryData->_filter); - _conditions->setCurrentIndex(static_cast(_entryData->_condition)); + _conditions->setCurrentIndex( + static_cast(_entryData->GetCondition())); _settings->setPlainText(_entryData->_settings); _regex->SetRegexConfig(_entryData->_regex); const auto filters = diff --git a/plugins/base/macro-condition-filter.hpp b/plugins/base/macro-condition-filter.hpp index c6518c4f..313718c5 100644 --- a/plugins/base/macro-condition-filter.hpp +++ b/plugins/base/macro-condition-filter.hpp @@ -33,17 +33,20 @@ public: INDIVIDUAL_SETTING_MATCH, INDIVIDUAL_SETTING_CHANGED, }; + void SetCondition(Condition); + Condition GetCondition() const { return _condition; } SourceSelection _source; FilterSelection _filter; - Condition _condition = Condition::ENABLED; StringVariable _settings = ""; RegexConfig _regex; SourceSetting _setting; private: + void SetupTempVars(); bool CheckConditionHelper(const OBSWeakSource &); + Condition _condition = Condition::ENABLED; std::string _currentSettings; std::string _currentSettingsValue;