diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index beaba493..f51af003 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -1758,6 +1758,11 @@ AdvSceneSwitcher.tempVar.folder.removedFiles="Removed files" AdvSceneSwitcher.tempVar.folder.newDirs="New directories" AdvSceneSwitcher.tempVar.folder.removedDirs="Removed directories" +AdvSceneSwitcher.tempVar.source.width="Source width" +AdvSceneSwitcher.tempVar.source.height="Source height" +AdvSceneSwitcher.tempVar.source.setting="Setting value" +AdvSceneSwitcher.tempVar.source.settings="Settings string" + AdvSceneSwitcher.selectScene="--select scene--" AdvSceneSwitcher.selectPreviousScene="Previous Scene" AdvSceneSwitcher.selectCurrentScene="Current Scene" diff --git a/plugins/base/macro-condition-source.cpp b/plugins/base/macro-condition-source.cpp index 8ef87601..636907c6 100644 --- a/plugins/base/macro-condition-source.cpp +++ b/plugins/base/macro-condition-source.cpp @@ -77,23 +77,24 @@ bool MacroConditionSource::CheckCondition() case Condition::SHOWING: ret = obs_source_showing(s); break; - case Condition::ALL_SETTINGS_MATCH: + case Condition::ALL_SETTINGS_MATCH: { ret = CompareSourceSettings(_source.GetSource(), _settings, _regex); - if (IsReferencedInVars()) { - SetVariableValue( - GetSourceSettings(_source.GetSource())); - } + const auto settings = GetSourceSettings(_source.GetSource()); + SetVariableValue(settings); + SetTempVarValue("settings", settings); break; + } case Condition::SETTINGS_CHANGED: { - std::string settings = GetSourceSettings(_source.GetSource()); + const auto settings = GetSourceSettings(_source.GetSource()); ret = !_currentSettings.empty() && settings != _currentSettings; _currentSettings = settings; SetVariableValue(settings); + SetTempVarValue("settings", settings); break; } case Condition::INDIVIDUAL_SETTING_MATCH: { - auto value = + const auto value = GetSourceSettingValue(_source.GetSource(), _setting); if (!value) { return false; @@ -101,10 +102,11 @@ bool MacroConditionSource::CheckCondition() ret = _regex.Enabled() ? _regex.Matches(*value, _settings) : value == std::string(_settings); SetVariableValue(*value); + SetTempVarValue("setting", *value); break; } case Condition::INDIVIDUAL_SETTING_CHANGED: { - auto value = + const auto value = GetSourceSettingValue(_source.GetSource(), _setting); if (!value) { return false; @@ -112,16 +114,21 @@ bool MacroConditionSource::CheckCondition() ret = _currentSettingsValue != *value; _currentSettingsValue = *value; SetVariableValue(*value); + SetTempVarValue("setting", *value); break; } - case Condition::HEIGHT: - ret = compareSourceSize(_comparision, obs_source_get_height(s), - _size); + case Condition::HEIGHT: { + const auto height = obs_source_get_height(s); + ret = compareSourceSize(_comparision, height, _size); + SetTempVarValue("height", std::to_string(height)); break; - case Condition::WIDTH: - ret = compareSourceSize(_comparision, obs_source_get_width(s), - _size); + } + case Condition::WIDTH: { + const auto width = obs_source_get_width(s); + ret = compareSourceSize(_comparision, width, _size); + SetTempVarValue("width", std::to_string(width)); break; + } default: break; } @@ -151,7 +158,8 @@ bool MacroConditionSource::Load(obs_data_t *obj) { MacroCondition::Load(obj); _source.Load(obj); - _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 @@ -171,6 +179,47 @@ std::string MacroConditionSource::GetShortDesc() const return _source.ToString(); } +void MacroConditionSource::SetCondition(Condition cond) +{ + _condition = cond; + SetupTempVars(); +} + +void MacroConditionSource::SetupTempVars() +{ + MacroCondition::SetupTempVars(); + switch (_condition) { + case Condition::ACTIVE: + break; + case Condition::SHOWING: + break; + case Condition::ALL_SETTINGS_MATCH: + case Condition::SETTINGS_CHANGED: + AddTempvar("settings", + obs_module_text( + "AdvSceneSwitcher.tempVar.source.settings")); + break; + case Condition::INDIVIDUAL_SETTING_MATCH: + case Condition::INDIVIDUAL_SETTING_CHANGED: + AddTempvar("setting", + obs_module_text( + "AdvSceneSwitcher.tempVar.source.setting")); + break; + case Condition::HEIGHT: + AddTempvar("height", + obs_module_text( + "AdvSceneSwitcher.tempVar.source.height")); + break; + case Condition::WIDTH: + AddTempvar("width", + obs_module_text( + "AdvSceneSwitcher.tempVar.source.width")); + break; + default: + break; + } +} + template static inline void populateSelection(QComboBox *list, const std::map &map) @@ -287,8 +336,8 @@ void MacroConditionSourceEdit::ConditionChanged(int index) } auto lock = LockContext(); - _entryData->_condition = - static_cast(index); + _entryData->SetCondition( + static_cast(index)); SetWidgetVisibility(); } @@ -299,7 +348,7 @@ void MacroConditionSourceEdit::GetSettingsClicked() } QString value; - if (_entryData->_condition == + if (_entryData->GetCondition() == MacroConditionSource::Condition::ALL_SETTINGS_MATCH) { value = FormatJsonString( GetSourceSettings(_entryData->_source.GetSource())); @@ -382,38 +431,39 @@ void MacroConditionSourceEdit::CompareMethodChanged(int index) void MacroConditionSourceEdit::SetWidgetVisibility() { const bool settingsMatch = - _entryData->_condition == + _entryData->GetCondition() == MacroConditionSource::Condition::ALL_SETTINGS_MATCH || - _entryData->_condition == + _entryData->GetCondition() == MacroConditionSource::Condition::INDIVIDUAL_SETTING_MATCH; _settings->setVisible(settingsMatch); _getSettings->setVisible(settingsMatch); _regex->setVisible(settingsMatch); _settingSelection->setVisible( - _entryData->_condition == MacroConditionSource::Condition:: - INDIVIDUAL_SETTING_MATCH || - _entryData->_condition == MacroConditionSource::Condition:: - INDIVIDUAL_SETTING_CHANGED); + _entryData->GetCondition() == + MacroConditionSource::Condition::INDIVIDUAL_SETTING_MATCH || + _entryData->GetCondition() == + MacroConditionSource::Condition:: + INDIVIDUAL_SETTING_CHANGED); setToolTip( - (_entryData->_condition == + (_entryData->GetCondition() == MacroConditionSource::Condition::ACTIVE || - _entryData->_condition == + _entryData->GetCondition() == MacroConditionSource::Condition::SHOWING) ? obs_module_text( "AdvSceneSwitcher.condition.source.sceneVisibilityHint") : ""); _refreshSettingSelection->setVisible( - _entryData->_condition == MacroConditionSource::Condition:: - INDIVIDUAL_SETTING_MATCH && + _entryData->GetCondition() == + MacroConditionSource::Condition::INDIVIDUAL_SETTING_MATCH && _entryData->_source.GetType() == SourceSelection::Type::VARIABLE); const bool isSizeCheck = - _entryData->_condition == + _entryData->GetCondition() == MacroConditionSource::Condition::WIDTH || - _entryData->_condition == + _entryData->GetCondition() == MacroConditionSource::Condition::HEIGHT; _size->setVisible(isSizeCheck); _sizeCompareMethods->setVisible(isSizeCheck); @@ -429,7 +479,8 @@ void MacroConditionSourceEdit::UpdateEntryData() } _sources->SetSource(_entryData->_source); - _conditions->setCurrentIndex(static_cast(_entryData->_condition)); + _conditions->setCurrentIndex( + static_cast(_entryData->GetCondition())); _settings->setPlainText(_entryData->_settings); _regex->SetRegexConfig(_entryData->_regex); _settingSelection->SetSource(_entryData->_source.GetSource()); diff --git a/plugins/base/macro-condition-source.hpp b/plugins/base/macro-condition-source.hpp index 2f442f78..88f41b75 100644 --- a/plugins/base/macro-condition-source.hpp +++ b/plugins/base/macro-condition-source.hpp @@ -34,11 +34,12 @@ public: HEIGHT, WIDTH, }; + void SetCondition(Condition); + Condition GetCondition() const { return _condition; } enum class SizeComparision { LESS, EQUAL, MORE }; SourceSelection _source; - Condition _condition = Condition::ACTIVE; StringVariable _settings = ""; SourceSetting _setting; RegexConfig _regex; @@ -46,6 +47,9 @@ public: SizeComparision _comparision = SizeComparision::EQUAL; private: + void SetupTempVars(); + + Condition _condition = Condition::ACTIVE; std::string _currentSettings; std::string _currentSettingsValue;