Show refresh button if source / filter selection is a variable

This commit is contained in:
WarmUpTill 2024-02-10 21:32:26 +01:00 committed by WarmUpTill
parent dc91ee0cf1
commit d8d73f0cd4
16 changed files with 175 additions and 58 deletions

View File

@ -276,7 +276,7 @@ AdvSceneSwitcher.condition.filter.type.active="Ist aktiviert"
AdvSceneSwitcher.condition.filter.type.showing="Ist deaktiviert"
AdvSceneSwitcher.condition.filter.type.settingsMatch="Einstellungen passen"
AdvSceneSwitcher.condition.filter.getSettings="Aktuelle Einstellungen abrufen"
AdvSceneSwitcher.condition.filter.entry.line1="Auf{{sources}}{{filters}}{{conditions}}{{settingSelection}}"
AdvSceneSwitcher.condition.filter.entry.line1="Auf{{sources}}{{filters}}{{conditions}}{{settingSelection}}{{refresh}}"
AdvSceneSwitcher.condition.filter.entry.line2="{{settings}}"
AdvSceneSwitcher.condition.filter.entry.line3="{{regex}} {{getSettings}}"
AdvSceneSwitcher.condition.sceneOrder="Reihenfolge der Szenenelemente"
@ -445,7 +445,7 @@ AdvSceneSwitcher.action.filter="Filter"
AdvSceneSwitcher.action.filter.type.enable="Aktivieren"
AdvSceneSwitcher.action.filter.type.disable="Deaktivieren"
AdvSceneSwitcher.action.filter.type.settings="Einstellungen festlegen"
AdvSceneSwitcher.action.filter.entry="Auf {{sources}} {{actions}} {{filters}}"
AdvSceneSwitcher.action.filter.entry="Auf{{sources}}{{actions}}{{filters}}{{filters}}{{refresh}}"
AdvSceneSwitcher.action.filter.getSettings="Aktuelle Einstellungen abfragen"
AdvSceneSwitcher.action.source="Quelle"
AdvSceneSwitcher.action.source.type.enable="Aktivieren"
@ -455,7 +455,6 @@ AdvSceneSwitcher.action.source.type.refreshSettings="Aktualisieren der Quellenei
AdvSceneSwitcher.action.source.type.pressSettingsButton="Drücken der Einstellungstaste"
AdvSceneSwitcher.action.source.type.refreshSettings.tooltip="Kann verwendet werden, um Browser-, Medien- usw. Quellen zu aktualisieren"
AdvSceneSwitcher.action.source.noSettingsButtons="Keine Buttons gefunden!"
AdvSceneSwitcher.action.source.entry="{{actions}}{{sources}}{{settingsButtons}}{{deinterlaceMode}}{{deinterlaceOrder}}"
AdvSceneSwitcher.action.source.warning="Warnung: Das globale Aktivieren und Deaktivieren von Quellen kann nicht über die OBS-Benutzeroberfläche gesteuert werden"
AdvSceneSwitcher.action.source.getSettings="Aktuelle Einstellungen abfragen"
AdvSceneSwitcher.action.media="Medien"

View File

