summaryrefslogtreecommitdiff
path: root/view/sharedcache
diff options
context:
space:
mode:
authorMark Rowe <mark@vector35.com>2025-09-25 11:46:09 -0700
committerMark Rowe <mark@vector35.com>2025-09-25 14:42:01 -0700
commit43e85c45ab971e01716675a50d5a65717b830c4e (patch)
tree6362e768e6766631cc11d49d0d88837f3dc7cbf1 /view/sharedcache
parent8be4f37a4064df7eb5ce19389d6d8a35d67c54f8 (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.cpp50
-rw-r--r--view/sharedcache/ui/dsctriage.h2
-rw-r--r--view/sharedcache/ui/symboltable.cpp5
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]() {