KDDockWidgets API Documentation 2.0
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 return m_mainWindow && m_mainWindow->isMDI();
64}
65
66void MainWindowInstantiator::addDockWidget(QQuickItem *dockWidget, Location location,
67 QQuickItem *relativeTo, QSize initialSize,
69{
70 if (!dockWidget || !m_mainWindow)
71 return;
72
74 if (!dw) {
75 // Can happen if the DockWidgetInstantiatior couldn't create a dockwidget,
76 // for example, if using duplicate unique-names
77 qWarning() << "MainWindowInstantiator::addDockWidget: Could not find dockwidget";
78 return;
79 }
80
81 Core::DockWidget *relativeToDw = Platform::dockWidgetForItem(relativeTo);
82
83 m_mainWindow->addDockWidget(dw, location, relativeToDw, { option, initialSize });
84}
85
87{
88 if (!dockWidget || !m_mainWindow)
89 return;
90
92 m_mainWindow->addDockWidgetAsTab(dw);
93}
94
96{
97 if (m_mainWindow)
98 m_mainWindow->layoutEqually();
99}
100
102{
103 if (!m_mainWindow || !dockWidget)
104 return;
105
107 m_mainWindow->layoutParentContainerEqually(dw);
108}
109
110void MainWindowInstantiator::moveToSideBar(QQuickItem *dockWidget)
111{
112 if (!m_mainWindow || !dockWidget)
113 return;
114
116 m_mainWindow->moveToSideBar(dw);
117}
118
120{
121 if (!m_mainWindow || !dockWidget)
122 return;
123
125 m_mainWindow->moveToSideBar(dw, loc);
126}
127
129{
130 if (!m_mainWindow || !dockWidget)
131 return;
132
134 m_mainWindow->restoreFromSideBar(dw);
135}
136
138{
139 if (!m_mainWindow || !dockWidget)
140 return;
141
143 m_mainWindow->overlayOnSideBar(dw);
144}
145
147{
148 if (!m_mainWindow || !dockWidget)
149 return;
150
152 m_mainWindow->toggleOverlayOnSideBar(dw);
153}
154
156{
157 if (m_mainWindow)
158 m_mainWindow->clearSideBarOverlay(deleteFrame);
159}
160
161// SideBar *MainWindowInstantiator::sideBarForDockWidget(const Core::DockWidget *dw) const
162// {
163// return m_mainWindow ? m_mainWindow->sideBarForDockWidget(dw) : nullptr;
164// }
165
167{
168 return m_mainWindow && m_mainWindow->sideBarIsVisible(loc);
169}
170
172{
173 return m_mainWindow && m_mainWindow->closeDockWidgets(force);
174}
175
177{
178 // Nothing interesting to do here.
179}
180
182{
183 if (m_uniqueName.isEmpty()) {
184 qWarning() << Q_FUNC_INFO
185 << "Each DockWidget need an unique name. Set the uniqueName property.";
186 return;
187 }
188
189 if (DockRegistry::self()->containsMainWindow(m_uniqueName)) {
190 // MainWindow already exists
191 return;
192 }
193
194 if (m_uniqueName.isEmpty()) {
195 qWarning() << Q_FUNC_INFO << "Name can't be empty";
196 return;
197 }
198
199 if (m_mainWindow) {
200 qWarning() << Q_FUNC_INFO << "Main window is already initialized";
201 return;
202 }
203
204 const auto mainWindowOptions = MainWindowOptions(m_options);
205
206 Core::View *view = nullptr;
207 if (mainWindowOptions & MainWindowOption_MDI)
208 view = new QtQuick::MainWindowMDI(m_uniqueName, this);
209 else
210 view = new QtQuick::MainWindow(m_uniqueName, mainWindowOptions, this);
211
212 m_mainWindow = view->asMainWindowController();
213}
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 clearSideBarOverlay(bool deleteFrame=true)
closes any overlayed dock widget. The sidebar still displays them as button.
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 addDockWidget(KDDockWidgets::Core::DockWidget *dockWidget, KDDockWidgets::Location location, KDDockWidgets::Core::DockWidget *relativeTo=nullptr, KDDockWidgets::InitialOption initialOption={})
Docks a DockWidget into this main window.
void layoutEqually()
layouts all the widgets so they have an equal size within their parent container
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.
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
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