@@ -123,6 +123,24 @@ Categories::roleNames() const
123 return m_roles;
123 return m_roles;
126+void Categories::overrideCategory(const QString& categoryId, QAbstractItemModel* model)
128+ m_overriddenCategories[categoryId] = model;
129+ // TODO: change the parent of the model?
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;
136+ roles.append(RoleCount);
137+ roles.append(RoleResults);
138+ QModelIndex changedIndex = index(i);
139+ Q_EMIT dataChanged(changedIndex, changedIndex, roles);
127Categories::data(const QModelIndex& index, int role) const
145Categories::data(const QModelIndex& index, int role) const
@@ -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)
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]);
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)
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());
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());