diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index f164cb0e..054b2f67 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -102,6 +102,8 @@ AdvSceneSwitcher.macroTab.highlightPerformedActions="Highlight recently performe AdvSceneSwitcher.macroTab.newMacroRegisterHotkey="Register hotkeys to control the pause state of new macros" AdvSceneSwitcher.macroTab.currentDisableHotkeys="Register hotkeys to control the pause state of selected macro" AdvSceneSwitcher.macroTab.currentRegisterDock="Register dock widget to control the pause state of selected macro or run it manually" +AdvSceneSwitcher.macroTab.currentDockAddRunButton="Add button to run the macro" +AdvSceneSwitcher.macroTab.currentDockAddPauseButton="Add button to pause or unpause the macro" AdvSceneSwitcher.macroDock.pause="Pause" AdvSceneSwitcher.macroDock.unpause="Unpause" diff --git a/src/macro-core/macro-dock.cpp b/src/macro-core/macro-dock.cpp index 8c1a7cc2..5e3e2191 100644 --- a/src/macro-core/macro-dock.cpp +++ b/src/macro-core/macro-dock.cpp @@ -14,6 +14,8 @@ MacroDock::MacroDock(Macro *m, QWidget *parent) { if (_macro) { setWindowTitle(QString::fromStdString(_macro->Name())); + _run->setVisible(_macro->DockHasRunButton()); + _pauseToggle->setVisible(_macro->DockHasPauseButton()); } else { setWindowTitle(""); } @@ -49,6 +51,16 @@ void MacroDock::SetName(const QString &name) setWindowTitle(name); } +void MacroDock::ShowRunButton(bool value) +{ + _run->setVisible(value); +} + +void MacroDock::ShowPauseButton(bool value) +{ + _pauseToggle->setVisible(value); +} + void MacroDock::RunClicked() { if (!_macro) { diff --git a/src/macro-core/macro-dock.hpp b/src/macro-core/macro-dock.hpp index e4744123..49deeda7 100644 --- a/src/macro-core/macro-dock.hpp +++ b/src/macro-core/macro-dock.hpp @@ -13,6 +13,8 @@ class MacroDock : public OBSDock { public: MacroDock(Macro *, QWidget *parent); void SetName(const QString &); + void ShowRunButton(bool); + void ShowPauseButton(bool); private slots: void RunClicked(); diff --git a/src/macro-core/macro-properties.cpp b/src/macro-core/macro-properties.cpp index a192113c..f02915ed 100644 --- a/src/macro-core/macro-properties.cpp +++ b/src/macro-core/macro-properties.cpp @@ -43,7 +43,11 @@ MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent, _currentMacroRegisterHotkeys(new QCheckBox(obs_module_text( "AdvSceneSwitcher.macroTab.currentDisableHotkeys"))), _currentMacroRegisterDock(new QCheckBox(obs_module_text( - "AdvSceneSwitcher.macroTab.currentRegisterDock"))) + "AdvSceneSwitcher.macroTab.currentRegisterDock"))), + _currentMacroDockAddRunButton(new QCheckBox(obs_module_text( + "AdvSceneSwitcher.macroTab.currentDockAddRunButton"))), + _currentMacroDockAddPauseButton(new QCheckBox(obs_module_text( + "AdvSceneSwitcher.macroTab.currentDockAddPauseButton"))) { setModal(true); setWindowModality(Qt::WindowModality::WindowModal); @@ -70,6 +74,8 @@ MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent, obs_module_text("AdvSceneSwitcher.macroTab.dockSettings")); QVBoxLayout *dockLayout = new QVBoxLayout; dockLayout->addWidget(_currentMacroRegisterDock); + dockLayout->addWidget(_currentMacroDockAddRunButton); + dockLayout->addWidget(_currentMacroDockAddPauseButton); dockOptions->setLayout(dockLayout); QDialogButtonBox *buttonbox = new QDialogButtonBox( @@ -78,6 +84,9 @@ MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent, connect(buttonbox, &QDialogButtonBox::accepted, this, &QDialog::accept); connect(buttonbox, &QDialogButtonBox::rejected, this, &QDialog::reject); + connect(_currentMacroRegisterDock, &QCheckBox::stateChanged, this, + &MacroPropertiesDialog::DockEnableChanged); + QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(highlightOptions); layout->addWidget(hotkeyOptions); @@ -89,14 +98,25 @@ MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent, _conditions->setChecked(prop._highlightConditions); _actions->setChecked(prop._highlightActions); _newMacroRegisterHotkeys->setChecked(prop._newMacroRegisterHotkeys); - if (macro && !macro->IsGroup()) { - _currentMacroRegisterHotkeys->setChecked( - macro->PauseHotkeysEnabled()); - _currentMacroRegisterDock->setChecked(macro->DockEnabled()); - } else { + if (!macro || macro->IsGroup()) { hotkeyOptions->hide(); dockOptions->hide(); + return; } + _currentMacroRegisterHotkeys->setChecked(macro->PauseHotkeysEnabled()); + const bool dockEnabled = macro->DockEnabled(); + _currentMacroRegisterDock->setChecked(dockEnabled); + _currentMacroDockAddRunButton->setChecked(macro->DockHasRunButton()); + _currentMacroDockAddPauseButton->setChecked( + macro->DockHasPauseButton()); + _currentMacroDockAddRunButton->setVisible(dockEnabled); + _currentMacroDockAddPauseButton->setVisible(dockEnabled); +} + +void MacroPropertiesDialog::DockEnableChanged(int enabled) +{ + _currentMacroDockAddRunButton->setVisible(enabled); + _currentMacroDockAddPauseButton->setVisible(enabled); } bool MacroPropertiesDialog::AskForSettings(QWidget *parent, @@ -120,5 +140,9 @@ bool MacroPropertiesDialog::AskForSettings(QWidget *parent, macro->EnablePauseHotkeys( dialog._currentMacroRegisterHotkeys->isChecked()); macro->EnableDock(dialog._currentMacroRegisterDock->isChecked()); + macro->SetDockHasRunButton( + dialog._currentMacroDockAddRunButton->isChecked()); + macro->SetDockHasPauseButton( + dialog._currentMacroDockAddPauseButton->isChecked()); return true; } diff --git a/src/macro-core/macro-properties.hpp b/src/macro-core/macro-properties.hpp index 8558a80b..ee3bb79f 100644 --- a/src/macro-core/macro-properties.hpp +++ b/src/macro-core/macro-properties.hpp @@ -26,6 +26,8 @@ public: Macro *macro); static bool AskForSettings(QWidget *parent, MacroProperties &userInput, Macro *macro); +private slots: + void DockEnableChanged(int); private: QCheckBox *_executed; @@ -35,4 +37,6 @@ private: // Current macro specific settings QCheckBox *_currentMacroRegisterHotkeys; QCheckBox *_currentMacroRegisterDock; + QCheckBox *_currentMacroDockAddRunButton; + QCheckBox *_currentMacroDockAddPauseButton; }; diff --git a/src/macro-core/macro.cpp b/src/macro-core/macro.cpp index 3483effc..f5309f83 100644 --- a/src/macro-core/macro.cpp +++ b/src/macro-core/macro.cpp @@ -346,6 +346,8 @@ bool Macro::Save(obs_data_t *obj) const if (_registerDock) { SetDockWidgetName(); } + obs_data_set_bool(obj, "dockHasRunButton", _dockHasRunButton); + obs_data_set_bool(obj, "dockHasPauseButton", _dockHasPauseButton); obs_data_set_bool(obj, "registerHotkeys", _registerHotkeys); obs_data_array_t *pauseHotkey = obs_hotkey_save(_pauseHotkey); @@ -436,6 +438,8 @@ bool Macro::Load(obs_data_t *obj) return true; } + _dockHasRunButton = obs_data_get_bool(obj, "dockHasRunButton"); + _dockHasPauseButton = obs_data_get_bool(obj, "dockHasPauseButton"); EnableDock(obs_data_get_bool(obj, "registerDock")); obs_data_set_default_bool(obj, "registerHotkeys", true); @@ -598,6 +602,24 @@ void Macro::EnableDock(bool value) _registerDock = value; } +void Macro::SetDockHasRunButton(bool value) +{ + _dockHasRunButton = value; + if (!_dock) { + return; + } + _dock->ShowRunButton(value); +} + +void Macro::SetDockHasPauseButton(bool value) +{ + _dockHasPauseButton = value; + if (!_dock) { + return; + } + _dock->ShowPauseButton(value); +} + void Macro::RemoveDock() { if (_dock) { diff --git a/src/macro-core/macro.hpp b/src/macro-core/macro.hpp index 578abbad..5d5276b7 100644 --- a/src/macro-core/macro.hpp +++ b/src/macro-core/macro.hpp @@ -82,6 +82,10 @@ public: void EnableDock(bool); bool DockEnabled() { return _registerDock; } + void SetDockHasRunButton(bool value); + bool DockHasRunButton() { return _dockHasRunButton; } + void SetDockHasPauseButton(bool value); + bool DockHasPauseButton() { return _dockHasPauseButton; } void ResetTimers(); @@ -119,6 +123,8 @@ private: bool _wasExecutedRecently = false; bool _onChangeTriggered = false; bool _registerDock = false; + bool _dockHasRunButton = true; + bool _dockHasPauseButton = true; MacroDock *_dock = nullptr; QAction *_dockAction = nullptr;