Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qmdiarea_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
4#ifndef QMDIAREA_P_H
5#define QMDIAREA_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtWidgets/private/qtwidgetsglobal_p.h>
19#include "qmdiarea.h"
20#include "qmdisubwindow.h"
21
23
24#include <QList>
25#include <QList>
26#include <QRect>
27#include <QPoint>
28#include <QtWidgets/qapplication.h>
29#include <private/qmdisubwindow_p.h>
30#include <private/qabstractscrollarea_p.h>
31
33
34namespace QMdi {
36{
37public:
38 enum Type {
42 };
43
44 // Rearranges widgets relative to domain.
45 virtual void rearrange(QList<QWidget *> &widgets, const QRect &domain) const = 0;
46 virtual Type type() const = 0;
47 virtual ~Rearranger() {}
48};
49
51{
52 // Rearranges widgets according to a regular tiling pattern
53 // covering the entire domain.
54 // Both positions and sizes may change.
55 void rearrange(QList<QWidget *> &widgets, const QRect &domain) const override;
56 Type type() const override { return Rearranger::RegularTiler; }
57};
58
60{
61 // Rearranges widgets according to a simple, regular cascading pattern.
62 // Widgets are resized to minimumSize.
63 // Both positions and sizes may change.
64 void rearrange(QList<QWidget *> &widgets, const QRect &domain) const override;
65 Type type() const override { return Rearranger::SimpleCascader; }
66};
67
68class IconTiler : public Rearranger
69{
70 // Rearranges icons (assumed to be the same size) according to a regular
71 // tiling pattern filling up the domain from the bottom.
72 // Only positions may change.
73 void rearrange(QList<QWidget *> &widgets, const QRect &domain) const override;
74 Type type() const override { return Rearranger::IconTiler; }
75};
76
77class Placer
78{
79public:
80 // Places the rectangle defined by 'size' relative to 'rects' and 'domain'.
81 // Returns the position of the resulting rectangle.
82 virtual QPoint place(const QSize &size, const QList<QRect> &rects,
83 const QRect &domain) const = 0;
84 virtual ~Placer() {}
85};
86
88{
89 QPoint place(const QSize &size, const QList<QRect> &rects, const QRect &domain) const override;
90 static int accumulatedOverlap(const QRect &source, const QList<QRect> &rects);
91 static QRect findMinOverlapRect(const QList<QRect> &source, const QList<QRect> &rects);
92 static QList<QRect> getCandidatePlacements(const QSize &size, const QList<QRect> &rects,
93 const QRect &domain);
94 static QPoint findBestPlacement(const QRect &domain, const QList<QRect> &rects,
96 static QList<QRect> findNonInsiders(const QRect &domain, QList<QRect> &source);
97 static QList<QRect> findMaxOverlappers(const QRect &domain, const QList<QRect> &source);
98};
99} // namespace QMdi
100
101class QMdiAreaTabBar;
102class QMdiAreaPrivate : public QAbstractScrollAreaPrivate
103{
104 Q_DECLARE_PUBLIC(QMdiArea)
105public:
107
108 // Variables.
113#if QT_CONFIG(rubberband)
114 QRubberBand *rubberBand;
115#endif
116 QMdiAreaTabBar *tabBar;
125 QMdiArea::AreaOptions options;
127#if QT_CONFIG(tabbar)
128 bool documentMode;
129 bool tabsClosable;
130 bool tabsMovable;
131#endif
132#if QT_CONFIG(tabwidget)
133 QTabWidget::TabShape tabShape;
134 QTabWidget::TabPosition tabPosition;
135#endif
150
151 // Slots.
152 void _q_deactivateAllWindows(QMdiSubWindow *aboutToActivate = nullptr);
153 void _q_processWindowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState);
154 void _q_currentTabChanged(int index);
155 void _q_closeTab(int index);
156 void _q_moveTab(int from, int to);
157
158 // Functions.
161 void rearrange(QMdi::Rearranger *rearranger);
167 void resetActiveWindow(QMdiSubWindow *child = nullptr);
168 void updateActiveWindow(int removedIndex, bool activeRemoved);
169 void updateScrollBars();
170 void internalRaise(QMdiSubWindow *child) const;
171 bool scrollBarsEnabled() const;
172 bool lastWindowAboutToBeDestroyed() const;
173 void setChildActivationEnabled(bool enable = true, bool onlyNextActivationEvent = false) const;
174 QRect resizeToMinimumTileSize(const QSize &minSubWindowSize, int subWindowCount);
177 int removed = -1, int fromIndex = -1) const;
178 void highlightNextSubWindow(int increaseFactor);
179 QList<QMdiSubWindow *> subWindowList(QMdiArea::WindowOrder, bool reversed = false) const;
180 void disconnectSubWindow(QObject *subWindow);
182#if QT_CONFIG(tabbar)
183 void updateTabBarGeometry();
184 void refreshTabBar();
185#endif
186
187 inline void startResizeTimer()
188 {
189 Q_Q(QMdiArea);
190 if (resizeTimerId > 0)
191 q->killTimer(resizeTimerId);
192 resizeTimerId = q->startTimer(200);
193 }
194
196 {
197 Q_Q(QMdiArea);
198 if (tabToPreviousTimerId > 0)
199 q->killTimer(tabToPreviousTimerId);
201 }
202
203 inline bool windowStaysOnTop(QMdiSubWindow *subWindow) const
204 {
205 if (!subWindow)
206 return false;
207 return subWindow->windowFlags() & Qt::WindowStaysOnTopHint;
208 }
209
210 inline bool isExplicitlyDeactivated(QMdiSubWindow *subWindow) const
211 {
212 if (!subWindow)
213 return true;
214 return subWindow->d_func()->isExplicitlyDeactivated;
215 }
216
217 inline void setActive(QMdiSubWindow *subWindow, bool active = true, bool changeFocus = true) const
218 {
219 if (subWindow)
220 subWindow->d_func()->setActive(active, changeFocus);
221 }
222
223#if QT_CONFIG(rubberband)
224 void showRubberBandFor(QMdiSubWindow *subWindow);
225
226 inline void hideRubberBand()
227 {
228 if (rubberBand && rubberBand->isVisible())
229 rubberBand->hide();
231 }
232#endif // QT_CONFIG(rubberband)
233};
234
236
237#endif // QMDIAREA_P_H
int keyboardInputInterval
the time limit in milliseconds that distinguishes a key press from two consecutive key presses
\inmodule QtGui
Definition qbrush.h:30
Definition qlist.h:74
void internalRaise(QMdiSubWindow *child) const
void place(QMdi::Placer *placer, QMdiSubWindow *child)
Definition qmdiarea.cpp:832
void resetActiveWindow(QMdiSubWindow *child=nullptr)
QMdi::Rearranger * cascader
Definition qmdiarea_p.h:109
QMdi::Placer * placer
Definition qmdiarea_p.h:112
QPointer< QMdiSubWindow > aboutToBecomeActive
Definition qmdiarea_p.h:122
QMdi::Rearranger * regularTiler
Definition qmdiarea_p.h:110
void activateCurrentWindow()
Definition qmdiarea.cpp:966
QList< int > indicesToActivatedChildren
Definition qmdiarea_p.h:120
bool scrollBarsEnabled() const
void appendChild(QMdiSubWindow *child)
Definition qmdiarea.cpp:779
void activateHighlightedWindow()
Definition qmdiarea.cpp:975
void emitWindowActivated(QMdiSubWindow *child)
Definition qmdiarea.cpp:993
QMdi::Rearranger * iconTiler
Definition qmdiarea_p.h:111
QPointer< QMdiSubWindow > active
Definition qmdiarea_p.h:121
QList< QMdiSubWindow * > subWindowList(QMdiArea::WindowOrder, bool reversed=false) const
void updateScrollBars()
QRect resizeToMinimumTileSize(const QSize &minSubWindowSize, int subWindowCount)
QMdiArea::WindowOrder activationOrder
Definition qmdiarea_p.h:124
bool isExplicitlyDeactivated(QMdiSubWindow *subWindow) const
Definition qmdiarea_p.h:210
void arrangeMinimizedSubWindows()
Definition qmdiarea.cpp:927
QMdiAreaTabBar * tabBar
Definition qmdiarea_p.h:116
bool lastWindowAboutToBeDestroyed() const
bool ignoreGeometryChange
Definition qmdiarea_p.h:136
void activateWindow(QMdiSubWindow *child)
Definition qmdiarea.cpp:937
void highlightNextSubWindow(int increaseFactor)
QList< QMdi::Rearranger * > pendingRearrangements
Definition qmdiarea_p.h:117
QMdiArea::AreaOptions options
Definition qmdiarea_p.h:125
bool tileCalledFromResizeEvent
Definition qmdiarea_p.h:141
void disconnectSubWindow(QObject *subWindow)
void startTabToPreviousTimer()
Definition qmdiarea_p.h:195
void _q_moveTab(int from, int to)
Definition qmdiarea.cpp:766
bool windowStaysOnTop(QMdiSubWindow *subWindow) const
Definition qmdiarea_p.h:203
QList< QPointer< QMdiSubWindow > > pendingPlacements
Definition qmdiarea_p.h:118
void setActive(QMdiSubWindow *subWindow, bool active=true, bool changeFocus=true) const
Definition qmdiarea_p.h:217
bool ignoreWindowStateChange
Definition qmdiarea_p.h:137
void _q_currentTabChanged(int index)
Definition qmdiarea.cpp:731
bool updatesDisabledByUs
Definition qmdiarea_p.h:142
QList< QPointer< QMdiSubWindow > > childWindows
Definition qmdiarea_p.h:119
void _q_deactivateAllWindows(QMdiSubWindow *aboutToActivate=nullptr)
Definition qmdiarea.cpp:662
void scrollBarPolicyChanged(Qt::Orientation, Qt::ScrollBarPolicy) override
bool showActiveWindowMaximized
Definition qmdiarea_p.h:140
QMdiArea::ViewMode viewMode
Definition qmdiarea_p.h:126
void startResizeTimer()
Definition qmdiarea_p.h:187
int indexToPreviousWindow
Definition qmdiarea_p.h:145
void setViewMode(QMdiArea::ViewMode mode)
void updateActiveWindow(int removedIndex, bool activeRemoved)
void rearrange(QMdi::Rearranger *rearranger)
Definition qmdiarea.cpp:871
void setChildActivationEnabled(bool enable=true, bool onlyNextActivationEvent=false) const
void _q_closeTab(int index)
Definition qmdiarea.cpp:755
void _q_processWindowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState)
Definition qmdiarea.cpp:698
QMdiSubWindow * nextVisibleSubWindow(int increaseFactor, QMdiArea::WindowOrder, int removed=-1, int fromIndex=-1) const
The QMdiArea widget provides an area in which MDI windows are displayed.
Definition qmdiarea.h:21
WindowOrder
Specifies the criteria to use for ordering the list of child windows returned by subWindowList().
Definition qmdiarea.h:41
The QMdiSubWindow class provides a subwindow class for QMdiArea.
Type type() const override
Definition qmdiarea_p.h:74
void rearrange(QList< QWidget * > &widgets, const QRect &domain) const override
Definition qmdiarea.cpp:332
QPoint place(const QSize &size, const QList< QRect > &rects, const QRect &domain) const override
Definition qmdiarea.cpp:503
virtual ~Placer()
Definition qmdiarea_p.h:84
virtual QPoint place(const QSize &size, const QList< QRect > &rects, const QRect &domain) const =0
virtual void rearrange(QList< QWidget * > &widgets, const QRect &domain) const =0
virtual Type type() const =0
virtual ~Rearranger()
Definition qmdiarea_p.h:47
void rearrange(QList< QWidget * > &widgets, const QRect &domain) const override
Definition qmdiarea.cpp:245
Type type() const override
Definition qmdiarea_p.h:56
void rearrange(QList< QWidget * > &widgets, const QRect &domain) const override
Definition qmdiarea.cpp:289
Type type() const override
Definition qmdiarea_p.h:65
\inmodule QtCore
Definition qobject.h:90
\inmodule QtCore\reentrant
Definition qpoint.h:23
\inmodule QtCore
Definition qpointer.h:18
\inmodule QtCore\reentrant
Definition qrect.h:30
The QRubberBand class provides a rectangle or line that can indicate a selection or a boundary.
Definition qrubberband.h:18
\inmodule QtCore
Definition qsize.h:25
TabPosition
This enum type defines where QTabWidget draws the tab row:
Definition qtabwidget.h:74
TabShape
This enum type defines the shape of the tabs: \value Rounded The tabs are drawn with a rounded look.
Definition qtabwidget.h:85
Qt::WindowFlags windowFlags() const
Window flags are a combination of a type (e.g.
Definition qwidget.h:803
void hide()
Hides the widget.
Definition qwidget.cpp:8209
bool isVisible() const
Definition qwidget.h:874
void newState(QList< State > &states, const char *token, const char *lexem, bool pre)
Combined button and popup list for selecting options.
Orientation
Definition qnamespace.h:97
ScrollBarPolicy
@ WindowStaysOnTopHint
Definition qnamespace.h:232
GLenum mode
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLuint index
[2]
GLboolean enable
GLsizei GLsizei GLchar * source
GLdouble GLdouble GLdouble GLdouble q
Definition qopenglext.h:259
#define QT_REQUIRE_CONFIG(feature)
QList< QWidget * > widgets
[11]
QLayoutItem * child
[0]
Definition moc.h:24