@ -380,9 +380,11 @@ 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.refresh="Refresh"
AdvSceneSwitcher.condition.source.refreshTooltip="Repopulate the source settings selection with the settings of the source which's name matches the variable value."
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}}{{settingSelection}}"
AdvSceneSwitcher.condition.source.entry.line1="{{sources}}{{conditions}}{{settingSelection}}{{refresh}}"
AdvSceneSwitcher.condition.source.entry.line2="{{settings}}"
AdvSceneSwitcher.condition.source.entry.line3="{{regex}}{{getSettings}}"
AdvSceneSwitcher.condition.virtualCamera="Virtual camera"
@ -396,8 +398,10 @@ AdvSceneSwitcher.condition.filter.type.settingsMatch="Settings match"
AdvSceneSwitcher.condition.filter.type.settingsChanged="Settings changed"
AdvSceneSwitcher.condition.filter.type.individualSettingMatches="Settings value matches"
AdvSceneSwitcher.condition.filter.type.individualSettingChanged="Settings value changed"
AdvSceneSwitcher.condition.filter.refresh="Refresh"
AdvSceneSwitcher.condition.filter.refreshTooltip="Repopulate the filter settings selection with the settings of the filter which's name matches the variable value."
AdvSceneSwitcher.condition.filter.getSettings="Get current settings"
AdvSceneSwitcher.condition.filter.entry.line1="On{{sources}}{{filters}}{{conditions}}{{settingSelection}}"
AdvSceneSwitcher.condition.filter.entry.line1="On{{sources}}{{filters}}{{conditions}}{{settingSelection}}{{refresh}}"
AdvSceneSwitcher.condition.filter.entry.line2="{{settings}}"
AdvSceneSwitcher.condition.filter.entry.line3="{{regex}}{{getSettings}}"
AdvSceneSwitcher.condition.sceneOrder="Scene item order"
@ -665,7 +669,9 @@ AdvSceneSwitcher.action.filter.type.enable="Enable"
AdvSceneSwitcher.action.filter.type.disable="Disable"
AdvSceneSwitcher.action.filter.type.toggle="Toggle"
AdvSceneSwitcher.action.filter.type.settings="Set settings"
AdvSceneSwitcher.action.filter.entry="On{{sources}}{{actions}}{{filters}}"
AdvSceneSwitcher.action.filter.refresh="Refresh"
AdvSceneSwitcher.action.filter.refreshTooltip="Repopulate the filter settings selection with the settings of the filter which's name matches the variable value."
AdvSceneSwitcher.action.filter.entry="On{{sources}}{{actions}}{{filters}}{{refresh}}"
AdvSceneSwitcher.action.filter.entry.settings="{{settings}}{{settingsInputMethod}}{{settingValue}}{{tempVar}}"
AdvSceneSwitcher.action.filter.getSettings="Get current settings"
AdvSceneSwitcher.action.filter.inputMethod.individualManual="Set to fixed value"
@ -684,7 +690,7 @@ AdvSceneSwitcher.action.source.type.openInteractionDialog="Open interaction dial
AdvSceneSwitcher.action.source.type.openFilterDialog="Open filter dialog"
AdvSceneSwitcher.action.source.type.openPropertiesDialog="Open properties dialog"
AdvSceneSwitcher.action.source.noSettingsButtons="No buttons found!"
AdvSceneSwitcher.action.source.entry="{{actions}}{{sources}}{{settingsButtons}}{{deinterlaceMode}}{{deinterlaceOrder}}"
AdvSceneSwitcher.action.source.entry="{{actions}}{{sources}}{{settingsButtons}}{{deinterlaceMode}}{{deinterlaceOrder}}{{refresh}}"
AdvSceneSwitcher.action.source.entry.settings="{{settings}}{{settingsInputMethod}}{{settingValue}}{{tempVar}}"
AdvSceneSwitcher.action.source.warning="Warning: Enabling and disabling sources globally cannot be controlled by the OBS UI\nYou might be looking for \"Scene item visibility\""
AdvSceneSwitcher.action.source.getSettings="Get current settings"
@ -702,6 +708,8 @@ AdvSceneSwitcher.action.source.deinterlaceOrder.bottomFieldFirst="Bottom Field F
AdvSceneSwitcher.action.source.inputMethod.individualManual="Set to fixed value"
AdvSceneSwitcher.action.source.inputMethod.individualTempvar="Set to macro property"
AdvSceneSwitcher.action.source.inputMethod.json="Set setting JSON string"
AdvSceneSwitcher.action.source.refresh="Refresh"
AdvSceneSwitcher.action.source.refreshTooltip="Repopulate the source settings selection with the settings of the source which's name matches the variable value."
AdvSceneSwitcher.action.media="Media"
AdvSceneSwitcher.action.media.type.play="Play"
AdvSceneSwitcher.action.media.type.pause="Pause"

View File

@ -228,7 +228,7 @@ AdvSceneSwitcher.condition.filter.type.active="Está habilitado"
AdvSceneSwitcher.condition.filter.type.showing="Está deshabilitado"
AdvSceneSwitcher.condition.filter.type.settingsMatch="Coincidencia de configuración"
AdvSceneSwitcher.condition.filter.getSettings="Obtener la configuración actual"
AdvSceneSwitcher.condition.filter.entry.line1="En{{sources}}{{filters}}{{conditions}}{{settingSelection}}"
AdvSceneSwitcher.condition.filter.entry.line1="En{{sources}}{{filters}}{{conditions}}{{settingSelection}}{{refresh}}"
AdvSceneSwitcher.condition.filter.entry.line2="{{settings}}"
AdvSceneSwitcher.condition.filter.entry.line3="{{regex}} {{getSettings}}"
AdvSceneSwitcher.condition.sceneOrder="Orden de elementos de escena"
@ -367,13 +367,12 @@ AdvSceneSwitcher.action.filter="Filtro"
AdvSceneSwitcher.action.filter.type.enable="Habilitar"
AdvSceneSwitcher.action.filter.type.disable="Deshabilitar"
AdvSceneSwitcher.action.filter.type.settings="Establecer configuración"
AdvSceneSwitcher.action.filter.entry="En {{sources}} {{actions}} {{filters}}"
AdvSceneSwitcher.action.filter.entry="En{{sources}}{{actions}}{{filters}}{{refresh}}"
AdvSceneSwitcher.action.filter.getSettings="Obtener la configuración actual"
AdvSceneSwitcher.action.source="Fuente"
AdvSceneSwitcher.action.source.type.enable="Habilitar"
AdvSceneSwitcher.action.source.type.disable="Deshabilitar"
AdvSceneSwitcher.action.source.type.settings="Establecer configuración"
AdvSceneSwitcher.action.source.entry="{{actions}}{{sources}}{{settingsButtons}}{{deinterlaceMode}}{{deinterlaceOrder}}"
AdvSceneSwitcher.action.source.warning="Advertencia: la IU de OBS no puede controlar la habilitación y deshabilitación global de fuentes"
AdvSceneSwitcher.action.source.getSettings="Obtener la configuración actual"
AdvSceneSwitcher.action.media="Medios"

