Add tempvar support to source condition

This commit is contained in:
WarmUpTill 2024-05-28 21:35:28 +02:00 committed by WarmUpTill
parent 4157ae4ed2
commit 687fb4623e
3 changed files with 92 additions and 32 deletions

View File

@ -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"

View File

@ -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<Condition>(obs_data_get_int(obj, "condition"));
SetCondition(
static_cast<Condition>(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<class T>
static inline void populateSelection(QComboBox *list,
const std::map<T, std::string> &map)
@ -287,8 +336,8 @@ void MacroConditionSourceEdit::ConditionChanged(int index)
}
auto lock = LockContext();
_entryData->_condition =
static_cast<MacroConditionSource::Condition>(index);
_entryData->SetCondition(
static_cast<MacroConditionSource::Condition>(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<int>(_entryData->_condition));
_conditions->setCurrentIndex(
static_cast<int>(_entryData->GetCondition()));
_settings->setPlainText(_entryData->_settings);
_regex->SetRegexConfig(_entryData->_regex);
_settingSelection->SetSource(_entryData->_source.GetSource());

View File

@ -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;