@@ -10,13 +10,16 @@ bool MacroConditionSource::_registered = MacroConditionFactory::Register(
10
10
{MacroConditionSource::Create, MacroConditionSourceEdit::Create,
11
11
" AdvSceneSwitcher.condition.source" });
12
12
13
- const static std::map<SourceCondition, std::string> sourceConditionTypes = {
14
- {SourceCondition::ACTIVE,
15
- " AdvSceneSwitcher.condition.source.type.active" },
16
- {SourceCondition::SHOWING,
17
- " AdvSceneSwitcher.condition.source.type.showing" },
18
- {SourceCondition::SETTINGS,
19
- " AdvSceneSwitcher.condition.source.type.settings" },
13
+ const static std::map<MacroConditionSource::Condition, std::string>
14
+ sourceCnditionTypes = {
15
+ {MacroConditionSource::Condition::ACTIVE,
16
+ " AdvSceneSwitcher.condition.source.type.active" },
17
+ {MacroConditionSource::Condition::SHOWING,
18
+ " AdvSceneSwitcher.condition.source.type.showing" },
19
+ {MacroConditionSource::Condition::SETTINGS_MATCH,
20
+ " AdvSceneSwitcher.condition.source.type.settings" },
21
+ {MacroConditionSource::Condition::SETTINGS_CHANGED,
22
+ " AdvSceneSwitcher.condition.source.type.settingsChanged" },
20
23
};
21
24
22
25
bool MacroConditionSource::CheckCondition ()
@@ -29,20 +32,27 @@ bool MacroConditionSource::CheckCondition()
29
32
auto s = obs_weak_source_get_source (_source.GetSource ());
30
33
31
34
switch (_condition) {
32
- case SourceCondition ::ACTIVE:
35
+ case Condition ::ACTIVE:
33
36
ret = obs_source_active (s);
34
37
break ;
35
- case SourceCondition ::SHOWING:
38
+ case Condition ::SHOWING:
36
39
ret = obs_source_showing (s);
37
40
break ;
38
- case SourceCondition::SETTINGS :
41
+ case Condition::SETTINGS_MATCH :
39
42
ret = CompareSourceSettings (_source.GetSource (), _settings,
40
43
_regex);
41
44
if (IsReferencedInVars ()) {
42
45
SetVariableValue (
43
46
GetSourceSettings (_source.GetSource ()));
44
47
}
45
48
break ;
49
+ case Condition::SETTINGS_CHANGED: {
50
+ std::string settings = GetSourceSettings (_source.GetSource ());
51
+ ret = !_currentSettings.empty () && settings != _currentSettings;
52
+ _currentSettings = settings;
53
+ SetVariableValue (settings);
54
+ break ;
55
+ }
46
56
default :
47
57
break ;
48
58
}
@@ -70,8 +80,7 @@ bool MacroConditionSource::Load(obs_data_t *obj)
70
80
{
71
81
MacroCondition::Load (obj);
72
82
_source.Load (obj);
73
- _condition = static_cast <SourceCondition>(
74
- obs_data_get_int (obj, " condition" ));
83
+ _condition = static_cast <Condition>(obs_data_get_int (obj, " condition" ));
75
84
_settings.Load (obj, " settings" );
76
85
_regex.Load (obj);
77
86
// TOOD: remove in future version
@@ -89,8 +98,8 @@ std::string MacroConditionSource::GetShortDesc() const
89
98
90
99
static inline void populateConditionSelection (QComboBox *list)
91
100
{
92
- for (auto entry : sourceConditionTypes ) {
93
- list->addItem (obs_module_text (entry. second .c_str ()));
101
+ for (const auto &[_, name] : sourceCnditionTypes ) {
102
+ list->addItem (obs_module_text (name .c_str ()));
94
103
}
95
104
}
96
105
@@ -173,7 +182,8 @@ void MacroConditionSourceEdit::ConditionChanged(int index)
173
182
}
174
183
175
184
auto lock = LockContext ();
176
- _entryData->_condition = static_cast <SourceCondition>(index );
185
+ _entryData->_condition =
186
+ static_cast <MacroConditionSource::Condition>(index );
177
187
SetWidgetVisibility ();
178
188
}
179
189
@@ -220,14 +230,18 @@ void MacroConditionSourceEdit::RegexChanged(RegexConfig conf)
220
230
void MacroConditionSourceEdit::SetWidgetVisibility ()
221
231
{
222
232
_settings->setVisible (_entryData->_condition ==
223
- SourceCondition::SETTINGS);
224
- _getSettings->setVisible (_entryData->_condition ==
225
- SourceCondition::SETTINGS);
226
- _regex->setVisible (_entryData->_condition == SourceCondition::SETTINGS);
233
+ MacroConditionSource::Condition::SETTINGS_MATCH);
234
+ _getSettings->setVisible (
235
+ _entryData->_condition ==
236
+ MacroConditionSource::Condition::SETTINGS_MATCH);
237
+ _regex->setVisible (_entryData->_condition ==
238
+ MacroConditionSource::Condition::SETTINGS_MATCH);
227
239
228
240
setToolTip (
229
- (_entryData->_condition == SourceCondition::ACTIVE ||
230
- _entryData->_condition == SourceCondition::SHOWING)
241
+ (_entryData->_condition ==
242
+ MacroConditionSource::Condition::ACTIVE ||
243
+ _entryData->_condition ==
244
+ MacroConditionSource::Condition::SHOWING)
231
245
? obs_module_text (
232
246
" AdvSceneSwitcher.condition.source.sceneVisibilityHint" )
233
247
: " " );
0 commit comments