Skip to content

Commit 5d3a23c

Browse files
authored
fix sorting in ttd event widget (#991)
1 parent 850744d commit 5d3a23c

1 file changed

Lines changed: 53 additions & 44 deletions

File tree

ui/ttdeventswidget.cpp

Lines changed: 53 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ limitations under the License.
3030
#include <QFileInfo>
3131
#include <map>
3232

33+
static uint64_t PositionSortValue(const TTDPosition& position)
34+
{
35+
return (position.sequence << 32) | (position.step & 0xFFFFFFFF);
36+
}
37+
3338
// TTDEventsColumnVisibilityDialog implementation
3439
TTDEventsColumnVisibilityDialog::TTDEventsColumnVisibilityDialog(QWidget* parent, const QStringList& columnNames, const QList<bool>& visibility)
3540
: QDialog(parent)
@@ -457,7 +462,7 @@ void TTDEventsQueryWidget::filterAndDisplayEvents()
457462
const TTDEvent& event = filteredEvents[i];
458463

459464
// Index
460-
m_resultsTable->setItem(i, IndexColumn, new QTableWidgetItem(QString::number(i + 1)));
465+
m_resultsTable->setItem(i, IndexColumn, new NumericalTableWidgetItem(QString::number(i + 1), i + 1));
461466

462467
// Event Type
463468
QString eventTypeStr;
@@ -486,47 +491,47 @@ void TTDEventsQueryWidget::filterAndDisplayEvents()
486491

487492
// Position
488493
QString positionStr = QString("%1:%2").arg(event.position.sequence, 0, 16).arg(event.position.step, 0, 16);
489-
m_resultsTable->setItem(i, PositionColumn, new QTableWidgetItem(positionStr));
494+
m_resultsTable->setItem(i, PositionColumn, new NumericalTableWidgetItem(positionStr, PositionSortValue(event.position)));
490495

491496
// Thread details (if available)
492497
if (event.thread.has_value())
493498
{
494-
m_resultsTable->setItem(i, ThreadIdColumn, new QTableWidgetItem(QString::number(event.thread->id)));
495-
m_resultsTable->setItem(i, ThreadUniqueIdColumn, new QTableWidgetItem(QString::number(event.thread->uniqueId)));
499+
m_resultsTable->setItem(i, ThreadIdColumn, new NumericalTableWidgetItem(QString::number(event.thread->id), event.thread->id));
500+
m_resultsTable->setItem(i, ThreadUniqueIdColumn, new NumericalTableWidgetItem(QString::number(event.thread->uniqueId), event.thread->uniqueId));
496501
}
497502
else
498503
{
499-
m_resultsTable->setItem(i, ThreadIdColumn, new QTableWidgetItem(""));
500-
m_resultsTable->setItem(i, ThreadUniqueIdColumn, new QTableWidgetItem(""));
504+
m_resultsTable->setItem(i, ThreadIdColumn, new NumericalTableWidgetItem("", 0));
505+
m_resultsTable->setItem(i, ThreadUniqueIdColumn, new NumericalTableWidgetItem("", 0));
501506
}
502507

503508
// Module details (if available)
504509
if (event.module.has_value())
505510
{
506511
m_resultsTable->setItem(i, ModuleNameColumn, new QTableWidgetItem(QString::fromStdString(event.module->name)));
507-
m_resultsTable->setItem(i, ModuleAddressColumn, new QTableWidgetItem(QString("0x%1").arg(event.module->address, 0, 16)));
508-
m_resultsTable->setItem(i, ModuleSizeColumn, new QTableWidgetItem(QString::number(event.module->size)));
512+
m_resultsTable->setItem(i, ModuleAddressColumn, new NumericalTableWidgetItem(QString("0x%1").arg(event.module->address, 0, 16), event.module->address));
513+
m_resultsTable->setItem(i, ModuleSizeColumn, new NumericalTableWidgetItem(QString::number(event.module->size), event.module->size));
509514
}
510515
else
511516
{
512517
m_resultsTable->setItem(i, ModuleNameColumn, new QTableWidgetItem(""));
513-
m_resultsTable->setItem(i, ModuleAddressColumn, new QTableWidgetItem(""));
514-
m_resultsTable->setItem(i, ModuleSizeColumn, new QTableWidgetItem(""));
518+
m_resultsTable->setItem(i, ModuleAddressColumn, new NumericalTableWidgetItem("", 0));
519+
m_resultsTable->setItem(i, ModuleSizeColumn, new NumericalTableWidgetItem("", 0));
515520
}
516521

517522
// Exception details (if available)
518523
if (event.exception.has_value())
519524
{
520525
QString exceptionTypeStr = (event.exception->type == TTDExceptionHardware) ? "Hardware" : "Software";
521526
m_resultsTable->setItem(i, ExceptionTypeColumn, new QTableWidgetItem(exceptionTypeStr));
522-
m_resultsTable->setItem(i, ExceptionCodeColumn, new QTableWidgetItem(QString("0x%1").arg(event.exception->code, 0, 16)));
523-
m_resultsTable->setItem(i, ExceptionPCColumn, new QTableWidgetItem(QString("0x%1").arg(event.exception->programCounter, 0, 16)));
527+
m_resultsTable->setItem(i, ExceptionCodeColumn, new NumericalTableWidgetItem(QString("0x%1").arg(event.exception->code, 0, 16), event.exception->code));
528+
m_resultsTable->setItem(i, ExceptionPCColumn, new NumericalTableWidgetItem(QString("0x%1").arg(event.exception->programCounter, 0, 16), event.exception->programCounter));
524529
}
525530
else
526531
{
527532
m_resultsTable->setItem(i, ExceptionTypeColumn, new QTableWidgetItem(""));
528-
m_resultsTable->setItem(i, ExceptionCodeColumn, new QTableWidgetItem(""));
529-
m_resultsTable->setItem(i, ExceptionPCColumn, new QTableWidgetItem(""));
533+
m_resultsTable->setItem(i, ExceptionCodeColumn, new NumericalTableWidgetItem("", 0));
534+
m_resultsTable->setItem(i, ExceptionPCColumn, new NumericalTableWidgetItem("", 0));
530535
}
531536
}
532537

