Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qdockwidget_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QDYNAMICDOCKWIDGET_P_H
6#define QDYNAMICDOCKWIDGET_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtWidgets/private/qtwidgetsglobal_p.h>
20#include "QtWidgets/qstyleoption.h"
21#include "private/qwidget_p.h"
22#include "QtWidgets/qboxlayout.h"
23#include "QtWidgets/qdockwidget.h"
24
25#if QT_CONFIG(tabwidget)
26# include "QtWidgets/qtabwidget.h"
27#endif
28
30
31QT_BEGIN_NAMESPACE
32
33class QGridLayout;
35class QDockWidgetTitleButton;
36class QSpacerItem;
37class QDockWidgetItem;
38
39class QDockWidgetPrivate : public QWidgetPrivate
40{
41 Q_DECLARE_PUBLIC(QDockWidget)
42
43 struct DragState {
44 QPoint pressPos;
45 QPoint globalPressPos;
46 QPoint widgetInitialPos;
47 bool dragging;
48 QLayoutItem *widgetItem;
49 bool ownWidgetItem;
50 bool nca;
51 bool ctrlDrag;
52 };
53
54public:
55 enum class DragScope {
56 Group,
57 Widget
58 };
59
60 enum class EndDragMode {
61 LocationChange,
62 Abort
63 };
64
65 enum class WindowState {
66 Unplug = 0x01,
67 Floating = 0x02,
68 };
69 Q_DECLARE_FLAGS(WindowStates, WindowState)
70
71 void init();
72 void toggleView(bool);
73 void toggleTopLevel();
74
75 void updateButtons();
76 static Qt::DockWidgetArea toDockWidgetArea(QInternal::DockPosition pos);
77
78#if QT_CONFIG(tabwidget)
79 QTabWidget::TabPosition tabPosition = QTabWidget::North;
80#endif
81
82 DragState *state = nullptr;
83
84 QDockWidget::DockWidgetFeatures features = QDockWidget::DockWidgetClosable
85 | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable;
86 Qt::DockWidgetAreas allowedAreas = Qt::AllDockWidgetAreas;
87
88 QFont font;
89
90#ifndef QT_NO_ACTION
91 QAction *toggleViewAction = nullptr;
92#endif
93
94// QMainWindow *findMainWindow(QWidget *widget) const;
95 QRect undockedGeometry;
96 QString fixedWindowTitle;
97 QString dockedWindowTitle;
98
99 bool mousePressEvent(QMouseEvent *event);
100 bool mouseDoubleClickEvent(QMouseEvent *event);
101 bool mouseMoveEvent(QMouseEvent *event);
102 bool mouseReleaseEvent(QMouseEvent *event);
103 void setWindowState(WindowStates states, const QRect &rect = QRect());
104 void nonClientAreaMouseEvent(QMouseEvent *event);
105 void initDrag(const QPoint &pos, bool nca);
106 void startDrag(DragScope scope);
107 void endDrag(EndDragMode mode);
108 void moveEvent(QMoveEvent *event);
109 void recalculatePressPos(QResizeEvent *event);
110
111 void unplug(const QRect &rect);
112 void plug(const QRect &rect);
113 void setResizerActive(bool active);
114 void setFloating(bool floating);
115
116 bool isAnimating() const;
117 bool isTabbed() const;
118
119private:
120 QWidgetResizeHandler *resizer = nullptr;
121};
122
123class Q_WIDGETS_EXPORT QDockWidgetLayout : public QLayout
124{
125 Q_OBJECT
126public:
127 explicit QDockWidgetLayout(QWidget *parent = nullptr);
128 ~QDockWidgetLayout();
129 void addItem(QLayoutItem *item) override;
130 QLayoutItem *itemAt(int index) const override;
131 QLayoutItem *takeAt(int index) override;
132 int count() const override;
133
134 QSize maximumSize() const override;
135 QSize minimumSize() const override;
136 QSize sizeHint() const override;
137
138 QSize sizeFromContent(const QSize &content, bool floating) const;
139
140 void setGeometry(const QRect &r) override;
141
142 enum Role { Content, CloseButton, FloatButton, TitleBar, RoleCount };
143 QWidget *widgetForRole(Role r) const;
144 void setWidgetForRole(Role r, QWidget *w);
145 QLayoutItem *itemForRole(Role r) const;
146
147 QRect titleArea() const { return _titleArea; }
148
149 int minimumTitleWidth() const;
150 int titleHeight() const;
151 void updateMaxSize();
152 static bool wmSupportsNativeWindowDeco();
153 bool nativeWindowDeco() const;
154 bool nativeWindowDeco(bool floating) const;
155
156 void setVerticalTitleBar(bool b);
157
158 bool verticalTitleBar;
159
160private:
161 QList<QLayoutItem *> item_list;
162 QRect _titleArea;
163};
164
165/* The size hints of a QDockWidget will depend on whether it is docked or not.
166 This layout item always returns the size hints as if the dock widget was docked. */
167
169{
170public:
171 QDockWidgetItem(QDockWidget *dockWidget);
172 QSize minimumSize() const override;
173 QSize maximumSize() const override;
174 QSize sizeHint() const override;
175
176private:
177 inline QLayoutItem *dockWidgetChildItem() const;
178 inline QDockWidgetLayout *dockWidgetLayout() const;
179};
180
181inline QLayoutItem *QDockWidgetItem::dockWidgetChildItem() const
182{
183 if (QDockWidgetLayout *layout = dockWidgetLayout())
184 return layout->itemForRole(QDockWidgetLayout::Content);
185 return nullptr;
186}
187
188inline QDockWidgetLayout *QDockWidgetItem::dockWidgetLayout() const
189{
190 QWidget *w = widget();
191 if (w != nullptr)
192 return qobject_cast<QDockWidgetLayout*>(w->layout());
193 return nullptr;
194}
195
196QT_END_NAMESPACE
197
198#endif // QDYNAMICDOCKWIDGET_P_H
QDockWidgetItem(QDockWidget *dockWidget)
QSize minimumSize() const override
Implemented in subclasses to return the minimum size of this item.
QSize maximumSize() const override
Implemented in subclasses to return the maximum size of this item.
QSize sizeHint() const override
Implemented in subclasses to return the preferred size of this item.
The QDockWidget class provides a widget that can be docked inside a QMainWindow or floated as a top-l...
Definition qdockwidget.h:21
\inmodule QtCore
Definition qhash.h:843
The QMainWindow class provides a main application window.
Definition qmainwindow.h:26
ScrollerTearOffItem(Type type, QMenuPrivate *mPrivate, QWidget *parent=nullptr, Qt::WindowFlags f=Qt::WindowFlags())
Definition qmenu.cpp:1026
void updateScrollerRects(const QRect &rect)
Definition qmenu.cpp:1052
void paintEvent(QPaintEvent *e) override
This event handler can be reimplemented in a subclass to receive paint events passed in event.
Definition qmenu.cpp:1033
void updateLayoutDirection()
Definition qmenu.cpp:947
void init()
Definition qmenu.cpp:158
QPointer< QPlatformMenu > platformMenu
Definition qmenu_p.h:451
quint8 ncols
Definition qmenu_p.h:493
QEventLoop * eventLoop
Definition qmenu_p.h:398
QAction * menuAction
Definition qmenu_p.h:432
uint maxIconWidth
Definition qmenu_p.h:486
QList< QRect > actionRects
Definition qmenu_p.h:319
bool delayedPopupGuard
Definition qmenu_p.h:505
QPointer< QWidget > noReplayFor
Definition qmenu_p.h:455
void _q_actionTriggered()
Definition qmenu.cpp:1514
void hideUpToMenuBar()
Definition qmenu.cpp:518
@ SelectedFromElsewhere
Definition qmenu_p.h:366
@ SelectedFromKeyboard
Definition qmenu_p.h:364
@ SelectedFromAPI
Definition qmenu_p.h:365
void scrollMenu(QMenuScroller::ScrollLocation location, bool active=false)
Definition qmenu.cpp:1235
QString searchBuffer
Definition qmenu_p.h:402
int getLastVisibleAction() const
Definition qmenu.cpp:489
void popupAction(QAction *, int, bool)
Definition qmenu.cpp:648
void activateCausedStack(const QList< QPointer< QWidget > > &, QAction *, QAction::ActionEvent, bool)
Definition qmenu.cpp:1404
static QMenu * mouseDown
Definition qmenu_p.h:330
void popup(const QPoint &p, QAction *atAction, PositionFunction positionFunction={})
Definition qmenu.cpp:2313
void updateActionRects() const
Definition qmenu.cpp:333
bool tearoffHighlighted
Definition qmenu_p.h:513
QPointer< QTornOffMenu > tornPopup
Definition qmenu_p.h:425
void setSyncAction()
Definition qmenu.cpp:667
int indexOf(QAction *act) const
Definition qmenu_p.h:422
QPointer< QAction > syncAction
Definition qmenu_p.h:399
void syncPlatformMenu()
Definition qmenu.cpp:204
bool lastContextMenu
Definition qmenu_p.h:502
QPlatformMenuItem * insertActionInPlatformMenu(const QAction *action, QPlatformMenuItem *beforeItem)
Definition qmenu.cpp:265
bool hasHadMouse
Definition qmenu_p.h:508
int scrollerHeight() const
Definition qmenu.cpp:279
QPlatformMenu * createPlatformMenu()
Definition qmenu.cpp:183
bool hasCheckableItems
Definition qmenu_p.h:501
void setFirstActionActive()
Definition qmenu.cpp:685
void updateActionRects(const QRect &screen) const
Definition qmenu.cpp:338
void hideMenu(QMenu *menu)
Definition qmenu.cpp:546
QBasicTimer searchBufferTimer
Definition qmenu_p.h:403
void _q_overrideMenuActionDestroyed()
Definition qmenu.cpp:942
bool mouseEventTaken(QMouseEvent *)
Definition qmenu.cpp:1315
ScrollerTearOffItem * scrollDownItem
Definition qmenu_p.h:470
bool isContextMenu() const
Definition qmenu.cpp:324
void _q_platformMenuAboutToShow()
Definition qmenu.cpp:1558
QPointer< QAction > defaultAction
Definition qmenu_p.h:430
virtual QList< QPointer< QWidget > > calcCausedStack() const
Definition qmenu.cpp:309
void drawScroller(QPainter *painter, ScrollerTearOffItem::Type type, const QRect &rect)
Definition qmenu.cpp:963
QRect actionRect(QAction *) const
Definition qmenu.cpp:506
QRect rect() const
Definition qmenu.cpp:1013
bool useFullScreenForPopup() const
Definition qmenu.cpp:287
void activateAction(QAction *, QAction::ActionEvent, bool self=true)
Definition qmenu.cpp:1445
bool collapsibleSeparators
Definition qmenu_p.h:503
void copyActionToPlatformItem(const QAction *action, QPlatformMenuItem *item)
Definition qmenu.cpp:228
QMenuSloppyState sloppyState
Definition qmenu_p.h:427
QHash< QAction *, QWidget * > widgetItems
Definition qmenu_p.h:320
bool tearoff
Definition qmenu_p.h:511
bool itemsDirty
Definition qmenu_p.h:500
QPointer< QAction > actionAboutToTrigger
Definition qmenu_p.h:453
void scrollMenu(QAction *action, QMenuScroller::ScrollLocation location, bool active=false)
Definition qmenu.cpp:1121
void setOverrideMenuAction(QAction *)
Definition qmenu.cpp:930
bool activationRecursionGuard
Definition qmenu_p.h:491
QAction * actionAt(QPoint p) const
Definition qmenu.cpp:918
QWidget * topCausedWidget() const
Definition qmenu.cpp:910
static QMenuPrivate * get(QMenu *m)
Definition qmenu_p.h:311
QPointF mousePopupPos
Definition qmenu_p.h:331
bool aboutToHide
Definition qmenu_p.h:509
void scrollMenu(QMenuScroller::ScrollDirection direction, bool page=false, bool active=false)
Definition qmenu.cpp:1268
QPointer< QScreen > popupScreen
Definition qmenu_p.h:498
QWindow * transientParentWindow() const
Definition qmenu.cpp:625
void drawTearOff(QPainter *painter, const QRect &rect)
Definition qmenu.cpp:989
bool tornoff
Definition qmenu_p.h:512
bool toolTipsVisible
Definition qmenu_p.h:504
QPointer< QMenu > activeMenu
Definition qmenu_p.h:406
void setCurrentAction(QAction *, int popup=-1, SelectionReason reason=SelectedFromElsewhere, SelectionDirection direction=SelectionDirection::Down, bool activateFirst=false)
Definition qmenu.cpp:706
QAction * currentAction
Definition qmenu_p.h:333
QAction * exec(const QPoint &p, QAction *action, PositionFunction positionFunction={})
Definition qmenu.cpp:2686
uint tabWidth
Definition qmenu_p.h:487
void _q_actionHovered()
Definition qmenu.cpp:1550
QRect popupGeometry(QScreen *screen=nullptr) const
Definition qmenu.cpp:292
QMenuCaused causedPopup
Definition qmenu_p.h:415
bool doChildEffects
Definition qmenu_p.h:515
bool hasReceievedEnter
Definition qmenu_p.h:506
bool hasMouseMoved(const QPoint &globalPos)
Definition qmenu.cpp:1579
bool considerAction(const QAction *action) const
Definition qmenu_p.h:476
ScrollerTearOffItem * scrollUpTearOffItem
Definition qmenu_p.h:469
QAction * defaultMenuAction
Definition qmenu_p.h:433
void setPlatformMenu(QPlatformMenu *menu)
Definition qmenu.cpp:191
int mousePopupDelay
Definition qmenu_p.h:489
void childEnter()
Definition qmenu.cpp:809
bool hasParentActiveDelayTimer() const
Definition qmenu.cpp:849
QMenu * subMenu() const
Definition qmenu_p.h:247
bool checkSlope(qreal oldS, qreal newS, bool wantSteeper)
Definition qmenu_p.h:158
MouseEventResult processMouseEvent(const QPointF &mousePos, QAction *resetAction, QAction *currentAction)
Definition qmenu_p.h:165
bool isTimerId(int timerId) const
Definition qmenu_p.h:246
void startTimer()
Definition qmenu_p.h:127
void childLeave()
Definition qmenu.cpp:825
@ EventDiscardsSloppyState
Definition qmenu_p.h:124
@ EventShouldBePropagated
Definition qmenu_p.h:123
bool enabled() const
Definition qmenu_p.h:119
void setSubMenuPopup(const QRect &actionRect, QAction *resetAction, QMenu *subMenu)
Definition qmenu.cpp:834
static qreal slope(const QPointF &p1, const QPointF &p2)
Definition qmenu_p.h:150
void stopTimer()
Definition qmenu_p.h:139
int timeForTimeout() const
Definition qmenu_p.h:244
void startTimerIfNotRunning()
Definition qmenu_p.h:133
friend class QWidget
Definition qpainter.h:431
QSetValueOnDestroy(T &toSet, T value)
Definition qmenu_p.h:81
void animate(QWidget *widget, const QRect &final_geometry, bool animate)
void abort(QWidget *widget)
bool animating() const
Combined button and popup list for selecting options.
QT_REQUIRE_CONFIG(animation)
static int grow(QLayoutStruct &ls, int delta)
static QRect dockedGeometry(QWidget *widget)
static Qt::DockWidgetArea toDockWidgetArea(QInternal::DockPosition pos)
static int realMinSize(const QDockAreaLayoutInfo &info)
static int qMax(int i1, int i2, int i3)
static int shrink(QLayoutStruct &ls, int delta)
static const int zero
static int separatorMoveHelper(QList< QLayoutStruct > &list, int index, int delta, int sep)
static QInternal::DockPosition dockPosHelper(const QRect &rect, const QPoint &_pos, Qt::Orientation o, bool nestingEnabled, QDockAreaLayoutInfo::TabMode tabMode)
static void paintSep(QPainter *p, QWidget *w, const QRect &r, Qt::Orientation o, bool mouse_over)
static int realMaxSize(const QDockAreaLayoutInfo &info)
QMainWindowLayout * qt_mainwindow_layout(const QMainWindow *window)
@ StateFlagFloating
@ StateFlagVisible
QT_REQUIRE_CONFIG(dockwidget)
QT_REQUIRE_CONFIG(liburing)
QT_BEGIN_NAMESPACE Q_DECLARE_LOGGING_CATEGORY(lcQIORing)
QT_REQUIRE_CONFIG(mainwindow)
static int perp(Qt::Orientation o, const QPoint &pos)
Definition qmenu_p.h:56
static int & rperp(Qt::Orientation o, QPoint &pos)
Definition qmenu_p.h:62
static int & rpick(Qt::Orientation o, QPoint &pos)
Definition qmenu_p.h:47
static QT_BEGIN_NAMESPACE int pick(Qt::Orientation o, const QPoint &pos)
Definition qmenu_p.h:41
void start(int timeout, QAction *toStartAction)
Definition qmenu_p.h:346
void initialize(QMenu *parent)
Definition qmenu_p.h:341
QPointer< QWidget > widget
Definition qmenu_p.h:411
QPointer< QAction > action
Definition qmenu_p.h:412