diff options
| -rw-r--r-- | src/modlistview.cpp | 24 | ||||
| -rw-r--r-- | src/modlistview.h | 18 |
2 files changed, 38 insertions, 4 deletions
diff --git a/src/modlistview.cpp b/src/modlistview.cpp index 9a640ba1..fcf34749 100644 --- a/src/modlistview.cpp +++ b/src/modlistview.cpp @@ -4,7 +4,6 @@ #include <QMimeData>
#include <QProxyStyle>
-
class ModListViewStyle: public QProxyStyle {
public:
ModListViewStyle(QStyle *style, int indentation);
@@ -57,3 +56,26 @@ void ModListView::setModel(QAbstractItemModel *model) setVerticalScrollBar(new ViewMarkingScrollBar(model, this));
}
+void ModListView::dragMoveEvent(QDragMoveEvent* event)
+{
+ if (autoExpandDelay() >= 0) {
+ openTimer.start(autoExpandDelay(), this);
+ }
+ QAbstractItemView::dragMoveEvent(event);
+}
+
+void ModListView::timerEvent(QTimerEvent* event)
+{
+ if (event->timerId() == 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();
+ }
+ else {
+ QTreeView::timerEvent(event);
+ }
+}
diff --git a/src/modlistview.h b/src/modlistview.h index 6cd114b0..982591a3 100644 --- a/src/modlistview.h +++ b/src/modlistview.h @@ -10,15 +10,27 @@ class ModListView : public QTreeView Q_OBJECT
public:
explicit ModListView(QWidget *parent = 0);
- virtual void dragEnterEvent(QDragEnterEvent *event);
- virtual void setModel(QAbstractItemModel *model);
+ void setModel(QAbstractItemModel *model) override;
+
signals:
void dropModeUpdate(bool dropOnRows);
-
+
public slots:
+
+protected:
+
+ // replace the auto-expand timer from QTreeView to avoid
+ // auto-collapsing
+ QBasicTimer openTimer;
+
+ void timerEvent(QTimerEvent* event) override;
+ void dragMoveEvent(QDragMoveEvent* event) override;
+ void dragEnterEvent(QDragEnterEvent* event) override;
+
private:
ViewMarkingScrollBar *m_Scrollbar;
+
};
#endif // MODLISTVIEW_H
|
