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,
133 bool expansive(Qt::Orientation o)
const;
134 int changeSize(
int index,
int size,
bool below);
135 QRect itemRect(
int index,
bool isGap =
false)
const;
136 QRect itemRect(
const QList<
int> &path)
const;
137 QRect separatorRect(
int index)
const;
138 QRect separatorRect(
const QList<
int> &path)
const;
141 bool isEmpty()
const;
142 bool hasGapItem(
const QList<
int> &path)
const;
143 bool onlyHasPlaceholders()
const;
144 bool hasFixedSize()
const;
145 QList<
int> findSeparator(
const QPoint &pos)
const;
146 int next(
int idx)
const;
147 int prev(
int idx)
const;
149 QList<
int> indexOf(
const QWidget *widget)
const;
150 QList<
int> indexOfPlaceHolder(
const QString &objectName)
const;
151 std::unique_ptr<QLayoutItem> takeWidgetItem(QWidget *widget);
153 QDockWidget *apply(QWidgetAnimator::AnimationRule rule);
155 void paintSeparators(QPainter *p, QWidget *widget,
const QRegion &clip,
156 const QPoint &mouse)
const;
157 QRegion separatorRegion()
const;
158 int separatorMove(
int index,
int delta);
159 int separatorMove(
const QList<
int> &separator,
const QPoint &origin,
const QPoint &dest);
161 QLayoutItem *itemAt(
int *x,
int index)
const;
162 QLayoutItem *takeAt(
int *x,
int index);
163 void add(QWidget *widget);
164 void deleteAllLayoutItems();
166 QMainWindowLayout *mainWindowLayout()
const;
169 mutable QList<QWidget *> separatorWidgets;
170 QInternal::DockPosition dockPos;
173 QMainWindow *mainWindow;
174 QList<QDockAreaLayoutItem> item_list;
176 void updateSeparatorWidgets()
const;
177 QSet<QWidget*> usedSeparatorWidgets()
const;
179 quintptr currentTabId()
const;
180 void setCurrentTab(QWidget *widget);
181 void setCurrentTabId(quintptr id);
182 QRect tabContentRect()
const;
187 void reparentWidgets(QWidget *p);
188 bool updateTabBar()
const;
189 void setTabBarShape(
int shape);
190 QSize tabBarMinimumSize()
const;
191 QSize tabBarSizeHint()
const;
193 QSet<QTabBar*> usedTabBars()
const;
195 int tabIndexToListIndex(
int)
const;
196 void moveTab(
int from,
int to);
205 enum { EmptyDropAreaSize = 80 };
207 QDockAreaLayoutCorners corners;
209 QLayoutItem *centralWidgetItem;
210 QMainWindow *mainWindow;
211 QRect centralWidgetRect;
212 QDockAreaLayout(QMainWindow *win);
213 std::array<QDockAreaLayoutInfo, 4> docks;
215 bool fallbackToSizeHints;
216 mutable QList<QWidget *> separatorWidgets;
218 bool isValid()
const;
220 static QRect constrainedRect(QRect rect, QWidget *widget);
221 void saveState(QDataStream &stream)
const;
222 bool restoreState(QDataStream &stream,
const QList<QDockWidget*> &_dockWidgets, QInternal::CallMode callMode);
224 QList<
int> indexOfPlaceHolder(
const QString &objectName)
const;
225 QList<
int> indexOf(
const QWidget *dockWidget)
const;
226 QList<
int> gapIndex(
const QPoint &pos,
bool disallowTabs)
const;
227 QList<
int> findSeparator(
const QPoint &pos)
const;
229 QDockAreaLayoutItem &item(
const QList<
int> &path);
230 QDockAreaLayoutInfo *info(
const QList<
int> &path);
231 const QDockAreaLayoutInfo *info(
const QList<
int> &path)
const;
232 QDockAreaLayoutInfo *info(QWidget *widget);
233 QRect itemRect(
const QList<
int> &path)
const;
234 QRect separatorRect(
int index)
const;
235 QRect separatorRect(
const QList<
int> &path)
const;
237 bool insertGap(
const QList<
int> &path, QLayoutItem *dockWidgetItem);
238 QLayoutItem *plug(
const QList<
int> &path);
239 QLayoutItem *unplug(
const QList<
int> &path);
240 void remove(
const QList<
int> &path);
241 void removePlaceHolder(
const QString &name);
247 QSize sizeHint()
const;
248 QSize minimumSize()
const;
249 QSize minimumStableSize()
const;
250 template<
typename SizePMF,
typename CenterPMF>
251 QSize size_helper(SizePMF sizeFn, CenterPMF centerFn)
const;
253 void addDockWidget(QInternal::DockPosition pos, QDockWidget *dockWidget, Qt::Orientation orientation);
254 bool restoreDockWidget(QDockWidget *dockWidget);
255 void splitDockWidget(QDockWidget *after, QDockWidget *dockWidget,
256 Qt::Orientation orientation);
258 void tabifyDockWidget(QDockWidget *first, QDockWidget *second);
260 void resizeDocks(
const QList<QDockWidget *> &docks,
const QList<
int> &sizes, Qt::Orientation o);
262 void apply(QWidgetAnimator::AnimationRule rule);
264 void paintSeparators(QPainter *p, QWidget *widget,
const QRegion &clip,
265 const QPoint &mouse)
const;
266 QRegion separatorRegion()
const;
267 int separatorMove(
const QList<
int> &separator,
const QPoint &origin,
const QPoint &dest);
269 void updateSeparatorWidgets()
const;
272 QLayoutItem *itemAt(
int *x,
int index)
const;
273 QLayoutItem *takeAt(
int *x,
int index);
274 void deleteAllLayoutItems();
276 void getGrid(QList<QLayoutStruct> *ver_struct_list, QList<QLayoutStruct> *hor_struct_list);
277 void setGrid(QList<QLayoutStruct> *ver_struct_list, QList<QLayoutStruct> *hor_struct_list);
279 QRect gapRect(
const QList<
int> &path)
const;
280 QRect gapRect(QInternal::DockPosition dockPos)
const;
282 void keepSize(QDockWidget *w);
284 QSet<QTabBar*> usedTabBars()
const;
285 QSet<QWidget*> usedSeparatorWidgets()
const;
287 void styleChangedEvent();