on xenial help sign in
Add overrideCategory method to Categories
bd3b453Michal Hruby
plugins/Unity/categories.cpp+30
@@ -123,6 +123,24 @@ Categories::roleNames() const
123 return m_roles;
123 return m_roles;
124}
124}
125
125
126+void Categories::overrideCategory(const QString& categoryId, QAbstractItemModel* model)
127+{
128+ m_overriddenCategories[categoryId] = model;
129+ // TODO: change the parent of the model?
130+
131+ // emit the dataChanged signal if the category is already in the model
132+ for (int i = 0; i < rowCount(); i++) {
133+ auto id = data(index(i), RoleCategoryId).toString();
134+ if (id != categoryId) continue;
135+ QVector<int> roles;
136+ roles.append(RoleCount);
137+ roles.append(RoleResults);
138+ QModelIndex changedIndex = index(i);
139+ Q_EMIT dataChanged(changedIndex, changedIndex, roles);
140+ break;
141+ }
142+}
143+
126QVariant
144QVariant
127Categories::data(const QModelIndex& index, int role) const
145Categories::data(const QModelIndex& index, int role) const
128{
146{
@@ -147,8 +165,20 @@ Categories::data(const QModelIndex& index, int role) const
147 case RoleHints:
165 case RoleHints:
148 return DeeListModel::data(index, CategoryColumn::HINTS);
166 return DeeListModel::data(index, CategoryColumn::HINTS);
149 case RoleResults:
167 case RoleResults:
168+ if (m_overriddenCategories.size() > 0)
169+ {
170+ auto id = DeeListModel::data(index, CategoryColumn::ID).toString();
171+ if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
172+ return QVariant::fromValue(m_overriddenCategories[id]);
173+ }
150 return QVariant::fromValue(getResults(index.row()));
174 return QVariant::fromValue(getResults(index.row()));
151 case RoleCount:
175 case RoleCount:
176+ if (m_overriddenCategories.size() > 0)
177+ {
178+ auto id = DeeListModel::data(index, CategoryColumn::ID).toString();
179+ if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
180+ return QVariant::fromValue(m_overriddenCategories[id]->rowCount());
181+ }
152 return QVariant::fromValue(getResults(index.row())->rowCount());
182 return QVariant::fromValue(getResults(index.row())->rowCount());
153 case RoleCategoryIndex:
183 case RoleCategoryIndex:
154 return QVariant::fromValue(index.row());
184 return QVariant::fromValue(index.row());
plugins/Unity/categories.h+3
@@ -53,6 +53,8 @@ public:
53 RoleCategoryIndex
53 RoleCategoryIndex
54 };
54 };
55
55
56+ Q_INVOKABLE void overrideCategory(const QString& categoryId, QAbstractItemModel* model);
57+
56 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
58 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
57
59
58 QHash<int, QByteArray> roleNames() const;
60 QHash<int, QByteArray> roleNames() const;
@@ -73,6 +75,7 @@ private:
73 QTimer m_timer;
75 QTimer m_timer;
74 QSet<int> m_updatedCategories;
76 QSet<int> m_updatedCategories;
75 QHash<int, QByteArray> m_roles;
77 QHash<int, QByteArray> m_roles;
78+ QMap<QString, QAbstractItemModel*> m_overriddenCategories;
76 mutable QMap<int, DeeListModel*> m_results;
79 mutable QMap<int, DeeListModel*> m_results;
77 sigc::connection m_categoriesChangedConnection;
80 sigc::connection m_categoriesChangedConnection;
78};
81};