View File

@ -343,7 +343,7 @@ AdvSceneSwitcher.condition.filter.type.showing="Est désactivé"
AdvSceneSwitcher.condition.filter.type.settingsMatch="Correspond aux paramètres"
AdvSceneSwitcher.condition.filter.type.settingsChanged="Paramètres modifiés"
AdvSceneSwitcher.condition.filter.getSettings="Obtenir les paramètres actuels"
AdvSceneSwitcher.condition.filter.entry.line1="Sur{{sources}}{{filters}}{{conditions}}{{settingSelection}}"
AdvSceneSwitcher.condition.filter.entry.line1="Sur{{sources}}{{filters}}{{conditions}}{{settingSelection}}{{refresh}}"
AdvSceneSwitcher.condition.sceneOrder="Ordre des éléments de la scène"
AdvSceneSwitcher.condition.sceneOrder.type.above="Est au-dessus de"
AdvSceneSwitcher.condition.sceneOrder.type.below="Est en dessous de"
@ -523,7 +523,7 @@ AdvSceneSwitcher.action.filter.type.enable="Activer"
AdvSceneSwitcher.action.filter.type.disable="Désactiver"
AdvSceneSwitcher.action.filter.type.toggle="Basculer"
AdvSceneSwitcher.action.filter.type.settings="Définir les paramètres"
AdvSceneSwitcher.action.filter.entry="Sur{{sources}}{{actions}}{{filters}}"
AdvSceneSwitcher.action.filter.entry="Sur{{sources}}{{actions}}{{filters}}{{refresh}}"
AdvSceneSwitcher.action.filter.getSettings="Obtenir les paramètres actuels"
AdvSceneSwitcher.action.source="Source"
AdvSceneSwitcher.action.source.type.enable="Activer"

View File

@ -204,7 +204,7 @@ AdvSceneSwitcher.condition.filter.type.active="Etkinleştirildi"
AdvSceneSwitcher.condition.filter.type.showing="Etkisizleştirildi"
AdvSceneSwitcher.condition.filter.type.settingsMatch="Ayarlar eşleşti"
AdvSceneSwitcher.condition.filter.getSettings="Mevcut ayarları al"
AdvSceneSwitcher.condition.filter.entry.line1="Açık{{sources}}{{filters}}{{conditions}}{{settingSelection}}"
AdvSceneSwitcher.condition.filter.entry.line1="Açık{{sources}}{{filters}}{{conditions}}{{settingSelection}}{{refresh}}"
AdvSceneSwitcher.condition.filter.entry.line2="{{settings}}"
AdvSceneSwitcher.condition.filter.entry.line3="{{regex}} {{getSettings}}"
AdvSceneSwitcher.condition.sceneOrder="Sahne öğesi sırası"
@ -297,13 +297,12 @@ AdvSceneSwitcher.action.filter="Filtrele"
AdvSceneSwitcher.action.filter.type.enable="Etkin"
AdvSceneSwitcher.action.filter.type.disable="Etkisiz"
AdvSceneSwitcher.action.filter.type.settings="Ayarları yap"
AdvSceneSwitcher.action.filter.entry="Açık {{sources}} {{actions}} {{filters}}"
AdvSceneSwitcher.action.filter.entry="Açık{{sources}}{{actions}}{{filters}}{{refresh}}"
AdvSceneSwitcher.action.filter.getSettings="Mevcut ayarları al"
AdvSceneSwitcher.action.source="Kaynak"
AdvSceneSwitcher.action.source.type.enable="Etkin"
AdvSceneSwitcher.action.source.type.disable="Etkisiz"
AdvSceneSwitcher.action.source.type.settings="Ayarları yap"
AdvSceneSwitcher.action.source.entry="{{actions}}{{sources}}{{settingsButtons}}{{deinterlaceMode}}{{deinterlaceOrder}}"
AdvSceneSwitcher.action.source.warning="Uyarı: Kaynakların global olarak etkinleştirilmesi ve devre dışı bırakılması, OBS UI tarafından kontrol edilemez"
AdvSceneSwitcher.action.source.getSettings="Mevcut Ayarları yap"
AdvSceneSwitcher.action.media="Medya"

View File

