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
qquicklabsplatformmenuitemgroup.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
8
13
104 : QObject(parent), m_enabled(true), m_visible(true), m_exclusive(true), m_checkedItem(nullptr)
105{
106}
107
112
122{
123 return m_enabled;
124}
125
127{
128 if (m_enabled == enabled)
129 return;
130
131 m_enabled = enabled;
133
134 for (QQuickLabsPlatformMenuItem *item : std::as_const(m_items)) {
135 if (item->m_enabled) {
136 item->sync();
137 emit item->enabledChanged();
138 }
139 }
140}
141
151{
152 return m_visible;
153}
154
156{
157 if (m_visible == visible)
158 return;
159
160 m_visible = visible;
162
163 for (QQuickLabsPlatformMenuItem *item : std::as_const(m_items)) {
164 if (item->m_visible) {
165 item->sync();
166 emit item->visibleChanged();
167 }
168 }
169}
170
180{
181 return m_exclusive;
182}
183
185{
186 if (m_exclusive == exclusive)
187 return;
188
189 m_exclusive = exclusive;
191
192 for (QQuickLabsPlatformMenuItem *item : std::as_const(m_items))
193 item->sync();
194}
195
205
207{
208 if (m_checkedItem == item)
209 return;
210
211 if (m_checkedItem)
212 m_checkedItem->setChecked(false);
213
214 m_checkedItem = item;
216
217 if (item)
218 item->setChecked(true);
219}
220
226QQmlListProperty<QQuickLabsPlatformMenuItem> QQuickLabsPlatformMenuItemGroup::items()
227{
228 return QQmlListProperty<QQuickLabsPlatformMenuItem>(this, nullptr, items_append, items_count, items_at, items_clear);
229}
230
237{
238 if (!item || m_items.contains(item))
239 return;
240
241 m_items.append(item);
242 item->setGroup(this);
243
244 connect(item, &QQuickLabsPlatformMenuItem::checkedChanged, this, &QQuickLabsPlatformMenuItemGroup::updateCurrent);
245 connect(item, &QQuickLabsPlatformMenuItem::triggered, this, &QQuickLabsPlatformMenuItemGroup::activateItem);
246 connect(item, &QQuickLabsPlatformMenuItem::hovered, this, &QQuickLabsPlatformMenuItemGroup::hoverItem);
247
248 if (m_exclusive && item->isChecked())
250
252}
253
260{
261 if (!item || !m_items.contains(item))
262 return;
263
264 m_items.removeOne(item);
265 item->setGroup(nullptr);
266
267 disconnect(item, &QQuickLabsPlatformMenuItem::checkedChanged, this, &QQuickLabsPlatformMenuItemGroup::updateCurrent);
268 disconnect(item, &QQuickLabsPlatformMenuItem::triggered, this, &QQuickLabsPlatformMenuItemGroup::activateItem);
269 disconnect(item, &QQuickLabsPlatformMenuItem::hovered, this, &QQuickLabsPlatformMenuItemGroup::hoverItem);
270
271 if (m_checkedItem == item)
272 setCheckedItem(nullptr);
273
275}
276
283{
284 if (m_items.isEmpty())
285 return;
286
287 for (QQuickLabsPlatformMenuItem *item : std::as_const(m_items)) {
288 item->setGroup(nullptr);
289 disconnect(item, &QQuickLabsPlatformMenuItem::checkedChanged, this, &QQuickLabsPlatformMenuItemGroup::updateCurrent);
290 disconnect(item, &QQuickLabsPlatformMenuItem::triggered, this, &QQuickLabsPlatformMenuItemGroup::activateItem);
291 disconnect(item, &QQuickLabsPlatformMenuItem::hovered, this, &QQuickLabsPlatformMenuItemGroup::hoverItem);
292 }
293
294 setCheckedItem(nullptr);
295
296 m_items.clear();
298}
299
300QQuickLabsPlatformMenuItem *QQuickLabsPlatformMenuItemGroup::findCurrent() const
301{
302 for (QQuickLabsPlatformMenuItem *item : m_items) {
303 if (item->isChecked())
304 return item;
305 }
306 return nullptr;
307}
308
309void QQuickLabsPlatformMenuItemGroup::updateCurrent()
310{
311 if (!m_exclusive)
312 return;
313
314 QQuickLabsPlatformMenuItem *item = qobject_cast<QQuickLabsPlatformMenuItem*>(sender());
315 if (item && item->isChecked())
317}
318
319void QQuickLabsPlatformMenuItemGroup::activateItem()
320{
321 QQuickLabsPlatformMenuItem *item = qobject_cast<QQuickLabsPlatformMenuItem*>(sender());
322 if (item)
324}
325
326void QQuickLabsPlatformMenuItemGroup::hoverItem()
327{
328 QQuickLabsPlatformMenuItem *item = qobject_cast<QQuickLabsPlatformMenuItem*>(sender());
329 if (item)
331}
332
333void QQuickLabsPlatformMenuItemGroup::items_append(QQmlListProperty<QQuickLabsPlatformMenuItem> *prop, QQuickLabsPlatformMenuItem *item)
334{
337}
338
339qsizetype QQuickLabsPlatformMenuItemGroup::items_count(QQmlListProperty<QQuickLabsPlatformMenuItem> *prop)
340{
342 return group->m_items.size();
343}
344
345QQuickLabsPlatformMenuItem *QQuickLabsPlatformMenuItemGroup::items_at(QQmlListProperty<QQuickLabsPlatformMenuItem> *prop, qsizetype index)
346{
348 return group->m_items.value(index);
349}
350
351void QQuickLabsPlatformMenuItemGroup::items_clear(QQmlListProperty<QQuickLabsPlatformMenuItem> *prop)
352{
354 group->clear();
355}
356
358
359#include "moc_qquicklabsplatformmenuitemgroup_p.cpp"
void setGroup(QGraphicsItemGroup *group)
Adds this item to the item group group.
qsizetype size() const noexcept
Definition qlist.h:397
bool isEmpty() const noexcept
Definition qlist.h:401
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
\inmodule QtCore
Definition qobject.h:103
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2960
QObject * sender() const
Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; othe...
Definition qobject.cpp:2658
QQmlListProperty< QQuickLabsPlatformMenuItem > items
\qmlproperty list<MenuItem> Qt.labs.platform::MenuItemGroup::items
Q_INVOKABLE void removeItem(QQuickLabsPlatformMenuItem *item)
\qmlmethod void Qt.labs.platform::MenuItemGroup::removeItem(MenuItem item)
Q_INVOKABLE void clear()
\qmlmethod void Qt.labs.platform::MenuItemGroup::clear()
void setCheckedItem(QQuickLabsPlatformMenuItem *item)
QQuickLabsPlatformMenuItemGroup(QObject *parent=nullptr)
A group for managing native menu items.
void hovered(QQuickLabsPlatformMenuItem *item)
void triggered(QQuickLabsPlatformMenuItem *item)
bool isEnabled() const
\qmlproperty bool Qt.labs.platform::MenuItemGroup::enabled
bool isVisible() const
\qmlproperty bool Qt.labs.platform::MenuItemGroup::visible
Q_INVOKABLE void addItem(QQuickLabsPlatformMenuItem *item)
\qmlmethod void Qt.labs.platform::MenuItemGroup::addItem(MenuItem item)
bool isExclusive() const
\qmlproperty bool Qt.labs.platform::MenuItemGroup::exclusive
Combined button and popup list for selecting options.
GLuint index
[2]
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLboolean GLuint group
#define emit
ptrdiff_t qsizetype
Definition qtypes.h:165
QObject::connect nullptr
myObject disconnect()
[26]
QGraphicsItem * item
bool contains(const AT &t) const noexcept
Definition qlist.h:45