@@ -40,6 +40,8 @@ QVariant ExtensionSettingsModel::data(const QModelIndex &index, int role) const
4040 return e.indent ;
4141 case EnabledRole:
4242 return e.enabled ;
43+ case FavoriteRole:
44+ return e.favorite ;
4345 case AliasRole:
4446 return e.alias ;
4547 case EntrypointIdRole:
@@ -64,6 +66,7 @@ QHash<int, QByteArray> ExtensionSettingsModel::roleNames() const {
6466 {IsProviderRole, " isProvider" },
6567 {IndentRole, " indent" },
6668 {EnabledRole, " enabled" },
69+ {FavoriteRole, " favorite" },
6770 {AliasRole, " alias" },
6871 {EntrypointIdRole, " entrypointId" },
6972 {ExpandedRole, " expanded" },
@@ -168,6 +171,26 @@ void ExtensionSettingsModel::setEnabled(int row, bool value) {
168171 if (row == m_selectedRow) emit selectedChanged ();
169172}
170173
174+ void ExtensionSettingsModel::setFavorite (int row, bool value) {
175+ if (row < 0 || std::cmp_greater_equal (row, m_visibleIndices.size ())) return ;
176+ auto &e = m_allEntries[m_visibleIndices[row]];
177+ auto *manager = ServiceRegistry::instance ()->rootItemManager ();
178+
179+ if (e.isProvider ) {
180+ manager->setProviderFavorite (e.providerId , value);
181+ e.favorite = value;
182+ auto idx = index (row);
183+ emit dataChanged (idx, idx, {FavoriteRole});
184+ } else {
185+ manager->setItemAsFavorite (e.entrypointId , value);
186+ e.favorite = value;
187+ auto idx = index (row);
188+ emit dataChanged (idx, idx, {FavoriteRole});
189+ }
190+
191+ if (row == m_selectedRow) emit selectedChanged ();
192+ }
193+
171194void ExtensionSettingsModel::setAlias (int row, const QString &alias) {
172195 if (row < 0 || std::cmp_greater_equal (row, m_visibleIndices.size ())) return ;
173196 auto &e = m_allEntries[m_visibleIndices[row]];
@@ -309,6 +332,7 @@ void ExtensionSettingsModel::rebuild(const QString &filter) {
309332 ie.isProvider = false ;
310333 ie.indent = 1 ;
311334 ie.enabled = metadata.enabled ;
335+ ie.favorite = metadata.favorite ;
312336 ie.alias = QString::fromStdString (metadata.alias .value_or (" " ));
313337 ie.shortcut = QString::fromStdString (metadata.shortcut .value_or (" " ));
314338 ie.entrypointId = item->uniqueId ();
@@ -395,8 +419,8 @@ void ExtensionSettingsModel::loadCommandsForProvider(const QString &providerId)
395419 const auto &e = m_allEntries[j];
396420 auto *item = manager->findItemById (e.entrypointId );
397421 bool const hasPrefs = item && !item->preferences ().empty ();
398- commands.push_back ({e.name , e.type , e.iconSource , e.description , e.enabled , hasPrefs, e. alias ,
399- QString::fromStdString (e.entrypointId ), e.shortcut });
422+ commands.push_back ({e.name , e.type , e.iconSource , e.description , e.enabled , e. favorite , hasPrefs ,
423+ e. alias , QString::fromStdString (e.entrypointId ), e.shortcut });
400424 }
401425 break ;
402426 }
@@ -437,6 +461,14 @@ void ExtensionSettingsModel::setEnabledByEntrypointId(const QString &id, bool va
437461 }
438462}
439463
464+ void ExtensionSettingsModel::setFavoriteByEntrypointId (const QString &id, bool value) {
465+ int const row = findVisibleEntryByEntrypointId (id);
466+ if (row >= 0 ) {
467+ setFavorite (row, value);
468+ m_commandModel->setFavorite (id, value);
469+ }
470+ }
471+
440472void ExtensionSettingsModel::setAliasByEntrypointId (const QString &id, const QString &alias) {
441473 int const row = findVisibleEntryByEntrypointId (id);
442474 if (row >= 0 ) {
@@ -473,6 +505,7 @@ void ExtensionSettingsModel::loadCommandPreferences(const QString &entrypointId)
473505 for (auto &e : m_allEntries) {
474506 if (!e.isProvider && QString::fromStdString (e.entrypointId ) == entrypointId) {
475507 auto *item = manager->findItemById (e.entrypointId );
508+
476509 m_cmdPrefModel->load (e.entrypointId , item ? item->preferences () : std::vector<Preference>{});
477510 return ;
478511 }
0 commit comments