1 #pragma once 2 3 #include <QListWidget> 4 #include <QEvent> 5 #include <QItemDelegate> 6 7 class SceneTree : public QListWidget { 8 Q_OBJECT 9 Q_PROPERTY(int gridItemWidth READ GetGridItemWidth WRITE 10 SetGridItemWidth DESIGNABLE true) 11 Q_PROPERTY(int gridItemHeight READ GetGridItemHeight WRITE 12 SetGridItemHeight DESIGNABLE true) 13 14 bool gridMode = false; 15 int maxWidth = 150; 16 int itemHeight = 24; 17 18 public: 19 void SetGridMode(bool grid); 20 bool GetGridMode(); 21 22 void SetGridItemWidth(int width); 23 void SetGridItemHeight(int height); 24 int GetGridItemWidth(); 25 int GetGridItemHeight(); 26 27 explicit SceneTree(QWidget *parent = nullptr); 28 29 private: 30 void RepositionGrid(QDragMoveEvent *event = nullptr); 31 32 protected: 33 virtual bool eventFilter(QObject *obj, QEvent *event) override; 34 virtual void resizeEvent(QResizeEvent *event) override; 35 virtual void startDrag(Qt::DropActions supportedActions) override; 36 virtual void dropEvent(QDropEvent *event) override; 37 virtual void dragMoveEvent(QDragMoveEvent *event) override; 38 virtual void dragLeaveEvent(QDragLeaveEvent *event) override; 39 virtual void rowsInserted(const QModelIndex &parent, int start, 40 int end) override; 41 42 signals: 43 void scenesReordered(); 44 }; 45