KDDockWidgets API Documentation 2.1
Loading...
Searching...
No Matches
MainWindowInstantiator.cpp
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
14#include "kddockwidgets/core/DockWidget.h"
15#include "kddockwidgets/core/MainWindow.h"
16#include "kddockwidgets/core/DockRegistry.h"
17
19#include "Platform.h"
20
21#include <QDebug>
22
23using namespace KDDockWidgets;
24using namespace KDDockWidgets::QtQuick;
25
29
31{
32 return m_uniqueName;
33}
34
36{
37 if (name != m_uniqueName) {
38 m_uniqueName = name;
39 Q_EMIT uniqueNameChanged();
40 }
41}
42
43MainWindowOptions MainWindowInstantiator::options() const
44{
45 return m_options;
46}
47
48void MainWindowInstantiator::setOptions(MainWindowOptions options)
49{
50 if (m_options != options) {
51 m_options = options;
52 Q_EMIT optionsChanged();
53 }
54}
55
57{
58 return m_mainWindow ? m_mainWindow->affinities() : QVector<QString>();
59}
60
62{
63 if (m_affinities != affinities) {
64 m_affinities = affinities;
65 Q_EMIT affinitiesChanged();
66 }
67}
68
70{
71 return m_mainWindow && m_mainWindow->isMDI();
72}
73
74void MainWindowInstantiator::addDockWidget(QQuickItem *dockWidget, Location location,
75 QQuickItem *relativeTo, QSize initialSize,
77{
78 if (!dockWidget || !m_mainWindow)
79 return;
80
82 if (!dw) {
83 // Can happen if the DockWidgetInstantiatior couldn't create a dockwidget,
84 // for example, if using duplicate unique-names
85 qWarning() << "MainWindowInstantiator::addDockWidget: Could not find dockwidget";
86 return;
87 }
88
89 Core::DockWidget *relativeToDw = Platform::dockWidgetForItem(relativeTo);
90
91 m_mainWindow->addDockWidget(dw, location, relativeToDw, { option, initialSize });
92}
93
95{
96 if (!dockWidget || !m_mainWindow)
97 return;
98
100 m_mainWindow->addDockWidgetAsTab(dw);
101}
102
104{
105 if (m_mainWindow)
106 m_mainWindow->layoutEqually();
107}
108
110{
111 if (!m_mainWindow || !dockWidget)
112 return;
113
115 m_mainWindow->layoutParentContainerEqually(dw);
116}
117
118void MainWindowInstantiator::moveToSideBar(QQuickItem *dockWidget)
119{
120 if (!m_mainWindow || !dockWidget)
121 return;
122
124 m_mainWindow->moveToSideBar(dw);
125}
126
128{
129 if (!m_mainWindow || !dockWidget)
130 return;
131
133 m_mainWindow->moveToSideBar(dw, loc);
134}
135
137{
138 if (!m_mainWindow || !dockWidget)
139 return;
140
142 m_mainWindow->restoreFromSideBar(dw);
143}
144
146{
147 if (!m_mainWindow || !dockWidget)
148 return;
149
151 m_mainWindow->overlayOnSideBar(dw);
152}
153
155{
156 if (!m_mainWindow || !dockWidget)
157 return;
158
160 m_mainWindow->toggleOverlayOnSideBar(dw);
161}
162
164{
165 if (m_mainWindow)
166 m_mainWindow->clearSideBarOverlay(deleteFrame);
167}
168
169// SideBar *MainWindowInstantiator::sideBarForDockWidget(const Core::DockWidget *dw) const
170// {
171// return m_mainWindow ? m_mainWindow->sideBarForDockWidget(dw) : nullptr;
172// }
173
175{
176 return m_mainWindow && m_mainWindow->sideBarIsVisible(loc);
177}
178
180{
181 return m_mainWindow && m_mainWindow->closeDockWidgets(force);
182}
183
185{
186 // Nothing interesting to do here.
187}
188
190{
191 if (m_uniqueName.isEmpty()) {
192 qWarning() << Q_FUNC_INFO
193 << "Each DockWidget need an unique name. Set the uniqueName property.";
194 return;
195 }
196
197 if (DockRegistry::self()->containsMainWindow(m_uniqueName)) {
198 // MainWindow already exists
199 return;
200 }
201
202 if (m_uniqueName.isEmpty()) {
203 qWarning() << Q_FUNC_INFO << "Name can't be empty";
204 return;
205 }
206
207 if (m_mainWindow) {
208 qWarning() << Q_FUNC_INFO << "Main window is already initialized";
209 return;
210 }
211
212 const auto mainWindowOptions = MainWindowOptions(m_options);
213
214 Core::View *view = nullptr;
215 if (mainWindowOptions & MainWindowOption_MDI)
216 view = new QtQuick::MainWindowMDI(m_uniqueName, this);
217 else
218 view = new QtQuick::MainWindow(m_uniqueName, mainWindowOptions, this);
219
220 m_mainWindow = view->asMainWindowController();
221 Q_ASSERT(m_mainWindow);
222
223 m_mainWindow->setAffinities(m_affinities);
224}
The DockWidget base-class. DockWidget and Core::DockWidget are only split in two so we can share some...
bool sideBarIsVisible(KDDockWidgets::SideBarLocation location) const
Returns whether the specified sidebar is visible.
void setAffinities(const Vector< QString > &names)
Sets the affinities names. Dock widgets can only dock into main windows of the same affinity.
void addDockWidgetAsTab(KDDockWidgets::Core::DockWidget *dockwidget)
Docks a DockWidget into the central group, tabbed.
void overlayOnSideBar(KDDockWidgets::Core::DockWidget *dw)
Shows the dock widget overlayed on top of the main window, placed next to the sidebar.
void toggleOverlayOnSideBar(KDDockWidgets::Core::DockWidget *dw)
Shows or hides an overlay. It's assumed the dock widget is already in a side-bar.
void layoutParentContainerEqually(KDDockWidgets::Core::DockWidget *dockWidget)
like layoutEqually() but starts with the container that has dockWidget. While layoutEqually() starts ...
void layoutEqually()
layouts all the widgets so they have an equal size within their parent container
void clearSideBarOverlay(bool deleteGroup=true)
closes any overlayed dock widget. The sidebar still displays them as button.
void moveToSideBar(KDDockWidgets::Core::DockWidget *dw)
Moves the dock widget into one of the MainWindow's sidebar. Means the dock widget is removed from the...
bool closeDockWidgets(bool force=false)
Closes all dock widgets which are docked into this main window This is convenience to calling DockWid...
bool isMDI() const
Returns whether this main window is using an MDI layout. In other words, returns true if MainWindowOp...
Vector< QString > affinities() const
Returns the list of affinity names. Empty by default.
void restoreFromSideBar(KDDockWidgets::Core::DockWidget *dw)
Removes the dock widget from the sidebar and docks it into the main window again.
void addDockWidget(KDDockWidgets::Core::DockWidget *dockWidget, KDDockWidgets::Location location, KDDockWidgets::Core::DockWidget *relativeTo=nullptr, const KDDockWidgets::InitialOption &initialOption={})
Docks a DockWidget into this main window.
Core::MainWindow * asMainWindowController() const
static DockRegistry * self()
Q_INVOKABLE void moveToSideBar(QQuickItem *)
Q_INVOKABLE void addDockWidget(QQuickItem *dockWidget, KDDockWidgets::Location location, QQuickItem *relativeTo=nullptr, QSize initialSize={}, KDDockWidgets::InitialVisibilityOption={})
See KDDockWidgets::Core::MainWindow::addDockWidget()
Q_INVOKABLE void restoreFromSideBar(QQuickItem *)
Q_INVOKABLE void addDockWidgetAsTab(QQuickItem *dockWidget)
See KDDockWidgets::Core::MainWindow::addDockWidgetAsTab()
Q_INVOKABLE void layoutParentContainerEqually(QQuickItem *dockWidget)
Q_INVOKABLE void overlayOnSideBar(QQuickItem *)
Q_INVOKABLE bool closeDockWidgets(bool force=false)
Q_INVOKABLE bool sideBarIsVisible(KDDockWidgets::SideBarLocation) const
void setAffinities(const QVector< QString > &)
KDDockWidgets::MainWindowOptions options
Q_INVOKABLE void clearSideBarOverlay(bool deleteFrame=true)
MainWindowInstantiator()
ctor, called by QML engine
Q_INVOKABLE void toggleOverlayOnSideBar(QQuickItem *)
void setOptions(KDDockWidgets::MainWindowOptions)
MainWindow sub-class which uses MDI as a layout.
A docking area for dock widgets Named MainWindow as it's the QtWidgets/QMainWindow counterpart....
static Core::DockWidget * dockWidgetForItem(QQuickItem *)
Class to abstract QAction, so code still works with QtQuick and Flutter.
@ MainWindowOption_MDI
‍Makes the MainWindow always have a central group, for tabbing documents
SideBarLocation
Each main window supports 4 sidebars.
bool isEmpty() const const

© 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