diff --git a/src/libs/installer/componentselectionpage_p.cpp b/src/libs/installer/componentselectionpage_p.cpp index f77e0ae4..0e60788c 100644 --- a/src/libs/installer/componentselectionpage_p.cpp +++ b/src/libs/installer/componentselectionpage_p.cpp @@ -198,7 +198,7 @@ void ComponentSelectionPagePrivate::setupCategoryLayout() connect(fetchCategoryButton, &QPushButton::clicked, this, &ComponentSelectionPagePrivate::fetchRepositoryCategories); - foreach (RepositoryCategory repository, m_core->settings().repositoryCategories()) { + foreach (RepositoryCategory repository, m_core->settings().organizedRepositoryCategories()) { QCheckBox *checkBox = new QCheckBox; checkBox->setObjectName(repository.displayname()); connect(checkBox, &QCheckBox::stateChanged, this, @@ -324,8 +324,17 @@ void ComponentSelectionPagePrivate::checkboxStateChanged() } } -void ComponentSelectionPagePrivate::enableRepositoryCategory(int index, bool enable) { - RepositoryCategory repoCategory = m_core->settings().repositoryCategories().toList().at(index); +void ComponentSelectionPagePrivate::enableRepositoryCategory(const QString &repositoryName, bool enable) +{ + QMap organizedRepositoryCategories = m_core->settings().organizedRepositoryCategories(); + + QMap::iterator i = organizedRepositoryCategories.find(repositoryName); + RepositoryCategory repoCategory; + while (i != organizedRepositoryCategories.end() && i.key() == repositoryName) { + repoCategory = i.value(); + i++; + } + RepositoryCategory replacement = repoCategory; replacement.setEnabled(enable); QSet tmpRepoCategories = m_core->settings().repositoryCategories(); @@ -374,7 +383,7 @@ void ComponentSelectionPagePrivate::fetchRepositoryCategories() QList checkboxes = m_categoryGroupBox->findChildren(); for (int i = 0; i < checkboxes.count(); i++) { checkbox = checkboxes.at(i); - enableRepositoryCategory(i, checkbox->isChecked()); + enableRepositoryCategory(checkbox->objectName(), checkbox->isChecked()); } if (!m_core->fetchRemotePackagesTree()) { diff --git a/src/libs/installer/componentselectionpage_p.h b/src/libs/installer/componentselectionpage_p.h index ece8ef91..9ebec834 100644 --- a/src/libs/installer/componentselectionpage_p.h +++ b/src/libs/installer/componentselectionpage_p.h @@ -72,7 +72,7 @@ public slots: void selectAll(); void deselectAll(); void checkboxStateChanged(); - void enableRepositoryCategory(int index, bool enable); + void enableRepositoryCategory(const QString &repositoryName, bool enable); void updateWidgetVisibility(bool show); void fetchRepositoryCategories(); void customButtonClicked(int which); diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp index bc9024ac..2a10d1a8 100644 --- a/src/libs/installer/settings.cpp +++ b/src/libs/installer/settings.cpp @@ -584,6 +584,16 @@ QSet Settings::repositoryCategories() const return variantListToSet(d->m_data.values(scRepositoryCategories)); } +QMap Settings::organizedRepositoryCategories() const +{ + QSet categories = repositoryCategories(); + QMap map; + foreach (const RepositoryCategory &category, categories) { + map.insert(category.displayname(), category); + } + return map; +} + void Settings::setDefaultRepositories(const QSet &repositories) { d->m_data.remove(scRepositories); diff --git a/src/libs/installer/settings.h b/src/libs/installer/settings.h index 0ee58639..55b94d74 100644 --- a/src/libs/installer/settings.h +++ b/src/libs/installer/settings.h @@ -116,6 +116,7 @@ public: QSet defaultRepositories() const; QSet repositoryCategories() const; + QMap organizedRepositoryCategories() const; void setDefaultRepositories(const QSet &repositories); void addDefaultRepositories(const QSet &repositories); void addRepositoryCategories(const QSet &repositories);