diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index d558c2f6..f62ec4de 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -30,6 +30,7 @@ AdvSceneSwitcher.generalTab.generalBehavior.verboseLogging="Enable verbose loggi AdvSceneSwitcher.generalTab.generalBehavior.saveWindowGeo="Save window position and size" AdvSceneSwitcher.generalTab.generalBehavior.showTrayNotifications="Show system tray notifications" AdvSceneSwitcher.generalTab.generalBehavior.disableUIHints="Disable UI hints" +AdvSceneSwitcher.generalTab.generalBehavior.verticalMacroControls="Use permanent vertical controls on Macro tab" AdvSceneSwitcher.generalTab.priority="Priority" AdvSceneSwitcher.generalTab.priority.description="Switching methods priority (Highest priority is at the top)" AdvSceneSwitcher.generalTab.priority.threadPriority="Use thread priority" diff --git a/forms/advanced-scene-switcher.ui b/forms/advanced-scene-switcher.ui index 81b071d3..998d9091 100644 --- a/forms/advanced-scene-switcher.ui +++ b/forms/advanced-scene-switcher.ui @@ -325,6 +325,30 @@ + + + + + + AdvSceneSwitcher.generalTab.generalBehavior.verticalMacroControls + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + diff --git a/src/general.cpp b/src/general.cpp index f781162b..ad79a158 100644 --- a/src/general.cpp +++ b/src/general.cpp @@ -192,6 +192,16 @@ void AdvSceneSwitcher::on_uiHintsDisable_stateChanged(int state) switcher->disableHints = state; } +void AdvSceneSwitcher::on_useVerticalMacroControls_stateChanged(int state) +{ + if (loading) { + return; + } + + switcher->useVerticalMacroControls = state; + setupMacroTab(); +} + QString getDefaultSaveLocation() { QString desktopPath = QStandardPaths::writableLocation( @@ -511,6 +521,8 @@ void SwitcherData::saveGeneralSettings(obs_data_t *obj) obs_data_set_bool(obj, "showSystemTrayNotifications", showSystemTrayNotifications); obs_data_set_bool(obj, "disableHints", disableHints); + obs_data_set_bool(obj, "useVerticalMacroControls", + useVerticalMacroControls); obs_data_set_int(obj, "priority0", functionNamesByPriority[0]); obs_data_set_int(obj, "priority1", functionNamesByPriority[1]); @@ -584,6 +596,8 @@ void SwitcherData::loadGeneralSettings(obs_data_t *obj) showSystemTrayNotifications = obs_data_get_bool(obj, "showSystemTrayNotifications"); disableHints = obs_data_get_bool(obj, "disableHints"); + useVerticalMacroControls = + obs_data_get_bool(obj, "useVerticalMacroControls"); obs_data_set_default_int(obj, "priority0", default_priority_0); obs_data_set_default_int(obj, "priority1", default_priority_1); @@ -797,6 +811,8 @@ void AdvSceneSwitcher::setupGeneralTab() ui->showTrayNotifications->setChecked( switcher->showSystemTrayNotifications); ui->uiHintsDisable->setChecked(switcher->disableHints); + ui->useVerticalMacroControls->setChecked( + switcher->useVerticalMacroControls); for (int p : switcher->functionNamesByPriority) { std::string s = ""; diff --git a/src/headers/advanced-scene-switcher.hpp b/src/headers/advanced-scene-switcher.hpp index 62faa23f..92b2d517 100644 --- a/src/headers/advanced-scene-switcher.hpp +++ b/src/headers/advanced-scene-switcher.hpp @@ -170,6 +170,7 @@ public slots: void on_saveWindowGeo_stateChanged(int state); void on_showTrayNotifications_stateChanged(int state); void on_uiHintsDisable_stateChanged(int state); + void on_useVerticalMacroControls_stateChanged(int state); void on_exportSettings_clicked(); void on_importSettings_clicked(); diff --git a/src/headers/macro-controls.hpp b/src/headers/macro-controls.hpp index a62ed4ff..6a42228f 100644 --- a/src/headers/macro-controls.hpp +++ b/src/headers/macro-controls.hpp @@ -16,6 +16,11 @@ public: void Show(bool visible = true); + QPushButton *GetUp() { return _up; } + QPushButton *GetDown() { return _down; } + QPushButton *GetAdd() { return _add; } + QPushButton *GetRemove() { return _remove; } + signals: void Add(); void Remove(); diff --git a/src/headers/switcher-data-structs.hpp b/src/headers/switcher-data-structs.hpp index 5fc62141..77afb296 100644 --- a/src/headers/switcher-data-structs.hpp +++ b/src/headers/switcher-data-structs.hpp @@ -86,6 +86,7 @@ struct SwitcherData { bool stop = false; bool verbose = false; bool disableHints = false; + bool useVerticalMacroControls = false; bool showSystemTrayNotifications = false; bool showFrame = false; bool transitionOverrideOverride = false; diff --git a/src/macro-action-edit.cpp b/src/macro-action-edit.cpp index 844db9bf..f00a2805 100644 --- a/src/macro-action-edit.cpp +++ b/src/macro-action-edit.cpp @@ -77,9 +77,24 @@ MacroActionEdit::MacroActionEdit(QWidget *parent, _section->AddHeaderWidget(_actionSelection); _section->AddHeaderWidget(_headerInfo); - QVBoxLayout *mainLayout = new QVBoxLayout; - mainLayout->addWidget(_section); - mainLayout->addWidget(_controls); + QVBoxLayout *verticalControlsLayout = new QVBoxLayout; + if (switcher->useVerticalMacroControls) { + verticalControlsLayout->addWidget(_controls->GetUp()); + verticalControlsLayout->addWidget(_controls->GetAdd()); + verticalControlsLayout->addWidget(_controls->GetRemove()); + verticalControlsLayout->addWidget(_controls->GetDown()); + verticalControlsLayout->setContentsMargins(0, 0, 0, 0); + verticalControlsLayout->setSpacing(0); + _controls->hide(); // Only useful in horizontal case + } + + QVBoxLayout *actionLayout = new QVBoxLayout; + actionLayout->addWidget(_section); + actionLayout->addWidget(_controls); + + QHBoxLayout *mainLayout = new QHBoxLayout; + mainLayout->addLayout(verticalControlsLayout); + mainLayout->addLayout(actionLayout); setLayout(mainLayout); _entryData = entryData; diff --git a/src/macro-condition-edit.cpp b/src/macro-condition-edit.cpp index 2008aa9a..f4ff5c7d 100644 --- a/src/macro-condition-edit.cpp +++ b/src/macro-condition-edit.cpp @@ -120,9 +120,24 @@ MacroConditionEdit::MacroConditionEdit( _section->AddHeaderWidget(_headerInfo); _section->AddHeaderWidget(_dur); - QVBoxLayout *mainLayout = new QVBoxLayout; - mainLayout->addWidget(_section); - mainLayout->addWidget(_controls); + QVBoxLayout *verticalControlsLayout = new QVBoxLayout; + if (switcher->useVerticalMacroControls) { + verticalControlsLayout->addWidget(_controls->GetUp()); + verticalControlsLayout->addWidget(_controls->GetAdd()); + verticalControlsLayout->addWidget(_controls->GetRemove()); + verticalControlsLayout->addWidget(_controls->GetDown()); + verticalControlsLayout->setContentsMargins(0, 0, 0, 0); + verticalControlsLayout->setSpacing(0); + _controls->hide(); // Only useful in horizontal case + } + + QVBoxLayout *conditionLayout = new QVBoxLayout; + conditionLayout->addWidget(_section); + conditionLayout->addWidget(_controls); + + QHBoxLayout *mainLayout = new QHBoxLayout; + mainLayout->addLayout(verticalControlsLayout); + mainLayout->addLayout(conditionLayout); setLayout(mainLayout); UpdateEntryData(id); diff --git a/src/macro-tab.cpp b/src/macro-tab.cpp index aafa1f65..4f34962a 100644 --- a/src/macro-tab.cpp +++ b/src/macro-tab.cpp @@ -356,6 +356,8 @@ void AdvSceneSwitcher::on_macros_itemChanged(QListWidgetItem *item) void AdvSceneSwitcher::setupMacroTab() { + const QSignalBlocker signalBlocker(ui->macros); + ui->macros->clear(); for (auto &m : switcher->macros) { QString text = QString::fromStdString(m->Name());