Debugger: Enable sorting in the settings page

As for the other tabs in the Kits category.

Change-Id: Ibaed64336ed2ef57c463fe43ed5ca3e78aa673b2
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Christian Kandeler
2023-09-11 15:02:46 +02:00
parent 77cc79b7b0
commit 2906c7bedf
5 changed files with 37 additions and 10 deletions

View File

@@ -10,6 +10,7 @@
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <projectexplorer/devicesupport/devicemanager.h> #include <projectexplorer/devicesupport/devicemanager.h>
#include <projectexplorer/kitoptionspage.h>
#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/projectexplorericons.h> #include <projectexplorer/projectexplorericons.h>
@@ -203,11 +204,13 @@ const DebuggerItem *findDebugger(const Predicate &pred)
return titem ? &titem->m_item : nullptr; return titem ? &titem->m_item : nullptr;
} }
static QString genericCategoryDisplayName() { return Tr::tr("Generic"); }
DebuggerItemModel::DebuggerItemModel() DebuggerItemModel::DebuggerItemModel()
{ {
setHeader({Tr::tr("Name"), Tr::tr("Path"), Tr::tr("Type")}); 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()}, auto autoDetected = new StaticTreeItem({ProjectExplorer::Constants::msgAutoDetected()},
{ProjectExplorer::Constants::msgAutoDetectedToolTip()}); {ProjectExplorer::Constants::msgAutoDetectedToolTip()});
rootItem()->appendChild(generic); rootItem()->appendChild(generic);
@@ -942,12 +945,19 @@ public:
m_container->setState(DetailsWidget::NoSummary); m_container->setState(DetailsWidget::NoSummary);
m_container->setVisible(false); 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 = new QTreeView(this);
m_debuggerView->setModel(&itemModel()); m_debuggerView->setModel(m_sortModel);
m_debuggerView->setUniformRowHeights(true); m_debuggerView->setUniformRowHeights(true);
m_debuggerView->setSelectionMode(QAbstractItemView::SingleSelection); m_debuggerView->setSelectionMode(QAbstractItemView::SingleSelection);
m_debuggerView->setSelectionBehavior(QAbstractItemView::SelectRows); m_debuggerView->setSelectionBehavior(QAbstractItemView::SelectRows);
m_debuggerView->expandAll(); m_debuggerView->expandAll();
m_debuggerView->setSortingEnabled(true);
m_debuggerView->sortByColumn(0, Qt::AscendingOrder);
auto header = m_debuggerView->header(); auto header = m_debuggerView->header();
header->setStretchLastSection(false); header->setStretchLastSection(false);
@@ -1003,6 +1013,7 @@ public:
void currentDebuggerChanged(const QModelIndex &newCurrent); void currentDebuggerChanged(const QModelIndex &newCurrent);
void updateButtons(); void updateButtons();
KitSettingsSortModel *m_sortModel;
QTreeView *m_debuggerView; QTreeView *m_debuggerView;
QPushButton *m_addButton; QPushButton *m_addButton;
QPushButton *m_cloneButton; QPushButton *m_cloneButton;
@@ -1027,7 +1038,7 @@ void DebuggerSettingsPageWidget::cloneDebugger()
newItem.setGeneric(item->isGeneric()); newItem.setGeneric(item->isGeneric());
newItem.setEngineType(item->engineType()); newItem.setEngineType(item->engineType());
auto addedItem = itemModel().addDebuggerItem(newItem, true); auto addedItem = itemModel().addDebuggerItem(newItem, true);
m_debuggerView->setCurrentIndex(itemModel().indexForItem(addedItem)); m_debuggerView->setCurrentIndex(m_sortModel->mapFromSource(itemModel().indexForItem(addedItem)));
} }
void DebuggerSettingsPageWidget::addDebugger() void DebuggerSettingsPageWidget::addDebugger()
@@ -1038,7 +1049,7 @@ void DebuggerSettingsPageWidget::addDebugger()
item.setUnexpandedDisplayName(itemModel().uniqueDisplayName(Tr::tr("New Debugger"))); item.setUnexpandedDisplayName(itemModel().uniqueDisplayName(Tr::tr("New Debugger")));
item.setAutoDetected(false); item.setAutoDetected(false);
auto addedItem = itemModel().addDebuggerItem(item, true); auto addedItem = itemModel().addDebuggerItem(item, true);
m_debuggerView->setCurrentIndex(itemModel().indexForItem(addedItem)); m_debuggerView->setCurrentIndex(m_sortModel->mapFromSource(itemModel().indexForItem(addedItem)));
} }
void DebuggerSettingsPageWidget::removeDebugger() void DebuggerSettingsPageWidget::removeDebugger()
@@ -1052,7 +1063,7 @@ void DebuggerSettingsPageWidget::removeDebugger()
void DebuggerSettingsPageWidget::currentDebuggerChanged(const QModelIndex &newCurrent) void DebuggerSettingsPageWidget::currentDebuggerChanged(const QModelIndex &newCurrent)
{ {
itemModel().setCurrentIndex(newCurrent); itemModel().setCurrentIndex(m_sortModel->mapToSource(newCurrent));
updateButtons(); updateButtons();
} }

