Qt 4.8
qtoolbararealayout_p.h
Go to the documentation of this file.
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 QTOOLBARAREALAYOUT_P_H
43 #define QTOOLBARAREALAYOUT_P_H
44 
45 //
46 // W A R N I N G
47 // -------------
48 //
49 // This file is not part of the Qt API. It exists purely as an
50 // implementation detail. This header file may change from version to
51 // version without notice, or even be removed.
52 //
53 // We mean it.
54 //
55 
56 #include <QList>
57 #include <QSize>
58 #include <QRect>
59 
61 
62 static inline int pick(Qt::Orientation o, const QPoint &pos)
63 { return o == Qt::Horizontal ? pos.x() : pos.y(); }
64 
65 static inline int pick(Qt::Orientation o, const QSize &size)
66 { return o == Qt::Horizontal ? size.width() : size.height(); }
67 
68 static inline int &rpick(Qt::Orientation o, QPoint &pos)
69 { return o == Qt::Horizontal ? pos.rx() : pos.ry(); }
70 
71 static inline int &rpick(Qt::Orientation o, QSize &size)
72 { return o == Qt::Horizontal ? size.rwidth() : size.rheight(); }
73 
74 static inline QSizePolicy::Policy pick(Qt::Orientation o, const QSizePolicy &policy)
75 { return o == Qt::Horizontal ? policy.horizontalPolicy() : policy.verticalPolicy(); }
76 
77 static inline int perp(Qt::Orientation o, const QPoint &pos)
78 { return o == Qt::Vertical ? pos.x() : pos.y(); }
79 
80 static inline int perp(Qt::Orientation o, const QSize &size)
81 { return o == Qt::Vertical ? size.width() : size.height(); }
82 
83 static inline int &rperp(Qt::Orientation o, QPoint &pos)
84 { return o == Qt::Vertical ? pos.rx() : pos.ry(); }
85 
86 static inline int &rperp(Qt::Orientation o, QSize &size)
87 { return o == Qt::Vertical ? size.rwidth() : size.rheight(); }
88 
89 #ifndef QT_NO_TOOLBAR
90 
91 class QToolBar;
92 class QLayoutItem;
93 class QMainWindow;
95 
97 {
98 public:
100  : widgetItem(item), pos(0), size(-1), preferredSize(-1), gap(false) {}
101 
102  bool skip() const;
103  QSize minimumSize() const;
104  QSize sizeHint() const;
105  QSize realSizeHint() const;
106 
107  void resize(Qt::Orientation o, int newSize)
108  {
109  newSize = qMax(pick(o, minimumSize()), newSize);
110  int sizeh = pick(o, sizeHint());
111  if (newSize == sizeh) {
112  preferredSize = -1;
113  size = sizeh;
114  } else {
115  preferredSize = newSize;
116  }
117  }
118 
119  void extendSize(Qt::Orientation o, int extent)
120  {
121  int newSize = qMax(pick(o, minimumSize()), (preferredSize > 0 ? preferredSize : pick(o, sizeHint())) + extent);
122  int sizeh = pick(o, sizeHint());
123  if (newSize == sizeh) {
124  preferredSize = -1;
125  size = sizeh;
126  } else {
127  preferredSize = newSize;
128  }
129  }
130 
132  int pos;
133  int size;
135  bool gap;
136 };
137 
139 {
140 public:
142 
143  QSize sizeHint() const;
144  QSize minimumSize() const;
145 
146  void fitLayout();
147  bool skip() const;
148 
151 
153 };
154 
156 {
157 public:
159 
161 
162  QSize sizeHint() const;
163  QSize minimumSize() const;
164 
165  void fitLayout();
166 
167  QLayoutItem *insertToolBar(QToolBar *before, QToolBar *toolBar);
168  void insertItem(QToolBar *before, QLayoutItem *item);
169  void removeToolBar(QToolBar *toolBar);
170  void insertToolBarBreak(QToolBar *before);
171  void removeToolBarBreak(QToolBar *before);
172  void moveToolBar(QToolBar *toolbar, int pos);
173 
174  QList<int> gapIndex(const QPoint &pos, int *maxDistance) const;
175  bool insertGap(const QList<int> &path, QLayoutItem *item);
176  void clear();
177  QRect itemRect(const QList<int> &path) const;
178  int distance(const QPoint &pos) const;
179 
183  bool dirty;
184 };
185 
187 {
188 public:
189  enum { // sentinel values used to validate state data
190  ToolBarStateMarker = 0xfe,
191  ToolBarStateMarkerEx = 0xfc
192  };
193 
197  bool visible;
198 
199  QToolBarAreaLayout(const QMainWindow *win);
200 
201  QRect fitLayout();
202 
203  QSize minimumSize(const QSize &centerMin) const;
204  QRect rectHint(const QRect &r) const;
205  QSize sizeHint(const QSize &center) const;
206  void apply(bool animate);
207 
208  QLayoutItem *itemAt(int *x, int index) const;
209  QLayoutItem *takeAt(int *x, int index);
210  void deleteAllLayoutItems();
211 
212  QLayoutItem *insertToolBar(QToolBar *before, QToolBar *toolBar);
213  void removeToolBar(QToolBar *toolBar);
214  QLayoutItem *addToolBar(QInternal::DockPosition pos, QToolBar *toolBar);
215  void insertToolBarBreak(QToolBar *before);
216  void removeToolBarBreak(QToolBar *before);
217  void addToolBarBreak(QInternal::DockPosition pos);
218  void moveToolBar(QToolBar *toolbar, int pos);
219 
220  void insertItem(QInternal::DockPosition pos, QLayoutItem *item);
221  void insertItem(QToolBar *before, QLayoutItem *item);
222 
223  QInternal::DockPosition findToolBar(QToolBar *toolBar) const;
224  bool toolBarBreak(QToolBar *toolBar) const;
225 
226  void getStyleOptionInfo(QStyleOptionToolBar *option, QToolBar *toolBar) const;
227 
228  QList<int> indexOf(QWidget *toolBar) const;
229  QList<int> gapIndex(const QPoint &pos) const;
230  QList<int> currentGapIndex() const;
231  bool insertGap(const QList<int> &path, QLayoutItem *item);
232  void remove(const QList<int> &path);
233  void remove(QLayoutItem *item);
234  void clear();
235  QToolBarAreaLayoutItem *item(const QList<int> &path);
236  QRect itemRect(const QList<int> &path) const;
237  QLayoutItem *plug(const QList<int> &path);
238  QLayoutItem *unplug(const QList<int> &path, QToolBarAreaLayout *other);
239 
240  void saveState(QDataStream &stream) const;
241  bool restoreState(QDataStream &stream, const QList<QToolBar*> &toolBars, uchar tmarker, bool pre43, bool testing = false);
242  bool isEmpty() const;
243 };
244 
245 
247 #endif // QT_NO_TOOLBAR
248 #endif // QTOOLBARAREALAYOUT_P_H
QList< QToolBarAreaLayoutLine > lines
QInternal::DockPosition dockPos
#define QT_END_NAMESPACE
This macro expands to.
Definition: qglobal.h:90
void extendSize(Qt::Orientation o, int extent)
Policy horizontalPolicy() const
Definition: qsizepolicy.h:118
static int & rpick(Qt::Orientation o, QPoint &pos)
The QWidget class is the base class of all user interface objects.
Definition: qwidget.h:150
static void clear(QVariant::Private *d)
Definition: qvariant.cpp:197
const QMainWindow * mainWindow
The QStyleOptionToolBar class is used to describe the parameters for drawing a toolbar.
Definition: qstyleoption.h:369
int & ry()
Returns a reference to the y coordinate of this point.
Definition: qpoint.h:143
NSToolbar * toolbar
Q_DECL_CONSTEXPR const T & qMax(const T &a, const T &b)
Definition: qglobal.h:1217
unsigned char uchar
Definition: qglobal.h:994
int width() const
Returns the width.
Definition: qsize.h:126
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition: qglobal.h:89
The QLayoutItem class provides an abstract item that a QLayout manipulates.
Definition: qlayoutitem.h:64
static FILE * stream
static bool isEmpty(const char *str)
static int pick(Qt::Orientation o, const QPoint &pos)
The QToolBar class provides a movable panel that contains a set of controls.
Definition: qtoolbar.h:62
int & rx()
Returns a reference to the x coordinate of this point.
Definition: qpoint.h:140
static int distance(QWidget *source, QWidget *target, QAccessible::RelationFlag relation)
Q_CORE_EXPORT QTextStream & center(QTextStream &s)
QToolBarAreaLayoutItem(QLayoutItem *item=0)
The QPoint class defines a point in the plane using integer precision.
Definition: qpoint.h:53
The QMainWindow class provides a main application window.
Definition: qmainwindow.h:63
int & rheight()
Returns a reference to the height.
Definition: qsize.h:144
Policy verticalPolicy() const
Definition: qsizepolicy.h:119
int height() const
Returns the height.
Definition: qsize.h:129
The QRect class defines a rectangle in the plane using integer precision.
Definition: qrect.h:58
void resize(Qt::Orientation o, int newSize)
QList< QToolBarAreaLayoutItem > toolBarItems
int y() const
Returns the y coordinate of this point.
Definition: qpoint.h:131
quint16 index
The QSize class defines the size of a two-dimensional object using integer point precision.
Definition: qsize.h:53
The QDataStream class provides serialization of binary data to a QIODevice.
Definition: qdatastream.h:71
static int & rperp(Qt::Orientation o, QPoint &pos)
int x() const
Returns the x coordinate of this point.
Definition: qpoint.h:128
Orientation
Definition: qnamespace.h:174
int & rwidth()
Returns a reference to the width.
Definition: qsize.h:141
static int perp(Qt::Orientation o, const QPoint &pos)