diff --git a/src/plugins/debugger/debuggeritemmanager.cpp b/src/plugins/debugger/debuggeritemmanager.cpp index 7b1c2a2ef9e..4abca97388a 100644 --- a/src/plugins/debugger/debuggeritemmanager.cpp +++ b/src/plugins/debugger/debuggeritemmanager.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -203,11 +204,13 @@ const DebuggerItem *findDebugger(const Predicate &pred) return titem ? &titem->m_item : nullptr; } +static QString genericCategoryDisplayName() { return Tr::tr("Generic"); } + DebuggerItemModel::DebuggerItemModel() { setHeader({Tr::tr("Name"), Tr::tr("Path"), Tr::tr("Type")}); - auto generic = new StaticTreeItem(Tr::tr("Generic")); + auto generic = new StaticTreeItem(genericCategoryDisplayName()); auto autoDetected = new StaticTreeItem({ProjectExplorer::Constants::msgAutoDetected()}, {ProjectExplorer::Constants::msgAutoDetectedToolTip()}); rootItem()->appendChild(generic); @@ -942,12 +945,19 @@ public: m_container->setState(DetailsWidget::NoSummary); m_container->setVisible(false); + m_sortModel = new KitSettingsSortModel(this); + m_sortModel->setSourceModel(&itemModel()); + m_sortModel->setSortedCategories({genericCategoryDisplayName(), + ProjectExplorer::Constants::msgAutoDetected(), + ProjectExplorer::Constants::msgManual()}); m_debuggerView = new QTreeView(this); - m_debuggerView->setModel(&itemModel()); + m_debuggerView->setModel(m_sortModel); m_debuggerView->setUniformRowHeights(true); m_debuggerView->setSelectionMode(QAbstractItemView::SingleSelection); m_debuggerView->setSelectionBehavior(QAbstractItemView::SelectRows); m_debuggerView->expandAll(); + m_debuggerView->setSortingEnabled(true); + m_debuggerView->sortByColumn(0, Qt::AscendingOrder); auto header = m_debuggerView->header(); header->setStretchLastSection(false); @@ -1003,6 +1013,7 @@ public: void currentDebuggerChanged(const QModelIndex &newCurrent); void updateButtons(); + KitSettingsSortModel *m_sortModel; QTreeView *m_debuggerView; QPushButton *m_addButton; QPushButton *m_cloneButton; @@ -1027,7 +1038,7 @@ void DebuggerSettingsPageWidget::cloneDebugger() newItem.setGeneric(item->isGeneric()); newItem.setEngineType(item->engineType()); auto addedItem = itemModel().addDebuggerItem(newItem, true); - m_debuggerView->setCurrentIndex(itemModel().indexForItem(addedItem)); + m_debuggerView->setCurrentIndex(m_sortModel->mapFromSource(itemModel().indexForItem(addedItem))); } void DebuggerSettingsPageWidget::addDebugger() @@ -1038,7 +1049,7 @@ void DebuggerSettingsPageWidget::addDebugger() item.setUnexpandedDisplayName(itemModel().uniqueDisplayName(Tr::tr("New Debugger"))); item.setAutoDetected(false); auto addedItem = itemModel().addDebuggerItem(item, true); - m_debuggerView->setCurrentIndex(itemModel().indexForItem(addedItem)); + m_debuggerView->setCurrentIndex(m_sortModel->mapFromSource(itemModel().indexForItem(addedItem))); } void DebuggerSettingsPageWidget::removeDebugger() @@ -1052,7 +1063,7 @@ void DebuggerSettingsPageWidget::removeDebugger() void DebuggerSettingsPageWidget::currentDebuggerChanged(const QModelIndex &newCurrent) { - itemModel().setCurrentIndex(newCurrent); + itemModel().setCurrentIndex(m_sortModel->mapToSource(newCurrent)); updateButtons(); } diff --git a/src/plugins/projectexplorer/kitoptionspage.cpp b/src/plugins/projectexplorer/kitoptionspage.cpp index 21fcf862123..14098e98320 100644 --- a/src/plugins/projectexplorer/kitoptionspage.cpp +++ b/src/plugins/projectexplorer/kitoptionspage.cpp @@ -33,11 +33,19 @@ namespace ProjectExplorer { bool KitSettingsSortModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const { - if (!source_left.parent().isValid()) { - QTC_CHECK(!source_right.parent().isValid()); - return sourceModel()->data(source_left) == Constants::msgAutoDetected(); - } - return SortModel::lessThan(source_left, source_right); + const auto defaultCmp = [&] { return SortModel::lessThan(source_left, source_right); }; + + if (m_sortedCategories.isEmpty() || source_left.parent().isValid()) + return defaultCmp(); + + QTC_ASSERT(!source_right.parent().isValid(), return defaultCmp()); + const int leftIndex = m_sortedCategories.indexOf(sourceModel()->data(source_left)); + QTC_ASSERT(leftIndex != -1, return defaultCmp()); + if (leftIndex == 0) + return true; + const int rightIndex = m_sortedCategories.indexOf(sourceModel()->data(source_right)); + QTC_ASSERT(rightIndex != -1, return defaultCmp()); + return leftIndex < rightIndex; } namespace Internal { @@ -534,6 +542,7 @@ KitOptionsPageWidget::KitOptionsPageWidget() verticalLayout->setStretch(0, 1); verticalLayout->setStretch(1, 0); m_sortModel = new KitSettingsSortModel(this); + m_sortModel->setSortedCategories({Constants::msgAutoDetected(), Constants::msgManual()}); m_sortModel->setSourceModel(m_model); m_kitsView->setModel(m_sortModel); diff --git a/src/plugins/projectexplorer/kitoptionspage.h b/src/plugins/projectexplorer/kitoptionspage.h index 297d3e766b5..8734024574f 100644 --- a/src/plugins/projectexplorer/kitoptionspage.h +++ b/src/plugins/projectexplorer/kitoptionspage.h @@ -16,8 +16,12 @@ class PROJECTEXPLORER_EXPORT KitSettingsSortModel : public Utils::SortModel public: using SortModel::SortModel; + void setSortedCategories(const QStringList &categories) { m_sortedCategories = categories; } + private: bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override; + + QStringList m_sortedCategories; }; namespace Internal { diff --git a/src/plugins/projectexplorer/toolchainoptionspage.cpp b/src/plugins/projectexplorer/toolchainoptionspage.cpp index 237b9ff8921..3585050f6dc 100644 --- a/src/plugins/projectexplorer/toolchainoptionspage.cpp +++ b/src/plugins/projectexplorer/toolchainoptionspage.cpp @@ -183,6 +183,7 @@ public: m_toolChainView->setSelectionMode(QAbstractItemView::SingleSelection); m_toolChainView->setSelectionBehavior(QAbstractItemView::SelectRows); m_sortModel.setSourceModel(&m_model); + m_sortModel.setSortedCategories({Constants::msgAutoDetected(), Constants::msgManual()}); m_toolChainView->setModel(&m_sortModel); m_toolChainView->setSortingEnabled(true); m_toolChainView->sortByColumn(0, Qt::AscendingOrder); diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp index ef5960a7629..741aeeb567c 100644 --- a/src/plugins/qtsupport/qtoptionspage.cpp +++ b/src/plugins/qtsupport/qtoptionspage.cpp @@ -315,6 +315,8 @@ QtOptionsPageWidget::QtOptionsPageWidget() m_model->rootItem()->appendChild(m_manualItem); m_filterModel = new KitSettingsSortModel(this); + m_filterModel->setSortedCategories({ProjectExplorer::Constants::msgAutoDetected(), + ProjectExplorer::Constants::msgManual()}); m_filterModel->setSourceModel(m_model); m_qtdirList->setModel(m_filterModel);