View File

@@ -33,11 +33,19 @@ namespace ProjectExplorer {
bool KitSettingsSortModel::lessThan(const QModelIndex &source_left, bool KitSettingsSortModel::lessThan(const QModelIndex &source_left,
const QModelIndex &source_right) const const QModelIndex &source_right) const
{ {
if (!source_left.parent().isValid()) { const auto defaultCmp = [&] { return SortModel::lessThan(source_left, source_right); };
QTC_CHECK(!source_right.parent().isValid());
return sourceModel()->data(source_left) == Constants::msgAutoDetected(); if (m_sortedCategories.isEmpty() || source_left.parent().isValid())
} return defaultCmp();
return SortModel::lessThan(source_left, source_right);
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 { namespace Internal {
@@ -534,6 +542,7 @@ KitOptionsPageWidget::KitOptionsPageWidget()
verticalLayout->setStretch(0, 1); verticalLayout->setStretch(0, 1);
verticalLayout->setStretch(1, 0); verticalLayout->setStretch(1, 0);
m_sortModel = new KitSettingsSortModel(this); m_sortModel = new KitSettingsSortModel(this);
m_sortModel->setSortedCategories({Constants::msgAutoDetected(), Constants::msgManual()});
m_sortModel->setSourceModel(m_model); m_sortModel->setSourceModel(m_model);
m_kitsView->setModel(m_sortModel); m_kitsView->setModel(m_sortModel);

View File

@@ -16,8 +16,12 @@ class PROJECTEXPLORER_EXPORT KitSettingsSortModel : public Utils::SortModel
public: public:
using SortModel::SortModel; using SortModel::SortModel;
void setSortedCategories(const QStringList &categories) { m_sortedCategories = categories; }
private: private:
bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override; bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override;
QStringList m_sortedCategories;
}; };
namespace Internal { namespace Internal {

View File

@@ -183,6 +183,7 @@ public:
m_toolChainView->setSelectionMode(QAbstractItemView::SingleSelection); m_toolChainView->setSelectionMode(QAbstractItemView::SingleSelection);
m_toolChainView->setSelectionBehavior(QAbstractItemView::SelectRows); m_toolChainView->setSelectionBehavior(QAbstractItemView::SelectRows);
m_sortModel.setSourceModel(&m_model); m_sortModel.setSourceModel(&m_model);
m_sortModel.setSortedCategories({Constants::msgAutoDetected(), Constants::msgManual()});
m_toolChainView->setModel(&m_sortModel); m_toolChainView->setModel(&m_sortModel);
m_toolChainView->setSortingEnabled(true); m_toolChainView->setSortingEnabled(true);
m_toolChainView->sortByColumn(0, Qt::AscendingOrder); m_toolChainView->sortByColumn(0, Qt::AscendingOrder);

View File

@@ -315,6 +315,8 @@ QtOptionsPageWidget::QtOptionsPageWidget()
m_model->rootItem()->appendChild(m_manualItem); m_model->rootItem()->appendChild(m_manualItem);
m_filterModel = new KitSettingsSortModel(this); m_filterModel = new KitSettingsSortModel(this);
m_filterModel->setSortedCategories({ProjectExplorer::Constants::msgAutoDetected(),
ProjectExplorer::Constants::msgManual()});
m_filterModel->setSourceModel(m_model); m_filterModel->setSourceModel(m_model);
m_qtdirList->setModel(m_filterModel); m_qtdirList->setModel(m_filterModel);