53 enum ItemFlags { NoFlags = 0, GapItem = 1, KeepSize = 2 };
55 explicit QDockAreaLayoutItem(QLayoutItem *_widgetItem =
nullptr);
56 explicit QDockAreaLayoutItem(QDockAreaLayoutInfo *_subinfo);
57 explicit QDockAreaLayoutItem(QPlaceHolderItem *_placeHolderItem);
58 QDockAreaLayoutItem(
const QDockAreaLayoutItem &other);
59 ~QDockAreaLayoutItem();
61 QDockAreaLayoutItem &operator = (
const QDockAreaLayoutItem &other);
64 QSize minimumSize()
const;
65 QSize maximumSize()
const;
66 QSize sizeHint()
const;
67 bool expansive(Qt::Orientation o)
const;
68 bool hasFixedSize(Qt::Orientation o)
const;
70 QLayoutItem *widgetItem;
71 QDockAreaLayoutInfo *subinfo;
72 QPlaceHolderItem *placeHolderItem;
76#ifndef QT_NO_DEBUG_STREAM
77 friend Q_AUTOTEST_EXPORT QDebug operator<<(QDebug dbg,
const QDockAreaLayoutItem &item);
78 friend Q_AUTOTEST_EXPORT QDebug operator<<(QDebug dbg,
const QDockAreaLayoutItem *item);
96 QDockAreaLayoutInfo();
97 QDockAreaLayoutInfo(
const int *_sep, QInternal::DockPosition _dockPos, Qt::Orientation _o,
98 int tbhape, QMainWindow *window);
100 QSize minimumSize()
const;
101 QSize maximumSize()
const;
102 QSize sizeHint()
const;
105 bool insertGap(
const QList<
int> &path, QLayoutItem *dockWidgetItem);
106 QLayoutItem *plug(
const QList<
int> &path);
107 QLayoutItem *unplug(
const QList<
int> &path);
108 enum TabMode { NoTabs, AllowTabs, ForceTabs };
109 QList<
int> gapIndex(
const QPoint &pos,
bool nestingEnabled,
110 TabMode tabMode)
const;
111 void remove(
const QList<
int> &path);
112 void remove(QWidget *widget);
113 void unnest(
int index);
114 void split(
int index, Qt::Orientation orientation, QLayoutItem *dockWidgetItem);
116 void tab(
int index, QLayoutItem *dockWidgetItem);
118 QDockAreaLayoutItem &item(
const QList<
int> &path);
119 QDockAreaLayoutInfo *info(
const QList<
int> &path);
120 QDockAreaLayoutInfo *info(QWidget *widget);
123 SequenceMarker = 0xfc,
127 void saveState(QDataStream &stream)
const;
128 bool restoreState(QDataStream &stream, QList<QDockWidget*> &widgets,
bool testing);
131 bool expansive(Qt::Orientation o)
const;
132 int changeSize(
int index,
int size,
bool below);
133 QRect itemRect(
int index,
bool isGap =
false)
const;
134 QRect itemRect(
const QList<
int> &path)
const;
135 QRect separatorRect(
int index)
const;
136 QRect separatorRect(
const QList<
int> &path)
const;
139 bool isEmpty()
const;
140 bool hasGapItem(
const QList<
int> &path)
const;
141 bool onlyHasPlaceholders()
const;
142 bool hasFixedSize()
const;
143 QList<
int> findSeparator(
const QPoint &pos)
const;
144 int next(
int idx)
const;
145 int prev(
int idx)
const;
147 QList<
int> indexOf(
const QWidget *widget)
const;
148 QList<
int> indexOfPlaceHolder(
const QString &objectName)
const;
149 std::unique_ptr<QLayoutItem> takeWidgetItem(QWidget *widget);
151 QDockWidget *apply(
bool animate);
153 void paintSeparators(QPainter *p, QWidget *widget,
const QRegion &clip,
154 const QPoint &mouse)
const;
155 QRegion separatorRegion()
const;
156 int separatorMove(
int index,
int delta);
157 int separatorMove(
const QList<
int> &separator,
const QPoint &origin,
const QPoint &dest);
159 QLayoutItem *itemAt(
int *x,
int index)
const;
160 QLayoutItem *takeAt(
int *x,
int index);
161 void add(QWidget *widget);
162 void deleteAllLayoutItems();
164 QMainWindowLayout *mainWindowLayout()
const;
167 mutable QList<QWidget *> separatorWidgets;
168 QInternal::DockPosition dockPos;
171 QMainWindow *mainWindow;
172 QList<QDockAreaLayoutItem> item_list;
174 void updateSeparatorWidgets()
const;
175 QSet<QWidget*> usedSeparatorWidgets()
const;
177 quintptr currentTabId()
const;
178 void setCurrentTab(QWidget *widget);
179 void setCurrentTabId(quintptr id);
180 QRect tabContentRect()
const;
185 void reparentWidgets(QWidget *p);
186 bool updateTabBar()
const;
187 void setTabBarShape(
int shape);
188 QSize tabBarMinimumSize()
const;
189 QSize tabBarSizeHint()
const;
191 QSet<QTabBar*> usedTabBars()
const;
193 int tabIndexToListIndex(
int)
const;
194 void moveTab(
int from,
int to);
201 enum { EmptyDropAreaSize = 80 };
203 Qt::DockWidgetArea corners[4];
205 QLayoutItem *centralWidgetItem;
206 QMainWindow *mainWindow;
207 QRect centralWidgetRect;
208 QDockAreaLayout(QMainWindow *win);
209 QDockAreaLayoutInfo docks[4];
211 bool fallbackToSizeHints;
212 mutable QList<QWidget *> separatorWidgets;
214 bool isValid()
const;
216 enum { DockWidgetStateMarker = 0xfd, FloatingDockWidgetTabMarker = 0xf9 };
217 static QRect constrainedRect(QRect rect, QWidget *widget);
218 void saveState(QDataStream &stream)
const;
219 bool restoreState(QDataStream &stream,
const QList<QDockWidget*> &widgets,
bool testing =
false);
221 QList<
int> indexOfPlaceHolder(
const QString &objectName)
const;
222 QList<
int> indexOf(
const QWidget *dockWidget)
const;
223 QList<
int> gapIndex(
const QPoint &pos,
bool disallowTabs)
const;
224 QList<
int> findSeparator(
const QPoint &pos)
const;
226 QDockAreaLayoutItem &item(
const QList<
int> &path);
227 QDockAreaLayoutInfo *info(
const QList<
int> &path);
228 const QDockAreaLayoutInfo *info(
const QList<
int> &path)
const;
229 QDockAreaLayoutInfo *info(QWidget *widget);
230 QRect itemRect(
const QList<
int> &path)
const;
231 QRect separatorRect(
int index)
const;
232 QRect separatorRect(
const QList<
int> &path)
const;
234 bool insertGap(
const QList<
int> &path, QLayoutItem *dockWidgetItem);
235 QLayoutItem *plug(
const QList<
int> &path);
236 QLayoutItem *unplug(
const QList<
int> &path);
237 void remove(
const QList<
int> &path);
238 void removePlaceHolder(
const QString &name);
244 QSize sizeHint()
const;
245 QSize minimumSize()
const;
246 QSize minimumStableSize()
const;
247 template<
typename SizePMF,
typename CenterPMF>
248 QSize size_helper(SizePMF sizeFn, CenterPMF centerFn)
const;
250 void addDockWidget(QInternal::DockPosition pos, QDockWidget *dockWidget, Qt::Orientation orientation);
251 bool restoreDockWidget(QDockWidget *dockWidget);
252 void splitDockWidget(QDockWidget *after, QDockWidget *dockWidget,
253 Qt::Orientation orientation);
255 void tabifyDockWidget(QDockWidget *first, QDockWidget *second);
257 void resizeDocks(
const QList<QDockWidget *> &docks,
const QList<
int> &sizes, Qt::Orientation o);
259 void apply(
bool animate);
261 void paintSeparators(QPainter *p, QWidget *widget,
const QRegion &clip,
262 const QPoint &mouse)
const;
263 QRegion separatorRegion()
const;
264 int separatorMove(
const QList<
int> &separator,
const QPoint &origin,
const QPoint &dest);
266 void updateSeparatorWidgets()
const;
269 QLayoutItem *itemAt(
int *x,
int index)
const;
270 QLayoutItem *takeAt(
int *x,
int index);
271 void deleteAllLayoutItems();
273 void getGrid(QList<QLayoutStruct> *ver_struct_list, QList<QLayoutStruct> *hor_struct_list);
274 void setGrid(QList<QLayoutStruct> *ver_struct_list, QList<QLayoutStruct> *hor_struct_list);
276 QRect gapRect(
const QList<
int> &path)
const;
277 QRect gapRect(QInternal::DockPosition dockPos)
const;
279 void keepSize(QDockWidget *w);
281 QSet<QTabBar*> usedTabBars()
const;
282 QSet<QWidget*> usedSeparatorWidgets()
const;
284 void styleChangedEvent();