-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathQDockPanel.h
114 lines (90 loc) · 2.36 KB
/
QDockPanel.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#ifndef QDOCKPANEL_H
#define QDOCKPANEL_H
#include <QWidget>
#include "QDockCommon.h"
#include "QDockPanelComponents.h"
#include "QDockArrows.h"
#include "IAcceptDrop.h"
class QDockManager;
class QDockMaskWidget;
class QDockTabWidget;
class QDockSideButton;
class QDockPanel : public QWidget, IAcceptDrop
{
Q_OBJECT
public:
explicit QDockPanel(QDockManager* manager, QWidget* frame);
QWidget* getContensWidget(){ return contensWidget_; }
QWidget* resetContensWidget(QWidget* newWidget)
{
QWidget* old = contensWidget_;
contensWidget_ = newWidget;
resetContensWidgetPosAndSize();
return old;
}
void setId(int id){ id_ = id; }
int id(){ return id_; }
DockStatus dockStatus(){ return dockStatus_; }
bool dockTo(QWidget* target, DockArea area);
void undock();
void startDrag();
void setAutoHide(bool hide);
private:
void resizeWidget(int curX, int curY);
void relayout();
void setDockStatus();
void setFloatStatus();
void setTabbedStatus(bool isTabbed, QDockPanel* parentTabPanel);
void setAutoHideStatus();
private:
int id_; //panel ID
int titleRectHeight_; // panel窗口的标题栏的高度.
QWidget* contensWidget_; // panel窗口内的widget.
int edgeWidth_; // 边框的宽度.
QSize floatSize_;
QDockManager* manager_;
QDockArrows arrows_;
DockArea lastMaskArea_;
QDockMaskWidget* maskWidget_;
bool isTabbed_;
QDockPanel* parentTabPanel_;
DockStatus dockStatus_;
QWidget* dockTarget_;
DockArea area_;
QPoint floatPos_;
QDockSideButton* autoHideBtn_;
enum PanelType
{
DockPanel,
TabContainer,
SplitContainer,
};
PanelType panelType_;
QDockPanelTitle* title_;
QDockPanelEdgeLeft* leftEdge_;
QDockPanelEdgeTop* topEdge_;
QDockPanelEdgeRight* rightEdge_;
QDockPanelEdgeBottom* bottomEdge_;
QDockPanelEdgeLeftTop* leftTopEdge_;
QDockPanelEdgeRightTop* rightTopEdge_;
QDockPanelEdgeRightBottom* rightBottomEdge_;
QDockPanelEdgeLeftBottom* leftBottomEdge_;
bool isLBtnPressed_;
QPoint oldPos_;
QPoint pressedPos_;
IAcceptDrop* lastDragOverPanelOrFrame_;
private:
void showArrow();
protected:
void paintEvent(QPaintEvent*);
void resizeEvent(QResizeEvent* e);
void resetContensWidgetPosAndSize();
virtual void dragEnter();
virtual void dragLeave();
virtual void drop(QWidget* from, QPoint pos);
virtual void dragMove(const QPoint& pos);
friend QDockManager;
friend QDockPanelTitle;
friend QDockTabWidget;
};
#endif // QDOCKPANEL_H