KDDockWidgets API Documentation 2.0
Loading...
Searching...
No Matches
DockRegistry.h
Go to the documentation of this file.
1/*
2 This file is part of KDDockWidgets.
3
4 SPDX-FileCopyrightText: 2019 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
5 Author: SĂ©rgio Martins <sergio.martins@kdab.com>
6
7 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
8
9 Contact KDAB at <info@kdab.com> for commercial licensing options.
10*/
11
12#ifndef KD_DOCKREGISTRY_P_H
13#define KD_DOCKREGISTRY_P_H
14
15#include "kddockwidgets/KDDockWidgets.h"
16#include "kddockwidgets/core/View.h"
17#include "kddockwidgets/QtCompat_p.h"
18#include "kddockwidgets/core/EventFilterInterface.h"
19
20#include <map>
21#include <memory>
22
28namespace KDDockWidgets {
29
30
31namespace Core {
32class FloatingWindow;
33class Layout;
34class SideBar;
35class SideBarGroupings;
36class MainWindow;
37class DockWidget;
38class Group;
39class MainWindowMDIViewInterface;
40class MainWindowViewInterface;
41class FocusScope;
42struct WindowBeingDragged;
43}
44
45
46class MainWindowMDI;
47
48class DOCKS_EXPORT DockRegistry : public Core::Object, public Core::EventFilterInterface
49{
50 Q_OBJECT
51
52public:
53 enum class DockByNameFlag {
54 None = 0,
55 ConsultRemapping = 1,
56 CreateIfNotFound =
57 2
58 };
59 Q_DECLARE_FLAGS(DockByNameFlags, DockByNameFlag)
60
61 static DockRegistry *self();
63 void registerDockWidget(Core::DockWidget *);
64 void unregisterDockWidget(Core::DockWidget *);
65
66 void registerMainWindow(Core::MainWindow *);
67 void unregisterMainWindow(Core::MainWindow *);
68
69 void registerFloatingWindow(Core::FloatingWindow *);
70 void unregisterFloatingWindow(Core::FloatingWindow *);
71
72 void registerLayout(Core::Layout *);
73 void unregisterLayout(Core::Layout *);
74
75 void registerGroup(Core::Group *);
76 void unregisterGroup(Core::Group *);
77
78 void registerLayoutSaver();
79 void unregisterLayoutSaver();
80
81 Q_INVOKABLE KDDockWidgets::Core::DockWidget *focusedDockWidget() const;
82
83 Q_INVOKABLE bool containsDockWidget(const QString &uniqueName) const;
84 Q_INVOKABLE bool containsMainWindow(const QString &uniqueName) const;
85
87 dockByName(const QString &, KDDockWidgets::DockRegistry::DockByNameFlags = {}) const;
88 Q_INVOKABLE KDDockWidgets::Core::MainWindow *mainWindowByName(const QString &) const;
89
90 bool isSane() const;
91
93 Vector<Core::DockWidget *> dockwidgets() const;
94
96 Vector<Core::DockWidget *> dockWidgets(const Vector<QString> &names);
97
100 Vector<Core::DockWidget *> closedDockwidgets(bool honourSkipped) const;
101
103 Vector<Core::MainWindow *> mainwindows() const;
104
108 Vector<Core::MainWindowViewInterface *> mainDockingAreas() const;
109
111 Vector<Core::MainWindow *> mainWindows(const Vector<QString> &names);
112
114 Vector<Core::Layout *> layouts() const;
115
117 Vector<Core::Group *> groups() const;
118
121 Vector<Core::FloatingWindow *>
122 floatingWindows(bool includeBeingDeleted = false, bool honourSkipped = false) const;
123
126 Vector<std::shared_ptr<Core::Window>> floatingQWindows() const;
127
129 Q_INVOKABLE bool hasFloatingWindows() const;
130
132 Core::FloatingWindow *
133 floatingWindowForHandle(std::shared_ptr<Core::Window> windowHandle) const;
134
136 Core::FloatingWindow *floatingWindowForHandle(Core::WId hwnd) const;
137
139 Core::MainWindow *mainWindowForHandle(std::shared_ptr<Core::Window> windowHandle) const;
140
152 Vector<std::shared_ptr<Core::Window>> topLevels(bool excludeFloatingDocks = false) const;
153
160 Q_INVOKABLE void clear(const Vector<QString> &affinities = {});
161
165 void clear(const Vector<Core::DockWidget *> &dockWidgets,
166 const Vector<Core::MainWindow *> &mainWindows,
167 const Vector<QString> &affinities);
168
175 void ensureAllFloatingWidgetsAreMorphed();
176
182 bool isEmpty(bool excludeBeingDeleted = false) const;
183
192 void checkSanityAll(bool dumpDebug = false);
193
197 Vector<Core::MainWindow *> mainWindowsWithAffinity(const Vector<QString> &affinities) const;
198
200 Core::Layout *layoutForItem(const Core::Item *) const;
201
204 bool itemIsInMainWindow(const Core::Item *) const;
205
206 bool affinitiesMatch(const Vector<QString> &affinities1, const Vector<QString> &affinities2) const;
207
209 Vector<QString> mainWindowsNames() const;
210
212 Vector<QString> dockWidgetNames() const;
213
219 bool isProbablyObscured(std::shared_ptr<Core::Window> target,
220 Core::FloatingWindow *exclude) const;
221
223 bool isProbablyObscured(std::shared_ptr<Core::Window> target, Core::WindowBeingDragged *exclude) const;
224
228 SideBarLocation sideBarLocationForDockWidget(const Core::DockWidget *) const;
229
231 Core::SideBar *sideBarForDockWidget(const Core::DockWidget *) const;
232
234 Core::Group *groupInMDIResize() const;
235
236 class Private;
237 Private *dptr() const;
238
239private:
240 friend class Core::FocusScope;
241 friend class Core::TitleBar;
242
243 explicit DockRegistry(Core::Object *parent = nullptr);
244 bool onDockWidgetPressed(Core::DockWidget *dw, MouseEvent *);
245 void onFocusedViewChanged(std::shared_ptr<Core::View> view);
246 void maybeDelete();
247 void setFocusedDockWidget(Core::DockWidget *);
248
249 // EventFilterInterface:
250 bool onExposeEvent(std::shared_ptr<Core::Window>) override;
251 bool onMouseButtonPress(Core::View *, MouseEvent *) override;
252
253 // To honour Config::Flag_AutoHideAsTabGroups:
254 void addSideBarGrouping(const Vector<Core::DockWidget *> &);
255 void removeSideBarGrouping(const Vector<Core::DockWidget *> &);
256 Vector<Core::DockWidget *> sideBarGroupingFor(Core::DockWidget *) const;
257
258 Private *const d;
259
260 Vector<Core::DockWidget *> m_dockWidgets;
261 Vector<Core::MainWindow *> m_mainWindows;
262 Vector<Core::Group *> m_groups;
263 Vector<Core::FloatingWindow *> m_floatingWindows;
264 Vector<Core::Layout *> m_layouts;
265
272 mutable std::map<QString, QString> m_dockWidgetIdRemapping;
273
274 // To honour Config::Flag_AutoHideAsTabGroups
275 Core::SideBarGroupings *const m_sideBarGroupings;
276};
277
278}
279
280#endif
The DockWidget base-class. DockWidget and Core::DockWidget are only split in two so we can share some...
Allows to implement a similar functionality to QtQuick's FocusScope item, in QtWidgets.
Definition FocusScope.h:31
The widget (QWidget or QQuickItem) which holds a layout of dock widgets.
Definition Layout.h:57
The MainWindow base-class. MainWindow and MainWindowBase are only split in two so we can share some c...
Core::FloatingWindow * floatingWindowForHandle(std::shared_ptr< Core::Window > windowHandle) const
returns the FloatingWindow with handle windowHandle
void clear(const Vector< Core::DockWidget * > &dockWidgets, const Vector< Core::MainWindow * > &mainWindows, const Vector< QString > &affinities)
clear Overload that only clears the specified dockWidgets and main windows.
bool isProbablyObscured(std::shared_ptr< Core::Window > target, Core::FloatingWindow *exclude) const
returns if the specified window has some other window on top (with higher Z) This is an approximation...
bool isProbablyObscured(std::shared_ptr< Core::Window > target, Core::WindowBeingDragged *exclude) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
Class to abstract QAction, so code still works with QtQuick and Flutter.
SideBarLocation
Each main window supports 4 sidebars.

© Klarälvdalens Datakonsult AB (KDAB)
"The Qt, C++ and OpenGL Experts"
https://www.kdab.com/
KDDockWidgets
Advanced Dock Widget Framework for Qt
https://www.kdab.com/development-resources/qt-tools/kddockwidgets/
Generated by doxygen 1.9.8