Skip to content

Commit 43e85c4

Browse files
committed
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.
1 parent 8be4f37 commit 43e85c4

File tree

5 files changed

+49
-17
lines changed

5 files changed

+49
-17
lines changed

view/kernelcache/ui/kctriage.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,7 @@ QWidget* KCTriageView::initImageTable()
298298
m_imageTable->setSelectionBehavior(QAbstractItemView::SelectRows);
299299
m_imageTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
300300

301+
m_imageTable->sortByColumn(0, Qt::AscendingOrder);
301302
m_imageTable->setSortingEnabled(true);
302303

303304
m_imageTable->verticalHeader()->setVisible(false);
@@ -454,4 +455,8 @@ void KCTriageView::RefreshData()
454455
setImageLoaded(loadedImg.headerVirtualAddress);
455456

456457
m_symbolTable->populateSymbols(*m_data);
458+
459+
// Reapply the current sort after repopulating the model
460+
// TODO: This should use `QSortFilterProxyModel`, but that's a bigger change.
461+
m_imageTable->setSortingEnabled(true);
457462
}

view/kernelcache/ui/symboltable.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,10 @@ void SymbolTableView::populateSymbols(BinaryView &view)
196196
{
197197
auto symbols = watcher->result();
198198
m_model->updateSymbols(std::move(symbols));
199+
200+
// Reapply the current sort after repopulating the model
201+
// TODO: The model should use `QSortFilterProxyModel`, but that's a bigger change.
202+
setSortingEnabled(true);
199203
}
200204
});
201205
QFuture<SymbolList> future = QtConcurrent::run([controller]() {

view/sharedcache/ui/dsctriage.cpp

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,7 @@ QWidget* DSCTriageView::initImageTable()
300300
m_imageTable->setSelectionBehavior(QAbstractItemView::SelectRows);
301301
m_imageTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
302302

303+
m_imageTable->sortByColumn(0, Qt::AscendingOrder);
303304
m_imageTable->setSortingEnabled(true);
304305

305306
m_imageTable->verticalHeader()->setVisible(false);
@@ -421,32 +422,34 @@ void DSCTriageView::initCacheInfoTables()
421422
m_mappingTable->setSelectionBehavior(QAbstractItemView::SelectRows);
422423
m_mappingTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
423424

425+
m_mappingTable->sortByColumn(0, Qt::AscendingOrder);
424426
m_mappingTable->setSortingEnabled(true);
425427

426428
m_mappingTable->verticalHeader()->setVisible(false);
427429

428-
auto regionTable = new FilterableTableView(cacheInfoSubwidget);
429-
m_regionModel = new QStandardItemModel(0, 4, regionTable);
430+
m_regionTable = new FilterableTableView(cacheInfoSubwidget);
431+
m_regionModel = new QStandardItemModel(0, 4, m_regionTable);
430432
m_regionModel->setHorizontalHeaderLabels({"Address", "Size", "Type", "Name"});
431433

432434
// Apply custom column styling
433-
regionTable->setItemDelegateForColumn(0, new AddressColorDelegate(regionTable));
435+
m_regionTable->setItemDelegateForColumn(0, new AddressColorDelegate(m_regionTable));
434436

435-
regionTable->setModel(m_regionModel);
437+
m_regionTable->setModel(m_regionModel);
436438

437-
regionTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
438-
regionTable->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
439-
regionTable->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
440-
regionTable->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Stretch);
439+
m_regionTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
440+
m_regionTable->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
441+
m_regionTable->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
442+
m_regionTable->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Stretch);
441443

442-
regionTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
444+
m_regionTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
443445

444-
regionTable->setSelectionBehavior(QAbstractItemView::SelectRows);
445-
regionTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
446+
m_regionTable->setSelectionBehavior(QAbstractItemView::SelectRows);
447+
m_regionTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
446448

447-
regionTable->setSortingEnabled(true);
449+
m_regionTable->sortByColumn(0, Qt::AscendingOrder);
450+
m_regionTable->setSortingEnabled(true);
448451

449-
regionTable->verticalHeader()->setVisible(false);
452+
m_regionTable->verticalHeader()->setVisible(false);
450453

