From 6d75ad09624c789b35e08c252aca40ba89caa252 Mon Sep 17 00:00:00 2001 From: Mikaƫl Capelle Date: Mon, 28 Dec 2020 18:31:07 +0100 Subject: Allow drag&drop a separator to itself. --- src/modlistview.cpp | 20 +++++++++++++++++--- src/modlistview.h | 7 ++++++- 2 files changed, 23 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/modlistview.cpp b/src/modlistview.cpp index 65e35a8b..0c74c54e 100644 --- a/src/modlistview.cpp +++ b/src/modlistview.cpp @@ -18,6 +18,11 @@ void ModListView::setModel(QAbstractItemModel *model) setVerticalScrollBar(new ViewMarkingScrollBar(model, this)); } +QModelIndexList ModListView::selectedIndexes() const +{ + return m_inDragMoveEvent ? QModelIndexList() : QTreeView::selectedIndexes(); +} + void ModListView::dragEnterEvent(QDragEnterEvent* event) { emit dragEntered(event->mimeData()); @@ -27,23 +32,32 @@ void ModListView::dragEnterEvent(QDragEnterEvent* event) void ModListView::dragMoveEvent(QDragMoveEvent* event) { if (autoExpandDelay() >= 0) { - openTimer.start(autoExpandDelay(), this); + m_openTimer.start(autoExpandDelay(), this); } // bypass QTreeView + m_inDragMoveEvent = true; QAbstractItemView::dragMoveEvent(event); + m_inDragMoveEvent = false; +} + +void ModListView::dropEvent(QDropEvent* event) +{ + m_inDragMoveEvent = true; + QTreeView::dropEvent(event); + m_inDragMoveEvent = false; } void ModListView::timerEvent(QTimerEvent* event) { - if (event->timerId() == openTimer.timerId()) { + if (event->timerId() == m_openTimer.timerId()) { QPoint pos = viewport()->mapFromGlobal(QCursor::pos()); if (state() == QAbstractItemView::DraggingState && viewport()->rect().contains(pos)) { QModelIndex index = indexAt(pos); setExpanded(index, true); } - openTimer.stop(); + m_openTimer.stop(); } else { QTreeView::timerEvent(event); diff --git a/src/modlistview.h b/src/modlistview.h index 9546321e..ab604b70 100644 --- a/src/modlistview.h +++ b/src/modlistview.h @@ -12,6 +12,8 @@ public: explicit ModListView(QWidget *parent = 0); void setModel(QAbstractItemModel *model) override; + QModelIndexList selectedIndexes() const; + signals: void dragEntered(const QMimeData* mimeData); @@ -20,11 +22,14 @@ protected: // replace the auto-expand timer from QTreeView to avoid // auto-collapsing - QBasicTimer openTimer; + QBasicTimer m_openTimer; + + bool m_inDragMoveEvent = false; void timerEvent(QTimerEvent* event) override; void dragEnterEvent(QDragEnterEvent* event) override; void dragMoveEvent(QDragMoveEvent* event) override; + void dropEvent(QDropEvent* event) override; private: -- cgit v1.3.1