54 enum ItemFlags { NoFlags = 0, GapItem = 1, KeepSize = 2 };
56 explicit QDockAreaLayoutItem(QLayoutItem *_widgetItem =
nullptr);
57 explicit QDockAreaLayoutItem(QDockAreaLayoutInfo *_subinfo);
58 explicit QDockAreaLayoutItem(QPlaceHolderItem *_placeHolderItem);
59 QDockAreaLayoutItem(
const QDockAreaLayoutItem &other);
60 ~QDockAreaLayoutItem();
62 QDockAreaLayoutItem &operator = (
const QDockAreaLayoutItem &other);
65 QSize minimumSize()
const;
66 QSize maximumSize()
const;
67 QSize sizeHint()
const;
68 bool expansive(Qt::Orientation o)
const;
69 bool hasFixedSize(Qt::Orientation o)
const;
71 QLayoutItem *widgetItem;
72 QDockAreaLayoutInfo *subinfo;
73 QPlaceHolderItem *placeHolderItem;
77#ifndef QT_NO_DEBUG_STREAM
78 friend Q_AUTOTEST_EXPORT QDebug operator<<(QDebug dbg,
const QDockAreaLayoutItem &item);
79 friend Q_AUTOTEST_EXPORT QDebug operator<<(QDebug dbg,
const QDockAreaLayoutItem *item);
97 QDockAreaLayoutInfo();
98 QDockAreaLayoutInfo(
const int *_sep, QInternal::DockPosition _dockPos, Qt::Orientation _o,
99 int tbhape, QMainWindow *window);
101 QSize minimumSize()
const;
102 QSize maximumSize()
const;
103 QSize sizeHint()
const;
106 bool insertGap(
const QList<
int> &path, QLayoutItem *dockWidgetItem);
107 QLayoutItem *plug(
const QList<
int> &path);
108 QLayoutItem *unplug(
const QList<
int> &path);
109 enum TabMode { NoTabs, AllowTabs, ForceTabs };
110 QList<
int> gapIndex(
const QPoint &pos,
bool nestingEnabled,
111 TabMode tabMode)
const;
112 void remove(
const QList<
int> &path);
113 void remove(QWidget *widget);
114 void unnest(
int index);
115 void split(
int index, Qt::Orientation orientation, QLayoutItem *dockWidgetItem);
117 void tab(
int index, QLayoutItem *dockWidgetItem);
119 QDockAreaLayoutItem &item(
const QList<
int> &path);
120 QDockAreaLayoutInfo *info(
const QList<
int> &path);
121 QDockAreaLayoutInfo *info(QWidget *widget);
123 void saveState(QDataStream &stream)
const;
124 bool restoreState(QDataStream &stream, QList<QDockWidget*> &widgets, QInternal::CallMode);
127 bool expansive(Qt::Orientation o)
const;
128 int changeSize(
int index,
int size,
bool below);
129 QRect itemRect(
int index,
bool isGap =
false)
const;
130 QRect itemRect(
const QList<
int> &path)
const;
131 QRect separatorRect(
int index)
const;
132 QRect separatorRect(
const QList<
int> &path)
const;
135 bool isEmpty()
const;
136 bool hasGapItem(
const QList<
int> &path)
const;
137 bool onlyHasPlaceholders()
const;
138 bool hasFixedSize()
const;
139 QList<
int> findSeparator(
const QPoint &pos)
const;
140 int next(
int idx)
const;
141 int prev(
int idx)
const;
143 QList<
int> indexOf(
const QWidget *widget)
const;
144 QList<
int> indexOfPlaceHolder(
const QString &objectName)
const;
145 std::unique_ptr<QLayoutItem> takeWidgetItem(QWidget *widget);
147 QDockWidget *apply(QWidgetAnimator::AnimationRule rule);
149 void paintSeparators(QPainter *p, QWidget *widget,
const QRegion &clip,
150 const QPoint &mouse)
const;
151 QRegion separatorRegion()
const;
152 int separatorMove(
int index,
int delta);
153 int separatorMove(
const QList<
int> &separator,
const QPoint &origin,
const QPoint &dest);
155 QLayoutItem *itemAt(
int *x,
int index)
const;
156 QLayoutItem *takeAt(
int *x,
int index);
157 void add(QWidget *widget);
158 void deleteAllLayoutItems();
160 QMainWindowLayout *mainWindowLayout()
const;
163 mutable QList<QWidget *> separatorWidgets;
164 QInternal::DockPosition dockPos;
167 QMainWindow *mainWindow;
168 QList<QDockAreaLayoutItem> item_list;
170 void updateSeparatorWidgets()
const;
171 QSet<QWidget*> usedSeparatorWidgets()
const;
173 quintptr currentTabId()
const;
174 void setCurrentTab(QWidget *widget);
175 void setCurrentTabId(quintptr id);
176 QRect tabContentRect()
const;
181 void reparentWidgets(QWidget *p);
182 bool updateTabBar()
const;
183 void setTabBarShape(
int shape);
184 QSize tabBarMinimumSize()
const;
185 QSize tabBarSizeHint()
const;
187 QSet<QTabBar*> usedTabBars()
const;
189 int tabIndexToListIndex(
int)
const;
190 void moveTab(
int from,
int to);
197 enum { EmptyDropAreaSize = 80 };
199 Qt::DockWidgetArea corners[4];
201 QLayoutItem *centralWidgetItem;
202 QMainWindow *mainWindow;
203 QRect centralWidgetRect;
204 QDockAreaLayout(QMainWindow *win);
205 QDockAreaLayoutInfo docks[4];
207 bool fallbackToSizeHints;
208 mutable QList<QWidget *> separatorWidgets;
210 bool isValid()
const;
212 static QRect constrainedRect(QRect rect, QWidget *widget);
213 void saveState(QDataStream &stream)
const;
214 bool restoreState(QDataStream &stream,
const QList<QDockWidget*> &_dockWidgets, QInternal::CallMode callMode);
216 QList<
int> indexOfPlaceHolder(
const QString &objectName)
const;
217 QList<
int> indexOf(
const QWidget *dockWidget)
const;
218 QList<
int> gapIndex(
const QPoint &pos,
bool disallowTabs)
const;
219 QList<
int> findSeparator(
const QPoint &pos)
const;
221 QDockAreaLayoutItem &item(
const QList<
int> &path);
222 QDockAreaLayoutInfo *info(
const QList<
int> &path);
223 const QDockAreaLayoutInfo *info(
const QList<
int> &path)
const;
224 QDockAreaLayoutInfo *info(QWidget *widget);
225 QRect itemRect(
const QList<
int> &path)
const;
226 QRect separatorRect(
int index)
const;
227 QRect separatorRect(
const QList<
int> &path)
const;
229 bool insertGap(
const QList<
int> &path, QLayoutItem *dockWidgetItem);
230 QLayoutItem *plug(
const QList<
int> &path);
231 QLayoutItem *unplug(
const QList<
int> &path);
232 void remove(
const QList<
int> &path);
233 void removePlaceHolder(
const QString &name);
239 QSize sizeHint()
const;
240 QSize minimumSize()
const;
241 QSize minimumStableSize()
const;
242 template<
typename SizePMF,
typename CenterPMF>
243 QSize size_helper(SizePMF sizeFn, CenterPMF centerFn)
const;
245 void addDockWidget(QInternal::DockPosition pos, QDockWidget *dockWidget, Qt::Orientation orientation);
246 bool restoreDockWidget(QDockWidget *dockWidget);
247 void splitDockWidget(QDockWidget *after, QDockWidget *dockWidget,
248 Qt::Orientation orientation);
250 void tabifyDockWidget(QDockWidget *first, QDockWidget *second);
252 void resizeDocks(
const QList<QDockWidget *> &docks,
const QList<
int> &sizes, Qt::Orientation o);
254 void apply(QWidgetAnimator::AnimationRule rule);
256 void paintSeparators(QPainter *p, QWidget *widget,
const QRegion &clip,
257 const QPoint &mouse)
const;
258 QRegion separatorRegion()
const;
259 int separatorMove(
const QList<
int> &separator,
const QPoint &origin,
const QPoint &dest);
261 void updateSeparatorWidgets()
const;
264 QLayoutItem *itemAt(
int *x,
int index)
const;
265 QLayoutItem *takeAt(
int *x,
int index);
266 void deleteAllLayoutItems();
268 void getGrid(QList<QLayoutStruct> *ver_struct_list, QList<QLayoutStruct> *hor_struct_list);
269 void setGrid(QList<QLayoutStruct> *ver_struct_list, QList<QLayoutStruct> *hor_struct_list);
271 QRect gapRect(
const QList<
int> &path)
const;
272 QRect gapRect(QInternal::DockPosition dockPos)
const;
274 void keepSize(QDockWidget *w);
276 QSet<QTabBar*> usedTabBars()
const;
277 QSet<QWidget*> usedSeparatorWidgets()
const;
279 void styleChangedEvent();
static QInternal::DockPosition dockPosHelper(const QRect &rect, const QPoint &_pos, Qt::Orientation o, bool nestingEnabled, QDockAreaLayoutInfo::TabMode tabMode)