@ -322,7 +322,7 @@ AdvSceneSwitcher.condition.filter.type.active="已启用"
AdvSceneSwitcher.condition.filter.type.showing="已关闭"
AdvSceneSwitcher.condition.filter.type.settingsMatch="设置完全匹配"
AdvSceneSwitcher.condition.filter.getSettings="获取当前设置"
AdvSceneSwitcher.condition.filter.entry.line1="在{{sources}}的{{filters}}是{{conditions}}{{settingSelection}}"
AdvSceneSwitcher.condition.filter.entry.line1="在{{sources}}的{{filters}}是{{conditions}}{{settingSelection}}{{refresh}}"
AdvSceneSwitcher.condition.filter.entry.line2="{{settings}}"
AdvSceneSwitcher.condition.filter.entry.line3="{{regex}} {{getSettings}}"
AdvSceneSwitcher.condition.sceneOrder="场景项目顺序"
@ -502,7 +502,7 @@ AdvSceneSwitcher.action.filter="滤镜"
AdvSceneSwitcher.action.filter.type.enable="开启"
AdvSceneSwitcher.action.filter.type.disable="关闭"
AdvSceneSwitcher.action.filter.type.settings="参数设置"
AdvSceneSwitcher.action.filter.entry="置 {{sources}} {{actions}} {{filters}}"
AdvSceneSwitcher.action.filter.entry="置{{sources}}{{actions}}{{filters}}{{refresh}}"
AdvSceneSwitcher.action.filter.getSettings="获取当前设置"
AdvSceneSwitcher.action.source="源"
AdvSceneSwitcher.action.source.type.enable="启用"
@ -512,7 +512,6 @@ AdvSceneSwitcher.action.source.type.refreshSettings="刷新源设置"
AdvSceneSwitcher.action.source.type.pressSettingsButton="按下设置按钮"
AdvSceneSwitcher.action.source.type.refreshSettings.tooltip="可用于刷新浏览器、媒体、源、etc"
AdvSceneSwitcher.action.source.noSettingsButtons="未找到按钮!"
AdvSceneSwitcher.action.source.entry="{{actions}}{{sources}}{{settingsButtons}}{{deinterlaceMode}}{{deinterlaceOrder}}"
AdvSceneSwitcher.action.source.warning="警告OBS UI无法控制全局启用和禁用源注意通过这个设置禁用我测试你必须通过这个在启用才行不然点击小眼睛你无法显示"
AdvSceneSwitcher.action.source.getSettings="获取当前设置"
AdvSceneSwitcher.action.media="媒体"

View File

