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 bool inDestructor = false;
99
100 bool mousePressEvent(QMouseEvent *event);
101 bool mouseDoubleClickEvent(QMouseEvent *event);
102 bool mouseMoveEvent(QMouseEvent *event);
103 bool mouseReleaseEvent(QMouseEvent *event);
104 void setWindowState(WindowStates states, const QRect &rect = QRect());
105 void nonClientAreaMouseEvent(QMouseEvent *event);
106 void initDrag(const QPoint &pos, bool nca);
107 void startDrag(DragScope scope);
108 void endDrag(EndDragMode mode);
109 void moveEvent(QMoveEvent *event);
110 void recalculatePressPos(QResizeEvent *event);
111
112 void unplug(const QRect &rect);
113 void plug(const QRect &rect);
114 void setResizerActive(bool active);
115 void setFloating(bool floating);
116
117 bool isAnimating() const;
118 bool isTabbed() const;
119
120private:
121 QWidgetResizeHandler *resizer = nullptr;
122};
123
124class Q_WIDGETS_EXPORT QDockWidgetLayout : public QLayout
125{
126 Q_OBJECT
127public:
128 explicit QDockWidgetLayout(QWidget *parent = nullptr);
129 ~QDockWidgetLayout();
130 void addItem(QLayoutItem *item) override;
131 QLayoutItem *itemAt(int index) const override;
132 QLayoutItem *takeAt(int index) override;
133 int count() const override;
134
135 QSize maximumSize() const override;
136 QSize minimumSize() const override;
137 QSize sizeHint() const override;
138
139 QSize sizeFromContent(const QSize &content, bool floating) const;
140
141 void setGeometry(const QRect &r) override;
142
143 enum Role { Content, CloseButton, FloatButton, TitleBar, RoleCount };
144 QWidget *widgetForRole(Role r) const;
145 void setWidgetForRole(Role r, QWidget *w);
146 QLayoutItem *itemForRole(Role r) const;
147
148 QRect titleArea() const { return _titleArea; }
149
150 int minimumTitleWidth() const;
151 int titleHeight() const;
152 void updateMaxSize();
153 static bool wmSupportsNativeWindowDeco();
154 bool nativeWindowDeco() const;
155 bool nativeWindowDeco(bool floating) const;
156
157 void setVerticalTitleBar(bool b);
158
159 bool verticalTitleBar;
160
161private:
162 QList<QLayoutItem *> item_list;
163 QRect _titleArea;
164};
165
166/* The size hints of a QDockWidget will depend on whether it is docked or not.
167 This layout item always returns the size hints as if the dock widget was docked. */
168
170{
171public:
172 QDockWidgetItem(QDockWidget *dockWidget);
173 QSize minimumSize() const override;
174 QSize maximumSize() const override;
175 QSize sizeHint() const override;
176
177private:
178 inline QLayoutItem *dockWidgetChildItem() const;
179 inline QDockWidgetLayout *dockWidgetLayout() const;
180};
181
182inline QLayoutItem *QDockWidgetItem::dockWidgetChildItem() const
183{
184 if (QDockWidgetLayout *layout = dockWidgetLayout())
185 return layout->itemForRole(QDockWidgetLayout::Content);
186 return nullptr;
187}
188
189inline QDockWidgetLayout *QDockWidgetItem::dockWidgetLayout() const
190{
191 QWidget *w = widget();
192 if (w != nullptr)
193 return qobject_cast<QDockWidgetLayout*>(w->layout());
194 return nullptr;
195}
196
197QT_END_NAMESPACE
198
199#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:837
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:1023
void updateScrollerRects(const QRect &rect)
Definition qmenu.cpp:1049
void paintEvent(QPaintEvent *e) override
This event handler can be reimplemented in a subclass to receive paint events passed in event.
Definition qmenu.cpp:1030
void updateLayoutDirection()
Definition qmenu.cpp:944
void init()
Definition qmenu.cpp:156
QPointer< QPlatformMenu > platformMenu
Definition qmenu_p.h:450
quint8 ncols
Definition qmenu_p.h:492
QEventLoop * eventLoop
Definition qmenu_p.h:397
QAction * menuAction
Definition qmenu_p.h:431
uint maxIconWidth
Definition qmenu_p.h:485
QList< QRect > actionRects
Definition qmenu_p.h:319
bool delayedPopupGuard
Definition qmenu_p.h:504
QPointer< QWidget > noReplayFor
Definition qmenu_p.h:454
void _q_actionTriggered()
Definition qmenu.cpp:1511
void hideUpToMenuBar()
Definition qmenu.cpp:516
@ SelectedFromElsewhere
Definition qmenu_p.h:365
@ SelectedFromKeyboard
Definition qmenu_p.h:364
void scrollMenu(QMenuScroller::ScrollLocation location, bool active=false)
Definition qmenu.cpp:1232
QString searchBuffer
Definition qmenu_p.h:401
int getLastVisibleAction() const
Definition qmenu.cpp:487
void popupAction(QAction *, int, bool)
Definition qmenu.cpp:646
void activateCausedStack(const QList< QPointer< QWidget > > &, QAction *, QAction::ActionEvent, bool)
Definition qmenu.cpp:1401
static QMenu * mouseDown
Definition qmenu_p.h:330
void popup(const QPoint &p, QAction *atAction, PositionFunction positionFunction={})
Definition qmenu.cpp:2306
void updateActionRects() const
Definition qmenu.cpp:331
bool tearoffHighlighted
Definition qmenu_p.h:512
QPointer< QTornOffMenu > tornPopup
Definition qmenu_p.h:424
void setSyncAction()
Definition qmenu.cpp:665
int indexOf(QAction *act) const
Definition qmenu_p.h:421
QPointer< QAction > syncAction
Definition qmenu_p.h:398
void syncPlatformMenu()
Definition qmenu.cpp:202
bool lastContextMenu
Definition qmenu_p.h:501
QPlatformMenuItem * insertActionInPlatformMenu(const QAction *action, QPlatformMenuItem *beforeItem)
Definition qmenu.cpp:263
bool hasHadMouse
Definition qmenu_p.h:507
int scrollerHeight() const
Definition qmenu.cpp:277
QPlatformMenu * createPlatformMenu()
Definition qmenu.cpp:181
bool hasCheckableItems
Definition qmenu_p.h:500
void setFirstActionActive()
Definition qmenu.cpp:683
void updateActionRects(const QRect &screen) const
Definition qmenu.cpp:336
void hideMenu(QMenu *menu)
Definition qmenu.cpp:544
QBasicTimer searchBufferTimer
Definition qmenu_p.h:402
void _q_overrideMenuActionDestroyed()
Definition qmenu.cpp:939
bool mouseEventTaken(QMouseEvent *)
Definition qmenu.cpp:1312
ScrollerTearOffItem * scrollDownItem
Definition qmenu_p.h:469
bool isContextMenu() const
Definition qmenu.cpp:322
void _q_platformMenuAboutToShow()
Definition qmenu.cpp:1551
QPointer< QAction > defaultAction
Definition qmenu_p.h:429
virtual QList< QPointer< QWidget > > calcCausedStack() const
Definition qmenu.cpp:307
void drawScroller(QPainter *painter, ScrollerTearOffItem::Type type, const QRect &rect)
Definition qmenu.cpp:960
QRect actionRect(QAction *) const
Definition qmenu.cpp:504
QRect rect() const
Definition qmenu.cpp:1010
bool useFullScreenForPopup() const
Definition qmenu.cpp:285
void activateAction(QAction *, QAction::ActionEvent, bool self=true)
Definition qmenu.cpp:1442
bool collapsibleSeparators
Definition qmenu_p.h:502
void copyActionToPlatformItem(const QAction *action, QPlatformMenuItem *item)
Definition qmenu.cpp:226
QMenuSloppyState sloppyState
Definition qmenu_p.h:426
QHash< QAction *, QWidget * > widgetItems
Definition qmenu_p.h:320
bool tearoff
Definition qmenu_p.h:510
bool itemsDirty
Definition qmenu_p.h:499
QPointer< QAction > actionAboutToTrigger
Definition qmenu_p.h:452
void scrollMenu(QAction *action, QMenuScroller::ScrollLocation location, bool active=false)
Definition qmenu.cpp:1118
void setOverrideMenuAction(QAction *)
Definition qmenu.cpp:927
bool activationRecursionGuard
Definition qmenu_p.h:490
QAction * actionAt(QPoint p) const
Definition qmenu.cpp:915
QWidget * topCausedWidget() const
Definition qmenu.cpp:907
static QMenuPrivate * get(QMenu *m)
Definition qmenu_p.h:311
QPointF mousePopupPos
Definition qmenu_p.h:331
bool aboutToHide
Definition qmenu_p.h:508
void scrollMenu(QMenuScroller::ScrollDirection direction, bool page=false, bool active=false)
Definition qmenu.cpp:1265
QPointer< QScreen > popupScreen
Definition qmenu_p.h:497
QWindow * transientParentWindow() const
Definition qmenu.cpp:623
void drawTearOff(QPainter *painter, const QRect &rect)
Definition qmenu.cpp:986
bool tornoff
Definition qmenu_p.h:511
bool toolTipsVisible
Definition qmenu_p.h:503
QPointer< QMenu > activeMenu
Definition qmenu_p.h:405
void setCurrentAction(QAction *, int popup=-1, SelectionReason reason=SelectedFromElsewhere, SelectionDirection direction=SelectionDirection::Down, bool activateFirst=false)
Definition qmenu.cpp:704
QAction * currentAction
Definition qmenu_p.h:333
QAction * exec(const QPoint &p, QAction *action, PositionFunction positionFunction={})
Definition qmenu.cpp:2660
uint tabWidth
Definition qmenu_p.h:486
void _q_actionHovered()
Definition qmenu.cpp:1543
QRect popupGeometry(QScreen *screen=nullptr) const
Definition qmenu.cpp:290
QMenuCaused causedPopup
Definition qmenu_p.h:414
bool doChildEffects
Definition qmenu_p.h:514
bool hasReceievedEnter
Definition qmenu_p.h:505
bool hasMouseMoved(const QPoint &globalPos)
Definition qmenu.cpp:1572
bool considerAction(const QAction *action) const
Definition qmenu_p.h:475
ScrollerTearOffItem * scrollUpTearOffItem
Definition qmenu_p.h:468
QAction * defaultMenuAction
Definition qmenu_p.h:432
void setPlatformMenu(QPlatformMenu *menu)
Definition qmenu.cpp:189
int mousePopupDelay
Definition qmenu_p.h:488
void childEnter()
Definition qmenu.cpp:806
bool hasParentActiveDelayTimer() const
Definition qmenu.cpp:846
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:822
@ 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:831
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
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_BEGIN_NAMESPACE Q_DECLARE_LOGGING_CATEGORY(lcEventDispatcher)
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
QT_REQUIRE_CONFIG(thread)
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:410
QPointer< QAction > action
Definition qmenu_p.h:411