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(