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: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:2309
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:1554
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:2680
uint tabWidth
Definition qmenu_p.h:487
void _q_actionHovered()
Definition qmenu.cpp:1546
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:1575
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_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:411
QPointer< QAction > action
Definition qmenu_p.h:412