Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
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
32#include <QtCore/qpointer.h>
33
35
36namespace QMdi {
38{
39public:
45
46 // Rearranges widgets relative to domain.
47 virtual void rearrange(QList<QWidget *> &widgets, const QRect &domain) const = 0;
48 virtual Type type() const = 0;
49 virtual ~Rearranger() {}
50};
51
53{
54 // Rearranges widgets according to a regular tiling pattern
55 // covering the entire domain.
56 // Both positions and sizes may change.
57 void rearrange(QList<QWidget *> &widgets, const QRect &domain) const override;
58 Type type() const override { return Rearranger::RegularTiler; }
59};
60
62{
63 // Rearranges widgets according to a simple, regular cascading pattern.
64 // Widgets are resized to minimumSize.
65 // Both positions and sizes may change.
66 void rearrange(QList<QWidget *> &widgets, const QRect &domain) const override;
67 Type type() const override { return Rearranger::SimpleCascader; }
68};
69
70class IconTiler : public Rearranger
71{
72 // Rearranges icons (assumed to be the same size) according to a regular
73 // tiling pattern filling up the domain from the bottom.
74 // Only positions may change.
75 void rearrange(QList<QWidget *> &widgets, const QRect &domain) const override;
76 Type type() const override { return Rearranger::IconTiler; }
77};
78
79class Placer
80{
81public:
82 // Places the rectangle defined by 'size' relative to 'rects' and 'domain'.
83 // Returns the position of the resulting rectangle.
84 virtual QPoint place(const QSize &size, const QList<QRect> &rects,
85 const QRect &domain) const = 0;
86 virtual ~Placer() {}
87};
88
90{
91 QPoint place(const QSize &size, const QList<QRect> &rects, const QRect &domain) const override;
92 static int accumulatedOverlap(const QRect &source, const QList<QRect> &rects);
93 static QRect findMinOverlapRect(const QList<QRect> &source, const QList<QRect> &rects);
94 static QList<QRect> getCandidatePlacements(const QSize &size, const QList<QRect> &rects,
95 const QRect &domain);
96 static QPoint findBestPlacement(const QRect &domain, const QList<QRect> &rects,
97 QList<QRect> &source);
98 static QList<QRect> findNonInsiders(const QRect &domain, QList<QRect> &source);
99 static QList<QRect> findMaxOverlappers(const QRect &domain, const QList<QRect> &source);
100};
101} // namespace QMdi
102
103class QMdiAreaTabBar;
104class QMdiAreaPrivate : public QAbstractScrollAreaPrivate
105{
106 Q_DECLARE_PUBLIC(QMdiArea)
107public:
109
110 // Variables.
115#if QT_CONFIG(rubberband)
116 QRubberBand *rubberBand;
117#endif
118 QMdiAreaTabBar *tabBar;
119 QList<QMdi::Rearranger *> pendingRearrangements;
120 QList<QPointer<QMdiSubWindow>> pendingPlacements;
121 QList<QPointer<QMdiSubWindow>> childWindows;
123 QPointer<QMdiSubWindow> active;
124 QPointer<QMdiSubWindow> aboutToBecomeActive;
127 QMdiArea::AreaOptions options;
129#if QT_CONFIG(tabbar)
130 bool documentMode;
131 bool tabsClosable;
132 bool tabsMovable;
133#endif
134#if QT_CONFIG(tabwidget)
135 QTabWidget::TabShape tabShape;
136 QTabWidget::TabPosition tabPosition;
137#endif
152
153 // Slots.
154 void _q_deactivateAllWindows(QMdiSubWindow *aboutToActivate = nullptr);
155 void _q_processWindowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState);
156 void _q_currentTabChanged(int index);
157 void _q_closeTab(int index);
158 void _q_moveTab(int from, int to);
159
160 // Functions.
163 void rearrange(QMdi::Rearranger *rearranger);
169 void resetActiveWindow(QMdiSubWindow *child = nullptr);
170 void updateActiveWindow(int removedIndex, bool activeRemoved);
171 void updateScrollBars();
172 void internalRaise(QMdiSubWindow *child) const;
173 bool scrollBarsEnabled() const;
174 bool lastWindowAboutToBeDestroyed() const;
175 void setChildActivationEnabled(bool enable = true, bool onlyNextActivationEvent = false) const;
176 QRect resizeToMinimumTileSize(const QSize &minSubWindowSize, int subWindowCount);
179 int removed = -1, int fromIndex = -1) const;
180 void highlightNextSubWindow(int increaseFactor);
181 QList<QMdiSubWindow *> subWindowList(QMdiArea::WindowOrder, bool reversed = false) const;
182 void disconnectSubWindow(QObject *subWindow);
184#if QT_CONFIG(tabbar)
185 void updateTabBarGeometry();
186 void refreshTabBar();
187#endif
188
189 inline void startResizeTimer()
190 {
191 Q_Q(QMdiArea);
192 if (resizeTimerId > 0)
193 q->killTimer(resizeTimerId);
194 resizeTimerId = q->startTimer(200);
195 }
196
198 {
199 Q_Q(QMdiArea);
200 if (tabToPreviousTimerId > 0)
201 q->killTimer(tabToPreviousTimerId);
203 }
204
205 inline bool windowStaysOnTop(QMdiSubWindow *subWindow) const
206 {
207 if (!subWindow)
208 return false;
209 return subWindow->windowFlags() & Qt::WindowStaysOnTopHint;
210 }
211
212 inline bool isExplicitlyDeactivated(QMdiSubWindow *subWindow) const
213 {
214 if (!subWindow)
215 return true;
216 return subWindow->d_func()->isExplicitlyDeactivated;
217 }
218
219 inline void setActive(QMdiSubWindow *subWindow, bool active = true, bool changeFocus = true) const
220 {
221 if (subWindow)
222 subWindow->d_func()->setActive(active, changeFocus);
223 }
224
225#if QT_CONFIG(rubberband)
226 void showRubberBandFor(QMdiSubWindow *subWindow);
227
228 inline void hideRubberBand()
229 {
230 if (rubberBand && rubberBand->isVisible())
231 rubberBand->hide();
233 }
234#endif // QT_CONFIG(rubberband)
235};
236
238
239#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
void internalRaise(QMdiSubWindow *child) const
void place(QMdi::Placer *placer, QMdiSubWindow *child)
Definition qmdiarea.cpp:836
void resetActiveWindow(QMdiSubWindow *child=nullptr)
QMdi::Rearranger * cascader
Definition qmdiarea_p.h:111
QMdi::Placer * placer
Definition qmdiarea_p.h:114
QPointer< QMdiSubWindow > aboutToBecomeActive
Definition qmdiarea_p.h:124
QMdi::Rearranger * regularTiler
Definition qmdiarea_p.h:112
void activateCurrentWindow()
Definition qmdiarea.cpp:970
QList< int > indicesToActivatedChildren
Definition qmdiarea_p.h:122
bool scrollBarsEnabled() const
void appendChild(QMdiSubWindow *child)
Definition qmdiarea.cpp:783
void activateHighlightedWindow()
Definition qmdiarea.cpp:979
void emitWindowActivated(QMdiSubWindow *child)
Definition qmdiarea.cpp:997
QMdi::Rearranger * iconTiler
Definition qmdiarea_p.h:113
QPointer< QMdiSubWindow > active
Definition qmdiarea_p.h:123
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:126
bool isExplicitlyDeactivated(QMdiSubWindow *subWindow) const
Definition qmdiarea_p.h:212
void arrangeMinimizedSubWindows()
Definition qmdiarea.cpp:931
QMdiAreaTabBar * tabBar
Definition qmdiarea_p.h:118
bool lastWindowAboutToBeDestroyed() const
bool ignoreGeometryChange
Definition qmdiarea_p.h:138
void activateWindow(QMdiSubWindow *child)
Definition qmdiarea.cpp:941
void highlightNextSubWindow(int increaseFactor)
QList< QMdi::Rearranger * > pendingRearrangements
Definition qmdiarea_p.h:119
QMdiArea::AreaOptions options
Definition qmdiarea_p.h:127
bool tileCalledFromResizeEvent
Definition qmdiarea_p.h:143
void disconnectSubWindow(QObject *subWindow)
void startTabToPreviousTimer()
Definition qmdiarea_p.h:197
void _q_moveTab(int from, int to)
Definition qmdiarea.cpp:770
bool windowStaysOnTop(QMdiSubWindow *subWindow) const
Definition qmdiarea_p.h:205
QList< QPointer< QMdiSubWindow > > pendingPlacements
Definition qmdiarea_p.h:120
void setActive(QMdiSubWindow *subWindow, bool active=true, bool changeFocus=true) const
Definition qmdiarea_p.h:219
bool ignoreWindowStateChange
Definition qmdiarea_p.h:139
void _q_currentTabChanged(int index)
Definition qmdiarea.cpp:735
bool updatesDisabledByUs
Definition qmdiarea_p.h:144
QList< QPointer< QMdiSubWindow > > childWindows
Definition qmdiarea_p.h:121
void _q_deactivateAllWindows(QMdiSubWindow *aboutToActivate=nullptr)
Definition qmdiarea.cpp:662
void scrollBarPolicyChanged(Qt::Orientation, Qt::ScrollBarPolicy) override
bool showActiveWindowMaximized
Definition qmdiarea_p.h:142
QMdiArea::ViewMode viewMode
Definition qmdiarea_p.h:128
void startResizeTimer()
Definition qmdiarea_p.h:189
int indexToPreviousWindow
Definition qmdiarea_p.h:147
void setViewMode(QMdiArea::ViewMode mode)
void updateActiveWindow(int removedIndex, bool activeRemoved)
void rearrange(QMdi::Rearranger *rearranger)
Definition qmdiarea.cpp:875
void setChildActivationEnabled(bool enable=true, bool onlyNextActivationEvent=false) const
void _q_closeTab(int index)
Definition qmdiarea.cpp:759
void _q_processWindowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState)
Definition qmdiarea.cpp:702
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:76
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:86
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:49
void rearrange(QList< QWidget * > &widgets, const QRect &domain) const override
Definition qmdiarea.cpp:245
Type type() const override
Definition qmdiarea_p.h:58
void rearrange(QList< QWidget * > &widgets, const QRect &domain) const override
Definition qmdiarea.cpp:289
Type type() const override
Definition qmdiarea_p.h:67
\inmodule QtCore
Definition qobject.h:103
\inmodule QtCore\reentrant
Definition qpoint.h:25
\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
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:98
ScrollBarPolicy
@ WindowStaysOnTopHint
Definition qnamespace.h:233
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:23