@@ -82,6 +82,12 @@ void Categories::onCategoriesModelChanged(unity::glib::Object<DeeModel> model)
82 setModel(model);
82 setModel(model);
85+void Categories::onCategoryOrderChanged(std::vector<unsigned int> cat_order)
87+ const QList<QPersistentModelIndex> pindex = QList<QPersistentModelIndex>();
88+ Q_EMIT layoutChanged(pindex, QAbstractItemModel::VerticalSortHint);
86Categories::setUnityScope(const unity::dash::Scope::Ptr& scope)
92Categories::setUnityScope(const unity::dash::Scope::Ptr& scope)
@@ -90,9 +96,9 @@ Categories::setUnityScope(const unity::dash::Scope::Ptr& scope)
90 // no need to call this, we'll get notified
96 // no need to call this, we'll get notified
91 //setModel(m_unityScope->categories()->model());
97 //setModel(m_unityScope->categories()->model());
93− m_categoriesChangedConnection.disconnect();
99+ m_signals.disconnectAll();
94− m_categoriesChangedConnection =
95− m_unityScope->categories()->model.changed.connect(sigc::mem_fun(this, &Categories::onCategoriesModelChanged));
100+ m_signals << m_unityScope->categories()->model.changed.connect(sigc::mem_fun(this, &Categories::onCategoriesModelChanged));
101+ m_signals << m_unityScope->category_order.changed.connect(sigc::mem_fun(this, &Categories::onCategoryOrderChanged));
@@ -185,45 +191,48 @@ Categories::data(const QModelIndex& index, int role) const
185 return QVariant();
191 return QVariant();
194+ auto realRow = m_unityScope->category_order()[index.row()];
195+ const QModelIndex realIndex = createIndex(realRow, index.column());
188 switch (role) {
197 switch (role) {
189 case RoleCategoryId:
198 case RoleCategoryId:
190− return DeeListModel::data(index, CategoryColumn::ID);
199+ return DeeListModel::data(realIndex, CategoryColumn::ID);
191 case RoleName:
200 case RoleName:
192− return DeeListModel::data(index, CategoryColumn::DISPLAY_NAME);
201+ return DeeListModel::data(realIndex, CategoryColumn::DISPLAY_NAME);
193 case RoleIcon:
202 case RoleIcon:
194− return DeeListModel::data(index, CategoryColumn::ICON_HINT);
203+ return DeeListModel::data(realIndex, CategoryColumn::ICON_HINT);
195 case RoleRenderer:
204 case RoleRenderer:
196− return DeeListModel::data(index, CategoryColumn::RENDERER_NAME);
205+ return DeeListModel::data(realIndex, CategoryColumn::RENDERER_NAME);
197 case RoleContentType:
206 case RoleContentType:
199− auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
208+ auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
200 return hints.contains("content-type") ? hints["content-type"] : QVariant(QString("default"));
209 return hints.contains("content-type") ? hints["content-type"] : QVariant(QString("default"));
202 case RoleProgressSource:
211 case RoleProgressSource:
204− auto hints = DeeListModel::data(index, CategoryColumn::HINTS).toHash();
213+ auto hints = DeeListModel::data(realIndex, CategoryColumn::HINTS).toHash();
205 return hints.contains("progress-source") ? hints["progress-source"] : QVariant();
214 return hints.contains("progress-source") ? hints["progress-source"] : QVariant();
207 case RoleHints:
216 case RoleHints:
208− return DeeListModel::data(index, CategoryColumn::HINTS);
217+ return DeeListModel::data(realIndex, CategoryColumn::HINTS);
209 case RoleResults:
218 case RoleResults:
210 if (m_overriddenCategories.size() > 0)
219 if (m_overriddenCategories.size() > 0)
212− auto id = DeeListModel::data(index, CategoryColumn::ID).toString();
221+ auto id = DeeListModel::data(realIndex, CategoryColumn::ID).toString();
213 if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
222 if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
214 return QVariant::fromValue(m_overriddenCategories[id]);
223 return QVariant::fromValue(m_overriddenCategories[id]);
216− return QVariant::fromValue(getResults(index.row()));
225+ return QVariant::fromValue(getResults(realIndex.row()));
217 case RoleCount:
226 case RoleCount:
218 if (m_overriddenCategories.size() > 0)
227 if (m_overriddenCategories.size() > 0)
220− auto id = DeeListModel::data(index, CategoryColumn::ID).toString();
229+ auto id = DeeListModel::data(realIndex, CategoryColumn::ID).toString();
221 if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
230 if (m_overriddenCategories.find(id) != m_overriddenCategories.end())
222 return QVariant::fromValue(m_overriddenCategories[id]->rowCount());
231 return QVariant::fromValue(m_overriddenCategories[id]->rowCount());
224− return QVariant::fromValue(getResults(index.row())->rowCount());
233+ return QVariant::fromValue(getResults(realIndex.row())->rowCount());
225 case RoleCategoryIndex:
234 case RoleCategoryIndex:
226− return QVariant::fromValue(index.row());
235+ return QVariant::fromValue(index.row()); // no remapping to realIndex
228 return QVariant();
237 return QVariant();