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
qquicklabsplatformmenubar.cpp
Go to the documentation of this file.
1// Copyright (C) 2020 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
6
7#include <QtCore/qloggingcategory.h>
8#include <QtGui/qpa/qplatformmenu.h>
9#include <QtGui/qpa/qplatformtheme.h>
10#include <QtGui/private/qguiapplication_p.h>
11#include <QtQuick/qquickwindow.h>
12#include <QtQuick/qquickitem.h>
13
15
20
74Q_DECLARE_LOGGING_CATEGORY(qtLabsPlatformMenus)
75
77 : QObject(parent),
78 m_complete(false),
79 m_window(nullptr),
80 m_handle(nullptr)
81{
82 m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformMenuBar();
83 qCDebug(qtLabsPlatformMenus) << "MenuBar ->" << m_handle;
84}
85
87{
88 for (QQuickLabsPlatformMenu *menu : std::as_const(m_menus))
89 menu->setMenuBar(nullptr);
90 delete m_handle;
91 m_handle = nullptr;
92}
93
95{
96 return m_handle;
97}
98
109QQmlListProperty<QObject> QQuickLabsPlatformMenuBar::data()
110{
111 return QQmlListProperty<QObject>(this, nullptr, data_append, data_count, data_at, data_clear);
112}
113
119QQmlListProperty<QQuickLabsPlatformMenu> QQuickLabsPlatformMenuBar::menus()
120{
121 return QQmlListProperty<QQuickLabsPlatformMenu>(this, nullptr, menus_append, menus_count, menus_at, menus_clear);
122}
123
134{
135 return m_window;
136}
137
139{
140 if (m_window == window)
141 return;
142
143 if (m_handle)
144 m_handle->handleReparent(window);
145
146 m_window = window;
148}
149
159
166{
167 if (!menu || m_menus.contains(menu))
168 return;
169
170 QQuickLabsPlatformMenu *before = m_menus.value(index);
171 m_menus.insert(index, menu);
172 m_data.append(menu);
173 menu->setMenuBar(this);
174 if (m_handle)
175 m_handle->insertMenu(menu->create(), before ? before->handle() : nullptr);
176 menu->sync();
178}
179
186{
187 if (!menu || !m_menus.removeOne(menu))
188 return;
189
190 m_data.removeOne(menu);
191 if (m_handle)
192 m_handle->removeMenu(menu->handle());
193 menu->setMenuBar(nullptr);
195}
196
203{
204 if (m_menus.isEmpty())
205 return;
206
207 for (QQuickLabsPlatformMenu *menu : std::as_const(m_menus)) {
208 m_data.removeOne(menu);
209 if (m_handle)
210 m_handle->removeMenu(menu->handle());
211 menu->setMenuBar(nullptr);
212 delete menu;
213 }
214
215 m_menus.clear();
217}
218
222
224{
225 m_complete = true;
226 for (QQuickLabsPlatformMenu *menu : std::as_const(m_menus))
227 menu->sync();
228 if (!m_window)
230}
231
233{
234 QObject *obj = parent();
235 while (obj) {
237 if (window)
238 return window;
240 if (item && item->window())
241 return item->window();
242 obj = obj->parent();
243 }
244 return nullptr;
245}
246
247void QQuickLabsPlatformMenuBar::data_append(QQmlListProperty<QObject> *property, QObject *object)
248{
249 QQuickLabsPlatformMenuBar *menuBar = static_cast<QQuickLabsPlatformMenuBar *>(property->object);
250 QQuickLabsPlatformMenu *menu = qobject_cast<QQuickLabsPlatformMenu *>(object);
251 if (menu)
253 else
254 menuBar->m_data.append(object);
255}
256
258{
259 QQuickLabsPlatformMenuBar *menuBar = static_cast<QQuickLabsPlatformMenuBar *>(property->object);
260 return menuBar->m_data.size();
261}
262
264{
265 QQuickLabsPlatformMenuBar *menuBar = static_cast<QQuickLabsPlatformMenuBar *>(property->object);
266 return menuBar->m_data.value(index);
267}
268
269void QQuickLabsPlatformMenuBar::data_clear(QQmlListProperty<QObject> *property)
270{
271 QQuickLabsPlatformMenuBar *menuBar = static_cast<QQuickLabsPlatformMenuBar *>(property->object);
272 menuBar->m_data.clear();
273}
274
275void QQuickLabsPlatformMenuBar::menus_append(QQmlListProperty<QQuickLabsPlatformMenu> *property, QQuickLabsPlatformMenu *menu)
276{
277 QQuickLabsPlatformMenuBar *menuBar = static_cast<QQuickLabsPlatformMenuBar *>(property->object);
279}
280
281qsizetype QQuickLabsPlatformMenuBar::menus_count(QQmlListProperty<QQuickLabsPlatformMenu> *property)
282{
283 QQuickLabsPlatformMenuBar *menuBar = static_cast<QQuickLabsPlatformMenuBar *>(property->object);
284 return menuBar->m_menus.size();
285}
286
288{
289 QQuickLabsPlatformMenuBar *menuBar = static_cast<QQuickLabsPlatformMenuBar *>(property->object);
290 return menuBar->m_menus.value(index);
291}
292
293void QQuickLabsPlatformMenuBar::menus_clear(QQmlListProperty<QQuickLabsPlatformMenu> *property)
294{
295 QQuickLabsPlatformMenuBar *menuBar = static_cast<QQuickLabsPlatformMenuBar *>(property->object);
296 menuBar->clear();
297}
298
300
301#include "moc_qquicklabsplatformmenubar_p.cpp"
QGraphicsWidget * window() const
QGraphicsObject * parent
the parent of the item
static QPlatformTheme * platformTheme()
qsizetype size() const noexcept
Definition qlist.h:397
bool isEmpty() const noexcept
Definition qlist.h:401
iterator insert(qsizetype i, parameter_type t)
Definition qlist.h:488
bool removeOne(const AT &t)
Definition qlist.h:598
T value(qsizetype i) const
Definition qlist.h:664
void append(parameter_type t)
Definition qlist.h:458
void clear()
Definition qlist.h:434
QAction * addMenu(QMenu *menu)
Appends menu to the menu bar.
Definition qmenubar.cpp:768
void clear()
Removes all the actions from the menu bar.
Definition qmenubar.cpp:849
\inmodule QtCore
Definition qobject.h:103
QObject * parent() const
Returns a pointer to the parent object.
Definition qobject.h:346
virtual void removeMenu(QPlatformMenu *menu)=0
virtual void insertMenu(QPlatformMenu *menu, QPlatformMenu *before)=0
virtual void handleReparent(QWindow *newParentWindow)=0
The QQuickItem class provides the most basic of all visual items in \l {Qt Quick}.
Definition qquickitem.h:63
Q_INVOKABLE void removeMenu(QQuickLabsPlatformMenu *menu)
\qmlmethod void Qt.labs.platform::MenuBar::removeMenu(Menu menu)
static qsizetype data_count(QQmlListProperty< QObject > *property)
static qsizetype menus_count(QQmlListProperty< QQuickLabsPlatformMenu > *property)
Q_INVOKABLE void clear()
\qmlmethod void Qt.labs.platform::MenuBar::clear()
static void menus_clear(QQmlListProperty< QQuickLabsPlatformMenu > *property)
static QQuickLabsPlatformMenu * menus_at(QQmlListProperty< QQuickLabsPlatformMenu > *property, qsizetype index)
static QObject * data_at(QQmlListProperty< QObject > *property, qsizetype index)
static void data_append(QQmlListProperty< QObject > *property, QObject *object)
QQmlListProperty< QObject > data
\qmldefault \qmlproperty list<QtObject> Qt.labs.platform::MenuBar::data
void classBegin() override
Invoked after class creation, but before any properties have been set.
QQmlListProperty< QQuickLabsPlatformMenu > menus
\qmlproperty list<Menu> Qt.labs.platform::MenuBar::menus
Q_INVOKABLE void insertMenu(int index, QQuickLabsPlatformMenu *menu)
\qmlmethod void Qt.labs.platform::MenuBar::insertMenu(int index, Menu menu)
static void data_clear(QQmlListProperty< QObject > *property)
void componentComplete() override
Invoked after the root component that caused this instantiation has completed construction.
static void menus_append(QQmlListProperty< QQuickLabsPlatformMenu > *property, QQuickLabsPlatformMenu *menu)
Q_INVOKABLE void addMenu(QQuickLabsPlatformMenu *menu)
\qmlmethod void Qt.labs.platform::MenuBar::addMenu(Menu menu)
QPlatformMenuBar * handle() const
QPlatformMenu * handle() const
QSize size
the size of the widget excluding any window frame
Definition qwidget.h:113
void create(WId=0, bool initializeWindow=true, bool destroyOldWindow=true)
Creates a new widget window.
Definition qwidget.cpp:1156
\inmodule QtGui
Definition qwindow.h:63
Combined button and popup list for selecting options.
#define qCDebug(category,...)
#define Q_DECLARE_LOGGING_CATEGORY(name)
GLuint index
[2]
GLhandleARB obj
[2]
QQuickItem * qobject_cast< QQuickItem * >(QObject *o)
Definition qquickitem.h:492
#define emit
ptrdiff_t qsizetype
Definition qtypes.h:165
QWindow * qobject_cast< QWindow * >(QObject *o)
Definition qwindow.h:367
const char property[13]
Definition qwizard.cpp:101
QGraphicsItem * item
aWidget window() -> setWindowTitle("New Window Title")
[2]
QMenu menu
[5]
QMenuBar * menuBar
[0]
bool contains(const AT &t) const noexcept
Definition qlist.h:45