1 #include "widgetresizer.h"
2 #include "common/unused.h"
3 #include <QMouseEvent>
4 #include <QDebug>
5 #include <QLayout>
6 
WidgetResizer(QWidget * parent)7 WidgetResizer::WidgetResizer(QWidget *parent) :
8     QWidget(parent)
9 {
10     init();
11 }
12 
~WidgetResizer()13 WidgetResizer::~WidgetResizer()
14 {
15 }
16 
WidgetResizer(const Qt::Orientation & orientation,QWidget * parent)17 WidgetResizer::WidgetResizer(const Qt::Orientation& orientation, QWidget* parent) :
18     QWidget(parent), orientation(orientation)
19 {
20     init();
21 }
22 
init()23 void WidgetResizer::init()
24 {
25     updateCursor();
26     updateWidth();
27     widgetMinimumSize = QSize(20, 20);
28 }
29 
getOrientation() const30 Qt::Orientation WidgetResizer::getOrientation() const
31 {
32     return orientation;
33 }
34 
setOrientation(const Qt::Orientation & value)35 void WidgetResizer::setOrientation(const Qt::Orientation& value)
36 {
37     orientation = value;
38     updateCursor();
39 }
40 
updateCursor()41 void WidgetResizer::updateCursor()
42 {
43     switch (orientation)
44     {
45         case Qt::Horizontal:
46             setCursor(Qt::SplitHCursor);
47             break;
48         case Qt::Vertical:
49             setCursor(Qt::SplitVCursor);
50             break;
51     }
52 }
53 
updateWidth()54 void WidgetResizer::updateWidth()
55 {
56     setMinimumSize(width, width);
57 }
58 
mousePressEvent(QMouseEvent * event)59 void WidgetResizer::mousePressEvent(QMouseEvent* event)
60 {
61     UNUSED(event);
62     if (!widget)
63         return;
64 
65     dragStartPosition = QCursor::pos();
66     dragStartSize = widget->size();
67 }
68 
mouseMoveEvent(QMouseEvent * event)69 void WidgetResizer::mouseMoveEvent(QMouseEvent* event)
70 {
71     UNUSED(event);
72     if (!widget)
73         return;
74 
75     switch (orientation)
76     {
77         case Qt::Horizontal:
78             handleHorizontalMove(QCursor::pos().x());
79             break;
80         case Qt::Vertical:
81             handleVerticalMove(QCursor::pos().y());
82             break;
83     }
84 }
85 
handleHorizontalMove(int position)86 void WidgetResizer::handleHorizontalMove(int position)
87 {
88     int newWidth = dragStartSize.width() + position - dragStartPosition.y();
89     if (newWidth < widgetMinimumSize.width())
90         return;
91 
92     widget->setFixedWidth(newWidth);
93 }
94 
handleVerticalMove(int position)95 void WidgetResizer::handleVerticalMove(int position)
96 {
97     int newHeight = dragStartSize.height() + position - dragStartPosition.y();
98     if (newHeight < widgetMinimumSize.height())
99         return;
100 
101     widget->setFixedHeight(newHeight);
102 }
103 
getWidth() const104 int WidgetResizer::getWidth() const
105 {
106     return width;
107 }
108 
setWidth(int value)109 void WidgetResizer::setWidth(int value)
110 {
111     width = value;
112 }
113 
getWidget() const114 QWidget* WidgetResizer::getWidget() const
115 {
116     return widget;
117 }
118 
setWidget(QWidget * value)119 void WidgetResizer::setWidget(QWidget* value)
120 {
121     widget = value;
122 }
123 
getWidgetMinimumSize() const124 QSize WidgetResizer::getWidgetMinimumSize() const
125 {
126     return widgetMinimumSize;
127 }
128 
setWidgetMinimumSize(const QSize & value)129 void WidgetResizer::setWidgetMinimumSize(const QSize& value)
130 {
131     widgetMinimumSize = value;
132 }
133 
setWidgetMinimumSize(int width,int height)134 void WidgetResizer::setWidgetMinimumSize(int width, int height)
135 {
136     widgetMinimumSize = QSize(width, height);
137 }
138 
minimizeHeight()139 void WidgetResizer::minimizeHeight()
140 {
141     widget->setFixedHeight(widgetMinimumSize.height());
142 }
143