Add option to rename buttons of macro dock

This commit is contained in:
WarmUpTill
2023-05-13 22:48:20 +02:00
committed by WarmUpTill
parent 0f36f34a4f
commit a07a84a8b1
7 changed files with 224 additions and 22 deletions

View File

@@ -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"

View File

@@ -3,14 +3,16 @@
#include "utility.hpp"
#include <QLayout>
#include <obs-module.h>
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

View File

@@ -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;

View File

@@ -1,8 +1,9 @@
#include "macro-properties.hpp"
#include "obs-module-helper.hpp"
#include "utility.hpp"
#include <QVBoxLayout>
#include <QDialogButtonBox>
#include <obs-module.h>
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;
}

View File

@@ -5,6 +5,8 @@
#include <QDialog>
#include <QCheckBox>
#include <QGroupBox>
#include <QLineEdit>
#include <QGridLayout>
#include <obs-data.h>
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

View File

@@ -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<QMainWindow *>(
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<QMainWindow *>(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) {

View File

@@ -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;