on xenial help sign in
Moved cached menu model from indicator to visibleunitymenumodel
commit1aca4287a9c99b2a17f998bb1c51fccd01719b4c authorNick Dedekind <nicholas.dedekind@gmail.com> dateThu 29 Aug 2013, 16:37 (13 years ago) parent54f4d73
8 files changed+65−96
plugins/Unity/Indicators/indicator.cpp−30 plugins/Unity/Indicators/indicator.h−3 plugins/Unity/Indicators/indicatorsmodel.cpp−13 plugins/Unity/Indicators/indicatorsmodel.h−2 plugins/Unity/Indicators/rootactionstate.cpp+1−2 plugins/Unity/Indicators/rootactionstate.h−1 plugins/Unity/Indicators/visibleindicatorsmodel.cpp+54−36 plugins/Unity/Indicators/visibleindicatorsmodel.h+10−9
plugins/Unity/Indicators/indicator.cpp−30
@@ -31,8 +31,6 @@ Indicator::Indicator(QObject *parent)
3131
3232Indicator::~Indicator()
3333{
34− qDeleteAll(m_cachedModels);
35− m_cachedModels.clear();
3634}
3735
3836void Indicator::init(const QString& busName, const QSettings& settings)
@@ -103,31 +101,3 @@ void Indicator::setIndicatorProperties(const QVariant &properties)
103101 Q_EMIT indicatorPropertiesChanged(m_properties);
104102 }
105103}
106−
107−QAbstractItemModel* Indicator::getMenuModel(const QString& profile)
108−{
109− QVariantMap propMap = m_properties.toMap();
110− QString busName = propMap["busName"].toString();
111− QString actionsObjectPath = propMap["actionsObjectPath"].toString();
112−
113− QVariantMap menuObjectPaths = propMap["menuObjectPaths"].toMap();
114− if (!menuObjectPaths.contains(profile)) {
115− return NULL;
116− }
117−
118− QString menuObjectPath = menuObjectPaths[profile].toString();
119−
120− CachedUnityMenuModel* cachedModel;
121− if (!m_cachedModels.contains(profile)) {
122− cachedModel = new CachedUnityMenuModel();
123− m_cachedModels[profile] = cachedModel;
124− } else {
125− cachedModel = m_cachedModels[profile];
126− }
127− cachedModel->setBusName(busName);
128− cachedModel->setMenuObjectPath(menuObjectPath);
129− QVariantMap actions; actions["indicator"] = actionsObjectPath;
130− cachedModel->setActions(actions);
131−
132− return cachedModel->model();
133−}
plugins/Unity/Indicators/indicator.h−3
@@ -43,8 +43,6 @@ public:
4343 int position() const;
4444 QVariant indicatorProperties() const;
4545
46− QAbstractItemModel* getMenuModel(const QString& profile);
47−
4846Q_SIGNALS:
4947 void identifierChanged(const QString &identifier);
5048 void positionChanged(int position);
@@ -59,7 +57,6 @@ private:
5957 QString m_identifier;
6058 int m_position;
6159 QVariant m_properties;
62− QHash<QString, CachedUnityMenuModel*> m_cachedModels;
6360};
6461
6562#endif // INDICATOR_H
plugins/Unity/Indicators/indicatorsmodel.cpp−13
@@ -324,16 +324,3 @@ QVariant IndicatorsModel::indicatorData() const
324324{
325325 return m_indicator_data;
326326}
327−
328−QAbstractItemModel* IndicatorsModel::getMenuModelForIndexProfile(const QModelIndex& index, const QString& device) const
329−{
330− if (!index.isValid() || index.row() >= m_indicators.size())
331− return NULL;
332−
333− Indicator::Ptr indicator = m_indicators[index.row()];
334− if (!indicator) {
335− return NULL;
336− }
337−
338− return indicator->getMenuModel(device);
339−}
plugins/Unity/Indicators/indicatorsmodel.h−2
@@ -55,8 +55,6 @@ public:
5555 void setIndicatorData(const QVariant& data);
5656 QVariant indicatorData() const;
5757
58− QAbstractItemModel* getMenuModelForIndexProfile(const QModelIndex& index, const QString& profile) const;
59−
6058Q_SIGNALS:
6159 void countChanged();
6260 void indicatorDataChanged(const QVariant& data);
plugins/Unity/Indicators/rootactionstate.cpp+1−2
@@ -30,8 +30,7 @@ extern "C" {
3030}
3131
3232RootActionState::RootActionState(QObject *parent)
33− : ActionStateParser(parent),
34− m_manageParserParent(false)
33+ : ActionStateParser(parent)
3534{
3635}
3736
plugins/Unity/Indicators/rootactionstate.h−1
@@ -78,7 +78,6 @@ private:
7878
7979 QPointer<UnityMenuModel> m_menu;
8080 QVariantMap m_cachedState;
81− bool m_manageParserParent;
8281};
8382
8483#endif // ROOTACTIONSTATE_H
plugins/Unity/Indicators/visibleindicatorsmodel.cpp+54−36
@@ -17,8 +17,8 @@
1717// self
1818#include "visibleindicatorsmodel.h"
1919#include "rootactionstate.h"
20−#include "indicatorsmodel.h"
2120#include "indicators.h"
21+#include "cachedunitymenumodel.h"
2222
2323#include <unitymenumodel.h>
2424
@@ -26,8 +26,7 @@
2626#include <QDebug>
2727
2828VisibleIndicatorsModel::VisibleIndicatorsModel(QObject *parent)
29− : QIdentityProxyModel(parent),
30− m_model(NULL)
29+ : QIdentityProxyModel(parent)
3130{
3231 connect(this, SIGNAL(modelReset()), SIGNAL(countChanged()));
3332 connect(this, SIGNAL(rowsInserted(QModelIndex,int,int)), SIGNAL(countChanged()));
@@ -38,6 +37,10 @@ VisibleIndicatorsModel::~VisibleIndicatorsModel()
3837{
3938 qDeleteAll(m_rootActions);
4039 m_rootActions.clear();
40+
41+ qDeleteAll(m_cachedModels);
42+ m_cachedModels.clear();
43+
4144 m_visible.clear();
4245}
4346
@@ -46,12 +49,12 @@ QHash<int, QByteArray> VisibleIndicatorsModel::roleNames() const
4649 return sourceModel() ? sourceModel()->roleNames() : QHash<int, QByteArray>();
4750}
4851
49−QByteArray VisibleIndicatorsModel::profile() const
52+QString VisibleIndicatorsModel::profile() const
5053{
5154 return m_profile;
5255}
5356
54−void VisibleIndicatorsModel::setProfile(const QByteArray& profile)
57+void VisibleIndicatorsModel::setProfile(const QString& profile)
5558{
5659 if (m_profile != profile) {
5760 m_profile = profile;
@@ -59,15 +62,9 @@ void VisibleIndicatorsModel::setProfile(const QByteArray& profile)
5962 }
6063}
6164
62−IndicatorsModel* VisibleIndicatorsModel::model() const
63−{
64− return m_model;
65−}
66−
67−void VisibleIndicatorsModel::setModel(IndicatorsModel *itemModel)
65+void VisibleIndicatorsModel::setModel(QAbstractItemModel *itemModel)
6866{
69− if (itemModel != m_model) {
70− m_model = itemModel;
67+ if (itemModel != sourceModel()) {
7168 if (sourceModel() != NULL) {
7269 sourceModel()->disconnect(this);
7370 }
@@ -89,30 +86,20 @@ void VisibleIndicatorsModel::setModel(IndicatorsModel *itemModel)
8986
9087void VisibleIndicatorsModel::sourceRowsInserted(const QModelIndex&, int start, int end)
9188{
92− if (!m_model) {
93− return;
94− }
95−
9689 for (int row = start; row <= end; row++) {
97− const QModelIndex idx = sourceModel()->index(row, 0);
98− if (!idx.isValid()) {
99− continue;
100− }
101−
10290 RootActionState* actionState = new RootActionState();
10391 connect(actionState, SIGNAL(updated()), SLOT(onActionStateUpdated()));
10492 m_rootActions.insert(row, actionState);
10593 m_visible.insert(row, false);
10694
107− UnityMenuModel* unityModel = qobject_cast<UnityMenuModel*>(m_model->getMenuModelForIndexProfile(idx, profile()));
108− actionState->setMenu(unityModel);
95+ m_cachedModels.insert(row, new CachedUnityMenuModel);
96+ updateCachedModel(sourceModel()->index(row, 0));
10997 }
11098}
11199
112100void VisibleIndicatorsModel::sourceRowsAboutToBeRemoved(const QModelIndex&, int start, int end)
113101{
114102 for (int row = start; row <= end; row++) {
115−
116103 if (m_rootActions.count() > start) {
117104 delete m_rootActions[start];
118105 m_rootActions.removeAt(start);
@@ -120,23 +107,17 @@ void VisibleIndicatorsModel::sourceRowsAboutToBeRemoved(const QModelIndex&, int
120107 if (m_visible.count() > start) {
121108 m_visible.removeAt(start);
122109 }
110+ if (m_cachedModels.count() > start) {
111+ delete m_cachedModels[start];
112+ m_cachedModels.removeAt(start);
113+ }
123114 }
124115}
125116
126117void VisibleIndicatorsModel::sourceDataChanged(const QModelIndex& topRight, const QModelIndex& bottomRight)
127118{
128119 for (int row = topRight.row(); row <= bottomRight.row(); row++) {
129−
130− const QModelIndex idx = sourceModel()->index(row, 0);
131− if (!idx.isValid()) {
132− continue;
133− }
134− if (m_rootActions.count() <= row) {
135− break;
136− }
137−
138− UnityMenuModel* unityModel = qobject_cast<UnityMenuModel*>(m_model->getMenuModelForIndexProfile(idx, profile()));
139− m_rootActions[row]->setMenu(unityModel);
120+ updateCachedModel(sourceModel()->index(row, 0));
140121 }
141122}
142123
@@ -171,3 +152,40 @@ QVariant VisibleIndicatorsModel::data(const QModelIndex &index, int role) const
171152
172153 return m_visible[index.row()];
173154}
155+
156+void VisibleIndicatorsModel::updateCachedModel(const QModelIndex& index)
157+{
158+ if (!index.isValid()) {
159+ return;
160+ }
161+ QVariant data = sourceModel()->data(index, IndicatorsModelRole::IndicatorProperties);
162+ if (!data.isValid()) {
163+ return;
164+ }
165+ int row = index.row();
166+
167+ if (m_cachedModels.count() <= row) {
168+ return;
169+ }
170+ CachedUnityMenuModel* cachedModel = m_cachedModels[row];
171+
172+ QVariantMap properties = data.toMap();
173+
174+ QVariantMap menuObjectPaths = properties["menuObjectPaths"].toMap();
175+ if (!menuObjectPaths.contains(m_profile)) {
176+ return;
177+ }
178+
179+ QString menuObjectPath = menuObjectPaths[m_profile].toString();
180+ QString busName = properties["busName"].toString();
181+ QString actionsObjectPath = properties["actionsObjectPath"].toString();
182+
183+ cachedModel->setBusName(busName);
184+ cachedModel->setMenuObjectPath(menuObjectPath);
185+ QVariantMap actions; actions["indicator"] = actionsObjectPath;
186+ cachedModel->setActions(actions);
187+
188+ if (m_rootActions.count() > row) {
189+ m_rootActions[row]->setMenu(cachedModel->model());
190+ }
191+}
plugins/Unity/Indicators/visibleindicatorsmodel.h+10−9
@@ -24,15 +24,15 @@
2424#include <QPersistentModelIndex>
2525
2626class RootActionState;
27−class IndicatorsModel;
27+class CachedUnityMenuModel;
2828
2929class VisibleIndicatorsModel : public QIdentityProxyModel
3030{
3131 Q_OBJECT
3232
33− Q_PROPERTY(IndicatorsModel* model READ model WRITE setModel NOTIFY modelChanged)
33+ Q_PROPERTY(QAbstractItemModel* model READ sourceModel WRITE setModel NOTIFY modelChanged)
3434 Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
35− Q_PROPERTY(QByteArray profile READ profile WRITE setProfile NOTIFY profileChanged)
35+ Q_PROPERTY(QString profile READ profile WRITE setProfile NOTIFY profileChanged)
3636
3737public:
3838 explicit VisibleIndicatorsModel(QObject *parent = 0);
@@ -40,12 +40,11 @@ public:
4040
4141 /* getters */
4242 QHash<int, QByteArray> roleNames() const;
43− QByteArray profile() const;
44− IndicatorsModel* model() const;
43+ QString profile() const;
4544
4645 /* setters */
47− void setModel(IndicatorsModel *model);
48− void setProfile(const QByteArray& profile);
46+ void setModel(QAbstractItemModel *model);
47+ void setProfile(const QString& profile);
4948
5049 virtual QVariant data(const QModelIndex &index, int role) const;
5150
@@ -63,10 +62,12 @@ private Q_SLOTS:
6362 void onActionStateUpdated();
6463
6564private:
66− IndicatorsModel* m_model;
65+ void updateCachedModel(const QModelIndex& index);
66+
6767 QList<RootActionState*> m_rootActions;
68+ QList<CachedUnityMenuModel*> m_cachedModels;
6869 QList<bool> m_visible;
69− QByteArray m_profile;
70+ QString m_profile;
7071};
7172
7273#endif // VISIBLEINDICATORSMODEL_H