From a07a84a8b189cc7f85c38131092bd1c022897ed6 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sat, 13 May 2023 22:48:20 +0200 Subject: [PATCH] Add option to rename buttons of macro dock --- data/locale/en-US.ini | 3 + src/macro-core/macro-dock.cpp | 33 ++++++-- src/macro-core/macro-dock.hpp | 10 ++- src/macro-core/macro-properties.cpp | 120 +++++++++++++++++++++++++--- src/macro-core/macro-properties.hpp | 14 ++++ src/macro-core/macro.cpp | 54 ++++++++++++- src/macro-core/macro.hpp | 12 +++ 7 files changed, 224 insertions(+), 22 deletions(-) diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 8cc11eb1..000d9daa 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -107,6 +107,9 @@ AdvSceneSwitcher.macroTab.currentDisableHotkeys="Register hotkeys to control the 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.macroTab.currentDockButtonText.run="Run button text:" +AdvSceneSwitcher.macroTab.currentDockButtonText.pause="Pause button text:" +AdvSceneSwitcher.macroTab.currentDockButtonText.unpause="Unpause button text:" 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 e1925278..22358db2 100644 --- a/src/macro-core/macro-dock.cpp +++ b/src/macro-core/macro-dock.cpp @@ -3,14 +3,16 @@ #include "utility.hpp" #include -#include namespace advss { -MacroDock::MacroDock(Macro *m, QWidget *parent) +MacroDock::MacroDock(Macro *m, QWidget *parent, const QString &runButtonText, + const QString &pauseButtonText, + const QString &unpauseButtonText) : OBSDock(parent), - _run(new QPushButton( - obs_module_text("AdvSceneSwitcher.macroDock.run"))), + _pauseButtonText(pauseButtonText), + _unpauseButtonText(unpauseButtonText), + _run(new QPushButton(runButtonText)), _pauseToggle(new QPushButton()), _macro(m) { @@ -61,11 +63,28 @@ void MacroDock::ShowRunButton(bool value) _run->setVisible(value); } +void MacroDock::SetRunButtonText(const QString &text) +{ + _run->setText(text); +} + void MacroDock::ShowPauseButton(bool value) { _pauseToggle->setVisible(value); } +void MacroDock::SetPauseButtonText(const QString &text) +{ + _pauseButtonText = text; + UpdatePauseText(); +} + +void MacroDock::SetUnpauseButtonText(const QString &text) +{ + _unpauseButtonText = text; + UpdatePauseText(); +} + void MacroDock::RunClicked() { if (!_macro) { @@ -96,10 +115,8 @@ void MacroDock::UpdatePauseText() return; } - _pauseToggle->setText( - _macro->Paused() - ? obs_module_text("AdvSceneSwitcher.macroDock.unpause") - : obs_module_text("AdvSceneSwitcher.macroDock.pause")); + _pauseToggle->setText(_macro->Paused() ? _unpauseButtonText + : _pauseButtonText); } } // namespace advss diff --git a/src/macro-core/macro-dock.hpp b/src/macro-core/macro-dock.hpp index c0600f43..298035db 100644 --- a/src/macro-core/macro-dock.hpp +++ b/src/macro-core/macro-dock.hpp @@ -13,10 +13,15 @@ class MacroDock : public OBSDock { Q_OBJECT public: - MacroDock(Macro *, QWidget *parent); + MacroDock(Macro *, QWidget *parent, const QString &runButtonText, + const QString &pauseButtonText, + const QString &unpauseButtonText); void SetName(const QString &); void ShowRunButton(bool); + void SetRunButtonText(const QString &); void ShowPauseButton(bool); + void SetPauseButtonText(const QString &); + void SetUnpauseButtonText(const QString &); private slots: void RunClicked(); @@ -24,8 +29,11 @@ private slots: void UpdatePauseText(); private: + QString _pauseButtonText; + QString _unpauseButtonText; QPushButton *_run; QPushButton *_pauseToggle; + QTimer _timer; Macro *_macro; diff --git a/src/macro-core/macro-properties.cpp b/src/macro-core/macro-properties.cpp index 37bc146a..f87993e2 100644 --- a/src/macro-core/macro-properties.cpp +++ b/src/macro-core/macro-properties.cpp @@ -1,8 +1,9 @@ #include "macro-properties.hpp" +#include "obs-module-helper.hpp" +#include "utility.hpp" #include #include -#include namespace advss { @@ -29,6 +30,30 @@ void MacroProperties::Load(obs_data_t *obj) obs_data_release(data); } +static void setGridLayoutRowVisible(QGridLayout *layout, int row, bool visible) +{ + for (int col = 0; col < layout->columnCount(); col++) { + auto item = layout->itemAtPosition(row, col); + if (!item) { + continue; + } + + auto rowLayout = item->layout(); + if (rowLayout) { + SetLayoutVisible(rowLayout, visible); + } + + auto widget = item->widget(); + if (widget) { + widget->setVisible(visible); + } + } + + if (!visible) { + layout->setRowMinimumHeight(row, 0); + } +} + MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent, const MacroProperties &prop, Macro *macro) @@ -48,7 +73,13 @@ MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent, _currentMacroDockAddRunButton(new QCheckBox(obs_module_text( "AdvSceneSwitcher.macroTab.currentDockAddRunButton"))), _currentMacroDockAddPauseButton(new QCheckBox(obs_module_text( - "AdvSceneSwitcher.macroTab.currentDockAddPauseButton"))) + "AdvSceneSwitcher.macroTab.currentDockAddPauseButton"))), + _runButtonText(new QLineEdit()), + _pauseButtonText(new QLineEdit()), + _unpauseButtonText(new QLineEdit()), + _dockOptions(new QGroupBox( + obs_module_text("AdvSceneSwitcher.macroTab.dockSettings"))), + _dockLayout(new QGridLayout()) { setModal(true); setWindowModality(Qt::WindowModality::WindowModal); @@ -56,7 +87,7 @@ MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent, auto highlightOptions = new QGroupBox( obs_module_text("AdvSceneSwitcher.macroTab.highlightSettings")); - QVBoxLayout *highlightLayout = new QVBoxLayout; + auto highlightLayout = new QVBoxLayout; highlightLayout->addWidget(_executed); highlightLayout->addWidget(_conditions); highlightLayout->addWidget(_actions); @@ -64,18 +95,39 @@ MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent, auto hotkeyOptions = new QGroupBox( obs_module_text("AdvSceneSwitcher.macroTab.hotkeySettings")); - QVBoxLayout *hotkeyLayout = new QVBoxLayout; + auto hotkeyLayout = new QVBoxLayout; hotkeyLayout->addWidget(_newMacroRegisterHotkeys); hotkeyLayout->addWidget(_currentMacroRegisterHotkeys); hotkeyOptions->setLayout(hotkeyLayout); - _dockOptions = new QGroupBox( - obs_module_text("AdvSceneSwitcher.macroTab.dockSettings")); - QVBoxLayout *dockLayout = new QVBoxLayout; - dockLayout->addWidget(_currentMacroRegisterDock); - dockLayout->addWidget(_currentMacroDockAddRunButton); - dockLayout->addWidget(_currentMacroDockAddPauseButton); - _dockOptions->setLayout(dockLayout); + int row = 0; + _dockLayout->addWidget(_currentMacroRegisterDock, row, 1, 1, 2); + row++; + _dockLayout->addWidget(_currentMacroDockAddRunButton, row, 1, 1, 2); + row++; + _dockLayout->addWidget( + new QLabel(obs_module_text( + "AdvSceneSwitcher.macroTab.currentDockButtonText.run")), + row, 1); + _dockLayout->addWidget(_runButtonText, row, 2); + _runButtonTextRow = row; + row++; + _dockLayout->addWidget(_currentMacroDockAddPauseButton, row, 1, 1, 2); + row++; + _dockLayout->addWidget( + new QLabel(obs_module_text( + "AdvSceneSwitcher.macroTab.currentDockButtonText.pause")), + row, 1); + _dockLayout->addWidget(_pauseButtonText, row, 2); + _pauseButtonTextRow = row; + row++; + _dockLayout->addWidget( + new QLabel(obs_module_text( + "AdvSceneSwitcher.macroTab.currentDockButtonText.unpause")), + row, 1); + _dockLayout->addWidget(_unpauseButtonText, row, 2); + _unpauseButtonTextRow = row; + _dockOptions->setLayout(_dockLayout); QDialogButtonBox *buttonbox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel); @@ -85,8 +137,12 @@ MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent, connect(_currentMacroRegisterDock, &QCheckBox::stateChanged, this, &MacroPropertiesDialog::DockEnableChanged); + connect(_currentMacroDockAddRunButton, &QCheckBox::stateChanged, this, + &MacroPropertiesDialog::RunButtonEnableChanged); + connect(_currentMacroDockAddPauseButton, &QCheckBox::stateChanged, this, + &MacroPropertiesDialog::PauseButtonEnableChanged); - QVBoxLayout *layout = new QVBoxLayout; + auto layout = new QVBoxLayout; layout->addWidget(highlightOptions); layout->addWidget(hotkeyOptions); layout->addWidget(_dockOptions); @@ -108,14 +164,49 @@ MacroPropertiesDialog::MacroPropertiesDialog(QWidget *parent, _currentMacroDockAddRunButton->setChecked(macro->DockHasRunButton()); _currentMacroDockAddPauseButton->setChecked( macro->DockHasPauseButton()); + _runButtonText->setText(QString::fromStdString(macro->RunButtonText())); + _pauseButtonText->setText( + QString::fromStdString(macro->PauseButtonText())); + _unpauseButtonText->setText( + QString::fromStdString(macro->UnpauseButtonText())); + _currentMacroDockAddRunButton->setVisible(dockEnabled); _currentMacroDockAddPauseButton->setVisible(dockEnabled); + setGridLayoutRowVisible(_dockLayout, _runButtonTextRow, + dockEnabled && macro->DockHasRunButton()); + setGridLayoutRowVisible(_dockLayout, _pauseButtonTextRow, + dockEnabled && macro->DockHasPauseButton()); + setGridLayoutRowVisible(_dockLayout, _unpauseButtonTextRow, + dockEnabled && macro->DockHasPauseButton()); + MinimizeSizeOfColumn(_dockLayout, 0); + Resize(); } void MacroPropertiesDialog::DockEnableChanged(int enabled) { _currentMacroDockAddRunButton->setVisible(enabled); _currentMacroDockAddPauseButton->setVisible(enabled); + setGridLayoutRowVisible(_dockLayout, _runButtonTextRow, enabled); + setGridLayoutRowVisible(_dockLayout, _pauseButtonTextRow, enabled); + setGridLayoutRowVisible(_dockLayout, _unpauseButtonTextRow, enabled); + Resize(); +} + +void MacroPropertiesDialog::RunButtonEnableChanged(int enabled) +{ + setGridLayoutRowVisible(_dockLayout, _runButtonTextRow, enabled); + Resize(); +} + +void MacroPropertiesDialog::PauseButtonEnableChanged(int enabled) +{ + setGridLayoutRowVisible(_dockLayout, _pauseButtonTextRow, enabled); + setGridLayoutRowVisible(_dockLayout, _unpauseButtonTextRow, enabled); + Resize(); +} + +void MacroPropertiesDialog::Resize() +{ _dockOptions->adjustSize(); _dockOptions->updateGeometry(); adjustSize(); @@ -147,6 +238,11 @@ bool MacroPropertiesDialog::AskForSettings(QWidget *parent, dialog._currentMacroDockAddRunButton->isChecked()); macro->SetDockHasPauseButton( dialog._currentMacroDockAddPauseButton->isChecked()); + macro->SetRunButtonText(dialog._runButtonText->text().toStdString()); + macro->SetPauseButtonText( + dialog._pauseButtonText->text().toStdString()); + macro->SetUnpauseButtonText( + dialog._unpauseButtonText->text().toStdString()); return true; } diff --git a/src/macro-core/macro-properties.hpp b/src/macro-core/macro-properties.hpp index 492e1538..80905257 100644 --- a/src/macro-core/macro-properties.hpp +++ b/src/macro-core/macro-properties.hpp @@ -5,6 +5,8 @@ #include #include #include +#include +#include #include namespace advss { @@ -31,8 +33,12 @@ public: Macro *macro); private slots: void DockEnableChanged(int); + void RunButtonEnableChanged(int); + void PauseButtonEnableChanged(int); private: + void Resize(); + QCheckBox *_executed; QCheckBox *_conditions; QCheckBox *_actions; @@ -42,7 +48,15 @@ private: QCheckBox *_currentMacroRegisterDock; QCheckBox *_currentMacroDockAddRunButton; QCheckBox *_currentMacroDockAddPauseButton; + QLineEdit *_runButtonText; + QLineEdit *_pauseButtonText; + QLineEdit *_unpauseButtonText; QGroupBox *_dockOptions; + QGridLayout *_dockLayout; + + int _runButtonTextRow = -1; + int _pauseButtonTextRow = -1; + int _unpauseButtonTextRow = -1; }; } // namespace advss diff --git a/src/macro-core/macro.cpp b/src/macro-core/macro.cpp index ca251f80..3892f6ba 100644 --- a/src/macro-core/macro.cpp +++ b/src/macro-core/macro.cpp @@ -601,6 +601,12 @@ void Macro::SaveDockSettings(obs_data_t *obj) const } obs_data_set_bool(dockSettings, "hasRunButton", _dockHasRunButton); obs_data_set_bool(dockSettings, "hasPauseButton", _dockHasPauseButton); + obs_data_set_string(dockSettings, "runButtonText", + _runButtonText.c_str()); + obs_data_set_string(dockSettings, "pauseButtonText", + _pauseButtonText.c_str()); + obs_data_set_string(dockSettings, "unpauseButtonText", + _unpauseButtonText.c_str()); if (_dock) { auto window = static_cast( obs_frontend_get_main_window()); @@ -631,6 +637,22 @@ void Macro::LoadDockSettings(obs_data_t *obj) const bool dockEnabled = obs_data_get_bool(dockSettings, "register"); _dockIsVisible = obs_data_get_bool(dockSettings, "isVisible"); + + // TODO: remove these default settings in a future version + obs_data_set_default_string( + dockSettings, "runButtonText", + obs_module_text("AdvSceneSwitcher.macroDock.run")); + obs_data_set_default_string( + dockSettings, "pauseButtonText", + obs_module_text("AdvSceneSwitcher.macroDock.pause")); + obs_data_set_default_string( + dockSettings, "unpauseButtonText", + obs_module_text("AdvSceneSwitcher.macroDock.unpause")); + + _runButtonText = obs_data_get_string(dockSettings, "runButtonText"); + _pauseButtonText = obs_data_get_string(dockSettings, "pauseButtonText"); + _unpauseButtonText = + obs_data_get_string(dockSettings, "unpauseButtonText"); if (dockEnabled) { _dockHasRunButton = obs_data_get_bool(dockSettings, "hasRunButton"); @@ -670,7 +692,10 @@ void Macro::EnableDock(bool value) // Create new dock widget auto window = static_cast(obs_frontend_get_main_window()); - _dock = new MacroDock(this, window); + _dock = new MacroDock(this, window, + QString::fromStdString(_runButtonText), + QString::fromStdString(_pauseButtonText), + QString::fromStdString(_unpauseButtonText)); SetDockWidgetName(); // Used by OBS to restore position // Register new dock @@ -709,6 +734,33 @@ void Macro::SetDockHasPauseButton(bool value) _dock->ShowPauseButton(value); } +void Macro::SetRunButtonText(const std::string &text) +{ + _runButtonText = text; + if (!_dock) { + return; + } + _dock->SetRunButtonText(QString::fromStdString(text)); +} + +void Macro::SetPauseButtonText(const std::string &text) +{ + _pauseButtonText = text; + if (!_dock) { + return; + } + _dock->SetPauseButtonText(QString::fromStdString(text)); +} + +void Macro::SetUnpauseButtonText(const std::string &text) +{ + _unpauseButtonText = text; + if (!_dock) { + return; + } + _dock->SetUnpauseButtonText(QString::fromStdString(text)); +} + void Macro::RemoveDock() { if (_dock) { diff --git a/src/macro-core/macro.hpp b/src/macro-core/macro.hpp index a524732e..6dde0382 100644 --- a/src/macro-core/macro.hpp +++ b/src/macro-core/macro.hpp @@ -89,6 +89,12 @@ public: bool DockHasRunButton() const { return _dockHasRunButton; } void SetDockHasPauseButton(bool value); bool DockHasPauseButton() const { return _dockHasPauseButton; } + std::string RunButtonText() const { return _runButtonText; } + void SetRunButtonText(const std::string &text); + std::string PauseButtonText() const { return _pauseButtonText; } + void SetPauseButtonText(const std::string &text); + std::string UnpauseButtonText() const { return _unpauseButtonText; } + void SetUnpauseButtonText(const std::string &text); private: void SetupHotkeys(); @@ -137,6 +143,12 @@ private: bool _registerDock = false; bool _dockHasRunButton = true; bool _dockHasPauseButton = true; + std::string _runButtonText = + obs_module_text("AdvSceneSwitcher.macroDock.run"); + std::string _pauseButtonText = + obs_module_text("AdvSceneSwitcher.macroDock.pause"); + std::string _unpauseButtonText = + obs_module_text("AdvSceneSwitcher.macroDock.unpause"); bool _dockIsFloating = true; bool _dockIsVisible = false; Qt::DockWidgetArea _dockArea;