Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qandroidplatformmenu.cpp
Go to the documentation of this file.
1// Copyright (C) 2012 BogDan Vatra <bogdan@kde.org>
2// Copyright (C) 2021 The Qt Company Ltd.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4// Qt-Security score:significant reason:default
5
9
10#include <QtCore/qjnienvironment.h>
11#include <QtCore/qjniobject.h>
12
14
15QAndroidPlatformMenu::QAndroidPlatformMenu()
16{
17 m_enabled = true;
18 m_isVisible = true;
19}
20
25
26void QAndroidPlatformMenu::insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before)
27{
28 QMutexLocker lock(&m_menuItemsMutex);
29 m_menuItems.insert(std::find(m_menuItems.begin(),
30 m_menuItems.end(),
31 static_cast<QAndroidPlatformMenuItem *>(before)),
32 static_cast<QAndroidPlatformMenuItem *>(menuItem));
33 m_menuHash.insert(m_nextMenuId++, menuItem);
34}
35
36void QAndroidPlatformMenu::removeMenuItem(QPlatformMenuItem *menuItem)
37{
38 QMutexLocker lock(&m_menuItemsMutex);
39 PlatformMenuItemsType::iterator it = std::find(m_menuItems.begin(),
40 m_menuItems.end(),
41 static_cast<QAndroidPlatformMenuItem *>(menuItem));
42 if (it != m_menuItems.end())
43 m_menuItems.erase(it);
44
45 {
46 int maxId = -1;
47 QHash<int, QPlatformMenuItem *>::iterator it = m_menuHash.begin();
48 while (it != m_menuHash.end()) {
49 if (it.value() == menuItem) {
50 it = m_menuHash.erase(it);
51 } else {
52 maxId = qMax(maxId, it.key());
53 ++it;
54 }
55 }
56
57 m_nextMenuId = maxId + 1;
58 }
59}
60
61void QAndroidPlatformMenu::syncMenuItem(QPlatformMenuItem *menuItem)
62{
63 PlatformMenuItemsType::iterator it;
64 for (it = m_menuItems.begin(); it != m_menuItems.end(); ++it) {
65 if ((*it)->tag() == menuItem->tag())
66 break;
67 }
68
69 if (it != m_menuItems.end())
71}
72
74{
75 Q_UNUSED(enable);
76}
77
78void QAndroidPlatformMenu::setText(const QString &text)
79{
80 m_text = text;
81}
82
84{
85 return m_text;
86}
87
88void QAndroidPlatformMenu::setIcon(const QIcon &icon)
89{
90 m_icon = icon;
91}
92
94{
95 return m_icon;
96}
97
99{
100 m_enabled = enabled;
101}
102
104{
105 return m_enabled;
106}
107
109{
110 m_isVisible = visible;
111}
112
114{
115 return m_isVisible;
116}
117
118void QAndroidPlatformMenu::showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item)
119{
120 Q_UNUSED(parentWindow);
121 Q_UNUSED(item);
122 setVisible(true);
124}
125
127{
128 for (QAndroidPlatformMenuItem *menuItem : m_menuItems) {
129 if (menuItem->tag() == tag)
130 return menuItem;
131 }
132
133 return nullptr;
134}
135
137{
138 if (position < m_menuItems.size())
139 return m_menuItems[position];
140 return 0;
141}
142
143int QAndroidPlatformMenu::menuId(QPlatformMenuItem *menu) const
144{
145 QHash<int, QPlatformMenuItem *>::const_iterator it;
146 for (it = m_menuHash.constBegin(); it != m_menuHash.constEnd(); ++it) {
147 if (it.value() == menu)
148 return it.key();
149 }
150
151 return -1;
152}
153
155{
156 return m_menuHash.value(menuId);
157}
158
163
165{
166 return &m_menuItemsMutex;
167}
168
169QT_END_NAMESPACE
void syncMenuItem(QPlatformMenuItem *menuItem) override
void removeMenuItem(QPlatformMenuItem *menuItem) override
int menuId(QPlatformMenuItem *menuItem) const
QPlatformMenuItem * menuItemForTag(quintptr tag) const override
QPlatformMenuItem * menuItemForId(int menuId) const
void showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item) override
QList< QAndroidPlatformMenuItem * > PlatformMenuItemsType
void insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before) override
void syncSeparatorsCollapsible(bool enable) override
bool isEnabled() const override
void setIcon(const QIcon &icon) override
void setEnabled(bool enabled) override
void setVisible(bool visible) override
QPlatformMenuItem * menuItemAt(int position) const override
PlatformMenuItemsType menuItems() const
\inmodule QtCore
Definition qmutex.h:346
Combined button and popup list for selecting options.
void syncMenu(QAndroidPlatformMenu *)
void androidPlatformMenuDestroyed(QAndroidPlatformMenu *menu)
void showContextMenu(QAndroidPlatformMenu *menu, const QRect &anchorRect)