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 @@
+
+
\ 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 @@
+
+
\ 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 @@
+
+
\ 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 @@
+
+
\ 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()