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
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// Qt-Security score:significant reason:default
4
5#ifndef QMDIAREA_P_H
6#define QMDIAREA_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 "qmdiarea.h"
21#include "qmdisubwindow.h"
22
23QT_REQUIRE_CONFIG(mdiarea);
24
25#include <QBasicTimer>
26#include <QList>
27#include <QRect>
28#include <QPoint>
29#include <QtWidgets/qapplication.h>
30#include <private/qmdisubwindow_p.h>
31#include <private/qabstractscrollarea_p.h>
32
33#include <QtCore/qpointer.h>
34
35QT_BEGIN_NAMESPACE
36
37namespace QMdi {
39{
40public:
46
47 // Rearranges widgets relative to domain.
48 virtual void rearrange(QList<QWidget *> &widgets, const QRect &domain) const = 0;
49 virtual Type type() const = 0;
50 virtual ~Rearranger() {}
51};
52
54{
55 // Rearranges widgets according to a regular tiling pattern
56 // covering the entire domain.
57 // Both positions and sizes may change.
58 void rearrange(QList<QWidget *> &widgets, const QRect &domain) const override;
59 Type type() const override { return Rearranger::RegularTiler; }
60};
61
63{
64 // Rearranges widgets according to a simple, regular cascading pattern.
65 // Widgets are resized to minimumSize.
66 // Both positions and sizes may change.
67 void rearrange(QList<QWidget *> &widgets, const QRect &domain) const override;
68 Type type() const override { return Rearranger::SimpleCascader; }
69};
70
71class IconTiler : public Rearranger
72{
73 // Rearranges icons (assumed to be the same size) according to a regular
74 // tiling pattern filling up the domain from the bottom.
75 // Only positions may change.
76 void rearrange(QList<QWidget *> &widgets, const QRect &domain) const override;
77 Type type() const override { return Rearranger::IconTiler; }
78};
79
80class Placer
81{
82public:
83 // Places the rectangle defined by 'size' relative to 'rects' and 'domain'.
84 // Returns the position of the resulting rectangle.
85 virtual QPoint place(const QSize &size, const QList<QRect> &rects,
86 const QRect &domain) const = 0;
87 virtual ~Placer() {}
88};
89
91{
92 QPoint place(const QSize &size, const QList<QRect> &rects, const QRect &domain) const override;
93 static int accumulatedOverlap(const QRect &source, const QList<QRect> &rects);
94 static QRect findMinOverlapRect(const QList<QRect> &source, const QList<QRect> &rects);
95 static QList<QRect> getCandidatePlacements(const QSize &size, const QList<QRect> &rects,
96 const QRect &domain);
97 static QPoint findBestPlacement(const QRect &domain, const QList<QRect> &rects,
98 QList<QRect> &source);
99 static QList<QRect> findNonInsiders(const QRect &domain, QList<QRect> &source);
100 static QList<QRect> findMaxOverlappers(const QRect &domain, const QList<QRect> &source);
101};
102} // namespace QMdi
103
104class QMdiAreaTabBar;
106{
107 Q_DECLARE_PUBLIC(QMdiArea)
108public:
110
111 // Variables.
116#if QT_CONFIG(rubberband)
118#endif
119 QMdiAreaTabBar *tabBar;
130#if QT_CONFIG(tabbar)
131 bool documentMode;
132 bool tabsClosable;
133 bool tabsMovable;
134#endif
135#if QT_CONFIG(tabwidget)
138#endif
153
154 // Slots.
155 void _q_deactivateAllWindows(QMdiSubWindow *aboutToActivate = nullptr);
156 void _q_processWindowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState);
157 void _q_currentTabChanged(int index);
158 void _q_closeTab(int index);
159 void _q_moveTab(int from, int to);
160
161 // Functions.
162 void appendChild(QMdiSubWindow *child);
163 void place(QMdi::Placer *placer, QMdiSubWindow *child);
164 void rearrange(QMdi::Rearranger *rearranger);
166 void activateWindow(QMdiSubWindow *child);
169 void emitWindowActivated(QMdiSubWindow *child);
170 void resetActiveWindow(QMdiSubWindow *child = nullptr);
171 void updateActiveWindow(int removedIndex, bool activeRemoved);
172 void updateScrollBars();
173 void internalRaise(QMdiSubWindow *child) const;
174 bool scrollBarsEnabled() const;
175 bool lastWindowAboutToBeDestroyed() const;
176 void setChildActivationEnabled(bool enable = true, bool onlyNextActivationEvent = false) const;
177 QRect resizeToMinimumTileSize(const QSize &minSubWindowSize, int subWindowCount);
178 void scrollBarPolicyChanged(Qt::Orientation, Qt::ScrollBarPolicy) override; // reimp
179 QMdiSubWindow *nextVisibleSubWindow(int increaseFactor, QMdiArea::WindowOrder,
180 int removed = -1, int fromIndex = -1) const;
181 void highlightNextSubWindow(int increaseFactor);
182 QList<QMdiSubWindow *> subWindowList(QMdiArea::WindowOrder, bool reversed = false) const;
183 void disconnectSubWindow(QObject *subWindow);
184 void setViewMode(QMdiArea::ViewMode mode);
185#if QT_CONFIG(tabbar)
187 void refreshTabBar();
188#endif
189
190 inline void startResizeTimer()
191 {
192 Q_Q(QMdiArea);
193
194 using namespace std::chrono_literals;
195 resizeTimer.start(200ms, q);
196 }
197
199 {
200 Q_Q(QMdiArea);
201
202 using namespace std::chrono_literals;
203 tabToPreviousTimer.start(QApplication::keyboardInputInterval() * 1ms, q);
204 }
205
206 inline bool windowStaysOnTop(QMdiSubWindow *subWindow) const
207 {
208 if (!subWindow)
209 return false;
210 return subWindow->windowFlags() & Qt::WindowStaysOnTopHint;
211 }
212
213 inline bool isExplicitlyDeactivated(QMdiSubWindow *subWindow) const
214 {
215 if (!subWindow)
216 return true;
217 return subWindow->d_func()->isExplicitlyDeactivated;
218 }
219
220 inline void setActive(QMdiSubWindow *subWindow, bool active = true, bool changeFocus = true) const
221 {
222 if (subWindow)
223 subWindow->d_func()->setActive(active, changeFocus);
224 }
225
226#if QT_CONFIG(rubberband)
228
229 inline void hideRubberBand()
230 {
232 rubberBand->hide();
234 }
235#endif // QT_CONFIG(rubberband)
236};
237
238QT_END_NAMESPACE
239
240#endif // QMDIAREA_P_H
void internalRaise(QMdiSubWindow *child) const
void place(QMdi::Placer *placer, QMdiSubWindow *child)
Definition qmdiarea.cpp:845
void resetActiveWindow(QMdiSubWindow *child=nullptr)
QMdi::Rearranger * cascader
Definition qmdiarea_p.h:112
QMdi::Placer * placer
Definition qmdiarea_p.h:115
QPointer< QMdiSubWindow > aboutToBecomeActive
Definition qmdiarea_p.h:125
QMdi::Rearranger * regularTiler
Definition qmdiarea_p.h:113
void activateCurrentWindow()
Definition qmdiarea.cpp:979
QList< int > indicesToActivatedChildren
Definition qmdiarea_p.h:123
QBasicTimer tabToPreviousTimer
Definition qmdiarea_p.h:152
bool scrollBarsEnabled() const
void appendChild(QMdiSubWindow *child)
Definition qmdiarea.cpp:792
void activateHighlightedWindow()
Definition qmdiarea.cpp:988
void emitWindowActivated(QMdiSubWindow *child)
QMdi::Rearranger * iconTiler
Definition qmdiarea_p.h:114
QPointer< QMdiSubWindow > active
Definition qmdiarea_p.h:124
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:127
bool isExplicitlyDeactivated(QMdiSubWindow *subWindow) const
Definition qmdiarea_p.h:213
void arrangeMinimizedSubWindows()
Definition qmdiarea.cpp:940
QMdiAreaTabBar * tabBar
Definition qmdiarea_p.h:119
bool lastWindowAboutToBeDestroyed() const
QBasicTimer resizeTimer
Definition qmdiarea_p.h:151
bool ignoreGeometryChange
Definition qmdiarea_p.h:139
void activateWindow(QMdiSubWindow *child)
Definition qmdiarea.cpp:950
void highlightNextSubWindow(int increaseFactor)
QList< QMdi::Rearranger * > pendingRearrangements
Definition qmdiarea_p.h:120
QMdiArea::AreaOptions options
Definition qmdiarea_p.h:128
bool tileCalledFromResizeEvent
Definition qmdiarea_p.h:144
void disconnectSubWindow(QObject *subWindow)
void startTabToPreviousTimer()
Definition qmdiarea_p.h:198
void _q_moveTab(int from, int to)
Definition qmdiarea.cpp:768
bool windowStaysOnTop(QMdiSubWindow *subWindow) const
Definition qmdiarea_p.h:206
QList< QPointer< QMdiSubWindow > > pendingPlacements
Definition qmdiarea_p.h:121
void setActive(QMdiSubWindow *subWindow, bool active=true, bool changeFocus=true) const
Definition qmdiarea_p.h:220
bool ignoreWindowStateChange
Definition qmdiarea_p.h:140
void _q_currentTabChanged(int index)
Definition qmdiarea.cpp:733
bool updatesDisabledByUs
Definition qmdiarea_p.h:145
QList< QPointer< QMdiSubWindow > > childWindows
Definition qmdiarea_p.h:122
void _q_deactivateAllWindows(QMdiSubWindow *aboutToActivate=nullptr)
Definition qmdiarea.cpp:660
void scrollBarPolicyChanged(Qt::Orientation, Qt::ScrollBarPolicy) override
bool showActiveWindowMaximized
Definition qmdiarea_p.h:143
QMdiArea::ViewMode viewMode
Definition qmdiarea_p.h:129
void startResizeTimer()
Definition qmdiarea_p.h:190
int indexToPreviousWindow
Definition qmdiarea_p.h:148
void setViewMode(QMdiArea::ViewMode mode)
void updateActiveWindow(int removedIndex, bool activeRemoved)
void rearrange(QMdi::Rearranger *rearranger)
Definition qmdiarea.cpp:884
void setChildActivationEnabled(bool enable=true, bool onlyNextActivationEvent=false) const
void _q_closeTab(int index)
Definition qmdiarea.cpp:757
void _q_processWindowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState)
Definition qmdiarea.cpp:700
QMdiSubWindow * nextVisibleSubWindow(int increaseFactor, QMdiArea::WindowOrder, int removed=-1, int fromIndex=-1) const
Type type() const override
Definition qmdiarea_p.h:77
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:87
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:50
void rearrange(QList< QWidget * > &widgets, const QRect &domain) const override
Definition qmdiarea.cpp:245
Type type() const override
Definition qmdiarea_p.h:59
void rearrange(QList< QWidget * > &widgets, const QRect &domain) const override
Definition qmdiarea.cpp:289
Type type() const override
Definition qmdiarea_p.h:68
static bool sanityCheck(const QList< QWidget * > &widgets, const int index, const char *where)
Definition qmdiarea.cpp:158
static QString tabTextFor(QMdiSubWindow *subWindow)
Definition qmdiarea.cpp:226
static bool sanityCheck(const QMdiSubWindow *const child, const char *where)
Definition qmdiarea.cpp:147
static QMdiArea * mdiAreaParent(QWidget *widget)
Definition qmdiarea.cpp:208
static bool useScrollBar(const QRect &childrenRect, const QSize &maxViewportSize, Qt::Orientation orientation)
Definition qmdiarea.cpp:194
static void setIndex(int *index, int candidate, int min, int max, bool isIncreasing)
Definition qmdiarea.cpp:175
QString qt_setWindowTitle_helperHelper(const QString &, const QWidget *)
Returns a modified window title with the [*] place holder replaced according to the rules described i...
Definition qwidget.cpp:6051