@@ -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
3439TTDEventsColumnVisibilityDialog::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