From 88dff377766acc0301804aba89395d5aa0577e6b Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Wed, 23 Feb 2022 21:29:50 +0100 Subject: [PATCH] Allow drag and drop reordering of macros --- forms/advanced-scene-switcher.ui | 9 +++++++++ src/headers/advanced-scene-switcher.hpp | 1 + src/macro-tab.cpp | 25 +++++++++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/forms/advanced-scene-switcher.ui b/forms/advanced-scene-switcher.ui index 730f75ac..a46e25e8 100644 --- a/forms/advanced-scene-switcher.ui +++ b/forms/advanced-scene-switcher.ui @@ -584,6 +584,15 @@ 0 + + true + + + QAbstractItemView::InternalMove + + + Qt::MoveAction + false diff --git a/src/headers/advanced-scene-switcher.hpp b/src/headers/advanced-scene-switcher.hpp index 665d2e8c..e401898a 100644 --- a/src/headers/advanced-scene-switcher.hpp +++ b/src/headers/advanced-scene-switcher.hpp @@ -154,6 +154,7 @@ public slots: void MoveMacroConditionUp(int idx); void MoveMacroConditionDown(int idx); void HighlightMatchedMacros(); + void MacroDragDropReorder(QModelIndex, int, int, QModelIndex, int); void on_screenRegionSwitches_currentRowChanged(int idx); void on_showFrame_clicked(); diff --git a/src/macro-tab.cpp b/src/macro-tab.cpp index ff20f6a3..3721c63e 100644 --- a/src/macro-tab.cpp +++ b/src/macro-tab.cpp @@ -384,6 +384,25 @@ void AdvSceneSwitcher::on_macros_currentRowChanged(int idx) } } +void AdvSceneSwitcher::MacroDragDropReorder(QModelIndex, int from, int, + QModelIndex, int to) +{ + std::lock_guard lock(switcher->m); + if (from > to) { + std::rotate(switcher->macros.rend() - from - 1, + switcher->macros.rend() - from, + switcher->macros.rend() - to); + } else { + std::rotate(switcher->macros.begin() + from, + switcher->macros.begin() + from + 1, + switcher->macros.begin() + to); + } + + for (auto &m : switcher->macros) { + m->ResolveMacroRef(); + } +} + void AdvSceneSwitcher::setupMacroTab() { const QSignalBlocker signalBlocker(ui->macros); @@ -401,6 +420,12 @@ void AdvSceneSwitcher::setupMacroTab() ui->macroHelp->setVisible(false); } + connect(ui->macros->model(), + SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int)), + this, + SLOT(MacroDragDropReorder(QModelIndex, int, int, QModelIndex, + int))); + delete conditionsList; conditionsList = new MacroSegmentList(this); conditionsList->SetHelpMsg(