From 5d6a693f365e732e3b0386e1e43d6c4cc40826b7 Mon Sep 17 00:00:00 2001 From: WarmUpTill <19472752+WarmUpTill@users.noreply.github.com> Date: Sun, 19 Oct 2025 13:27:30 +0200 Subject: [PATCH] Refactor macro signal handling Also drop support for scene group signals in macro, which hopefully aren't used much anymore --- CMakeLists.txt | 2 ++ lib/advanced-scene-switcher.hpp | 11 ----------- lib/macro/macro-action-variable.cpp | 8 ++++---- lib/macro/macro-condition-macro.cpp | 4 +++- lib/macro/macro-edit.cpp | 11 +++++++++++ lib/macro/macro-list.cpp | 10 +++++----- lib/macro/macro-segment-selection.cpp | 5 +++-- lib/macro/macro-segment.cpp | 22 ---------------------- lib/macro/macro-segment.hpp | 7 ------- lib/macro/macro-selection.cpp | 14 +++++++------- lib/macro/macro-signals.cpp | 13 +++++++++++++ lib/macro/macro-signals.hpp | 26 ++++++++++++++++++++++++++ lib/macro/macro-tab.cpp | 22 ++++++++++++++-------- lib/macro/macro-tree.cpp | 9 +++++---- lib/utils/plugin-state-helpers.cpp | 4 ++-- lib/utils/scene-selection.cpp | 16 ---------------- plugins/base/macro-action-random.cpp | 5 +++-- plugins/base/macro-action-sequence.cpp | 4 +++- 18 files changed, 101 insertions(+), 92 deletions(-) create mode 100644 lib/macro/macro-signals.cpp create mode 100644 lib/macro/macro-signals.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 63e686e6..7c17297d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -154,6 +154,8 @@ target_sources( lib/macro/macro-selection.hpp lib/macro/macro-settings.cpp lib/macro/macro-settings.hpp + lib/macro/macro-signals.cpp + lib/macro/macro-signals.hpp lib/macro/macro-tab.cpp lib/macro/macro-tree.cpp lib/macro/macro-tree.hpp diff --git a/lib/advanced-scene-switcher.hpp b/lib/advanced-scene-switcher.hpp index a6ee94ab..2c500194 100644 --- a/lib/advanced-scene-switcher.hpp +++ b/lib/advanced-scene-switcher.hpp @@ -118,17 +118,6 @@ public slots: void HighlightOnChange() const; void on_macroSettings_clicked(); -signals: - void MacroAdded(const QString &name); - void MacroRemoved(const QString &name); - void MacroRenamed(const QString &oldName, const QString &newName); - void MacroSegmentOrderChanged(); - void HighlightMacrosChanged(bool value); - - void ConnectionAdded(const QString &); - void ConnectionRenamed(const QString &oldName, const QString &newName); - void ConnectionRemoved(const QString &); - private: bool ResolveMacroImportNameConflict(std::shared_ptr &); diff --git a/lib/macro/macro-action-variable.cpp b/lib/macro/macro-action-variable.cpp index 260bb2fb..ca1cfca6 100644 --- a/lib/macro/macro-action-variable.cpp +++ b/lib/macro/macro-action-variable.cpp @@ -1,9 +1,9 @@ #include "macro-action-variable.hpp" -#include "advanced-scene-switcher.hpp" #include "json-helpers.hpp" #include "layout-helpers.hpp" -#include "math-helpers.hpp" #include "macro-condition-edit.hpp" +#include "macro-signals.hpp" +#include "math-helpers.hpp" #include "macro.hpp" #include "non-modal-dialog.hpp" #include "source-helpers.hpp" @@ -884,8 +884,8 @@ MacroActionVariableEdit::MacroActionVariableEdit( QWidget::connect(_segmentIdx, SIGNAL(SelectionChanged(const IntVariable &)), this, SLOT(SegmentIndexChanged(const IntVariable &))); - QWidget::connect(GetSettingsWindow(), - SIGNAL(MacroSegmentOrderChanged()), this, + QWidget::connect(MacroSignalManager::Instance(), + SIGNAL(SegmentOrderChanged()), this, SLOT(MacroSegmentOrderChanged())); QWidget::connect( _subStringStart, diff --git a/lib/macro/macro-condition-macro.cpp b/lib/macro/macro-condition-macro.cpp index d1a2a58f..766822de 100644 --- a/lib/macro/macro-condition-macro.cpp +++ b/lib/macro/macro-condition-macro.cpp @@ -1,6 +1,7 @@ #include "macro-condition-macro.hpp" #include "layout-helpers.hpp" #include "macro-action-edit.hpp" +#include "macro-signals.hpp" #include "macro.hpp" namespace advss { @@ -321,7 +322,8 @@ MacroConditionMacroEdit::MacroConditionMacroEdit( QWidget::connect(_macros, SIGNAL(currentTextChanged(const QString &)), this, SLOT(MacroChanged(const QString &))); - QWidget::connect(parent, SIGNAL(MacroRemoved(const QString &)), this, + QWidget::connect(MacroSignalManager::Instance(), + SIGNAL(Remove(const QString &)), this, SLOT(MacroRemove(const QString &))); QWidget::connect(_types, SIGNAL(currentIndexChanged(int)), this, SLOT(TypeChanged(int))); diff --git a/lib/macro/macro-edit.cpp b/lib/macro/macro-edit.cpp index 56c3bc30..36d5a520 100644 --- a/lib/macro/macro-edit.cpp +++ b/lib/macro/macro-edit.cpp @@ -7,6 +7,7 @@ #include "macro-segment-copy-paste.hpp" #include "macro-segment-list.hpp" #include "macro-settings.hpp" +#include "macro-signals.hpp" #include "math-helpers.hpp" #include "name-dialog.hpp" #include "path-helpers.hpp" @@ -108,6 +109,16 @@ MacroEdit::MacroEdit(QWidget *parent, QStringList helpMsg) connect(ui->conditionsList, &QWidget::customContextMenuRequested, this, &MacroEdit::ShowMacroConditionsContextMenu); + connect(this, &MacroEdit::MacroAdded, MacroSignalManager::Instance(), + &MacroSignalManager::Add); + connect(this, &MacroEdit::MacroRemoved, MacroSignalManager::Instance(), + &MacroSignalManager::Remove); + connect(this, &MacroEdit::MacroRenamed, MacroSignalManager::Instance(), + &MacroSignalManager::Rename); + connect(this, &MacroEdit::MacroSegmentOrderChanged, + MacroSignalManager::Instance(), + &MacroSignalManager::SegmentOrderChanged); + // Set action and condition toolbars const std::string pathPrefix = GetDataFilePath("res/images/" + GetThemeTypeName()); diff --git a/lib/macro/macro-list.cpp b/lib/macro/macro-list.cpp index 14b712ab..72899c11 100644 --- a/lib/macro/macro-list.cpp +++ b/lib/macro/macro-list.cpp @@ -1,6 +1,7 @@ #include "macro-list.hpp" #include "macro-helpers.hpp" #include "macro-selection.hpp" +#include "macro-signals.hpp" #include "obs-module-helper.hpp" #include "ui-helpers.hpp" @@ -10,12 +11,11 @@ MacroList::MacroList(QWidget *parent, bool allowDuplicates, bool reorder) : ListEditor(parent, reorder), _allowDuplicates(allowDuplicates) { - QWidget::connect(GetSettingsWindow(), - SIGNAL(MacroRenamed(const QString &, const QString &)), - this, + QWidget::connect(MacroSignalManager::Instance(), + SIGNAL(Rename(const QString &, const QString &)), this, SLOT(MacroRename(const QString &, const QString &))); - QWidget::connect(GetSettingsWindow(), - SIGNAL(MacroRemoved(const QString &)), this, + QWidget::connect(MacroSignalManager::Instance(), + SIGNAL(Remove(const QString &)), this, SLOT(MacroRemove(const QString &))); UpdateListSize(); } diff --git a/lib/macro/macro-segment-selection.cpp b/lib/macro/macro-segment-selection.cpp index c4d09975..d3531a9b 100644 --- a/lib/macro/macro-segment-selection.cpp +++ b/lib/macro/macro-segment-selection.cpp @@ -4,6 +4,7 @@ #include "macro-condition-factory.hpp" #include "macro-helpers.hpp" #include "macro-segment.hpp" +#include "macro-signals.hpp" #include "obs-module-helper.hpp" #include "plugin-state-helpers.hpp" #include "ui-helpers.hpp" @@ -31,8 +32,8 @@ MacroSegmentSelection::MacroSegmentSelection(QWidget *parent, Type type, _index, SIGNAL(NumberVariableChanged(const NumberVariable &)), this, SLOT(IndexChanged(const NumberVariable &))); - QWidget::connect(GetSettingsWindow(), - SIGNAL(MacroSegmentOrderChanged()), this, + QWidget::connect(MacroSignalManager::Instance(), + SIGNAL(SegmentOrderChanged()), this, SLOT(MacroSegmentOrderChanged())); auto layout = new QHBoxLayout; diff --git a/lib/macro/macro-segment.cpp b/lib/macro/macro-segment.cpp index 6f6b631f..38a0cfba 100644 --- a/lib/macro/macro-segment.cpp +++ b/lib/macro/macro-segment.cpp @@ -256,28 +256,6 @@ MacroSegmentEdit::MacroSegmentEdit(QWidget *parent) QWidget::connect(_section, &Section::Collapsed, this, &MacroSegmentEdit::Collapsed); - // Macro signals - QWidget::connect(GetSettingsWindow(), - SIGNAL(MacroAdded(const QString &)), this, - SIGNAL(MacroAdded(const QString &))); - QWidget::connect(GetSettingsWindow(), - SIGNAL(MacroRemoved(const QString &)), this, - SIGNAL(MacroRemoved(const QString &))); - QWidget::connect( - GetSettingsWindow(), - SIGNAL(MacroRenamed(const QString &, const QString &)), this, - SIGNAL(MacroRenamed(const QString &, const QString &))); - // Scene group signals - QWidget::connect(GetSettingsWindow(), - SIGNAL(SceneGroupAdded(const QString &)), this, - SIGNAL(SceneGroupAdded(const QString &))); - QWidget::connect(GetSettingsWindow(), - SIGNAL(SceneGroupRemoved(const QString &)), this, - SIGNAL(SceneGroupRemoved(const QString &))); - QWidget::connect( - GetSettingsWindow(), - SIGNAL(SceneGroupRenamed(const QString &, const QString)), this, - SIGNAL(SceneGroupRenamed(const QString &, const QString))); auto frameLayout = new QGridLayout; frameLayout->setContentsMargins(0, 0, 0, 0); diff --git a/lib/macro/macro-segment.hpp b/lib/macro/macro-segment.hpp index da4052db..39ff8835 100644 --- a/lib/macro/macro-segment.hpp +++ b/lib/macro/macro-segment.hpp @@ -113,13 +113,6 @@ public slots: protected slots: void Collapsed(bool) const; -signals: - void MacroAdded(const QString &name); - void MacroRemoved(const QString &name); - void MacroRenamed(const QString &oldName, const QString &newName); - void SceneGroupAdded(const QString &name); - void SceneGroupRemoved(const QString &name); - void SceneGroupRenamed(const QString &oldName, const QString newName); protected: void SetDisableEffect(bool); diff --git a/lib/macro/macro-selection.cpp b/lib/macro/macro-selection.cpp index fff843db..74a85cc7 100644 --- a/lib/macro/macro-selection.cpp +++ b/lib/macro/macro-selection.cpp @@ -2,6 +2,7 @@ #include "advanced-scene-switcher.hpp" #include "layout-helpers.hpp" #include "macro.hpp" +#include "macro-signals.hpp" #include "ui-helpers.hpp" #include @@ -20,15 +21,14 @@ MacroSelection::MacroSelection(QWidget *parent) addItem(QString::fromStdString(m->Name())); } - QWidget::connect(GetSettingsWindow(), - SIGNAL(MacroAdded(const QString &)), this, + QWidget::connect(MacroSignalManager::Instance(), + SIGNAL(Add(const QString &)), this, SLOT(MacroAdd(const QString &))); - QWidget::connect(GetSettingsWindow(), - SIGNAL(MacroRemoved(const QString &)), this, + QWidget::connect(MacroSignalManager::Instance(), + SIGNAL(Remove(const QString &)), this, SLOT(MacroRemove(const QString &))); - QWidget::connect(GetSettingsWindow(), - SIGNAL(MacroRenamed(const QString &, const QString &)), - this, + QWidget::connect(MacroSignalManager::Instance(), + SIGNAL(Rename(const QString &, const QString &)), this, SLOT(MacroRename(const QString &, const QString &))); } diff --git a/lib/macro/macro-signals.cpp b/lib/macro/macro-signals.cpp new file mode 100644 index 00000000..34c72868 --- /dev/null +++ b/lib/macro/macro-signals.cpp @@ -0,0 +1,13 @@ +#include "macro-signals.hpp" + +namespace advss { + +MacroSignalManager::MacroSignalManager(QObject *parent) : QObject(parent) {} + +MacroSignalManager *MacroSignalManager::Instance() +{ + static MacroSignalManager manager; + return &manager; +} + +} // namespace advss diff --git a/lib/macro/macro-signals.hpp b/lib/macro/macro-signals.hpp new file mode 100644 index 00000000..5e8f069b --- /dev/null +++ b/lib/macro/macro-signals.hpp @@ -0,0 +1,26 @@ + +#pragma once +#include "export-symbol-helper.hpp" + +#include +#include + +namespace advss { + +class ADVSS_EXPORT MacroSignalManager : public QObject { + Q_OBJECT +public: + static MacroSignalManager *Instance(); + +signals: + void Rename(const QString &, const QString &); + void Add(const QString &); + void Remove(const QString &); + void SegmentOrderChanged(); + void HighlightChanged(bool value); + +private: + MacroSignalManager(QObject *parent = nullptr); +}; + +} // namespace advss diff --git a/lib/macro/macro-tab.cpp b/lib/macro/macro-tab.cpp index 5e0b6024..7feee480 100644 --- a/lib/macro/macro-tab.cpp +++ b/lib/macro/macro-tab.cpp @@ -4,6 +4,7 @@ #include "macro-condition-edit.hpp" #include "macro-export-import-dialog.hpp" #include "macro-settings.hpp" +#include "macro-signals.hpp" #include "macro-tree.hpp" #include "macro.hpp" #include "math-helpers.hpp" @@ -115,7 +116,8 @@ void AdvSceneSwitcher::on_macroAdd_clicked() auto selectedMacro = GetSelectedMacro(); if (!selectedMacro) { ui->macros->Add(newMacro); - emit MacroAdded(QString::fromStdString(name)); + MacroSignalManager::Instance()->Add( + QString::fromStdString(name)); return; } @@ -123,20 +125,22 @@ void AdvSceneSwitcher::on_macroAdd_clicked() ui->macros->ExpandGroup(selectedMacro); Macro::PrepareMoveToGroup(selectedMacro, newMacro); ui->macros->AddToGroup(newMacro, selectedMacro); - emit MacroAdded(QString::fromStdString(name)); + MacroSignalManager::Instance()->Add( + QString::fromStdString(name)); return; } auto selectedMacroGroup = selectedMacro->Parent(); if (!selectedMacroGroup) { ui->macros->Add(newMacro, selectedMacro); - emit MacroAdded(QString::fromStdString(name)); + MacroSignalManager::Instance()->Add( + QString::fromStdString(name)); return; } Macro::PrepareMoveToGroup(selectedMacroGroup, newMacro); ui->macros->Add(newMacro, selectedMacro); - emit MacroAdded(QString::fromStdString(name)); + MacroSignalManager::Instance()->Add(QString::fromStdString(name)); } static void addGroupSubitems(std::vector> ¯os, @@ -205,7 +209,7 @@ void AdvSceneSwitcher::RemoveMacro(std::shared_ptr ¯o) ui->macros->Remove(macro); MacroSegmentList::SetCachingEnabled(!switcher->disableMacroWidgetCache); - emit MacroRemoved(name); + MacroSignalManager::Instance()->Remove(name); } void AdvSceneSwitcher::RemoveSelectedMacros() @@ -251,7 +255,8 @@ void AdvSceneSwitcher::RenameMacro(std::shared_ptr ¯o, auto lock = LockContext(); macro->SetName(name.toStdString()); } - emit MacroRenamed(oldName, name); + + MacroSignalManager::Instance()->Rename(oldName, name); } void AdvSceneSwitcher::on_macroRemove_clicked() @@ -568,7 +573,8 @@ void AdvSceneSwitcher::on_macroSettings_clicked() } GetGlobalMacroSettings() = prop; - emit HighlightMacrosChanged(prop._highlightExecuted); + MacroSignalManager::Instance()->HighlightChanged( + prop._highlightExecuted); // Reset highlights to avoid all macro segments being highlighted, which // would have been highlighted at least once since the moment the @@ -751,7 +757,7 @@ void AdvSceneSwitcher::CopyMacro() ui->macros->Add(newMacro, macro); disableAddButtonHighlight(); - emit MacroAdded(QString::fromStdString(name)); + MacroSignalManager::Instance()->Add(QString::fromStdString(name)); } bool MacroTabIsInFocus() diff --git a/lib/macro/macro-tree.cpp b/lib/macro/macro-tree.cpp index eee68916..c4a2ee82 100644 --- a/lib/macro/macro-tree.cpp +++ b/lib/macro/macro-tree.cpp @@ -1,5 +1,6 @@ #include "macro-tree.hpp" #include "macro.hpp" +#include "macro-signals.hpp" #include "path-helpers.hpp" #include "sync-helpers.hpp" #include "ui-helpers.hpp" @@ -79,10 +80,10 @@ MacroTreeItem::MacroTreeItem(MacroTree *tree, std::shared_ptr macroItem, _macro->SetPaused(!val); }; connect(_running, &QAbstractButton::clicked, setRunning); - connect(_tree->window(), SIGNAL(HighlightMacrosChanged(bool)), this, - SLOT(EnableHighlight(bool))); - connect(_tree->window(), - SIGNAL(MacroRenamed(const QString &, const QString &)), this, + connect(MacroSignalManager::Instance(), SIGNAL(HighlightChanged(bool)), + this, SLOT(EnableHighlight(bool))); + connect(MacroSignalManager::Instance(), + SIGNAL(Rename(const QString &, const QString &)), this, SLOT(MacroRenamed(const QString &, const QString &))); connect(&_timer, SIGNAL(timeout()), this, SLOT(HighlightIfExecuted())); connect(&_timer, SIGNAL(timeout()), this, SLOT(UpdatePaused())); diff --git a/lib/utils/plugin-state-helpers.cpp b/lib/utils/plugin-state-helpers.cpp index 157e4729..977d77da 100644 --- a/lib/utils/plugin-state-helpers.cpp +++ b/lib/utils/plugin-state-helpers.cpp @@ -1,6 +1,6 @@ #include "plugin-state-helpers.hpp" -#include "advanced-scene-switcher.hpp" #include "macro-settings.hpp" +#include "macro-signals.hpp" #include "switcher-data.hpp" namespace advss { @@ -294,7 +294,7 @@ void SetMacroHighlightingEnabled(bool enable) if (!SettingsWindowIsOpened()) { return; } - AdvSceneSwitcher::window->HighlightMacrosChanged( + MacroSignalManager::Instance()->HighlightChanged( GetGlobalMacroSettings()._highlightExecuted); }, nullptr, false); diff --git a/lib/utils/scene-selection.cpp b/lib/utils/scene-selection.cpp index 2765ec90..e58821a6 100644 --- a/lib/utils/scene-selection.cpp +++ b/lib/utils/scene-selection.cpp @@ -399,22 +399,6 @@ SceneSelectionWidget::SceneSelectionWidget(QWidget *parent, bool variables, QWidget::connect(_canvas, SIGNAL(CanvasChanged(const OBSWeakCanvas &)), this, SIGNAL(CanvasChanged(const OBSWeakCanvas &))); - auto settingsWindow = GetSettingsWindow(); - if (settingsWindow) { - QWidget::connect(settingsWindow, - SIGNAL(SceneGroupAdded(const QString &)), this, - SLOT(ItemAdd(const QString &))); - QWidget::connect(settingsWindow, - SIGNAL(SceneGroupRemoved(const QString &)), - this, SLOT(ItemRemove(const QString &))); - QWidget::connect( - settingsWindow, - SIGNAL(SceneGroupRenamed(const QString &, - const QString &)), - this, - SLOT(ItemRename(const QString &, const QString &))); - } - // Variables QWidget::connect(VariableSignalManager::Instance(), SIGNAL(Add(const QString &)), this, diff --git a/plugins/base/macro-action-random.cpp b/plugins/base/macro-action-random.cpp index 687fc8c8..198e4eb7 100644 --- a/plugins/base/macro-action-random.cpp +++ b/plugins/base/macro-action-random.cpp @@ -1,6 +1,7 @@ #include "macro-action-random.hpp" #include "layout-helpers.hpp" #include "macro-helpers.hpp" +#include "macro-signals.hpp" #include "ui-helpers.hpp" #include @@ -106,8 +107,8 @@ MacroActionRandomEdit::MacroActionRandomEdit( QWidget::connect(_list, SIGNAL(Removed(int)), this, SLOT(Remove(int))); QWidget::connect(_list, SIGNAL(Replaced(int, const std::string &)), this, SLOT(Replace(int, const std::string &))); - QWidget::connect(GetSettingsWindow(), - SIGNAL(MacroRemoved(const QString &)), this, + QWidget::connect(MacroSignalManager::Instance(), + SIGNAL(Remove(const QString &)), this, SLOT(MacroRemove(const QString &))); QWidget::connect(_allowRepeat, SIGNAL(stateChanged(int)), this, SLOT(AllowRepeatChanged(int))); diff --git a/plugins/base/macro-action-sequence.cpp b/plugins/base/macro-action-sequence.cpp index b3a2567c..be606c2d 100644 --- a/plugins/base/macro-action-sequence.cpp +++ b/plugins/base/macro-action-sequence.cpp @@ -1,6 +1,7 @@ #include "macro-action-sequence.hpp" #include "layout-helpers.hpp" #include "macro-helpers.hpp" +#include "macro-signals.hpp" namespace advss { @@ -212,7 +213,8 @@ MacroActionSequenceEdit::MacroActionSequenceEdit( SLOT(ContinueFromClicked())); QWidget::connect(_restart, SIGNAL(stateChanged(int)), this, SLOT(RestartChanged(int))); - QWidget::connect(this, SIGNAL(MacroRemoved(const QString &)), this, + QWidget::connect(MacroSignalManager::Instance(), + SIGNAL(Remove(const QString &)), this, SLOT(MacroRemove(const QString &))); QWidget::connect(_actions, SIGNAL(currentIndexChanged(int)), this, SLOT(ActionChanged(int)));