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 <projectexplorer/devicesupport/devicemanager.h>
#include <projectexplorer/kitoptionspage.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/projectexplorericons.h>
@@ -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();
}

View File

@@ -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);

View File

@@ -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 {

View File

@@ -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);

View File

@@ -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);