451454
auto mappingLabel = new QLabel("Mappings");
452455
auto mappingFilterEdit = new FilterEdit(m_mappingTable);
@@ -462,10 +465,10 @@ void DSCTriageView::initCacheInfoTables()
462465
mappingHeaderLayout->setSpacing(30);
463466

464467
auto regionLabel = new QLabel("Regions");
465-
auto regionFilterEdit = new FilterEdit(regionTable);
468+
auto regionFilterEdit = new FilterEdit(m_regionTable);
466469
regionFilterEdit->setPlaceholderText("Filter regions");
467-
connect(regionFilterEdit, &FilterEdit::textChanged, [regionTable](const QString& filter) {
468-
regionTable->setFilter(filter.toStdString());
470+
connect(regionFilterEdit, &FilterEdit::textChanged, [this](const QString& filter) {
471+
m_regionTable->setFilter(filter.toStdString());
469472
});
470473

471474
auto regionHeaderLayout = new QHBoxLayout;
@@ -480,7 +483,7 @@ void DSCTriageView::initCacheInfoTables()
480483

481484
auto regionLayout = new QVBoxLayout;
482485
regionLayout->addLayout(regionHeaderLayout);
483-
regionLayout->addWidget(regionTable);
486+
regionLayout->addWidget(m_regionTable);
484487

485488
cacheInfoLayout->addLayout(mappingLayout);
486489
cacheInfoLayout->addLayout(regionLayout);
@@ -552,6 +555,10 @@ void DSCTriageView::RefreshData()
552555
for (const auto& loadedImg : controller->GetLoadedImages())
553556
setImageLoaded(loadedImg.headerAddress);
554557

558+
// Reapply the current sort after repopulating the model
559+
// TODO: This should use `QSortFilterProxyModel`, but that's a bigger change.
560+
m_imageTable->setSortingEnabled(true);
561+
555562
m_regionModel->setRowCount(0);
556563
for (const auto& region : controller->GetRegions())
557564
{
@@ -563,6 +570,10 @@ void DSCTriageView::RefreshData()
563570
});
564571
}
565572

573+
// Reapply the current sort after repopulating the model
574+
// TODO: This should use `QSortFilterProxyModel`, but that's a bigger change.
575+
m_regionTable->setSortingEnabled(true);
576+
566577
m_mappingModel->setRowCount(0);
567578
for (const auto& entry : controller->GetEntries())
568579
{
@@ -578,5 +589,10 @@ void DSCTriageView::RefreshData()
578589
}
579590
}
580591

592+
// Reapply the current sort after repopulating the model
593+
// TODO: This should use `QSortFilterProxyModel`, but that's a bigger change.
594+
m_mappingTable->setSortingEnabled(true);
595+
596+
581597
m_symbolTable->populateSymbols(*m_data);
582598
}

view/sharedcache/ui/dsctriage.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,8 @@ class DSCTriageView : public QWidget, public View, public UIContextNotification
188188

189189
SymbolTableView* m_symbolTable;
190190

191+
FilterableTableView* m_regionTable;
192+
191193
FilterableTableView* m_mappingTable;
192194
QStandardItemModel* m_mappingModel;
193195

view/sharedcache/ui/symboltable.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ SymbolTableView::SymbolTableView(QWidget* parent) :
187187
setSelectionMode(QAbstractItemView::SingleSelection);
188188
verticalHeader()->setVisible(false);
189189

190+
sortByColumn(0, Qt::AscendingOrder);
190191
setSortingEnabled(true);
191192
}
192193

@@ -203,6 +204,10 @@ void SymbolTableView::populateSymbols(BinaryView &view)
203204
{
204205
auto symbols = watcher->result();
205206
m_model->updateSymbols(std::move(symbols));
207+
208+
// Reapply the current sort after repopulating the model
209+
// TODO: The model should use `QSortFilterProxyModel`, but that's a bigger change.
210+
setSortingEnabled(true);
206211
}
207212
});
208213
QFuture<SymbolList> future = QtConcurrent::run([controller]() {

0 commit comments

Comments
 (0)