2
* Copyright (C) 2016 Canonical, Ltd.
4
* This program is free software: you can redistribute it and/or modify it under
5
* the terms of the GNU Lesser General Public License version 3, as published by
6
* the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful, but WITHOUT
9
* ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10
* SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
* Lesser General Public License for more details.
13
* You should have received a copy of the GNU Lesser General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17
#ifndef EXPORTEDPLATFORMMENUBAR_H
18
#define EXPORTEDPLATFORMMENUBAR_H
20
#include <qpa/qplatformmenu.h>
23
class UbuntuGMenuModelExporter;
24
class UbuntuMenuRegistrar;
27
class UbuntuPlatformMenuBar : public QPlatformMenuBar
31
UbuntuPlatformMenuBar();
32
~UbuntuPlatformMenuBar();
34
QString exportedPath() const;
36
virtual void insertMenu(QPlatformMenu *menu, QPlatformMenu* before) override;
37
virtual void removeMenu(QPlatformMenu *menu) override;
38
virtual void syncMenu(QPlatformMenu *menu) override;
39
virtual void handleReparent(QWindow *newParentWindow) override;
40
virtual QPlatformMenu *menuForTag(quintptr tag) const override;
42
const QList<QPlatformMenu*> menus() const;
44
QDebug operator<<(QDebug stream);
46
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
47
virtual QPlatformMenu *createMenu() const override;
51
void menuInserted(QPlatformMenu *menu);
52
void menuRemoved(QPlatformMenu *menu);
54
void structureChanged();
60
QList<QPlatformMenu*> m_menus;
61
QScopedPointer<UbuntuGMenuModelExporter> m_exporter;
62
QScopedPointer<UbuntuMenuRegistrar> m_registrar;
66
#define MENU_PROPERTY(class, name, type, defaultValue) \
67
static type get_##name(const class *menuItem) { return menuItem->m_##name; } \
68
type m_##name = defaultValue;
70
class Q_DECL_EXPORT UbuntuPlatformMenu : public QPlatformMenu
75
~UbuntuPlatformMenu();
77
virtual void insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before) override;
78
virtual void removeMenuItem(QPlatformMenuItem *menuItem) override;
79
virtual void syncMenuItem(QPlatformMenuItem *menuItem) override;
80
virtual void syncSeparatorsCollapsible(bool enable) override;
82
virtual void setTag(quintptr tag) override;
83
virtual quintptr tag() const override;
85
virtual void setText(const QString &text) override;
86
virtual void setIcon(const QIcon &icon) override;
87
virtual void setEnabled(bool isEnabled) override;
88
virtual void setVisible(bool isVisible) override;
89
virtual void setMinimumWidth(int width) override;
90
virtual void setFont(const QFont &font) override;
92
virtual void showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item) override;
94
virtual void dismiss() override; // Closes this and all its related menu popups
96
virtual QPlatformMenuItem *menuItemAt(int position) const override;
97
virtual QPlatformMenuItem *menuItemForTag(quintptr tag) const override;
99
virtual QPlatformMenuItem *createMenuItem() const override;
100
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
101
virtual QPlatformMenu *createSubMenu() const override;
106
const QList<QPlatformMenuItem*> menuItems() const;
108
QDebug operator<<(QDebug stream);
111
void menuItemInserted(QPlatformMenuItem *menuItem);
112
void menuItemRemoved(QPlatformMenuItem *menuItem);
113
void structureChanged();
114
void enabledChanged(bool);
117
MENU_PROPERTY(UbuntuPlatformMenu, visible, bool, true)
118
MENU_PROPERTY(UbuntuPlatformMenu, text, QString, QString())
119
MENU_PROPERTY(UbuntuPlatformMenu, enabled, bool, true)
120
MENU_PROPERTY(UbuntuPlatformMenu, icon, QIcon, QIcon())
123
QList<QPlatformMenuItem*> m_menuItems;
124
const QWindow* m_parentWindow;
125
QScopedPointer<UbuntuGMenuModelExporter> m_exporter;
126
QScopedPointer<UbuntuMenuRegistrar> m_registrar;
128
friend class UbuntuGMenuModelExporter;
132
class Q_DECL_EXPORT UbuntuPlatformMenuItem : public QPlatformMenuItem
136
UbuntuPlatformMenuItem();
137
~UbuntuPlatformMenuItem();
139
virtual void setTag(quintptr tag) override;
140
virtual quintptr tag() const override;
142
virtual void setText(const QString &text) override;
143
virtual void setIcon(const QIcon &icon) override;
144
virtual void setMenu(QPlatformMenu *menu) override;
145
virtual void setVisible(bool isVisible) override;
146
virtual void setIsSeparator(bool isSeparator) override;
147
virtual void setFont(const QFont &font) override;
148
virtual void setRole(MenuRole role) override;
149
virtual void setCheckable(bool checkable) override;
150
virtual void setChecked(bool isChecked) override;
151
virtual void setShortcut(const QKeySequence& shortcut) override;
152
virtual void setEnabled(bool enabled) override;
153
virtual void setIconSize(int size) override;
155
QPlatformMenu* menu() const;
157
QDebug operator<<(QDebug stream);
160
void checkedChanged(bool);
161
void enabledChanged(bool);
162
void visibleChanged(bool);
165
MENU_PROPERTY(UbuntuPlatformMenuItem, separator, bool, false)
166
MENU_PROPERTY(UbuntuPlatformMenuItem, visible, bool, true)
167
MENU_PROPERTY(UbuntuPlatformMenuItem, text, QString, QString())
168
MENU_PROPERTY(UbuntuPlatformMenuItem, enabled, bool, true)
169
MENU_PROPERTY(UbuntuPlatformMenuItem, checkable, bool, false)
170
MENU_PROPERTY(UbuntuPlatformMenuItem, checked, bool, false)
171
MENU_PROPERTY(UbuntuPlatformMenuItem, shortcut, QKeySequence, QKeySequence())
172
MENU_PROPERTY(UbuntuPlatformMenuItem, icon, QIcon, QIcon())
173
MENU_PROPERTY(UbuntuPlatformMenuItem, iconSize, int, 16)
174
MENU_PROPERTY(UbuntuPlatformMenuItem, menu, QPlatformMenu*, nullptr)
178
friend class UbuntuGMenuModelExporter;
181
#endif // EXPORTEDPLATFORMMENUBAR_H