From 29f810a2a0ad8860ffc3b41342354810d3d409cb Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Mon, 31 Jul 2023 20:35:54 +0200 Subject: [PATCH] Add buttons to move macro segments to top / bottom of segment list --- data/res/images/DarkDoubleDown.svg | 9 +++++ data/res/images/DarkDoubleUp.svg | 9 +++++ data/res/images/LightDoubleDown.svg | 9 +++++ data/res/images/LightDoubleUp.svg | 9 +++++ forms/advanced-scene-switcher.ui | 52 +++++++++++++++++++++++++ src/advanced-scene-switcher.hpp | 4 ++ src/macro-core/macro-action-edit.cpp | 23 ++++++++++- src/macro-core/macro-condition-edit.cpp | 23 ++++++++++- src/macro-core/macro-tab.cpp | 18 +++++++++ 9 files changed, 152 insertions(+), 4 deletions(-) create mode 100644 data/res/images/DarkDoubleDown.svg create mode 100644 data/res/images/DarkDoubleUp.svg create mode 100644 data/res/images/LightDoubleDown.svg create mode 100644 data/res/images/LightDoubleUp.svg diff --git a/data/res/images/DarkDoubleDown.svg b/data/res/images/DarkDoubleDown.svg new file mode 100644 index 00000000..b1e5e853 --- /dev/null +++ b/data/res/images/DarkDoubleDown.svg @@ -0,0 +1,9 @@ + + + + Layer 1 + + + + + \ No newline at end of file diff --git a/data/res/images/DarkDoubleUp.svg b/data/res/images/DarkDoubleUp.svg new file mode 100644 index 00000000..53aff64e --- /dev/null +++ b/data/res/images/DarkDoubleUp.svg @@ -0,0 +1,9 @@ + + + + + Layer 1 + + + + \ No newline at end of file diff --git a/data/res/images/LightDoubleDown.svg b/data/res/images/LightDoubleDown.svg new file mode 100644 index 00000000..f7d50ab7 --- /dev/null +++ b/data/res/images/LightDoubleDown.svg @@ -0,0 +1,9 @@ + + + + Layer 1 + + + + + \ No newline at end of file diff --git a/data/res/images/LightDoubleUp.svg b/data/res/images/LightDoubleUp.svg new file mode 100644 index 00000000..a715a280 --- /dev/null +++ b/data/res/images/LightDoubleUp.svg @@ -0,0 +1,9 @@ + + + + + Layer 1 + + + + \ No newline at end of file diff --git a/forms/advanced-scene-switcher.ui b/forms/advanced-scene-switcher.ui index 4f1764e8..20749375 100644 --- a/forms/advanced-scene-switcher.ui +++ b/forms/advanced-scene-switcher.ui @@ -988,6 +988,19 @@ + + + + + 22 + 16777215 + + + + true + + + @@ -1023,6 +1036,19 @@ + + + + + 22 + 16777215 + + + + true + + + @@ -1130,6 +1156,19 @@ + + + + + 22 + 16777215 + + + + true + + + @@ -1162,6 +1201,19 @@ + + + + + 22 + 16777215 + + + + true + + + diff --git a/src/advanced-scene-switcher.hpp b/src/advanced-scene-switcher.hpp index bdd11953..318793a0 100644 --- a/src/advanced-scene-switcher.hpp +++ b/src/advanced-scene-switcher.hpp @@ -102,12 +102,16 @@ public slots: void on_runMacroOnChange_stateChanged(int value); void on_conditionAdd_clicked(); void on_conditionRemove_clicked(); + void on_conditionTop_clicked(); void on_conditionUp_clicked(); void on_conditionDown_clicked(); + void on_conditionBottom_clicked(); void on_actionAdd_clicked(); void on_actionRemove_clicked(); + void on_actionTop_clicked(); void on_actionUp_clicked(); void on_actionDown_clicked(); + void on_actionBottom_clicked(); void MacroSelectionChanged(const QItemSelection &, const QItemSelection &); void UpMacroSegementHotkey(); diff --git a/src/macro-core/macro-action-edit.cpp b/src/macro-core/macro-action-edit.cpp index fd71110b..04fcea0e 100644 --- a/src/macro-core/macro-action-edit.cpp +++ b/src/macro-core/macro-action-edit.cpp @@ -305,6 +305,15 @@ void AdvSceneSwitcher::on_actionRemove_clicked() MacroActionSelectionChanged(-1); } +void AdvSceneSwitcher::on_actionTop_clicked() +{ + if (currentActionIdx == -1) { + return; + } + MacroActionReorder(0, currentActionIdx); + MacroActionSelectionChanged(0); +} + void AdvSceneSwitcher::on_actionUp_clicked() { if (currentActionIdx == -1 || currentActionIdx == 0) { @@ -323,6 +332,16 @@ void AdvSceneSwitcher::on_actionDown_clicked() MacroActionSelectionChanged(currentActionIdx + 1); } +void AdvSceneSwitcher::on_actionBottom_clicked() +{ + if (currentActionIdx == -1) { + return; + } + const int newIdx = actionsList->ContentLayout()->count() - 1; + MacroActionReorder(newIdx, currentActionIdx); + MacroActionSelectionChanged(newIdx); +} + void AdvSceneSwitcher::SwapActions(Macro *m, int pos1, int pos2) { if (pos1 == pos2) { @@ -402,8 +421,8 @@ void AdvSceneSwitcher::MacroActionReorder(int to, int from) return; } - if (from < 0 || from > (int)macro->Actions().size() || to < 0 || - to > (int)macro->Actions().size()) { + if (to == from || from < 0 || from > (int)macro->Actions().size() || + to < 0 || to > (int)macro->Actions().size()) { return; } { diff --git a/src/macro-core/macro-condition-edit.cpp b/src/macro-core/macro-condition-edit.cpp index 5532bfae..689f908a 100644 --- a/src/macro-core/macro-condition-edit.cpp +++ b/src/macro-core/macro-condition-edit.cpp @@ -457,6 +457,15 @@ void AdvSceneSwitcher::on_conditionRemove_clicked() MacroConditionSelectionChanged(-1); } +void AdvSceneSwitcher::on_conditionTop_clicked() +{ + if (currentConditionIdx == -1) { + return; + } + MacroConditionReorder(0, currentConditionIdx); + MacroConditionSelectionChanged(0); +} + void AdvSceneSwitcher::on_conditionUp_clicked() { if (currentConditionIdx == -1 || currentConditionIdx == 0) { @@ -477,6 +486,16 @@ void AdvSceneSwitcher::on_conditionDown_clicked() MacroConditionSelectionChanged(currentConditionIdx + 1); } +void AdvSceneSwitcher::on_conditionBottom_clicked() +{ + if (currentConditionIdx == -1) { + return; + } + const int newIdx = conditionsList->ContentLayout()->count() - 1; + MacroConditionReorder(newIdx, currentConditionIdx); + MacroConditionSelectionChanged(newIdx); +} + void AdvSceneSwitcher::SwapConditions(Macro *m, int pos1, int pos2) { if (pos1 == pos2) { @@ -570,8 +589,8 @@ void AdvSceneSwitcher::MacroConditionReorder(int to, int from) return; } - if (from < 0 || from > (int)macro->Conditions().size() || to < 0 || - to > (int)macro->Conditions().size()) { + if (to == from || from < 0 || from > (int)macro->Conditions().size() || + to < 0 || to > (int)macro->Conditions().size()) { return; } { diff --git a/src/macro-core/macro-tab.cpp b/src/macro-core/macro-tab.cpp index ef130b44..91542c27 100644 --- a/src/macro-core/macro-tab.cpp +++ b/src/macro-core/macro-tab.cpp @@ -503,6 +503,16 @@ void AdvSceneSwitcher::SetupMacroTab() ui->macroActionConditionSplitter->setStyleSheet( "QSplitter::handle {background: transparent;}"); + // Set action and condition control icons + const std::string pathPrefix = + GetDataFilePath("res/images/" + GetThemeTypeName()); + SetButtonIcon(ui->actionTop, (pathPrefix + "DoubleUp.svg").c_str()); + SetButtonIcon(ui->actionBottom, + (pathPrefix + "DoubleDown.svg").c_str()); + SetButtonIcon(ui->conditionTop, (pathPrefix + "DoubleUp.svg").c_str()); + SetButtonIcon(ui->conditionBottom, + (pathPrefix + "DoubleDown.svg").c_str()); + // Reserve more space for macro edit area than for the macro list ui->macroListMacroEditSplitter->setStretchFactor(0, 1); ui->macroListMacroEditSplitter->setStretchFactor(1, 4); @@ -844,32 +854,40 @@ void AdvSceneSwitcher::FadeOutActionControls() { fade(ui->actionAdd, true); fade(ui->actionRemove, true); + fade(ui->actionTop, true); fade(ui->actionUp, true); fade(ui->actionDown, true); + fade(ui->actionBottom, true); } void AdvSceneSwitcher::FadeOutConditionControls() { fade(ui->conditionAdd, true); fade(ui->conditionRemove, true); + fade(ui->conditionTop, true); fade(ui->conditionUp, true); fade(ui->conditionDown, true); + fade(ui->conditionBottom, true); } void AdvSceneSwitcher::ResetOpacityActionControls() { fade(ui->actionAdd, false); fade(ui->actionRemove, false); + fade(ui->actionTop, false); fade(ui->actionUp, false); fade(ui->actionDown, false); + fade(ui->actionBottom, false); } void AdvSceneSwitcher::ResetOpacityConditionControls() { fade(ui->conditionAdd, false); fade(ui->conditionRemove, false); + fade(ui->conditionTop, false); fade(ui->conditionUp, false); fade(ui->conditionDown, false); + fade(ui->conditionBottom, false); } void AdvSceneSwitcher::HighlightControls()