diff options
| author | Mark Rowe <mark@vector35.com> | 2025-09-25 11:46:09 -0700 |
|---|---|---|
| committer | Mark Rowe <mark@vector35.com> | 2025-09-25 14:42:01 -0700 |
| commit | 43e85c45ab971e01716675a50d5a65717b830c4e (patch) | |
| tree | 6362e768e6766631cc11d49d0d88837f3dc7cbf1 /view/sharedcache | |
| parent | 8be4f37a4064df7eb5ce19389d6d8a35d67c54f8 (diff) | |
Sort table views in the shared cache / kernel cache triage views by address by default
The table views previously visually suggested they were being sorted by
address, but in practice they were not sorted until the user set an
explicit sort order by clicking on a column header.
Diffstat (limited to 'view/sharedcache')
| -rw-r--r-- | view/sharedcache/ui/dsctriage.cpp | 50 | ||||
| -rw-r--r-- | view/sharedcache/ui/dsctriage.h | 2 | ||||
| -rw-r--r-- | view/sharedcache/ui/symboltable.cpp | 5 |
3 files changed, 40 insertions, 17 deletions
diff --git a/view/sharedcache/ui/dsctriage.cpp b/view/sharedcache/ui/dsctriage.cpp index 081ef25e..48ad6130 100644 --- a/view/sharedcache/ui/dsctriage.cpp +++ b/view/sharedcache/ui/dsctriage.cpp @@ -300,6 +300,7 @@ QWidget* DSCTriageView::initImageTable() m_imageTable->setSelectionBehavior(QAbstractItemView::SelectRows); m_imageTable->setSelectionMode(QAbstractItemView::ExtendedSelection); + m_imageTable->sortByColumn(0, Qt::AscendingOrder); m_imageTable->setSortingEnabled(true); m_imageTable->verticalHeader()->setVisible(false); @@ -421,32 +422,34 @@ void DSCTriageView::initCacheInfoTables() m_mappingTable->setSelectionBehavior(QAbstractItemView::SelectRows); m_mappingTable->setSelectionMode(QAbstractItemView::ExtendedSelection); + m_mappingTable->sortByColumn(0, Qt::AscendingOrder); m_mappingTable->setSortingEnabled(true); m_mappingTable->verticalHeader()->setVisible(false); - auto regionTable = new FilterableTableView(cacheInfoSubwidget); - m_regionModel = new QStandardItemModel(0, 4, regionTable); + m_regionTable = new FilterableTableView(cacheInfoSubwidget); + m_regionModel = new QStandardItemModel(0, 4, m_regionTable); m_regionModel->setHorizontalHeaderLabels({"Address", "Size", "Type", "Name"}); // Apply custom column styling - regionTable->setItemDelegateForColumn(0, new AddressColorDelegate(regionTable)); + m_regionTable->setItemDelegateForColumn(0, new AddressColorDelegate(m_regionTable)); - regionTable->setModel(m_regionModel); + m_regionTable->setModel(m_regionModel); - regionTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); - regionTable->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents); - regionTable->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeToContents); - regionTable->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Stretch); + m_regionTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); + m_regionTable->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents); + m_regionTable->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeToContents); + m_regionTable->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Stretch); - regionTable->setEditTriggers(QAbstractItemView::NoEditTriggers); + m_regionTable->setEditTriggers(QAbstractItemView::NoEditTriggers); - regionTable->setSelectionBehavior(QAbstractItemView::SelectRows); - regionTable->setSelectionMode(QAbstractItemView::ExtendedSelection); + m_regionTable->setSelectionBehavior(QAbstractItemView::SelectRows); + m_regionTable->setSelectionMode(QAbstractItemView::ExtendedSelection); - regionTable->setSortingEnabled(true); + m_regionTable->sortByColumn(0, Qt::AscendingOrder); + m_regionTable->setSortingEnabled(true); - regionTable->verticalHeader()->setVisible(false); + m_regionTable->verticalHeader()->setVisible(false); auto mappingLabel = new QLabel("Mappings"); auto mappingFilterEdit = new FilterEdit(m_mappingTable); @@ -462,10 +465,10 @@ void DSCTriageView::initCacheInfoTables() mappingHeaderLayout->setSpacing(30); auto regionLabel = new QLabel("Regions"); - auto regionFilterEdit = new FilterEdit(regionTable); + auto regionFilterEdit = new FilterEdit(m_regionTable); regionFilterEdit->setPlaceholderText("Filter regions"); - connect(regionFilterEdit, &FilterEdit::textChanged, [regionTable](const QString& filter) { - regionTable->setFilter(filter.toStdString()); + connect(regionFilterEdit, &FilterEdit::textChanged, [this](const QString& filter) { + m_regionTable->setFilter(filter.toStdString()); }); auto regionHeaderLayout = new QHBoxLayout; @@ -480,7 +483,7 @@ void DSCTriageView::initCacheInfoTables() auto regionLayout = new QVBoxLayout; regionLayout->addLayout(regionHeaderLayout); - regionLayout->addWidget(regionTable); + regionLayout->addWidget(m_regionTable); cacheInfoLayout->addLayout(mappingLayout); cacheInfoLayout->addLayout(regionLayout); @@ -552,6 +555,10 @@ void DSCTriageView::RefreshData() for (const auto& loadedImg : controller->GetLoadedImages()) setImageLoaded(loadedImg.headerAddress); + // Reapply the current sort after repopulating the model + // TODO: This should use `QSortFilterProxyModel`, but that's a bigger change. + m_imageTable->setSortingEnabled(true); + m_regionModel->setRowCount(0); for (const auto& region : controller->GetRegions()) { @@ -563,6 +570,10 @@ void DSCTriageView::RefreshData() }); } + // Reapply the current sort after repopulating the model + // TODO: This should use `QSortFilterProxyModel`, but that's a bigger change. + m_regionTable->setSortingEnabled(true); + m_mappingModel->setRowCount(0); for (const auto& entry : controller->GetEntries()) { @@ -578,5 +589,10 @@ void DSCTriageView::RefreshData() } } + // Reapply the current sort after repopulating the model + // TODO: This should use `QSortFilterProxyModel`, but that's a bigger change. + m_mappingTable->setSortingEnabled(true); + + m_symbolTable->populateSymbols(*m_data); } diff --git a/view/sharedcache/ui/dsctriage.h b/view/sharedcache/ui/dsctriage.h index 164e7ffb..33f45bcf 100644 --- a/view/sharedcache/ui/dsctriage.h +++ b/view/sharedcache/ui/dsctriage.h @@ -188,6 +188,8 @@ class DSCTriageView : public QWidget, public View, public UIContextNotification SymbolTableView* m_symbolTable; + FilterableTableView* m_regionTable; + FilterableTableView* m_mappingTable; QStandardItemModel* m_mappingModel; diff --git a/view/sharedcache/ui/symboltable.cpp b/view/sharedcache/ui/symboltable.cpp index e4c5dcd8..a876bf61 100644 --- a/view/sharedcache/ui/symboltable.cpp +++ b/view/sharedcache/ui/symboltable.cpp @@ -187,6 +187,7 @@ SymbolTableView::SymbolTableView(QWidget* parent) : setSelectionMode(QAbstractItemView::SingleSelection); verticalHeader()->setVisible(false); + sortByColumn(0, Qt::AscendingOrder); setSortingEnabled(true); } @@ -203,6 +204,10 @@ void SymbolTableView::populateSymbols(BinaryView &view) { auto symbols = watcher->result(); m_model->updateSymbols(std::move(symbols)); + + // Reapply the current sort after repopulating the model + // TODO: The model should use `QSortFilterProxyModel`, but that's a bigger change. + setSortingEnabled(true); } }); QFuture<SymbolList> future = QtConcurrent::run([controller]() { |