@ -187,7 +187,9 @@ MacroActionFilterEdit::MacroActionFilterEdit(
_manualSettingValue(new VariableTextEdit(this, 5, 1, 1)),
_tempVars(new TempVariableSelection(this)),
_filterSettings(new SourceSettingSelection(this)),
_settingsString(new VariableTextEdit(this))
_settingsString(new VariableTextEdit(this)),
_refreshSettingSelection(new QPushButton(
obs_module_text("AdvSceneSwitcher.action.filter.refresh")))
{
_filters->setSizeAdjustPolicy(QComboBox::AdjustToContents);
@ -195,6 +197,8 @@ MacroActionFilterEdit::MacroActionFilterEdit(
auto sources = GetSourcesWithFilterNames();
sources.sort();
_sources->SetSourceNameList(sources);
_refreshSettingSelection->setToolTip(obs_module_text(
"AdvSceneSwitcher.action.filter.refreshTooltip"));
populateSettingsInputMethods(_settingsInputMethods);
@ -221,6 +225,8 @@ MacroActionFilterEdit::MacroActionFilterEdit(
QWidget::connect(_filterSettings,
SIGNAL(SelectionChanged(const SourceSetting &)), this,
SLOT(SelectionChanged(const SourceSetting &)));
QWidget::connect(_refreshSettingSelection, SIGNAL(clicked()), this,
SLOT(RefreshVariableSourceSelectionValue()));
auto entrylayout = new QHBoxLayout;
@ -232,8 +238,8 @@ MacroActionFilterEdit::MacroActionFilterEdit(
{"{{settingsInputMethod}}", _settingsInputMethods},
{"{{settingValue}}", _manualSettingValue},
{"{{tempVar}}", _tempVars},
{"{{getSettings}}", _getSettings},
};
{"{{refresh}}", _refreshSettingSelection}};
PlaceWidgets(obs_module_text("AdvSceneSwitcher.action.filter.entry"),
entrylayout, widgetPlaceholders);
_settingsLayout->setContentsMargins(0, 0, 0, 0);
@ -302,6 +308,7 @@ void MacroActionFilterEdit::FilterChanged(const FilterSelection &filter)
const auto filters =
_entryData->_filter.GetFilters(_entryData->_source);
_filterSettings->SetSource(filters.empty() ? nullptr : filters.at(0));
SetWidgetVisibility();
emit HeaderInfoChanged(
QString::fromStdString(_entryData->GetShortDesc()));
}
@ -328,9 +335,11 @@ void MacroActionFilterEdit::GetSettingsClicked()
case MacroActionFilter::SettingsInputMethod::INDIVIDUAL_MANUAL: {
const auto filters =
_entryData->_filter.GetFilters(_entryData->_source);
_manualSettingValue->setPlainText(GetSourceSettingValue(
filters.empty() ? nullptr : filters.at(0),
_entryData->_setting));
_manualSettingValue->setPlainText(
GetSourceSettingValue(filters.empty() ? nullptr
: filters.at(0),
_entryData->_setting)
.value_or(""));
break;
}
case MacroActionFilter::SettingsInputMethod::INDIVIDUAL_TEMPVAR:
@ -407,6 +416,13 @@ void MacroActionFilterEdit::ManualSettingsValueChanged()
updateGeometry();
}
void MacroActionFilterEdit::RefreshVariableSourceSelectionValue()
{
const auto filters =
_entryData->_filter.GetFilters(_entryData->_source);
_filterSettings->SetSource(filters.empty() ? nullptr : filters.at(0));
}
void MacroActionFilterEdit::SetWidgetVisibility()
{
SetLayoutVisible(_settingsLayout,
@ -438,6 +454,14 @@ void MacroActionFilterEdit::SetWidgetVisibility()
_manualSettingValue->hide();
}
_refreshSettingSelection->setVisible(
_entryData->_settingsInputMethod ==
MacroActionFilter::SettingsInputMethod::INDIVIDUAL_MANUAL &&
(_entryData->_source.GetType() ==
SourceSelection::Type::VARIABLE ||
_entryData->_filter.GetType() ==
FilterSelection::Type::VARIABLE));
adjustSize();
updateGeometry();
}

View File

@ -79,6 +79,7 @@ private slots:
void SelectionChanged(const TempVariableRef &);
void SelectionChanged(const SourceSetting &);
void ManualSettingsValueChanged();
void RefreshVariableSourceSelectionValue();
signals:
void HeaderInfoChanged(const QString &);
@ -93,6 +94,7 @@ protected:
TempVariableSelection *_tempVars;
SourceSettingSelection *_filterSettings;
VariableTextEdit *_settingsString;
QPushButton *_refreshSettingSelection;
std::shared_ptr<MacroActionFilter> _entryData;

View File

@ -341,8 +341,9 @@ MacroActionSourceEdit::MacroActionSourceEdit(
_deinterlaceMode(new QComboBox()),
_deinterlaceOrder(new QComboBox()),
_warning(new QLabel(
obs_module_text("AdvSceneSwitcher.action.source.warning")))
obs_module_text("AdvSceneSwitcher.action.source.warning"))),
_refreshSettingSelection(new QPushButton(
obs_module_text("AdvSceneSwitcher.action.source.refresh")))
{
populateActionSelection(_actions);
auto sources = GetSourceNames();
@ -351,6 +352,8 @@ MacroActionSourceEdit::MacroActionSourceEdit(
populateDeinterlaceModeSelection(_deinterlaceMode);
populateDeinterlaceFieldOrderSelection(_deinterlaceOrder);
populateSettingsInputMethods(_settingsInputMethods);
_refreshSettingSelection->setToolTip(obs_module_text(
"AdvSceneSwitcher.action.source.refreshTooltip"));
QWidget::connect(_actions, SIGNAL(currentIndexChanged(int)), this,
SLOT(ActionChanged(int)));
@ -378,6 +381,8 @@ MacroActionSourceEdit::MacroActionSourceEdit(
QWidget::connect(_sourceSettings,
SIGNAL(SelectionChanged(const SourceSetting &)), this,
SLOT(SelectionChanged(const SourceSetting &)));
QWidget::connect(_refreshSettingSelection, SIGNAL(clicked()), this,
SLOT(RefreshVariableSourceSelectionValue()));
auto entryLayout = new QHBoxLayout;
entryLayout->setContentsMargins(0, 0, 0, 0);
@ -392,7 +397,8 @@ MacroActionSourceEdit::MacroActionSourceEdit(
{"{{settingsButtons}}", _settingsButtons},
{"{{deinterlaceMode}}", _deinterlaceMode},
{"{{deinterlaceOrder}}", _deinterlaceOrder},
};
{"{{refresh}}", _refreshSettingSelection}};
PlaceWidgets(obs_module_text("AdvSceneSwitcher.action.source.entry"),
entryLayout, widgetPlaceholders);
_settingsLayout->setContentsMargins(0, 0, 0, 0);
@ -456,6 +462,7 @@ void MacroActionSourceEdit::SourceChanged(const SourceSelection &source)
populateSourceButtonSelection(_settingsButtons,
_entryData->_source.GetSource());
_sourceSettings->SetSource(_entryData->_source.GetSource());
SetWidgetVisibility();
emit HeaderInfoChanged(
QString::fromStdString(_entryData->GetShortDesc()));
}
@ -490,8 +497,10 @@ void MacroActionSourceEdit::GetSettingsClicked()
switch (_entryData->_settingsInputMethod) {
case MacroActionSource::SettingsInputMethod::INDIVIDUAL_MANUAL:
_manualSettingValue->setPlainText(GetSourceSettingValue(
_entryData->_source.GetSource(), _entryData->_setting));
_manualSettingValue->setPlainText(
GetSourceSettingValue(_entryData->_source.GetSource(),
_entryData->_setting)
.value_or(""));
break;
case MacroActionSource::SettingsInputMethod::INDIVIDUAL_TEMPVAR:
break;
@ -586,6 +595,11 @@ void MacroActionSourceEdit::ManualSettingsValueChanged()
updateGeometry();
}
void MacroActionSourceEdit::RefreshVariableSourceSelectionValue()
{
_sourceSettings->SetSource(_entryData->_source.GetSource());
}
void MacroActionSourceEdit::SetWidgetVisibility()
{
SetLayoutVisible(_settingsLayout,
@ -630,6 +644,13 @@ void MacroActionSourceEdit::SetWidgetVisibility()
_deinterlaceOrder->setVisible(
_entryData->_action ==
MacroActionSource::Action::DEINTERLACE_FIELD_ORDER);
_refreshSettingSelection->setVisible(
_entryData->_settingsInputMethod ==
MacroActionSource::SettingsInputMethod::INDIVIDUAL_MANUAL &&
_entryData->_source.GetType() ==
SourceSelection::Type::VARIABLE);
adjustSize();
updateGeometry();
}

View File

@ -99,6 +99,8 @@ private slots:
void SettingsInputMethodChanged(int);
void SelectionChanged(const SourceSetting &);
void ManualSettingsValueChanged();
void RefreshVariableSourceSelectionValue();
signals:
void HeaderInfoChanged(const QString &);
@ -116,6 +118,7 @@ protected:
QComboBox *_deinterlaceMode;
QComboBox *_deinterlaceOrder;
QLabel *_warning;
QPushButton *_refreshSettingSelection;
std::shared_ptr<MacroActionSource> _entryData;

View File

@ -61,17 +61,23 @@ bool MacroConditionFilter::CheckConditionHelper(const OBSWeakSource &filter)
break;
}
case Condition::INDIVIDUAL_SETTING_MATCH: {
std::string value = GetSourceSettingValue(filter, _setting);
ret = _regex.Enabled() ? _regex.Matches(value, _settings)
auto value = GetSourceSettingValue(filter, _setting);
if (!value) {
return false;
}
ret = _regex.Enabled() ? _regex.Matches(*value, _settings)
: value == std::string(_settings);
SetVariableValue(value);
SetVariableValue(*value);
break;
}
case Condition::INDIVIDUAL_SETTING_CHANGED: {
std::string value = GetSourceSettingValue(filter, _setting);
auto value = GetSourceSettingValue(filter, _setting);
if (!value) {
return false;
}
ret = _currentSettingsValue != value;
_currentSettingsValue = value;
SetVariableValue(value);
_currentSettingsValue = *value;
SetVariableValue(*value);
break;
}
default:
@ -153,12 +159,16 @@ MacroConditionFilterEdit::MacroConditionFilterEdit(
"AdvSceneSwitcher.condition.filter.getSettings"))),
_settings(new VariableTextEdit(this)),
_regex(new RegexConfigWidget(parent)),
_settingSelection(new SourceSettingSelection())
_settingSelection(new SourceSettingSelection()),
_refreshSettingSelection(new QPushButton(
obs_module_text("AdvSceneSwitcher.condition.filter.refresh")))
{
populateConditionSelection(_conditions);
auto sources = GetSourcesWithFilterNames();
sources.sort();
_sources->SetSourceNameList(sources);
_refreshSettingSelection->setToolTip(obs_module_text(
"AdvSceneSwitcher.condition.filter.refreshTooltip"));
QWidget::connect(_sources,
SIGNAL(SourceChanged(const SourceSelection &)), this,
@ -178,6 +188,8 @@ MacroConditionFilterEdit::MacroConditionFilterEdit(
QWidget::connect(_settingSelection,
SIGNAL(SelectionChanged(const SourceSetting &)), this,
SLOT(SettingSelectionChanged(const SourceSetting &)));
QWidget::connect(_refreshSettingSelection, SIGNAL(clicked()), this,
SLOT(RefreshVariableSourceSelectionValue()));
std::unordered_map<std::string, QWidget *> widgetPlaceholders = {
{"{{sources}}", _sources},
@ -187,8 +199,8 @@ MacroConditionFilterEdit::MacroConditionFilterEdit(
{"{{getSettings}}", _getSettings},
{"{{regex}}", _regex},
{"{{settingSelection}}", _settingSelection},
{"{{refresh}}", _refreshSettingSelection}};
};
auto line1Layout = new QHBoxLayout;
line1Layout->setContentsMargins(0, 0, 0, 0);
PlaceWidgets(obs_module_text(
@ -239,6 +251,7 @@ void MacroConditionFilterEdit::FilterChanged(const FilterSelection &filter)
const auto filters =
_entryData->_filter.GetFilters(_entryData->_source);
_settingSelection->SetSource(filters.empty() ? nullptr : filters.at(0));
SetWidgetVisibility();
emit HeaderInfoChanged(
QString::fromStdString(_entryData->GetShortDesc()));
}
@ -274,8 +287,10 @@ void MacroConditionFilterEdit::GetSettingsClicked()
MacroConditionFilter::Condition::SETTINGS_MATCH) {
value = FormatJsonString(GetSourceSettings(filters.at(0)));
} else {
value = QString::fromStdString(GetSourceSettingValue(
filters.at(0), _entryData->_setting));
value = QString::fromStdString(
GetSourceSettingValue(filters.at(0),
_entryData->_setting)
.value_or(""));
}
if (_entryData->_regex.Enabled()) {
@ -321,6 +336,13 @@ void MacroConditionFilterEdit::SettingSelectionChanged(
_entryData->_setting = setting;
}
void MacroConditionFilterEdit::RefreshVariableSourceSelectionValue()
{
const auto filters =
_entryData->_filter.GetFilters(_entryData->_source);
_settingSelection->SetSource(filters.empty() ? nullptr : filters.at(0));
}
void MacroConditionFilterEdit::SetWidgetVisibility()
{
const bool showSettingsControls =
@ -336,6 +358,13 @@ void MacroConditionFilterEdit::SetWidgetVisibility()
INDIVIDUAL_SETTING_MATCH ||
_entryData->_condition == MacroConditionFilter::Condition::
INDIVIDUAL_SETTING_CHANGED);
_refreshSettingSelection->setVisible(
_entryData->_condition == MacroConditionFilter::Condition::
INDIVIDUAL_SETTING_MATCH &&
(_entryData->_source.GetType() ==
SourceSelection::Type::VARIABLE ||
_entryData->_filter.GetType() ==
FilterSelection::Type::VARIABLE));
adjustSize();
updateGeometry();
}

View File

@ -75,6 +75,7 @@ private slots:
void SettingsChanged();
void RegexChanged(const RegexConfig &);
void SettingSelectionChanged(const SourceSetting &);
void RefreshVariableSourceSelectionValue();
signals:
void HeaderInfoChanged(const QString &);
@ -88,6 +89,7 @@ private:
VariableTextEdit *_settings;
RegexConfigWidget *_regex;
SourceSettingSelection *_settingSelection;
QPushButton *_refreshSettingSelection;
std::shared_ptr<MacroConditionFilter> _entryData;
bool _loading = true;

View File

@ -63,19 +63,25 @@ bool MacroConditionSource::CheckCondition()
break;
}
case Condition::INDIVIDUAL_SETTING_MATCH: {
std::string value =
auto value =
GetSourceSettingValue(_source.GetSource(), _setting);
ret = _regex.Enabled() ? _regex.Matches(value, _settings)
if (!value) {
return false;
}
ret = _regex.Enabled() ? _regex.Matches(*value, _settings)
: value == std::string(_settings);
SetVariableValue(value);
SetVariableValue(*value);
break;
}
case Condition::INDIVIDUAL_SETTING_CHANGED: {
std::string value =
auto value =
GetSourceSettingValue(_source.GetSource(), _setting);
ret = _currentSettingsValue != value;
_currentSettingsValue = value;
SetVariableValue(value);
if (!value) {
return false;
}
ret = _currentSettingsValue != *value;
_currentSettingsValue = *value;
SetVariableValue(*value);
break;
}
default:
@ -137,7 +143,9 @@ MacroConditionSourceEdit::MacroConditionSourceEdit(
"AdvSceneSwitcher.condition.source.getSettings"))),
_settings(new VariableTextEdit(this)),
_regex(new RegexConfigWidget(parent)),
_settingSelection(new SourceSettingSelection())
_settingSelection(new SourceSettingSelection()),
_refreshSettingSelection(new QPushButton(
obs_module_text("AdvSceneSwitcher.condition.source.refresh")))
{
populateConditionSelection(_conditions);
auto sources = GetSourceNames();
@ -145,6 +153,8 @@ MacroConditionSourceEdit::MacroConditionSourceEdit(
auto scenes = GetSceneNames();
scenes.sort();
_sources->SetSourceNameList(sources + scenes);
_refreshSettingSelection->setToolTip(obs_module_text(
"AdvSceneSwitcher.condition.source.refreshTooltip"));
QWidget::connect(_sources,
SIGNAL(SourceChanged(const SourceSelection &)), this,
@ -161,6 +171,8 @@ MacroConditionSourceEdit::MacroConditionSourceEdit(
QWidget::connect(_settingSelection,
SIGNAL(SelectionChanged(const SourceSetting &)), this,
SLOT(SettingSelectionChanged(const SourceSetting &)));
QWidget::connect(_refreshSettingSelection, SIGNAL(clicked()), this,
SLOT(RefreshVariableSourceSelectionValue()));
std::unordered_map<std::string, QWidget *> widgetPlaceholders = {
{"{{sources}}", _sources},
@ -168,7 +180,8 @@ MacroConditionSourceEdit::MacroConditionSourceEdit(
{"{{settings}}", _settings},
{"{{getSettings}}", _getSettings},
{"{{regex}}", _regex},
{"{{settingSelection}}", _settingSelection}};
{"{{settingSelection}}", _settingSelection},
{"{{refresh}}", _refreshSettingSelection}};
auto line1Layout = new QHBoxLayout;
line1Layout->setContentsMargins(0, 0, 0, 0);
@ -207,6 +220,7 @@ void MacroConditionSourceEdit::SourceChanged(const SourceSelection &source)
_entryData->_source = source;
}
_settingSelection->SetSource(_entryData->_source.GetSource());
SetWidgetVisibility();
emit HeaderInfoChanged(
QString::fromStdString(_entryData->GetShortDesc()));
}
@ -235,8 +249,10 @@ void MacroConditionSourceEdit::GetSettingsClicked()
value = FormatJsonString(
GetSourceSettings(_entryData->_source.GetSource()));
} else {
value = QString::fromStdString(GetSourceSettingValue(
_entryData->_source.GetSource(), _entryData->_setting));
value = QString::fromStdString(
GetSourceSettingValue(_entryData->_source.GetSource(),
_entryData->_setting)
.value_or(""));
}
if (_entryData->_regex.Enabled()) {
@ -282,6 +298,11 @@ void MacroConditionSourceEdit::SettingSelectionChanged(
_entryData->_setting = setting;
}
void MacroConditionSourceEdit::RefreshVariableSourceSelectionValue()
{
_settingSelection->SetSource(_entryData->_source.GetSource());
}
void MacroConditionSourceEdit::SetWidgetVisibility()
{
const bool settingsMatch =
@ -307,6 +328,12 @@ void MacroConditionSourceEdit::SetWidgetVisibility()
"AdvSceneSwitcher.condition.source.sceneVisibilityHint")
: "");
_refreshSettingSelection->setVisible(
_entryData->_condition == MacroConditionSource::Condition::
INDIVIDUAL_SETTING_MATCH &&
_entryData->_source.GetType() ==
SourceSelection::Type::VARIABLE);
adjustSize();
updateGeometry();
}

