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