@@ -123,6 +123,24 @@ Categories::roleNames() const
123123 return m_roles;
124124}
125125
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+
126144QVariant
127145Categories::data(const QModelIndex& index, int role) const
128146{
@@ -147,8 +165,20 @@ Categories::data(const QModelIndex& index, int role) const
147165 case RoleHints:
148166 return DeeListModel::data(index, CategoryColumn::HINTS);
149167 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+ }
150174 return QVariant::fromValue(getResults(index.row()));
151175 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+ }
152182 return QVariant::fromValue(getResults(index.row())->rowCount());
153183 case RoleCategoryIndex:
154184 return QVariant::fromValue(index.row());