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
8
9#include <QtCore/qjnienvironment.h>
10#include <QtCore/qjniobject.h>
11
13
14QAndroidPlatformMenu::QAndroidPlatformMenu()
15{
16 m_enabled = true;
17 m_isVisible = true;
18}
19
24
25void QAndroidPlatformMenu::insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before)
26{
27 QMutexLocker lock(&m_menuItemsMutex);
28 m_menuItems.insert(std::find(m_menuItems.begin(),
29 m_menuItems.end(),
30 static_cast<QAndroidPlatformMenuItem *>(before)),
31 static_cast<QAndroidPlatformMenuItem *>(menuItem));
32 m_menuHash.insert(m_nextMenuId++, menuItem);
33}
34
35void QAndroidPlatformMenu::removeMenuItem(QPlatformMenuItem *menuItem)
36{
37 QMutexLocker lock(&m_menuItemsMutex);
38 PlatformMenuItemsType::iterator it = std::find(m_menuItems.begin(),
39 m_menuItems.end(),
40 static_cast<QAndroidPlatformMenuItem *>(menuItem));
41 if (it != m_menuItems.end())
42 m_menuItems.erase(it);
43
44 {
45 int maxId = -1;
46 QHash<int, QPlatformMenuItem *>::iterator it = m_menuHash.begin();
47 while (it != m_menuHash.end()) {
48 if (it.value() == menuItem) {
49 it = m_menuHash.erase(it);
50 } else {
51 maxId = qMax(maxId, it.key());
52 ++it;
53 }
54 }
55
56 m_nextMenuId = maxId + 1;
57 }
58}
59
60void QAndroidPlatformMenu::syncMenuItem(QPlatformMenuItem *menuItem)
61{
62 PlatformMenuItemsType::iterator it;
63 for (it = m_menuItems.begin(); it != m_menuItems.end(); ++it) {
64 if ((*it)->tag() == menuItem->tag())
65 break;
66 }
67
68 if (it != m_menuItems.end())
70}
71
73{
74 Q_UNUSED(enable);
75}
76
77void QAndroidPlatformMenu::setText(const QString &text)
78{
79 m_text = text;
80}
81
83{
84 return m_text;
85}
86
87void QAndroidPlatformMenu::setIcon(const QIcon &icon)
88{
89 m_icon = icon;
90}
91
93{
94 return m_icon;
95}
96
98{
99 m_enabled = enabled;
100}
101
103{
104 return m_enabled;
105}
106
108{
109 m_isVisible = visible;
110}
111
113{
114 return m_isVisible;
115}
116
117void QAndroidPlatformMenu::showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item)
118{
119 Q_UNUSED(parentWindow);
120 Q_UNUSED(item);
121 setVisible(true);
123}
124
126{
127 for (QAndroidPlatformMenuItem *menuItem : m_menuItems) {
128 if (menuItem->tag() == tag)
129 return menuItem;
130 }
131
132 return nullptr;
133}
134
136{
137 if (position < m_menuItems.size())
138 return m_menuItems[position];
139 return 0;
140}
141
142int QAndroidPlatformMenu::menuId(QPlatformMenuItem *menu) const
143{
144 QHash<int, QPlatformMenuItem *>::const_iterator it;
145 for (it = m_menuHash.constBegin(); it != m_menuHash.constEnd(); ++it) {
146 if (it.value() == menu)
147 return it.key();
148 }
149
150 return -1;
151}
152
154{
155 return m_menuHash.value(menuId);
156}
157
162
164{
165 return &m_menuItemsMutex;
166}
167
168QT_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
void syncMenu(QAndroidPlatformMenu *)
void androidPlatformMenuDestroyed(QAndroidPlatformMenu *menu)
void showContextMenu(QAndroidPlatformMenu *menu, const QRect &anchorRect)