@@ -581,15 +586,15 @@ void TTDEventsQueryWidget::filterAndDisplaySpecializedEvents()
581586
int col = 0;
582587

583588
// Index (always first column)
584-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(QString::number(i + 1)));
589+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(QString::number(i + 1), i + 1));
585590

586591
switch (m_widgetType)
587592
{
588593
case ModuleEvents:
589594
// Position, Event Type, Name (base name), Module Address, Module Size, Module Checksum, Module Timestamp, Path (full path)
590595
{
591596
QString positionStr = QString("%1:%2").arg(event.position.sequence, 0, 16).arg(event.position.step, 0, 16);
592-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(positionStr));
597+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(positionStr, PositionSortValue(event.position)));
593598

594599
QString eventTypeStr = (event.type == TTDEventModuleLoaded) ? "Loaded" : "Unloaded";
595600
m_resultsTable->setItem(i, col++, new QTableWidgetItem(eventTypeStr));
@@ -603,17 +608,21 @@ void TTDEventsQueryWidget::filterAndDisplaySpecializedEvents()
603608
baseName = fullPath; // fallback to full path if no filename
604609

605610
m_resultsTable->setItem(i, col++, new QTableWidgetItem(baseName));
606-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(QString("0x%1").arg(event.module->address, 0, 16)));
607-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(QString::number(event.module->size)));
608-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(QString("0x%1").arg(event.module->checksum, 0, 16)));
609-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(QString("0x%1").arg(event.module->timestamp, 0, 16)));
611+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(QString("0x%1").arg(event.module->address, 0, 16), event.module->address));
612+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(QString::number(event.module->size), event.module->size));
613+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(QString("0x%1").arg(event.module->checksum, 0, 16), event.module->checksum));
614+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(QString("0x%1").arg(event.module->timestamp, 0, 16), event.module->timestamp));
610615
m_resultsTable->setItem(i, col++, new QTableWidgetItem(fullPath)); // Full path in last column
611616
}
612617
else
613618
{
614619
// Fill empty cells for all module columns
615-
for (int j = 0; j < 6; j++)
616-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(""));
620+
m_resultsTable->setItem(i, col++, new QTableWidgetItem(""));
621+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem("", 0));
622+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem("", 0));
623+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem("", 0));
624+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem("", 0));
625+
m_resultsTable->setItem(i, col++, new QTableWidgetItem(""));
617626
}
618627
}
619628
break;
@@ -622,36 +631,36 @@ void TTDEventsQueryWidget::filterAndDisplaySpecializedEvents()
622631
// Position, Event Type, Thread ID, Thread UniqueID, Lifetime Start, Lifetime End, Active Start, Active End
623632
{
624633
QString positionStr = QString("%1:%2").arg(event.position.sequence, 0, 16).arg(event.position.step, 0, 16);
625-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(positionStr));
634+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(positionStr, PositionSortValue(event.position)));
626635

