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
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
5#include "androidjnimenu.h"
8
9#include <QtCore/qjnienvironment.h>
10#include <QtCore/qjniobject.h>
11
13
15{
16 m_enabled = true;
17 m_isVisible = true;
18}
19
24
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
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;
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
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
76
78{
79 m_text = text;
80}
81
83{
84 return m_text;
85}
86
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);
122 QtAndroidMenu::showContextMenu(this, targetRect);
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
143{
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
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
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
void setText(const QString &text) override
QPlatformMenuItem * menuItemAt(int position) const override
PlatformMenuItemsType menuItems() const
\inmodule QtCore
Definition qhash.h:1145
\inmodule QtCore
Definition qhash.h:1103
iterator begin()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the first item in the hash.
Definition qhash.h:1212
const_iterator constEnd() const noexcept
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary item after the ...
Definition qhash.h:1219
const_iterator constBegin() const noexcept
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item in the hash.
Definition qhash.h:1215
iterator erase(const_iterator it)
Definition qhash.h:1233
T value(const Key &key) const noexcept
Definition qhash.h:1054
iterator end() noexcept
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the imaginary item after the last ...
Definition qhash.h:1216
iterator insert(const Key &key, const T &value)
Inserts a new item with the key and a value of value.
Definition qhash.h:1303
The QIcon class provides scalable icons in different modes and states.
Definition qicon.h:20
qsizetype size() const noexcept
Definition qlist.h:397
iterator erase(const_iterator begin, const_iterator end)
Definition qlist.h:889
iterator insert(qsizetype i, parameter_type t)
Definition qlist.h:488
iterator end()
Definition qlist.h:626
iterator begin()
Definition qlist.h:625
\inmodule QtCore
Definition qmutex.h:313
\inmodule QtCore
Definition qmutex.h:281
virtual quintptr tag() const
virtual quintptr tag() const
\inmodule QtCore\reentrant
Definition qrect.h:30
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
\inmodule QtGui
Definition qwindow.h:63
QString text
QSet< QString >::iterator it
Combined button and popup list for selecting options.
void syncMenu(QAndroidPlatformMenu *)
void androidPlatformMenuDestroyed(QAndroidPlatformMenu *menu)
void showContextMenu(QAndroidPlatformMenu *menu, const QRect &anchorRect)
AudioChannelLayoutTag tag
constexpr const T & qMax(const T &a, const T &b)
Definition qminmax.h:42
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLboolean enable
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
#define Q_UNUSED(x)
size_t quintptr
Definition qtypes.h:167
#define enabled
QReadWriteLock lock
[0]
QGraphicsItem * item
QMenu menu
[5]