mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-03-21 17:34:57 -05:00
Add tempvar support to source condition
This commit is contained in:
parent
4157ae4ed2
commit
687fb4623e
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user