From 4fc790c377f4ca154ea5fc8beca6fd9078edf2ee Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Tue, 4 Jun 2013 15:35:59 -0400 Subject: Introduce UnityMenuModel and UnityQmlMenuModel UnityMenuModel serves the same purpose as QMenuModel, but it is based on GtkMenuTracker and has a different API. GtkMenuTracker is maintained in gtk, but meant to be copy-and-pasted into other consumers of menu models. It does not introduce new dependencies. It does give us access to all the features that GMenuModel has. --- libqmenumodel/src/unitymenumodel.h | 56 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 libqmenumodel/src/unitymenumodel.h (limited to 'libqmenumodel/src/unitymenumodel.h') diff --git a/libqmenumodel/src/unitymenumodel.h b/libqmenumodel/src/unitymenumodel.h new file mode 100644 index 0000000..12a5891 --- /dev/null +++ b/libqmenumodel/src/unitymenumodel.h @@ -0,0 +1,56 @@ +/* + * Copyright 2013 Canonical Ltd. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Authors: Lars Uebernickel + */ + +#ifndef UNITYMENUMODEL_H +#define UNITYMENUMODEL_H + +#include + +class UnityMenuModel: public QAbstractListModel +{ + Q_OBJECT + +public: + enum MenuRoles { + ActionRole = Qt::DisplayRole + 1, + LabelRole, + SensitiveRole + }; + +public: + UnityMenuModel(const QByteArray &busName, const QByteArray &actionGroupObjectPath, + const QByteArray &menuObjectPath, QObject *parent = NULL); + virtual ~UnityMenuModel(); + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const; + QModelIndex parent(const QModelIndex &index) const; + QHash roleNames() const; + +protected: + UnityMenuModel(QObject *parent = NULL); + void init(const QByteArray &busName, const QByteArray &actionGroupObjectPath, const QByteArray &menuObjectPath); + +private: + class UnityMenuModelPrivate *priv; + friend class UnityMenuModelPrivate; +}; + +#endif -- cgit v1.2.3 From 00885c1ddd04819c44d6a0ca2c7f2af8a1298a97 Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Tue, 4 Jun 2013 21:05:40 -0400 Subject: unitymenumodel: expose isSeparator --- libqmenumodel/src/unitymenumodel.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'libqmenumodel/src/unitymenumodel.h') diff --git a/libqmenumodel/src/unitymenumodel.h b/libqmenumodel/src/unitymenumodel.h index 12a5891..75af13a 100644 --- a/libqmenumodel/src/unitymenumodel.h +++ b/libqmenumodel/src/unitymenumodel.h @@ -29,7 +29,8 @@ public: enum MenuRoles { ActionRole = Qt::DisplayRole + 1, LabelRole, - SensitiveRole + SensitiveRole, + IsSeparatorRole }; public: -- cgit v1.2.3 From e735d95e613e2ee6170799002183e0770d34590e Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Wed, 5 Jun 2013 13:50:12 -0400 Subject: unitymenumodel: add activate() --- libqmenumodel/src/unitymenumodel.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'libqmenumodel/src/unitymenumodel.h') diff --git a/libqmenumodel/src/unitymenumodel.h b/libqmenumodel/src/unitymenumodel.h index 75af13a..38dd472 100644 --- a/libqmenumodel/src/unitymenumodel.h +++ b/libqmenumodel/src/unitymenumodel.h @@ -45,6 +45,9 @@ public: QModelIndex parent(const QModelIndex &index) const; QHash roleNames() const; +public Q_SLOTS: + void activate(int index); + protected: UnityMenuModel(QObject *parent = NULL); void init(const QByteArray &busName, const QByteArray &actionGroupObjectPath, const QByteArray &menuObjectPath); -- cgit v1.2.3 From 7892fd969906e6e695c4389a893249181a31d590 Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Wed, 5 Jun 2013 17:07:05 -0400 Subject: unitymenumodel: add support for submenus --- libqmenumodel/src/unitymenumodel.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'libqmenumodel/src/unitymenumodel.h') diff --git a/libqmenumodel/src/unitymenumodel.h b/libqmenumodel/src/unitymenumodel.h index 38dd472..6e735a4 100644 --- a/libqmenumodel/src/unitymenumodel.h +++ b/libqmenumodel/src/unitymenumodel.h @@ -45,6 +45,8 @@ public: QModelIndex parent(const QModelIndex &index) const; QHash roleNames() const; + Q_INVOKABLE QObject * submenu(int position); + public Q_SLOTS: void activate(int index); -- cgit v1.2.3 From bf4e73f64ddc76a8c1ed98bddcb665401adc5402 Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Mon, 24 Jun 2013 12:10:56 -0400 Subject: Move unityqmlmenumodel's properties to unitymenumodel This gets rid of the ad-hoc construct-only properties and ::init() vfunc. Names and paths can now be changed after creating the menu model. This will probably be used seldom in practice, but it makes the code a bit cleaner. Unityqmlmenumodel doesn't do anything interesting right now. --- libqmenumodel/src/unitymenumodel.h | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'libqmenumodel/src/unitymenumodel.h') diff --git a/libqmenumodel/src/unitymenumodel.h b/libqmenumodel/src/unitymenumodel.h index 6e735a4..cdfceac 100644 --- a/libqmenumodel/src/unitymenumodel.h +++ b/libqmenumodel/src/unitymenumodel.h @@ -24,6 +24,9 @@ class UnityMenuModel: public QAbstractListModel { Q_OBJECT + Q_PROPERTY(QByteArray busName READ busName WRITE setBusName NOTIFY busNameChanged) + Q_PROPERTY(QByteArray actionObjectPath READ actionObjectPath WRITE setActionObjectPath NOTIFY actionObjectPathChanged) + Q_PROPERTY(QByteArray menuObjectPath READ menuObjectPath WRITE setMenuObjectPath NOTIFY menuObjectPathChanged) public: enum MenuRoles { @@ -34,10 +37,18 @@ public: }; public: - UnityMenuModel(const QByteArray &busName, const QByteArray &actionGroupObjectPath, - const QByteArray &menuObjectPath, QObject *parent = NULL); + UnityMenuModel(QObject *parent = NULL); virtual ~UnityMenuModel(); + QByteArray busName() const; + void setBusName(const QByteArray &name); + + QByteArray actionObjectPath() const; + void setActionObjectPath(const QByteArray &path); + + QByteArray menuObjectPath() const; + void setMenuObjectPath(const QByteArray &path); + int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; @@ -47,13 +58,14 @@ public: Q_INVOKABLE QObject * submenu(int position); +Q_SIGNALS: + void busNameChanged(const QByteArray &name); + void actionObjectPathChanged(const QByteArray &path); + void menuObjectPathChanged(const QByteArray &path); + public Q_SLOTS: void activate(int index); -protected: - UnityMenuModel(QObject *parent = NULL); - void init(const QByteArray &busName, const QByteArray &actionGroupObjectPath, const QByteArray &menuObjectPath); - private: class UnityMenuModelPrivate *priv; friend class UnityMenuModelPrivate; -- cgit v1.2.3 From f59e06eaf20e69ee5ab3c7b5cc2734463b37dae4 Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Mon, 24 Jun 2013 12:22:28 -0400 Subject: unitymenumodel: move role enum into .cpp No need for that to be public. --- libqmenumodel/src/unitymenumodel.h | 8 -------- 1 file changed, 8 deletions(-) (limited to 'libqmenumodel/src/unitymenumodel.h') diff --git a/libqmenumodel/src/unitymenumodel.h b/libqmenumodel/src/unitymenumodel.h index cdfceac..27a9fff 100644 --- a/libqmenumodel/src/unitymenumodel.h +++ b/libqmenumodel/src/unitymenumodel.h @@ -28,14 +28,6 @@ class UnityMenuModel: public QAbstractListModel Q_PROPERTY(QByteArray actionObjectPath READ actionObjectPath WRITE setActionObjectPath NOTIFY actionObjectPathChanged) Q_PROPERTY(QByteArray menuObjectPath READ menuObjectPath WRITE setMenuObjectPath NOTIFY menuObjectPathChanged) -public: - enum MenuRoles { - ActionRole = Qt::DisplayRole + 1, - LabelRole, - SensitiveRole, - IsSeparatorRole - }; - public: UnityMenuModel(QObject *parent = NULL); virtual ~UnityMenuModel(); -- cgit v1.2.3 From 3dd6f6571c033809b16464aba8a32b88051c60eb Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Mon, 24 Jun 2013 17:02:12 -0400 Subject: unitymenumodel: allow setting multiple prefixed action groups --- libqmenumodel/src/unitymenumodel.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'libqmenumodel/src/unitymenumodel.h') diff --git a/libqmenumodel/src/unitymenumodel.h b/libqmenumodel/src/unitymenumodel.h index 27a9fff..896c806 100644 --- a/libqmenumodel/src/unitymenumodel.h +++ b/libqmenumodel/src/unitymenumodel.h @@ -25,7 +25,7 @@ class UnityMenuModel: public QAbstractListModel { Q_OBJECT Q_PROPERTY(QByteArray busName READ busName WRITE setBusName NOTIFY busNameChanged) - Q_PROPERTY(QByteArray actionObjectPath READ actionObjectPath WRITE setActionObjectPath NOTIFY actionObjectPathChanged) + Q_PROPERTY(QVariantMap actions READ actions WRITE setActions NOTIFY actionsChanged) Q_PROPERTY(QByteArray menuObjectPath READ menuObjectPath WRITE setMenuObjectPath NOTIFY menuObjectPathChanged) public: @@ -35,8 +35,8 @@ public: QByteArray busName() const; void setBusName(const QByteArray &name); - QByteArray actionObjectPath() const; - void setActionObjectPath(const QByteArray &path); + QVariantMap actions() const; + void setActions(const QVariantMap &actions); QByteArray menuObjectPath() const; void setMenuObjectPath(const QByteArray &path); @@ -52,7 +52,7 @@ public: Q_SIGNALS: void busNameChanged(const QByteArray &name); - void actionObjectPathChanged(const QByteArray &path); + void actionsChanged(const QByteArray &path); void menuObjectPathChanged(const QByteArray &path); public Q_SLOTS: -- cgit v1.2.3 From ca81974f1fe8454c725e80aa943705d40398a2ad Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Thu, 25 Jul 2013 06:09:59 +0200 Subject: unitymenumodel: expose type and extended attributes to qml --- libqmenumodel/src/unitymenumodel.h | 1 + 1 file changed, 1 insertion(+) (limited to 'libqmenumodel/src/unitymenumodel.h') diff --git a/libqmenumodel/src/unitymenumodel.h b/libqmenumodel/src/unitymenumodel.h index 896c806..9151217 100644 --- a/libqmenumodel/src/unitymenumodel.h +++ b/libqmenumodel/src/unitymenumodel.h @@ -49,6 +49,7 @@ public: QHash roleNames() const; Q_INVOKABLE QObject * submenu(int position); + Q_INVOKABLE bool loadExtendedAttributes(int position, const QVariantMap &schema); Q_SIGNALS: void busNameChanged(const QByteArray &name); -- cgit v1.2.3 From 16b480d00dd5c1fba5252e728cfc71aaa5cc916f Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Fri, 26 Jul 2013 16:29:32 +0200 Subject: unitymenumodel: add get() --- libqmenumodel/src/unitymenumodel.h | 1 + 1 file changed, 1 insertion(+) (limited to 'libqmenumodel/src/unitymenumodel.h') diff --git a/libqmenumodel/src/unitymenumodel.h b/libqmenumodel/src/unitymenumodel.h index 9151217..396eea3 100644 --- a/libqmenumodel/src/unitymenumodel.h +++ b/libqmenumodel/src/unitymenumodel.h @@ -50,6 +50,7 @@ public: Q_INVOKABLE QObject * submenu(int position); Q_INVOKABLE bool loadExtendedAttributes(int position, const QVariantMap &schema); + Q_INVOKABLE QVariant get(int row, const QByteArray &role); Q_SIGNALS: void busNameChanged(const QByteArray &name); -- cgit v1.2.3 From 01d57d800729a0ca7b9fd023b47b4517495883b3 Mon Sep 17 00:00:00 2001 From: Nick Dedekind Date: Tue, 30 Jul 2013 07:01:48 +0200 Subject: Add ActionStateParser --- libqmenumodel/src/unitymenumodel.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'libqmenumodel/src/unitymenumodel.h') diff --git a/libqmenumodel/src/unitymenumodel.h b/libqmenumodel/src/unitymenumodel.h index 396eea3..ad409ba 100644 --- a/libqmenumodel/src/unitymenumodel.h +++ b/libqmenumodel/src/unitymenumodel.h @@ -20,6 +20,8 @@ #define UNITYMENUMODEL_H #include +class ActionStateParser; +class QQmlComponent; class UnityMenuModel: public QAbstractListModel { @@ -27,6 +29,7 @@ class UnityMenuModel: public QAbstractListModel Q_PROPERTY(QByteArray busName READ busName WRITE setBusName NOTIFY busNameChanged) Q_PROPERTY(QVariantMap actions READ actions WRITE setActions NOTIFY actionsChanged) Q_PROPERTY(QByteArray menuObjectPath READ menuObjectPath WRITE setMenuObjectPath NOTIFY menuObjectPathChanged) + Q_PROPERTY(ActionStateParser* actionStateParser READ actionStateParser WRITE setActionStateParser NOTIFY actionStateParserChanged) public: UnityMenuModel(QObject *parent = NULL); @@ -41,6 +44,9 @@ public: QByteArray menuObjectPath() const; void setMenuObjectPath(const QByteArray &path); + ActionStateParser* actionStateParser() const; + void setActionStateParser(ActionStateParser* actionStateParser); + int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; @@ -48,7 +54,7 @@ public: QModelIndex parent(const QModelIndex &index) const; QHash roleNames() const; - Q_INVOKABLE QObject * submenu(int position); + Q_INVOKABLE QObject * submenu(int position, QQmlComponent* actionStateParser = NULL); Q_INVOKABLE bool loadExtendedAttributes(int position, const QVariantMap &schema); Q_INVOKABLE QVariant get(int row, const QByteArray &role); @@ -56,6 +62,7 @@ Q_SIGNALS: void busNameChanged(const QByteArray &name); void actionsChanged(const QByteArray &path); void menuObjectPathChanged(const QByteArray &path); + void actionStateParserChanged(ActionStateParser* parser); public Q_SLOTS: void activate(int index); -- cgit v1.2.3 From 37e62467aaa50babb48a45dcba8ab3ce5f5a7ec8 Mon Sep 17 00:00:00 2001 From: Nick Dedekind Date: Tue, 30 Jul 2013 20:49:44 +0100 Subject: Added menu action updateState --- libqmenumodel/src/unitymenumodel.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'libqmenumodel/src/unitymenumodel.h') diff --git a/libqmenumodel/src/unitymenumodel.h b/libqmenumodel/src/unitymenumodel.h index ad409ba..5401331 100644 --- a/libqmenumodel/src/unitymenumodel.h +++ b/libqmenumodel/src/unitymenumodel.h @@ -64,9 +64,6 @@ Q_SIGNALS: void menuObjectPathChanged(const QByteArray &path); void actionStateParserChanged(ActionStateParser* parser); -public Q_SLOTS: - void activate(int index); - private: class UnityMenuModelPrivate *priv; friend class UnityMenuModelPrivate; -- cgit v1.2.3 From 2bbdf4e2347ec566280b9d878a12b7b1e732f632 Mon Sep 17 00:00:00 2001 From: Nick Dedekind Date: Fri, 9 Aug 2013 10:50:12 +0100 Subject: glib callbacks pass events through qt. --- libqmenumodel/src/unitymenumodel.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'libqmenumodel/src/unitymenumodel.h') diff --git a/libqmenumodel/src/unitymenumodel.h b/libqmenumodel/src/unitymenumodel.h index 5401331..4aaadfd 100644 --- a/libqmenumodel/src/unitymenumodel.h +++ b/libqmenumodel/src/unitymenumodel.h @@ -64,6 +64,9 @@ Q_SIGNALS: void menuObjectPathChanged(const QByteArray &path); void actionStateParserChanged(ActionStateParser* parser); +protected: + virtual bool event(QEvent* e); + private: class UnityMenuModelPrivate *priv; friend class UnityMenuModelPrivate; -- cgit v1.2.3 From 08a5bb3a2037a4c47059a4be1165874fa81c6a62 Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Fri, 9 Aug 2013 13:06:10 +0200 Subject: Re-add UnityMenuModel::activate() --- libqmenumodel/src/unitymenumodel.h | 1 + 1 file changed, 1 insertion(+) (limited to 'libqmenumodel/src/unitymenumodel.h') diff --git a/libqmenumodel/src/unitymenumodel.h b/libqmenumodel/src/unitymenumodel.h index 5401331..79dbaa9 100644 --- a/libqmenumodel/src/unitymenumodel.h +++ b/libqmenumodel/src/unitymenumodel.h @@ -57,6 +57,7 @@ public: Q_INVOKABLE QObject * submenu(int position, QQmlComponent* actionStateParser = NULL); Q_INVOKABLE bool loadExtendedAttributes(int position, const QVariantMap &schema); Q_INVOKABLE QVariant get(int row, const QByteArray &role); + Q_INVOKABLE void activate(int index); Q_SIGNALS: void busNameChanged(const QByteArray &name); -- cgit v1.2.3