From 1f31b81f0d2273a7203e8c80e9dd247bdbf75645 Mon Sep 17 00:00:00 2001 From: Przemek Pawlas <3606072+Destroy666x@users.noreply.github.com> Date: Fri, 8 Dec 2023 23:31:35 +0100 Subject: [PATCH] Add else actions toggle button --- data/locale/en-US.ini | 2 ++ data/res/images/DarkNotEqual.svg | 11 +++++++++++ data/res/images/LightNotEqual.svg | 11 +++++++++++ forms/advanced-scene-switcher.ui | 16 ++++++++++++++++ src/advanced-scene-switcher.cpp | 17 ++++++++++++++++ src/advanced-scene-switcher.hpp | 8 +++++++- src/macro-core/macro-tab.cpp | 32 +++++++++++++++++++++++++++++-- 7 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 data/res/images/DarkNotEqual.svg create mode 100644 data/res/images/LightNotEqual.svg diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 8930d0d0..a53bb8e4 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -126,6 +126,8 @@ AdvSceneSwitcher.macroTab.currentDockButtonText.unpause="Unpause button text:" AdvSceneSwitcher.macroTab.currentDockStatusText.true="Conditions true text:" AdvSceneSwitcher.macroTab.currentDockStatusText.false="Conditions false text:" AdvSceneSwitcher.macroTab.currentDockHighlightIfExecuted="Highlight dock if macro actions were recently executed" +AdvSceneSwitcher.macroTab.toggleElseActions.hide.tooltip="Hide else actions" +AdvSceneSwitcher.macroTab.toggleElseActions.show.tooltip="Show else actions" AdvSceneSwitcher.macroDock.pause="Pause" AdvSceneSwitcher.macroDock.unpause="Unpause" diff --git a/data/res/images/DarkNotEqual.svg b/data/res/images/DarkNotEqual.svg new file mode 100644 index 00000000..36dc81c0 --- /dev/null +++ b/data/res/images/DarkNotEqual.svg @@ -0,0 +1,11 @@ + + + + + + Layer 1 + + + + + \ No newline at end of file diff --git a/data/res/images/LightNotEqual.svg b/data/res/images/LightNotEqual.svg new file mode 100644 index 00000000..41aa710b --- /dev/null +++ b/data/res/images/LightNotEqual.svg @@ -0,0 +1,11 @@ + + + + + + Layer 1 + + + + + \ No newline at end of file diff --git a/forms/advanced-scene-switcher.ui b/forms/advanced-scene-switcher.ui index 9a37330c..d5662a15 100644 --- a/forms/advanced-scene-switcher.ui +++ b/forms/advanced-scene-switcher.ui @@ -1275,6 +1275,22 @@ + + + + + 22 + 16777215 + + + + true + + + true + + + diff --git a/src/advanced-scene-switcher.cpp b/src/advanced-scene-switcher.cpp index 596577ce..d633192f 100644 --- a/src/advanced-scene-switcher.cpp +++ b/src/advanced-scene-switcher.cpp @@ -115,6 +115,23 @@ void AdvSceneSwitcher::LoadUI() loading = false; } +bool AdvSceneSwitcher::eventFilter(QObject *obj, QEvent *event) +{ + auto eventType = event->type(); + if (obj == ui->macroElseActions && eventType == QEvent::Resize) { + QResizeEvent *resizeEvent = static_cast(event); + + if (resizeEvent->size().height() == 0) { + SetElseActionsStateToHidden(); + return QDialog::eventFilter(obj, event); + } + + SetElseActionsStateToVisible(); + } + + return QDialog::eventFilter(obj, event); +} + /****************************************************************************** * Saving and loading ******************************************************************************/ diff --git a/src/advanced-scene-switcher.hpp b/src/advanced-scene-switcher.hpp index fcd9f892..71f50f04 100644 --- a/src/advanced-scene-switcher.hpp +++ b/src/advanced-scene-switcher.hpp @@ -39,6 +39,9 @@ public: void RestoreWindowGeo(); void CheckFirstTimeSetup(); +protected: + bool eventFilter(QObject *obj, QEvent *event) override; + /* --- Begin of general tab section --- */ public: void SetupGeneralTab(); @@ -115,6 +118,7 @@ public slots: void on_actionUp_clicked(); void on_actionDown_clicked(); void on_actionBottom_clicked(); + void on_toggleElseActions_clicked(); void on_elseActionAdd_clicked(); void on_elseActionRemove_clicked(); void on_elseActionTop_clicked(); @@ -146,6 +150,8 @@ public slots: void MaximizeElseActions(); void MinimizeConditions(); void MaximizeConditions(); + void SetElseActionsStateToHidden(); + void SetElseActionsStateToVisible(); void MacroActionSelectionChanged(int idx); void MacroActionReorder(int to, int target); void AddMacroAction(int idx); @@ -334,7 +340,7 @@ public slots: void on_timeUp_clicked(); void on_timeDown_clicked(); - // Video tab + // Audio tab public: void SetupAudioTab(); public slots: diff --git a/src/macro-core/macro-tab.cpp b/src/macro-core/macro-tab.cpp index f4409c56..500fe507 100644 --- a/src/macro-core/macro-tab.cpp +++ b/src/macro-core/macro-tab.cpp @@ -700,8 +700,7 @@ void AdvSceneSwitcher::MacroSelectionAboutToChange() // actions nor elseActions being visible when the condition <-> action // splitter is moved if (elsePos[0] == 0 && elsePos[1] == 0) { - macro->SetElseActionSplitterPosition(QList() - << 999999 << 0); + maximizeFirstSplitterEntry(ui->macroElseActionSplitter); return; } macro->SetElseActionSplitterPosition( @@ -790,6 +789,8 @@ bool shouldRestoreSplitter(const QList &pos) void AdvSceneSwitcher::SetupMacroTab() { + ui->macroElseActions->installEventFilter(this); + if (switcher->macros.size() == 0 && !switcher->disableHints) { addPulse = PulseWidget(ui->macroAdd, QColor(Qt::green)); } @@ -862,6 +863,8 @@ void AdvSceneSwitcher::SetupMacroTab() SetButtonIcon(ui->conditionTop, (pathPrefix + "DoubleUp.svg").c_str()); SetButtonIcon(ui->conditionBottom, (pathPrefix + "DoubleDown.svg").c_str()); + SetButtonIcon(ui->toggleElseActions, + (pathPrefix + "NotEqual.svg").c_str()); // Reserve more space for macro edit area than for the macro list ui->macroListMacroEditSplitter->setStretchFactor(0, 1); @@ -1100,6 +1103,31 @@ void AdvSceneSwitcher::MaximizeConditions() MinimizeActions(); } +void AdvSceneSwitcher::on_toggleElseActions_clicked() +{ + auto elsePosition = ui->macroElseActionSplitter->sizes(); + if (elsePosition[1] == 0) { + centerSplitterPosition(ui->macroElseActionSplitter); + return; + } + + maximizeFirstSplitterEntry(ui->macroElseActionSplitter); +} + +void AdvSceneSwitcher::SetElseActionsStateToHidden() +{ + ui->toggleElseActions->setToolTip(obs_module_text( + "AdvSceneSwitcher.macroTab.toggleElseActions.show.tooltip")); + ui->toggleElseActions->setChecked(false); +} + +void AdvSceneSwitcher::SetElseActionsStateToVisible() +{ + ui->toggleElseActions->setToolTip(obs_module_text( + "AdvSceneSwitcher.macroTab.toggleElseActions.hide.tooltip")); + ui->toggleElseActions->setChecked(true); +} + bool AdvSceneSwitcher::MacroTabIsInFocus() { return isActiveWindow() && isAncestorOf(focusWidget()) &&