Refactor macro dock handling
Some checks failed
debian-build / build (push) Has been cancelled
Check locale / ubuntu64 (push) Has been cancelled
Push to master / Check Formatting 🔍 (push) Has been cancelled
Push to master / Build Project 🧱 (push) Has been cancelled
Push to master / Create Release 🛫 (push) Has been cancelled

* Move dock related settings into its own class
* Add support for grouping macro docks into a single dock window
This commit is contained in:
WarmUpTill
2025-10-15 21:08:15 +02:00
committed by WarmUpTill
parent ba094372a9
commit 6fb76e7e07
9 changed files with 547 additions and 392 deletions

View File

@@ -94,6 +94,9 @@ MacroSettingsDialog::MacroSettingsDialog(QWidget *parent,
_currentInputs(new MacroInputSelection()),
_currentMacroRegisterDock(new QCheckBox(obs_module_text(
"AdvSceneSwitcher.macroTab.currentRegisterDock"))),
_currentMacroIsStandaloneDock(new QCheckBox(obs_module_text(
"AdvSceneSwitcher.macroTab.currentIsStandaloneDock"))),
_currentMacroDockWindowName(new QLineEdit(this)),
_currentMacroDockAddRunButton(new QCheckBox(obs_module_text(
"AdvSceneSwitcher.macroTab.currentDockAddRunButton"))),
_currentMacroDockAddPauseButton(new QCheckBox(obs_module_text(
@@ -198,6 +201,15 @@ MacroSettingsDialog::MacroSettingsDialog(QWidget *parent,
int row = 0;
_dockLayout->addWidget(_currentMacroRegisterDock, row, 1, 1, 2);
row++;
_dockLayout->addWidget(_currentMacroIsStandaloneDock, row, 1, 1, 2);
row++;
_dockLayout->addWidget(
new QLabel(obs_module_text(
"AdvSceneSwitcher.macroTab.currentDockWindowName")),
row, 1);
_dockLayout->addWidget(_currentMacroDockWindowName, row, 2);
_dockWindowNameRow = row;
row++;
_dockLayout->addWidget(_currentMacroDockAddRunButton, row, 1, 1, 2);
row++;
_dockLayout->addWidget(
@@ -252,6 +264,8 @@ MacroSettingsDialog::MacroSettingsDialog(QWidget *parent,
connect(_currentMacroRegisterDock, &QCheckBox::stateChanged, this,
&MacroSettingsDialog::DockEnableChanged);
connect(_currentMacroIsStandaloneDock, &QCheckBox::stateChanged, this,
&MacroSettingsDialog::IsStandaloneDockChanged);
connect(_currentMacroDockAddRunButton, &QCheckBox::stateChanged, this,
&MacroSettingsDialog::RunButtonEnableChanged);
connect(_currentMacroDockAddPauseButton, &QCheckBox::stateChanged, this,
@@ -329,55 +343,37 @@ MacroSettingsDialog::MacroSettingsDialog(QWidget *parent,
_currentSkipOnStartup->setChecked(macro->SkipExecOnStart());
_currentStopActionsIfNotDone->setChecked(macro->StopActionsIfNotDone());
_currentInputs->SetInputs(macro->GetInputVariables());
const bool dockEnabled = macro->DockEnabled();
const auto &dockSettings = macro->GetDockSettings();
const bool dockEnabled = dockSettings.DockEnabled();
_currentMacroRegisterDock->setChecked(dockEnabled);
_currentMacroDockAddRunButton->setChecked(macro->DockHasRunButton());
_currentMacroIsStandaloneDock->setChecked(
dockSettings.IsStandaloneDock());
_currentMacroDockWindowName->setText(
QString::fromStdString(dockSettings.DockWindowName()));
_currentMacroDockAddRunButton->setChecked(dockSettings.HasRunButton());
_currentMacroDockAddPauseButton->setChecked(
macro->DockHasPauseButton());
dockSettings.HasPauseButton());
_currentMacroDockAddStatusLabel->setChecked(
macro->DockHasStatusLabel());
dockSettings.HasStatusLabel());
_currentMacroDockHighlightIfConditionsTrue->setChecked(
macro->DockHighlightEnabled());
_runButtonText->setText(macro->RunButtonText());
_pauseButtonText->setText(macro->PauseButtonText());
_unpauseButtonText->setText(macro->UnpauseButtonText());
_conditionsTrueStatusText->setText(macro->ConditionsTrueStatusText());
_conditionsFalseStatusText->setText(macro->ConditionsFalseStatusText());
dockSettings.HighlightEnabled());
_runButtonText->setText(dockSettings.RunButtonText());
_pauseButtonText->setText(dockSettings.PauseButtonText());
_unpauseButtonText->setText(dockSettings.UnpauseButtonText());
_conditionsTrueStatusText->setText(
dockSettings.ConditionsTrueStatusText());
_conditionsFalseStatusText->setText(
dockSettings.ConditionsFalseStatusText());
_currentMacroDockAddRunButton->setVisible(dockEnabled);
_currentMacroDockAddPauseButton->setVisible(dockEnabled);
_currentMacroDockAddStatusLabel->setVisible(dockEnabled);
_currentMacroDockHighlightIfConditionsTrue->setVisible(dockEnabled);
SetGridLayoutRowVisible(_dockLayout, _runButtonTextRow,
dockEnabled && macro->DockHasRunButton());
SetGridLayoutRowVisible(_dockLayout, _pauseButtonTextRow,
dockEnabled && macro->DockHasPauseButton());
SetGridLayoutRowVisible(_dockLayout, _unpauseButtonTextRow,
dockEnabled && macro->DockHasPauseButton());
SetGridLayoutRowVisible(_dockLayout, _conditionsTrueTextRow,
dockEnabled && macro->DockHasStatusLabel());
SetGridLayoutRowVisible(_dockLayout, _conditionsFalseTextRow,
dockEnabled && macro->DockHasStatusLabel());
DockEnableChanged(dockEnabled);
MinimizeSizeOfColumn(_dockLayout, 0);
Resize();
// Try to set sensible initial size for the dialog window
QSize contentSize = contentWidget->sizeHint();
resize(contentSize.width() + layout->contentsMargins().left() +
layout->contentsMargins().right() +
dialogLayout->contentsMargins().left() +
dialogLayout->contentsMargins().right() +
scrollArea->verticalScrollBar()->sizeHint().width() + 20,
contentSize.height() + dialogLayout->spacing() +
buttonbox->sizeHint().height() +
dialogLayout->contentsMargins().top() +
dialogLayout->contentsMargins().bottom() +
scrollArea->horizontalScrollBar()->sizeHint().height() +
20);
Resize();
}
void MacroSettingsDialog::DockEnableChanged(int enabled)
{
_currentMacroIsStandaloneDock->setVisible(enabled);
_currentMacroDockAddRunButton->setVisible(enabled);
_currentMacroDockAddPauseButton->setVisible(enabled);
_currentMacroDockAddStatusLabel->setVisible(enabled);
@@ -401,6 +397,12 @@ void MacroSettingsDialog::DockEnableChanged(int enabled)
Resize();
}
void MacroSettingsDialog::IsStandaloneDockChanged(int enabled)
{
SetGridLayoutRowVisible(_dockLayout, _dockWindowNameRow, !enabled);
Resize();
}
void MacroSettingsDialog::RunButtonEnableChanged(int enabled)
{
SetGridLayoutRowVisible(_dockLayout, _runButtonTextRow, enabled);
@@ -479,29 +481,29 @@ bool MacroSettingsDialog::AskForSettings(QWidget *parent,
macro->SetStopActionsIfNotDone(
dialog._currentStopActionsIfNotDone->isChecked());
// Only apply "on change" to avoid recreation of the dock widget
const bool enableDock = dialog._currentMacroRegisterDock->isChecked();
if (macro->DockEnabled() != enableDock) {
macro->EnableDock(
dialog._currentMacroRegisterDock->isChecked());
}
macro->SetDockHasRunButton(
auto &dockSettings = macro->GetDockSettings();
dockSettings.EnableDock(dialog._currentMacroRegisterDock->isChecked());
dockSettings.SetIsStandaloneDock(
dialog._currentMacroIsStandaloneDock->isChecked());
dockSettings.SetDockWindowName(
dialog._currentMacroDockWindowName->text().toStdString());
dockSettings.SetHasRunButton(
dialog._currentMacroDockAddRunButton->isChecked());
macro->SetDockHasPauseButton(
dockSettings.SetHasPauseButton(
dialog._currentMacroDockAddPauseButton->isChecked());
macro->SetDockHasStatusLabel(
dockSettings.SetHasStatusLabel(
dialog._currentMacroDockAddStatusLabel->isChecked());
macro->SetHighlightEnable(
dockSettings.SetHighlightEnable(
dialog._currentMacroDockHighlightIfConditionsTrue->isChecked());
macro->SetRunButtonText(dialog._runButtonText->text().toStdString());
macro->SetPauseButtonText(
dockSettings.SetRunButtonText(
dialog._runButtonText->text().toStdString());
dockSettings.SetPauseButtonText(
dialog._pauseButtonText->text().toStdString());
macro->SetUnpauseButtonText(
dockSettings.SetUnpauseButtonText(
dialog._unpauseButtonText->text().toStdString());
macro->SetConditionsTrueStatusText(
dockSettings.SetConditionsTrueStatusText(
dialog._conditionsTrueStatusText->text().toStdString());
macro->SetConditionsFalseStatusText(
dockSettings.SetConditionsFalseStatusText(
dialog._conditionsFalseStatusText->text().toStdString());
macro->SetInputVariables(dialog._currentInputs->GetInputs());
return true;