1/****************************************************************************
2**
3** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4** Contact: http://www.qt-project.org/legal
5**
6** This file is part of the QtGui module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and Digia. For licensing terms and
14** conditions see http://qt.digia.com/licensing. For further information
15** use the contact form at http://qt.digia.com/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 2.1 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 2.1 requirements
23** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24**
25** In addition, as a special exception, Digia gives you certain additional
26** rights. These rights are described in the Digia Qt LGPL Exception
27** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28**
29** GNU General Public License Usage
30** Alternatively, this file may be used under the terms of the GNU
31** General Public License version 3.0 as published by the Free Software
32** Foundation and appearing in the file LICENSE.GPL included in the
33** packaging of this file. Please review the following information to
34** ensure the GNU General Public License version 3.0 requirements will be
35** met: http://www.gnu.org/copyleft/gpl.html.
36**
37**
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#ifndef QWIDGETRESIZEHANDLER_P_H
43#define QWIDGETRESIZEHANDLER_P_H
44
45//
46// W A R N I N G
47// -------------
48//
49// This file is not part of the Qt API. This header file may
50// change from version to version without notice, or even be
51// removed.
52//
53// We mean it.
54//
55
56#include "QtCore/qobject.h"
57#include "QtCore/qpoint.h"
58
59#ifndef QT_NO_RESIZEHANDLER
60
61QT_BEGIN_NAMESPACE
62
63class QMouseEvent;
64class QKeyEvent;
65
66class Q_GUI_EXPORT QWidgetResizeHandler : public QObject
67{
68 Q_OBJECT
69
70public:
71 enum Action {
72 Move = 0x01,
73 Resize = 0x02,
74 Any = Move|Resize
75 };
76
77 explicit QWidgetResizeHandler(QWidget *parent, QWidget *cw = 0);
78 void setActive(bool b) { setActive(Any, b); }
79 void setActive(Action ac, bool b);
80 bool isActive() const { return isActive(Any); }
81 bool isActive(Action ac) const;
82 void setMovingEnabled(bool b) { movingEnabled = b; }
83 bool isMovingEnabled() const { return movingEnabled; }
84
85 bool isButtonDown() const { return buttonDown; }
86
87 void setExtraHeight(int h) { extrahei = h; }
88 void setSizeProtection(bool b) { sizeprotect = b; }
89
90 void setFrameWidth(int w) { fw = w; }
91
92 void doResize();
93 void doMove();
94
95Q_SIGNALS:
96 void activate();
97
98protected:
99 bool eventFilter(QObject *o, QEvent *e);
100 void mouseMoveEvent(QMouseEvent *e);
101 void keyPressEvent(QKeyEvent *e);
102
103private:
104 Q_DISABLE_COPY(QWidgetResizeHandler)
105
106 enum MousePosition {
107 Nowhere,
108 TopLeft, BottomRight, BottomLeft, TopRight,
109 Top, Bottom, Left, Right,
110 Center
111 };
112
113 QWidget *widget;
114 QWidget *childWidget;
115 QPoint moveOffset;
116 QPoint invertedMoveOffset;
117 MousePosition mode;
118 int fw;
119 int extrahei;
120 int range;
121 uint buttonDown :1;
122 uint moveResizeMode :1;
123 uint activeForResize :1;
124 uint sizeprotect :1;
125 uint movingEnabled :1;
126 uint activeForMove :1;
127
128 void setMouseCursor(MousePosition m);
129 bool isMove() const {
130 return moveResizeMode && mode == Center;
131 }
132 bool isResize() const {
133 return moveResizeMode && !isMove();
134 }
135};
136
137QT_END_NAMESPACE
138
139#endif // QT_NO_RESIZEHANDLER
140
141#endif // QWIDGETRESIZEHANDLER_P_H
142