View File

@ -70,6 +70,7 @@ private slots:
void SettingsChanged();
void RegexChanged(const RegexConfig &);
void SettingSelectionChanged(const SourceSetting &);
void RefreshVariableSourceSelectionValue();
signals:
void HeaderInfoChanged(const QString &);
@ -80,6 +81,7 @@ protected:
VariableTextEdit *_settings;
RegexConfigWidget *_regex;
SourceSettingSelection *_settingSelection;
QPushButton *_refreshSettingSelection;
std::shared_ptr<MacroConditionSource> _entryData;

View File

@ -14,7 +14,9 @@ namespace advss {
SourceSetting::SourceSetting(const std::string &id,
const std::string &description,
const std::string &longDescription)
: _id(id), _description(description), _longDescription(longDescription)
: _id(id),
_description(description),
_longDescription(longDescription)
{
}
@ -69,22 +71,22 @@ std::vector<SourceSetting> GetSoruceSettings(obs_source_t *source)
return settings;
}
std::string GetSourceSettingValue(const OBSWeakSource &ws,
const SourceSetting &setting)
std::optional<std::string> GetSourceSettingValue(const OBSWeakSource &ws,
const SourceSetting &setting)
{
OBSSourceAutoRelease source = obs_weak_source_get_source(ws);
OBSDataAutoRelease data = obs_source_get_settings(source);
if (!data) {
return "";
return {};
}
OBSDataAutoRelease dataWithDefaults = obs_data_get_defaults(data);
obs_data_apply(dataWithDefaults, data);
auto json = obs_data_get_json(dataWithDefaults);
if (!json) {
return "";
return {};
}
auto value = GetJsonField(json, setting.GetID());
return value.value_or("");
return value;
}
void SetSourceSetting(obs_source_t *source, const SourceSetting &setting,

View File

@ -2,6 +2,7 @@
#include "filter-combo-box.hpp"
#include <obs.hpp>
#include <optional>
#include <string>
#include <vector>
#include <QWidget>
@ -28,8 +29,8 @@ private:
};
std::vector<SourceSetting> GetSoruceSettings(obs_source_t *source);
std::string GetSourceSettingValue(const OBSWeakSource &source,
const SourceSetting &setting);
std::optional<std::string> GetSourceSettingValue(const OBSWeakSource &source,
const SourceSetting &setting);
void SetSourceSetting(obs_source_t *source, const SourceSetting &setting,
const std::string &value);