59 enum ItemFlags { NoFlags = 0, GapItem = 1, KeepSize = 2 };
61 explicit QDockAreaLayoutItem(QLayoutItem *_widgetItem =
nullptr);
62 explicit QDockAreaLayoutItem(QDockAreaLayoutInfo *_subinfo);
63 explicit QDockAreaLayoutItem(QPlaceHolderItem *_placeHolderItem);
64 QDockAreaLayoutItem(
const QDockAreaLayoutItem &other);
65 ~QDockAreaLayoutItem();
67 QDockAreaLayoutItem &operator = (
const QDockAreaLayoutItem &other);
70 QSize minimumSize()
const;
71 QSize maximumSize()
const;
72 QSize sizeHint()
const;
73 bool expansive(Qt::Orientation o)
const;
74 bool hasFixedSize(Qt::Orientation o)
const;
76 QLayoutItem *widgetItem;
77 QDockAreaLayoutInfo *subinfo;
78 QPlaceHolderItem *placeHolderItem;
82#ifndef QT_NO_DEBUG_STREAM
83 friend Q_AUTOTEST_EXPORT QDebug operator<<(QDebug dbg,
const QDockAreaLayoutItem &item);
84 friend Q_AUTOTEST_EXPORT QDebug operator<<(QDebug dbg,
const QDockAreaLayoutItem *item);
102 QDockAreaLayoutInfo();
103 QDockAreaLayoutInfo(
const int *_sep, QInternal::DockPosition _dockPos, Qt::Orientation _o,
104 int tbhape, QMainWindow *window);
106 QSize minimumSize()
const;
107 QSize maximumSize()
const;
108 QSize sizeHint()
const;
111 bool insertGap(
const QList<
int> &path, QLayoutItem *dockWidgetItem);
112 QLayoutItem *plug(
const QList<
int> &path);
113 QLayoutItem *unplug(
const QList<
int> &path);
114 enum TabMode { NoTabs, AllowTabs, ForceTabs };
115 QList<
int> gapIndex(
const QPoint &pos,
bool nestingEnabled,
116 TabMode tabMode)
const;
117 void remove(
const QList<
int> &path);
118 void remove(QWidget *widget);
119 void unnest(
int index);
120 void split(
int index, Qt::Orientation orientation, QLayoutItem *dockWidgetItem);
122 void tab(
int index, QLayoutItem *dockWidgetItem);
124 QDockAreaLayoutItem &item(
const QList<
int> &path);
125 QDockAreaLayoutInfo *info(
const QList<
int> &path);
126 QDockAreaLayoutInfo *info(QWidget *widget);
128 void saveState(QDataStream &stream)
const;
129 bool restoreState(QDataStream &stream, QList<QDockWidget*> &widgets, QInternal::CallMode);
132 bool expansive(Qt::Orientation o)
const;
133 int changeSize(
int index,
int size,
bool below);
134 QRect itemRect(
int index,
bool isGap =
false)
const;
135 QRect itemRect(
const QList<
int> &path)
const;
136 QRect separatorRect(
int index)
const;
137 QRect separatorRect(
const QList<
int> &path)
const;
140 bool isEmpty()
const;
141 bool hasGapItem(
const QList<
int> &path)
const;
142 bool onlyHasPlaceholders()
const;
143 bool hasFixedSize()
const;
144 QList<
int> findSeparator(
const QPoint &pos)
const;
145 int next(
int idx)
const;
146 int prev(
int idx)
const;
148 QList<
int> indexOf(
const QWidget *widget)
const;
149 QList<
int> indexOfPlaceHolder(
const QString &objectName)
const;
150 std::unique_ptr<QLayoutItem> takeWidgetItem(QWidget *widget);
152 QDockWidget *apply(QWidgetAnimator::AnimationRule rule);
154 void paintSeparators(QPainter *p, QWidget *widget,
const QRegion &clip,
155 const QPoint &mouse)
const;
156 QRegion separatorRegion()
const;
157 int separatorMove(
int index,
int delta);
158 int separatorMove(
const QList<
int> &separator,
const QPoint &origin,
const QPoint &dest);
160 QLayoutItem *itemAt(
int *x,
int index)
const;
161 QLayoutItem *takeAt(
int *x,
int index);
162 void add(QWidget *widget);
163 void deleteAllLayoutItems();
165 QMainWindowLayout *mainWindowLayout()
const;
168 mutable QList<QWidget *> separatorWidgets;
169 QInternal::DockPosition dockPos;
172 QMainWindow *mainWindow;
173 QList<QDockAreaLayoutItem> item_list;
175 void updateSeparatorWidgets()
const;
176 QSet<QWidget*> usedSeparatorWidgets()
const;
178 quintptr currentTabId()
const;
179 void setCurrentTab(QWidget *widget);
180 void setCurrentTabId(quintptr id);
181 QRect tabContentRect()
const;
186 void reparentWidgets(QWidget *p);
187 bool updateTabBar()
const;
188 void setTabBarShape(
int shape);
189 QSize tabBarMinimumSize()
const;
190 QSize tabBarSizeHint()
const;
192 QSet<QTabBar*> usedTabBars()
const;
194 int tabIndexToListIndex(
int)
const;
195 void moveTab(
int from,
int to);
204 enum { EmptyDropAreaSize = 80 };
206 QDockAreaLayoutCorners corners;
208 QLayoutItem *centralWidgetItem;
209 QMainWindow *mainWindow;
210 QRect centralWidgetRect;
211 QDockAreaLayout(QMainWindow *win);
212 std::array<QDockAreaLayoutInfo, 4> docks;
214 bool fallbackToSizeHints;
215 mutable QList<QWidget *> separatorWidgets;
217 bool isValid()
const;
219 static QRect constrainedRect(QRect rect, QWidget *widget);
220 void saveState(QDataStream &stream)
const;
221 bool restoreState(QDataStream &stream,
const QList<QDockWidget*> &_dockWidgets, QInternal::CallMode callMode);
223 QList<
int> indexOfPlaceHolder(
const QString &objectName)
const;
224 QList<
int> indexOf(
const QWidget *dockWidget)
const;
225 QList<
int> gapIndex(
const QPoint &pos,
bool disallowTabs)
const;
226 QList<
int> findSeparator(
const QPoint &pos)
const;
228 QDockAreaLayoutItem &item(
const QList<
int> &path);
229 QDockAreaLayoutInfo *info(
const QList<
int> &path);
230 const QDockAreaLayoutInfo *info(
const QList<
int> &path)
const;
231 QDockAreaLayoutInfo *info(QWidget *widget);
232 QRect itemRect(
const QList<
int> &path)
const;
233 QRect separatorRect(
int index)
const;
234 QRect separatorRect(
const QList<
int> &path)
const;
236 bool insertGap(
const QList<
int> &path, QLayoutItem *dockWidgetItem);
237 QLayoutItem *plug(
const QList<
int> &path);
238 QLayoutItem *unplug(
const QList<
int> &path);
239 void remove(
const QList<
int> &path);
240 void removePlaceHolder(
const QString &name);
246 QSize sizeHint()
const;
247 QSize minimumSize()
const;
248 QSize minimumStableSize()
const;
249 template<
typename SizePMF,
typename CenterPMF>
250 QSize size_helper(SizePMF sizeFn, CenterPMF centerFn)
const;
252 void addDockWidget(QInternal::DockPosition pos, QDockWidget *dockWidget, Qt::Orientation orientation);
253 bool restoreDockWidget(QDockWidget *dockWidget);
254 void splitDockWidget(QDockWidget *after, QDockWidget *dockWidget,
255 Qt::Orientation orientation);
257 void tabifyDockWidget(QDockWidget *first, QDockWidget *second);
259 void resizeDocks(
const QList<QDockWidget *> &docks,
const QList<
int> &sizes, Qt::Orientation o);
261 void apply(QWidgetAnimator::AnimationRule rule);
263 void paintSeparators(QPainter *p, QWidget *widget,
const QRegion &clip,
264 const QPoint &mouse)
const;
265 QRegion separatorRegion()
const;
266 int separatorMove(
const QList<
int> &separator,
const QPoint &origin,
const QPoint &dest);
268 void updateSeparatorWidgets()
const;
271 QLayoutItem *itemAt(
int *x,
int index)
const;
272 QLayoutItem *takeAt(
int *x,
int index);
273 void deleteAllLayoutItems();
275 void getGrid(QList<QLayoutStruct> *ver_struct_list, QList<QLayoutStruct> *hor_struct_list);
276 void setGrid(QList<QLayoutStruct> *ver_struct_list, QList<QLayoutStruct> *hor_struct_list);
278 QRect gapRect(
const QList<
int> &path)
const;
279 QRect gapRect(QInternal::DockPosition dockPos)
const;
281 void keepSize(QDockWidget *w);
283 QSet<QTabBar*> usedTabBars()
const;
284 QSet<QWidget*> usedSeparatorWidgets()
const;
286 void styleChangedEvent();