627636
QString eventTypeStr = (event.type == TTDEventThreadCreated) ? "Created" : "Terminated";
628637
m_resultsTable->setItem(i, col++, new QTableWidgetItem(eventTypeStr));
629638

630639
if (event.thread.has_value())
631640
{
632-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(QString::number(event.thread->id)));
633-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(QString::number(event.thread->uniqueId)));
641+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(QString::number(event.thread->id), event.thread->id));
642+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(QString::number(event.thread->uniqueId), event.thread->uniqueId));
634643

635644
// Lifetime range
636645
QString lifetimeStart = QString("%1:%2").arg(event.thread->lifetimeStart.sequence, 0, 16).arg(event.thread->lifetimeStart.step, 0, 16);
637646
QString lifetimeEnd = QString("%1:%2").arg(event.thread->lifetimeEnd.sequence, 0, 16).arg(event.thread->lifetimeEnd.step, 0, 16);
638-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(lifetimeStart));
639-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(lifetimeEnd));
647+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(lifetimeStart, PositionSortValue(event.thread->lifetimeStart)));
648+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(lifetimeEnd, PositionSortValue(event.thread->lifetimeEnd)));
640649

641650
// Active time range
642651
QString activeStart = QString("%1:%2").arg(event.thread->activeTimeStart.sequence, 0, 16).arg(event.thread->activeTimeStart.step, 0, 16);
643652
QString activeEnd = QString("%1:%2").arg(event.thread->activeTimeEnd.sequence, 0, 16).arg(event.thread->activeTimeEnd.step, 0, 16);
644-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(activeStart));
645-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(activeEnd));
653+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(activeStart, PositionSortValue(event.thread->activeTimeStart)));
654+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(activeEnd, PositionSortValue(event.thread->activeTimeEnd)));
646655
}
647656
else
648657
{
649-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(""));
650-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(""));
651-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(""));
652-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(""));
653-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(""));
654-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(""));
658+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem("", 0));
659+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem("", 0));
660+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem("", 0));
661+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem("", 0));
662+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem("", 0));
663+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem("", 0));
655664
}
656665
}
657666
break;
@@ -660,24 +669,24 @@ void TTDEventsQueryWidget::filterAndDisplaySpecializedEvents()
660669
// Position, Exception Type, Program Counter, Exception Code, Exception Flags, Record Address
661670
{
662671
QString positionStr = QString("%1:%2").arg(event.position.sequence, 0, 16).arg(event.position.step, 0, 16);
663-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(positionStr));
672+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(positionStr, PositionSortValue(event.position)));
664673

665674
if (event.exception.has_value())
666675
{
667676
QString exceptionTypeStr = (event.exception->type == TTDExceptionHardware) ? "Hardware" : "Software";
668677
m_resultsTable->setItem(i, col++, new QTableWidgetItem(exceptionTypeStr));
669-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(QString("0x%1").arg(event.exception->programCounter, 0, 16)));
670-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(QString("0x%1").arg(event.exception->code, 0, 16)));
671-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(QString("0x%1").arg(event.exception->flags, 0, 16)));
672-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(QString("0x%1").arg(event.exception->recordAddress, 0, 16)));
678+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(QString("0x%1").arg(event.exception->programCounter, 0, 16), event.exception->programCounter));
679+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(QString("0x%1").arg(event.exception->code, 0, 16), event.exception->code));
680+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(QString("0x%1").arg(event.exception->flags, 0, 16), event.exception->flags));
681+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem(QString("0x%1").arg(event.exception->recordAddress, 0, 16), event.exception->recordAddress));
673682
}
674683
else
675684
{
676685
m_resultsTable->setItem(i, col++, new QTableWidgetItem(""));
677-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(""));
678-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(""));
679-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(""));
680-
m_resultsTable->setItem(i, col++, new QTableWidgetItem(""));
686+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem("", 0));
687+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem("", 0));
688+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem("", 0));
689+
m_resultsTable->setItem(i, col++, new NumericalTableWidgetItem("", 0));
681690
}
682691
}
683692
break;

0 commit comments

Comments
 (0)