From 3836a03a028fe96239102e6025e70117f127b99d Mon Sep 17 00:00:00 2001 From: WarmUpTill <19472752+WarmUpTill@users.noreply.github.com> Date: Sun, 6 Sep 2026 21:27:22 +0200 Subject: [PATCH] Convert dock window name field into a combo box Should make it easier to combine docks into a single dock window without having to know the exact dock window titles beforehand --- data/locale/en-US.ini | 1 + lib/macro/macro-settings.cpp | 55 ++++++++++++++++++++++++++++++++++-- lib/macro/macro-settings.hpp | 3 +- 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index a00c2c89..bd7985bb 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -267,6 +267,7 @@ AdvSceneSwitcher.macroTab.pauseStateSaveBehavior.unpause="Unpaused" AdvSceneSwitcher.macroTab.currentRegisterDock="Register dock widget to control the pause state of selected macro or run it manually" AdvSceneSwitcher.macroTab.currentIsStandaloneDock="Is standalone dock" AdvSceneSwitcher.macroTab.currentDockWindowName="Add to macro dock with name:" +AdvSceneSwitcher.macroTab.currentDockWindowName.addNew="Add new dock..." AdvSceneSwitcher.macroTab.currentDockAddRunButton="Add button to run the macro" AdvSceneSwitcher.macroTab.currentDockAddPauseButton="Add button to pause or unpause the macro" AdvSceneSwitcher.macroTab.currentDockAddStatusLabel="Add status label" diff --git a/lib/macro/macro-settings.cpp b/lib/macro/macro-settings.cpp index 090934e7..73c29a5c 100644 --- a/lib/macro/macro-settings.cpp +++ b/lib/macro/macro-settings.cpp @@ -1,5 +1,6 @@ #include "macro-settings.hpp" #include "layout-helpers.hpp" +#include "macro-helpers.hpp" #include "macro.hpp" #include "obs-module-helper.hpp" #include "plugin-state-helpers.hpp" @@ -8,11 +9,48 @@ #include #include #include +#include namespace advss { static GlobalMacroSettings macroSettings; +static constexpr int addNewDockWindowRole = Qt::UserRole + 1; + +static QStringList GetExistingDockWindowNames() +{ + std::set names; + for (const auto ¯o : GetAllMacros()) { + if (!macro) { + continue; + } + const auto &dockSettings = macro->GetDockSettings(); + if (dockSettings.IsStandaloneDock()) { + continue; + } + names.insert(dockSettings.DockWindowName()); + } + + QStringList result; + for (const auto &name : names) { + result << QString::fromStdString(name); + } + return result; +} + +static void PopulateDockWindowNameCombo(QComboBox *combo) +{ + combo->clear(); + auto names = GetExistingDockWindowNames(); + combo->addItems(names); + if (!names.isEmpty()) { + combo->insertSeparator(combo->count()); + } + combo->addItem(obs_module_text( + "AdvSceneSwitcher.macroTab.currentDockWindowName.addNew")); + combo->setItemData(combo->count() - 1, true, addNewDockWindowRole); +} + void GlobalMacroSettings::Save(obs_data_t *obj) const { auto data = obs_data_create(); @@ -96,7 +134,7 @@ MacroSettingsDialog::MacroSettingsDialog(QWidget *parent, "AdvSceneSwitcher.macroTab.currentRegisterDock"))), _currentMacroIsStandaloneDock(new QCheckBox(obs_module_text( "AdvSceneSwitcher.macroTab.currentIsStandaloneDock"))), - _currentMacroDockWindowName(new QLineEdit(this)), + _currentMacroDockWindowName(new QComboBox(this)), _currentMacroDockAddRunButton(new QCheckBox(obs_module_text( "AdvSceneSwitcher.macroTab.currentDockAddRunButton"))), _currentMacroDockAddPauseButton(new QCheckBox(obs_module_text( @@ -143,6 +181,17 @@ MacroSettingsDialog::MacroSettingsDialog(QWidget *parent, "AdvSceneSwitcher.macroTab.pauseStateSaveBehavior.unpause"), static_cast(Macro::PauseStateSaveBehavior::UNPAUSE)); + _currentMacroDockWindowName->setEditable(true); + PopulateDockWindowNameCombo(_currentMacroDockWindowName); + connect(_currentMacroDockWindowName, + qOverload(&QComboBox::activated), this, [this](int index) { + if (_currentMacroDockWindowName + ->itemData(index, addNewDockWindowRole) + .toBool()) { + _currentMacroDockWindowName->setCurrentText(""); + } + }); + auto highlightOptions = new QGroupBox( obs_module_text("AdvSceneSwitcher.macroTab.highlightSettings")); auto highlightLayout = new QVBoxLayout; @@ -348,7 +397,7 @@ MacroSettingsDialog::MacroSettingsDialog(QWidget *parent, _currentMacroRegisterDock->setChecked(dockEnabled); _currentMacroIsStandaloneDock->setChecked( dockSettings.IsStandaloneDock()); - _currentMacroDockWindowName->setText( + _currentMacroDockWindowName->setCurrentText( QString::fromStdString(dockSettings.DockWindowName())); _currentMacroDockAddRunButton->setChecked(dockSettings.HasRunButton()); _currentMacroDockAddPauseButton->setChecked( @@ -486,7 +535,7 @@ bool MacroSettingsDialog::AskForSettings(QWidget *parent, dockSettings.SetIsStandaloneDock( dialog._currentMacroIsStandaloneDock->isChecked()); dockSettings.SetDockWindowName( - dialog._currentMacroDockWindowName->text().toStdString()); + dialog._currentMacroDockWindowName->currentText().toStdString()); dockSettings.SetHasRunButton( dialog._currentMacroDockAddRunButton->isChecked()); dockSettings.SetHasPauseButton( diff --git a/lib/macro/macro-settings.hpp b/lib/macro/macro-settings.hpp index 84050751..10a559ed 100644 --- a/lib/macro/macro-settings.hpp +++ b/lib/macro/macro-settings.hpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -71,7 +72,7 @@ private: MacroInputSelection *_currentInputs; QCheckBox *_currentMacroRegisterDock; QCheckBox *_currentMacroIsStandaloneDock; - QLineEdit *_currentMacroDockWindowName; + QComboBox *_currentMacroDockWindowName; QCheckBox *_currentMacroDockAddRunButton; QCheckBox *_currentMacroDockAddPauseButton; QCheckBox *_currentMacroDockAddStatusLabel;