mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-07-02 00:22:10 -05:00
Add option to check for settings change to source and filter condition
This commit is contained in:
parent
9c848938f8
commit
b88209f63d
|
|
@ -341,6 +341,7 @@ AdvSceneSwitcher.condition.source="Source"
|
|||
AdvSceneSwitcher.condition.source.type.active="Is active"
|
||||
AdvSceneSwitcher.condition.source.type.showing="Is showing"
|
||||
AdvSceneSwitcher.condition.source.type.settings="Settings match"
|
||||
AdvSceneSwitcher.condition.source.type.settingsChanged="Settings changed"
|
||||
AdvSceneSwitcher.condition.source.sceneVisibilityHint="Scene specific visibility can be checked using the \"Scene item visibility\" condition"
|
||||
AdvSceneSwitcher.condition.source.getSettings="Get current settings"
|
||||
AdvSceneSwitcher.condition.source.entry.line1="{{sources}}{{conditions}}"
|
||||
|
|
@ -354,6 +355,7 @@ AdvSceneSwitcher.condition.filter="Filter"
|
|||
AdvSceneSwitcher.condition.filter.type.active="Is enabled"
|
||||
AdvSceneSwitcher.condition.filter.type.showing="Is disabled"
|
||||
AdvSceneSwitcher.condition.filter.type.settings="Settings match"
|
||||
AdvSceneSwitcher.condition.filter.type.settingsChanged="Settings changed"
|
||||
AdvSceneSwitcher.condition.filter.getSettings="Get current settings"
|
||||
AdvSceneSwitcher.condition.filter.entry.line1="On{{sources}}{{filters}}{{conditions}}"
|
||||
AdvSceneSwitcher.condition.filter.entry.line2="{{settings}}"
|
||||
|
|
|
|||
|
|
@ -18,8 +18,10 @@ const static std::map<MacroConditionFilter::Condition, std::string>
|
|||
"AdvSceneSwitcher.condition.filter.type.active"},
|
||||
{MacroConditionFilter::Condition::DISABLED,
|
||||
"AdvSceneSwitcher.condition.filter.type.showing"},
|
||||
{MacroConditionFilter::Condition::SETTINGS,
|
||||
{MacroConditionFilter::Condition::SETTINGS_MATCH,
|
||||
"AdvSceneSwitcher.condition.filter.type.settings"},
|
||||
{MacroConditionFilter::Condition::SETTINGS_CHANGED,
|
||||
"AdvSceneSwitcher.condition.filter.type.settingsChanged"},
|
||||
};
|
||||
|
||||
bool MacroConditionFilter::CheckCondition()
|
||||
|
|
@ -38,13 +40,20 @@ bool MacroConditionFilter::CheckCondition()
|
|||
case Condition::DISABLED:
|
||||
ret = !obs_source_enabled(filterSource);
|
||||
break;
|
||||
case Condition::SETTINGS:
|
||||
case Condition::SETTINGS_MATCH:
|
||||
ret = CompareSourceSettings(filterWeakSource, _settings,
|
||||
_regex);
|
||||
if (IsReferencedInVars()) {
|
||||
SetVariableValue(GetSourceSettings(filterWeakSource));
|
||||
}
|
||||
break;
|
||||
case Condition::SETTINGS_CHANGED: {
|
||||
std::string settings = GetSourceSettings(_source.GetSource());
|
||||
ret = !_currentSettings.empty() && settings != _currentSettings;
|
||||
_currentSettings = settings;
|
||||
SetVariableValue(settings);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -95,8 +104,8 @@ std::string MacroConditionFilter::GetShortDesc() const
|
|||
|
||||
static inline void populateConditionSelection(QComboBox *list)
|
||||
{
|
||||
for (auto entry : filterConditionTypes) {
|
||||
list->addItem(obs_module_text(entry.second.c_str()));
|
||||
for (const auto &[_, name] : filterConditionTypes) {
|
||||
list->addItem(obs_module_text(name.c_str()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -194,8 +203,9 @@ void MacroConditionFilterEdit::ConditionChanged(int index)
|
|||
auto lock = LockContext();
|
||||
_entryData->_condition =
|
||||
static_cast<MacroConditionFilter::Condition>(index);
|
||||
SetSettingsSelectionVisible(_entryData->_condition ==
|
||||
MacroConditionFilter::Condition::SETTINGS);
|
||||
SetSettingsSelectionVisible(
|
||||
_entryData->_condition ==
|
||||
MacroConditionFilter::Condition::SETTINGS_MATCH);
|
||||
}
|
||||
|
||||
void MacroConditionFilterEdit::GetSettingsClicked()
|
||||
|
|
@ -259,8 +269,9 @@ void MacroConditionFilterEdit::UpdateEntryData()
|
|||
_conditions->setCurrentIndex(static_cast<int>(_entryData->_condition));
|
||||
_settings->setPlainText(_entryData->_settings);
|
||||
_regex->SetRegexConfig(_entryData->_regex);
|
||||
SetSettingsSelectionVisible(_entryData->_condition ==
|
||||
MacroConditionFilter::Condition::SETTINGS);
|
||||
SetSettingsSelectionVisible(
|
||||
_entryData->_condition ==
|
||||
MacroConditionFilter::Condition::SETTINGS_MATCH);
|
||||
|
||||
adjustSize();
|
||||
updateGeometry();
|
||||
|
|
|
|||
|
|
@ -27,7 +27,8 @@ public:
|
|||
enum class Condition {
|
||||
ENABLED,
|
||||
DISABLED,
|
||||
SETTINGS,
|
||||
SETTINGS_MATCH,
|
||||
SETTINGS_CHANGED,
|
||||
};
|
||||
|
||||
SourceSelection _source;
|
||||
|
|
@ -37,6 +38,8 @@ public:
|
|||
RegexConfig _regex;
|
||||
|
||||
private:
|
||||
std::string _currentSettings;
|
||||
|
||||
static bool _registered;
|
||||
static const std::string id;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -10,13 +10,16 @@ bool MacroConditionSource::_registered = MacroConditionFactory::Register(
|
|||
{MacroConditionSource::Create, MacroConditionSourceEdit::Create,
|
||||
"AdvSceneSwitcher.condition.source"});
|
||||
|
||||
const static std::map<SourceCondition, std::string> sourceConditionTypes = {
|
||||
{SourceCondition::ACTIVE,
|
||||
"AdvSceneSwitcher.condition.source.type.active"},
|
||||
{SourceCondition::SHOWING,
|
||||
"AdvSceneSwitcher.condition.source.type.showing"},
|
||||
{SourceCondition::SETTINGS,
|
||||
"AdvSceneSwitcher.condition.source.type.settings"},
|
||||
const static std::map<MacroConditionSource::Condition, std::string>
|
||||
sourceCnditionTypes = {
|
||||
{MacroConditionSource::Condition::ACTIVE,
|
||||
"AdvSceneSwitcher.condition.source.type.active"},
|
||||
{MacroConditionSource::Condition::SHOWING,
|
||||
"AdvSceneSwitcher.condition.source.type.showing"},
|
||||
{MacroConditionSource::Condition::SETTINGS_MATCH,
|
||||
"AdvSceneSwitcher.condition.source.type.settings"},
|
||||
{MacroConditionSource::Condition::SETTINGS_CHANGED,
|
||||
"AdvSceneSwitcher.condition.source.type.settingsChanged"},
|
||||
};
|
||||
|
||||
bool MacroConditionSource::CheckCondition()
|
||||
|
|
@ -29,13 +32,13 @@ bool MacroConditionSource::CheckCondition()
|
|||
auto s = obs_weak_source_get_source(_source.GetSource());
|
||||
|
||||
switch (_condition) {
|
||||
case SourceCondition::ACTIVE:
|
||||
case Condition::ACTIVE:
|
||||
ret = obs_source_active(s);
|
||||
break;
|
||||
case SourceCondition::SHOWING:
|
||||
case Condition::SHOWING:
|
||||
ret = obs_source_showing(s);
|
||||
break;
|
||||
case SourceCondition::SETTINGS:
|
||||
case Condition::SETTINGS_MATCH:
|
||||
ret = CompareSourceSettings(_source.GetSource(), _settings,
|
||||
_regex);
|
||||
if (IsReferencedInVars()) {
|
||||
|
|
@ -43,6 +46,13 @@ bool MacroConditionSource::CheckCondition()
|
|||
GetSourceSettings(_source.GetSource()));
|
||||
}
|
||||
break;
|
||||
case Condition::SETTINGS_CHANGED: {
|
||||
std::string settings = GetSourceSettings(_source.GetSource());
|
||||
ret = !_currentSettings.empty() && settings != _currentSettings;
|
||||
_currentSettings = settings;
|
||||
SetVariableValue(settings);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -70,8 +80,7 @@ bool MacroConditionSource::Load(obs_data_t *obj)
|
|||
{
|
||||
MacroCondition::Load(obj);
|
||||
_source.Load(obj);
|
||||
_condition = static_cast<SourceCondition>(
|
||||
obs_data_get_int(obj, "condition"));
|
||||
_condition = static_cast<Condition>(obs_data_get_int(obj, "condition"));
|
||||
_settings.Load(obj, "settings");
|
||||
_regex.Load(obj);
|
||||
// TOOD: remove in future version
|
||||
|
|
@ -89,8 +98,8 @@ std::string MacroConditionSource::GetShortDesc() const
|
|||
|
||||
static inline void populateConditionSelection(QComboBox *list)
|
||||
{
|
||||
for (auto entry : sourceConditionTypes) {
|
||||
list->addItem(obs_module_text(entry.second.c_str()));
|
||||
for (const auto &[_, name] : sourceCnditionTypes) {
|
||||
list->addItem(obs_module_text(name.c_str()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -173,7 +182,8 @@ void MacroConditionSourceEdit::ConditionChanged(int index)
|
|||
}
|
||||
|
||||
auto lock = LockContext();
|
||||
_entryData->_condition = static_cast<SourceCondition>(index);
|
||||
_entryData->_condition =
|
||||
static_cast<MacroConditionSource::Condition>(index);
|
||||
SetWidgetVisibility();
|
||||
}
|
||||
|
||||
|
|
@ -220,14 +230,18 @@ void MacroConditionSourceEdit::RegexChanged(RegexConfig conf)
|
|||
void MacroConditionSourceEdit::SetWidgetVisibility()
|
||||
{
|
||||
_settings->setVisible(_entryData->_condition ==
|
||||
SourceCondition::SETTINGS);
|
||||
_getSettings->setVisible(_entryData->_condition ==
|
||||
SourceCondition::SETTINGS);
|
||||
_regex->setVisible(_entryData->_condition == SourceCondition::SETTINGS);
|
||||
MacroConditionSource::Condition::SETTINGS_MATCH);
|
||||
_getSettings->setVisible(
|
||||
_entryData->_condition ==
|
||||
MacroConditionSource::Condition::SETTINGS_MATCH);
|
||||
_regex->setVisible(_entryData->_condition ==
|
||||
MacroConditionSource::Condition::SETTINGS_MATCH);
|
||||
|
||||
setToolTip(
|
||||
(_entryData->_condition == SourceCondition::ACTIVE ||
|
||||
_entryData->_condition == SourceCondition::SHOWING)
|
||||
(_entryData->_condition ==
|
||||
MacroConditionSource::Condition::ACTIVE ||
|
||||
_entryData->_condition ==
|
||||
MacroConditionSource::Condition::SHOWING)
|
||||
? obs_module_text(
|
||||
"AdvSceneSwitcher.condition.source.sceneVisibilityHint")
|
||||
: "");
|
||||
|
|
|
|||
|
|
@ -10,12 +10,6 @@
|
|||
|
||||
namespace advss {
|
||||
|
||||
enum class SourceCondition {
|
||||
ACTIVE,
|
||||
SHOWING,
|
||||
SETTINGS,
|
||||
};
|
||||
|
||||
class MacroConditionSource : public MacroCondition {
|
||||
public:
|
||||
MacroConditionSource(Macro *m) : MacroCondition(m, true) {}
|
||||
|
|
@ -29,12 +23,21 @@ public:
|
|||
return std::make_shared<MacroConditionSource>(m);
|
||||
}
|
||||
|
||||
enum class Condition {
|
||||
ACTIVE,
|
||||
SHOWING,
|
||||
SETTINGS_MATCH,
|
||||
SETTINGS_CHANGED,
|
||||
};
|
||||
|
||||
SourceSelection _source;
|
||||
SourceCondition _condition = SourceCondition::ACTIVE;
|
||||
Condition _condition = Condition::ACTIVE;
|
||||
StringVariable _settings = "";
|
||||
RegexConfig _regex;
|
||||
|
||||
private:
|
||||
std::string _currentSettings;
|
||||
|
||||
static bool _registered;
|
||||
static const std::string id;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user