@@ -48,6 +48,11 @@ Q_INVOKABLE void ScopesOverview::activate(QVariant const& result)
48 Q_EMIT openScope(m_openScope);
48 Q_EMIT openScope(m_openScope);
51+void ScopesOverview::setFavorite(Scope *scope, bool favorite)
53+ m_scopesOverviewCategories->setFavorite(scope, favorite);
51ScopesOverviewCategories::ScopesOverviewCategories(Scopes *scopes, QObject* parent)
56ScopesOverviewCategories::ScopesOverviewCategories(Scopes *scopes, QObject* parent)
52 : unity::shell::scopes::CategoriesInterface(parent)
57 : unity::shell::scopes::CategoriesInterface(parent)
53 , m_scopes(scopes)
58 , m_scopes(scopes)
@@ -69,6 +74,24 @@ bool ScopesOverviewCategories::overrideCategoryJson(QString const& /* categoryId
69 qFatal("Using un-implemented ScopesOverviewCategories::overrideCategoryJson");
74 qFatal("Using un-implemented ScopesOverviewCategories::overrideCategoryJson");
77+void ScopesOverviewCategories::setFavorite(Scope *scope, bool favorite)
79+ if (m_resultsModels.value(0)) {
81+ m_resultsModels[0]->appendScope(scope);
83+ m_resultsModels[0]->removeScope(scope);
86+ if (m_resultsModels.value(1)) {
88+ m_resultsModels[1]->removeScope(scope);
90+ m_resultsModels[1]->appendScope(scope);
73ScopesOverviewCategories::data(const QModelIndex& index, int role) const
96ScopesOverviewCategories::data(const QModelIndex& index, int role) const
@@ -78,7 +101,7 @@ ScopesOverviewCategories::data(const QModelIndex& index, int role) const
79 const QString categoryId = index.row() == 0 ? "favorites" : "nonfavorites";
102 const QString categoryId = index.row() == 0 ? "favorites" : "nonfavorites";
81− unity::shell::scopes::ResultsModelInterface *resultsModel = m_resultsModels[index.row()];
104+ ScopesOverviewResultsModel *resultsModel = m_resultsModels[index.row()];
82 if (!resultsModel) {
105 if (!resultsModel) {
83 QObject *that = const_cast<ScopesOverviewCategories*>(this);
106 QObject *that = const_cast<ScopesOverviewCategories*>(this);
84 QList<Scope*> scopes = index.row() == 0 ? m_scopes->favScopes() : m_scopes->nonFavScopes();
107 QList<Scope*> scopes = index.row() == 0 ? m_scopes->favScopes() : m_scopes->nonFavScopes();
@@ -157,7 +180,7 @@ ScopesOverviewSearchCategories::data(const QModelIndex& index, int role) const
158 const QString categoryId = index.row() == 0 ? "searchA" : "searchB";
181 const QString categoryId = index.row() == 0 ? "searchA" : "searchB";
160− unity::shell::scopes::ResultsModelInterface *resultsModel = m_resultsModels[index.row()];
183+ ScopesOverviewResultsModel *resultsModel = m_resultsModels[index.row()];
161 if (!resultsModel) {
184 if (!resultsModel) {
162 QObject *that = const_cast<ScopesOverviewSearchCategories*>(this);
185 QObject *that = const_cast<ScopesOverviewSearchCategories*>(this);
163 QList<Scope *> scopes;
186 QList<Scope *> scopes;
@@ -256,8 +279,7 @@ int ScopesOverviewResultsModel::count() const
256 return rowCount();
279 return rowCount();
260−ScopesOverviewResultsModel::data(const QModelIndex& index, int role) const
282+QVariant ScopesOverviewResultsModel::data(const QModelIndex& index, int role) const
262 unity::shell::scopes::ScopeInterface *scope = m_scopes[index.row()];
284 unity::shell::scopes::ScopeInterface *scope = m_scopes[index.row()];
263 switch (role) {
285 switch (role) {
@@ -281,3 +303,21 @@ ScopesOverviewResultsModel::data(const QModelIndex& index, int role) const
281 return QVariant();
303 return QVariant();
307+void ScopesOverviewResultsModel::appendScope(Scope *scope)
309+ Q_ASSERT(!m_scopes.contains(scope));
310+ const int index = rowCount();
311+ beginInsertRows(QModelIndex(), index, index);
316+void ScopesOverviewResultsModel::removeScope(Scope *scope)
318+ const int index = m_scopes.indexOf(scope);
319+ Q_ASSERT(index != -1);
320+ beginRemoveRows(QModelIndex(), index, index);
321+ m_scopes.removeAt(index);