mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-03-22 01:44:49 -05:00
Add option to check single settings values in Source condition
This commit is contained in:
parent
2cc8a15118
commit
481da80d4c
|
|
@ -263,9 +263,8 @@ AdvSceneSwitcher.condition.macro.count.entry.line2="Aktuelle Anzahl: {{currentCo
|
|||
AdvSceneSwitcher.condition.source="Quelle"
|
||||
AdvSceneSwitcher.condition.source.type.active="Ist aktiv"
|
||||
AdvSceneSwitcher.condition.source.type.showing="Wird angezeigt"
|
||||
AdvSceneSwitcher.condition.source.type.settings="Einstellungen stimmen überein"
|
||||
AdvSceneSwitcher.condition.source.type.settingsMatch="Einstellungen stimmen überein"
|
||||
AdvSceneSwitcher.condition.source.getSettings="Aktuelle Einstellungen abfragen"
|
||||
AdvSceneSwitcher.condition.source.entry.line1="{{sources}} {{conditions}}"
|
||||
AdvSceneSwitcher.condition.source.entry.line2="{{settings}}"
|
||||
AdvSceneSwitcher.condition.source.entry.line3="{{regex}} {{getSettings}}"
|
||||
AdvSceneSwitcher.condition.virtualCamera="Virtuelle Kamera"
|
||||
|
|
|
|||
|
|
@ -350,11 +350,13 @@ AdvSceneSwitcher.condition.macro.paused.entry="Macro{{macros}}is paused"
|
|||
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.settingsMatch="Settings match"
|
||||
AdvSceneSwitcher.condition.source.type.settingsChanged="Settings changed"
|
||||
AdvSceneSwitcher.condition.source.type.individualSettingMatches="Setting value matches"
|
||||
AdvSceneSwitcher.condition.source.type.individualSettingChanged="Setting value 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}}"
|
||||
AdvSceneSwitcher.condition.source.entry.line1="{{sources}}{{conditions}}{{settingSelection}}"
|
||||
AdvSceneSwitcher.condition.source.entry.line2="{{settings}}"
|
||||
AdvSceneSwitcher.condition.source.entry.line3="{{regex}}{{getSettings}}"
|
||||
AdvSceneSwitcher.condition.virtualCamera="Virtual camera"
|
||||
|
|
|
|||
|
|
@ -215,9 +215,8 @@ AdvSceneSwitcher.condition.macro.count.entry.line2="Recuento actual: {{currentCo
|
|||
AdvSceneSwitcher.condition.source="Fuente"
|
||||
AdvSceneSwitcher.condition.source.type.active="Está activo"
|
||||
AdvSceneSwitcher.condition.source.type.showing="Se muestra"
|
||||
AdvSceneSwitcher.condition.source.type.settings="Coincidencia de configuración"
|
||||
AdvSceneSwitcher.condition.source.type.settingsMatch="Coincidencia de configuración"
|
||||
AdvSceneSwitcher.condition.source.getSettings="Obtener la configuración actual"
|
||||
AdvSceneSwitcher.condition.source.entry.line1="{{sources}} {{conditions}}"
|
||||
AdvSceneSwitcher.condition.source.entry.line2="{{settings}}"
|
||||
AdvSceneSwitcher.condition.source.entry.line3="{{regex}} {{getSettings}}"
|
||||
AdvSceneSwitcher.condition.virtualCamera="Cámara virtual"
|
||||
|
|
|
|||
|
|
@ -330,7 +330,7 @@ AdvSceneSwitcher.condition.macro.actionState.enabled.entry="L'action{{actionInde
|
|||
AdvSceneSwitcher.condition.source="Source"
|
||||
AdvSceneSwitcher.condition.source.type.active="Est actif"
|
||||
AdvSceneSwitcher.condition.source.type.showing="Est affiché"
|
||||
AdvSceneSwitcher.condition.source.type.settings="Correspond aux paramètres"
|
||||
AdvSceneSwitcher.condition.source.type.settingsMatch="Correspond aux paramètres"
|
||||
AdvSceneSwitcher.condition.source.type.settingsChanged="Paramètres modifiés"
|
||||
AdvSceneSwitcher.condition.source.sceneVisibilityHint="La visibilité spécifique à la scène peut être vérifiée en utilisant la condition \"Visibilité de l'élément de la scène\""
|
||||
AdvSceneSwitcher.condition.source.getSettings="Obtenir les paramètres actuels"
|
||||
|
|
|
|||
|
|
@ -191,9 +191,8 @@ AdvSceneSwitcher.condition.macro.count.entry.line2="Mevcut sayı: {{currentCount
|
|||
AdvSceneSwitcher.condition.source="Kaynak"
|
||||
AdvSceneSwitcher.condition.source.type.active="Aktiftir"
|
||||
AdvSceneSwitcher.condition.source.type.showing="gösteriyor"
|
||||
AdvSceneSwitcher.condition.source.type.settings="Ayarlar eşleştirildi"
|
||||
AdvSceneSwitcher.condition.source.type.settingsMatch="Ayarlar eşleştirildi"
|
||||
AdvSceneSwitcher.condition.source.getSettings="Mevcut ayarları al"
|
||||
AdvSceneSwitcher.condition.source.entry.line1="{{sources}} {{conditions}}"
|
||||
AdvSceneSwitcher.condition.source.entry.line2="{{settings}}"
|
||||
AdvSceneSwitcher.condition.source.entry.line3="{{regex}} {{getSettings}}"
|
||||
AdvSceneSwitcher.condition.virtualCamera="Sanal kamera"
|
||||
|
|
|
|||
|
|
@ -309,9 +309,8 @@ AdvSceneSwitcher.condition.macro.count.entry.line2="当前计数: {{currentCount
|
|||
AdvSceneSwitcher.condition.source="源"
|
||||
AdvSceneSwitcher.condition.source.type.active="是激活状态"
|
||||
AdvSceneSwitcher.condition.source.type.showing="是显示状态"
|
||||
AdvSceneSwitcher.condition.source.type.settings="设置完全匹配"
|
||||
AdvSceneSwitcher.condition.source.type.settingsMatch="设置完全匹配"
|
||||
AdvSceneSwitcher.condition.source.getSettings="获取当前设置"
|
||||
AdvSceneSwitcher.condition.source.entry.line1="{{sources}} {{conditions}}"
|
||||
AdvSceneSwitcher.condition.source.entry.line2="{{settings}}"
|
||||
AdvSceneSwitcher.condition.source.entry.line3="{{regex}} {{getSettings}}"
|
||||
AdvSceneSwitcher.condition.virtualCamera="虚拟摄像机"
|
||||
|
|
|
|||
|
|
@ -16,10 +16,14 @@ const static std::map<MacroConditionSource::Condition, std::string>
|
|||
"AdvSceneSwitcher.condition.source.type.active"},
|
||||
{MacroConditionSource::Condition::SHOWING,
|
||||
"AdvSceneSwitcher.condition.source.type.showing"},
|
||||
{MacroConditionSource::Condition::SETTINGS_MATCH,
|
||||
"AdvSceneSwitcher.condition.source.type.settings"},
|
||||
{MacroConditionSource::Condition::ALL_SETTINGS_MATCH,
|
||||
"AdvSceneSwitcher.condition.source.type.settingsMatch"},
|
||||
{MacroConditionSource::Condition::SETTINGS_CHANGED,
|
||||
"AdvSceneSwitcher.condition.source.type.settingsChanged"},
|
||||
{MacroConditionSource::Condition::INDIVIDUAL_SETTING_MATCH,
|
||||
"AdvSceneSwitcher.condition.source.type.individualSettingMatches"},
|
||||
{MacroConditionSource::Condition::INDIVIDUAL_SETTING_CHANGED,
|
||||
"AdvSceneSwitcher.condition.source.type.individualSettingChanged"},
|
||||
};
|
||||
|
||||
bool MacroConditionSource::CheckCondition()
|
||||
|
|
@ -29,7 +33,8 @@ bool MacroConditionSource::CheckCondition()
|
|||
}
|
||||
|
||||
bool ret = false;
|
||||
auto s = obs_weak_source_get_source(_source.GetSource());
|
||||
OBSSourceAutoRelease s =
|
||||
obs_weak_source_get_source(_source.GetSource());
|
||||
|
||||
switch (_condition) {
|
||||
case Condition::ACTIVE:
|
||||
|
|
@ -38,7 +43,7 @@ bool MacroConditionSource::CheckCondition()
|
|||
case Condition::SHOWING:
|
||||
ret = obs_source_showing(s);
|
||||
break;
|
||||
case Condition::SETTINGS_MATCH:
|
||||
case Condition::ALL_SETTINGS_MATCH:
|
||||
ret = CompareSourceSettings(_source.GetSource(), _settings,
|
||||
_regex);
|
||||
if (IsReferencedInVars()) {
|
||||
|
|
@ -53,12 +58,26 @@ bool MacroConditionSource::CheckCondition()
|
|||
SetVariableValue(settings);
|
||||
break;
|
||||
}
|
||||
case Condition::INDIVIDUAL_SETTING_MATCH: {
|
||||
std::string value =
|
||||
GetSourceSettingValue(_source.GetSource(), _setting);
|
||||
ret = _regex.Enabled() ? _regex.Matches(value, _settings)
|
||||
: value == std::string(_settings);
|
||||
SetVariableValue(value);
|
||||
break;
|
||||
}
|
||||
case Condition::INDIVIDUAL_SETTING_CHANGED: {
|
||||
std::string value =
|
||||
GetSourceSettingValue(_source.GetSource(), _setting);
|
||||
ret = _currentSettingsValue != value;
|
||||
_currentSettingsValue = value;
|
||||
SetVariableValue(value);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
obs_source_release(s);
|
||||
|
||||
if (GetVariableValue().empty()) {
|
||||
SetVariableValue(ret ? "true" : "false");
|
||||
}
|
||||
|
|
@ -73,6 +92,7 @@ bool MacroConditionSource::Save(obs_data_t *obj) const
|
|||
obs_data_set_int(obj, "condition", static_cast<int>(_condition));
|
||||
_settings.Save(obj, "settings");
|
||||
_regex.Save(obj);
|
||||
_setting.Save(obj);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -88,6 +108,7 @@ bool MacroConditionSource::Load(obs_data_t *obj)
|
|||
_regex.CreateBackwardsCompatibleRegex(
|
||||
obs_data_get_bool(obj, "regex"));
|
||||
}
|
||||
_setting.Load(obj);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -109,9 +130,10 @@ MacroConditionSourceEdit::MacroConditionSourceEdit(
|
|||
_sources(new SourceSelectionWidget(this, QStringList(), true)),
|
||||
_conditions(new QComboBox()),
|
||||
_getSettings(new QPushButton(obs_module_text(
|
||||
"AdvSceneSwitcher.condition.filter.getSettings"))),
|
||||
"AdvSceneSwitcher.condition.source.getSettings"))),
|
||||
_settings(new VariableTextEdit(this)),
|
||||
_regex(new RegexConfigWidget(parent))
|
||||
_regex(new RegexConfigWidget(parent)),
|
||||
_settingSelection(new SourceSettingSelection())
|
||||
{
|
||||
populateConditionSelection(_conditions);
|
||||
auto sources = GetSourceNames();
|
||||
|
|
@ -131,12 +153,18 @@ MacroConditionSourceEdit::MacroConditionSourceEdit(
|
|||
SLOT(SettingsChanged()));
|
||||
QWidget::connect(_regex, SIGNAL(RegexConfigChanged(RegexConfig)), this,
|
||||
SLOT(RegexChanged(RegexConfig)));
|
||||
QWidget::connect(_settingSelection,
|
||||
SIGNAL(SelectionChanged(const SourceSetting &)), this,
|
||||
SLOT(SettingSelectionChanged(const SourceSetting &)));
|
||||
|
||||
std::unordered_map<std::string, QWidget *> widgetPlaceholders = {
|
||||
{"{{sources}}", _sources}, {"{{conditions}}", _conditions},
|
||||
{"{{settings}}", _settings}, {"{{getSettings}}", _getSettings},
|
||||
{"{{sources}}", _sources},
|
||||
{"{{conditions}}", _conditions},
|
||||
{"{{settings}}", _settings},
|
||||
{"{{getSettings}}", _getSettings},
|
||||
{"{{regex}}", _regex},
|
||||
};
|
||||
{"{{settingSelection}}", _settingSelection}};
|
||||
|
||||
auto line1Layout = new QHBoxLayout;
|
||||
line1Layout->setContentsMargins(0, 0, 0, 0);
|
||||
PlaceWidgets(obs_module_text(
|
||||
|
|
@ -169,8 +197,11 @@ void MacroConditionSourceEdit::SourceChanged(const SourceSelection &source)
|
|||
return;
|
||||
}
|
||||
|
||||
auto lock = LockContext();
|
||||
_entryData->_source = source;
|
||||
{
|
||||
auto lock = LockContext();
|
||||
_entryData->_source = source;
|
||||
}
|
||||
_settingSelection->SetSource(_entryData->_source.GetSource());
|
||||
emit HeaderInfoChanged(
|
||||
QString::fromStdString(_entryData->GetShortDesc()));
|
||||
}
|
||||
|
|
@ -193,12 +224,20 @@ void MacroConditionSourceEdit::GetSettingsClicked()
|
|||
return;
|
||||
}
|
||||
|
||||
QString json = FormatJsonString(
|
||||
GetSourceSettings(_entryData->_source.GetSource()));
|
||||
if (_entryData->_regex.Enabled()) {
|
||||
json = EscapeForRegex(json);
|
||||
QString value;
|
||||
if (_entryData->_condition ==
|
||||
MacroConditionSource::Condition::ALL_SETTINGS_MATCH) {
|
||||
value = FormatJsonString(
|
||||
GetSourceSettings(_entryData->_source.GetSource()));
|
||||
} else {
|
||||
value = QString::fromStdString(GetSourceSettingValue(
|
||||
_entryData->_source.GetSource(), _entryData->_setting));
|
||||
}
|
||||
_settings->setPlainText(json);
|
||||
|
||||
if (_entryData->_regex.Enabled()) {
|
||||
value = EscapeForRegex(value);
|
||||
}
|
||||
_settings->setPlainText(value);
|
||||
}
|
||||
|
||||
void MacroConditionSourceEdit::SettingsChanged()
|
||||
|
|
@ -227,15 +266,30 @@ void MacroConditionSourceEdit::RegexChanged(RegexConfig conf)
|
|||
updateGeometry();
|
||||
}
|
||||
|
||||
void MacroConditionSourceEdit::SettingSelectionChanged(
|
||||
const SourceSetting &setting)
|
||||
{
|
||||
if (_loading || !_entryData) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto lock = LockContext();
|
||||
_entryData->_setting = setting;
|
||||
}
|
||||
|
||||
void MacroConditionSourceEdit::SetWidgetVisibility()
|
||||
{
|
||||
_settings->setVisible(_entryData->_condition ==
|
||||
MacroConditionSource::Condition::SETTINGS_MATCH);
|
||||
_getSettings->setVisible(
|
||||
const bool settingsMatch =
|
||||
_entryData->_condition ==
|
||||
MacroConditionSource::Condition::SETTINGS_MATCH);
|
||||
_regex->setVisible(_entryData->_condition ==
|
||||
MacroConditionSource::Condition::SETTINGS_MATCH);
|
||||
MacroConditionSource::Condition::ALL_SETTINGS_MATCH ||
|
||||
_entryData->_condition ==
|
||||
MacroConditionSource::Condition::INDIVIDUAL_SETTING_MATCH;
|
||||
_settings->setVisible(settingsMatch);
|
||||
_getSettings->setVisible(settingsMatch);
|
||||
_regex->setVisible(settingsMatch);
|
||||
_settingSelection->setVisible(
|
||||
_entryData->_condition ==
|
||||
MacroConditionSource::Condition::INDIVIDUAL_SETTING_MATCH);
|
||||
|
||||
setToolTip(
|
||||
(_entryData->_condition ==
|
||||
|
|
@ -260,6 +314,8 @@ void MacroConditionSourceEdit::UpdateEntryData()
|
|||
_conditions->setCurrentIndex(static_cast<int>(_entryData->_condition));
|
||||
_settings->setPlainText(_entryData->_settings);
|
||||
_regex->SetRegexConfig(_entryData->_regex);
|
||||
_settingSelection->SetSource(_entryData->_source.GetSource());
|
||||
_settingSelection->SetSetting(_entryData->_setting);
|
||||
SetWidgetVisibility();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#include "variable-text-edit.hpp"
|
||||
#include "regex-config.hpp"
|
||||
#include "source-selection.hpp"
|
||||
#include "source-setting.hpp"
|
||||
|
||||
#include <QComboBox>
|
||||
#include <QPushButton>
|
||||
|
|
@ -26,17 +27,21 @@ public:
|
|||
enum class Condition {
|
||||
ACTIVE,
|
||||
SHOWING,
|
||||
SETTINGS_MATCH,
|
||||
ALL_SETTINGS_MATCH,
|
||||
SETTINGS_CHANGED,
|
||||
INDIVIDUAL_SETTING_MATCH,
|
||||
INDIVIDUAL_SETTING_CHANGED,
|
||||
};
|
||||
|
||||
SourceSelection _source;
|
||||
Condition _condition = Condition::ACTIVE;
|
||||
StringVariable _settings = "";
|
||||
SourceSetting _setting;
|
||||
RegexConfig _regex;
|
||||
|
||||
private:
|
||||
std::string _currentSettings;
|
||||
std::string _currentSettingsValue;
|
||||
|
||||
static bool _registered;
|
||||
static const std::string id;
|
||||
|
|
@ -64,6 +69,7 @@ private slots:
|
|||
void GetSettingsClicked();
|
||||
void SettingsChanged();
|
||||
void RegexChanged(RegexConfig);
|
||||
void SettingSelectionChanged(const SourceSetting &);
|
||||
signals:
|
||||
void HeaderInfoChanged(const QString &);
|
||||
|
||||
|
|
@ -73,6 +79,7 @@ protected:
|
|||
QPushButton *_getSettings;
|
||||
VariableTextEdit *_settings;
|
||||
RegexConfigWidget *_regex;
|
||||
SourceSettingSelection *_settingSelection;
|
||||
|
||||
std::shared_ptr<MacroConditionSource> _entryData;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user