@@ -42,7 +42,7 @@ class NumericalTableWidgetItem : public QTableWidgetItem
4242
4343// TTDHeapQueryWidget implementation
4444TTDHeapQueryWidget::TTDHeapQueryWidget (QWidget* parent, BinaryViewRef data)
45- : QWidget(parent), m_data(data)
45+ : QWidget(parent), m_data(data), m_hasPopulatedData( false )
4646{
4747 m_controller = DebuggerController::GetController (m_data);
4848 if (!m_controller)
@@ -65,10 +65,22 @@ TTDHeapQueryWidget::TTDHeapQueryWidget(QWidget* parent, BinaryViewRef data)
6565
6666 setupUI ();
6767 setupUIActions ();
68+
69+ // Register for debugger events
70+ connect (this , &TTDHeapQueryWidget::debuggerEvent, this , &TTDHeapQueryWidget::onDebuggerEvent);
71+
72+ m_debuggerEventCallback = m_controller->RegisterEventCallback (
73+ [&](const DebuggerEvent& event) {
74+ emit debuggerEvent (event);
75+ },
76+ " TTD Heap Widget" );
6877}
6978
7079TTDHeapQueryWidget::~TTDHeapQueryWidget ()
7180{
81+ if (m_controller)
82+ m_controller->RemoveEventCallback (m_debuggerEventCallback);
83+
7284 if (m_contextMenuManager)
7385 delete m_contextMenuManager;
7486}
@@ -118,25 +130,6 @@ void TTDHeapQueryWidget::setupTable()
118130 m_resultsTable->setSelectionBehavior (QAbstractItemView::SelectRows);
119131 m_resultsTable->setSortingEnabled (true );
120132 m_resultsTable->setContextMenuPolicy (Qt::CustomContextMenu);
121-
122- // Set column widths
123- m_resultsTable->setColumnWidth (IndexColumn, 80 );
124- m_resultsTable->setColumnWidth (EventTypeColumn, 100 );
125- m_resultsTable->setColumnWidth (ActionColumn, 100 );
126- m_resultsTable->setColumnWidth (TimeStartColumn, 120 );
127- m_resultsTable->setColumnWidth (TimeEndColumn, 120 );
128- m_resultsTable->setColumnWidth (HeapColumn, 120 );
129- m_resultsTable->setColumnWidth (AddressColumn, 120 );
130- m_resultsTable->setColumnWidth (PreviousAddressColumn, 120 );
131- m_resultsTable->setColumnWidth (SizeColumn, 100 );
132- m_resultsTable->setColumnWidth (BaseAddressColumn, 120 );
133- m_resultsTable->setColumnWidth (FlagsColumn, 100 );
134- m_resultsTable->setColumnWidth (ResultColumn, 100 );
135- m_resultsTable->setColumnWidth (ReserveSizeColumn, 100 );
136- m_resultsTable->setColumnWidth (CommitSizeColumn, 100 );
137- m_resultsTable->setColumnWidth (MakeReadOnlyColumn, 100 );
138- m_resultsTable->setColumnWidth (ThreadIdColumn, 100 );
139- m_resultsTable->setColumnWidth (UniqueThreadIdColumn, 120 );
140133
141134 updateColumnVisibility ();
142135
@@ -263,6 +256,12 @@ void TTDHeapQueryWidget::performQuery()
263256 m_resultsTable->setItem (i, ParametersColumn, new QTableWidgetItem (paramStrings.join (" , " )));
264257 }
265258
259+ // Resize columns to fit contents after populating data
260+ m_resultsTable->resizeColumnsToContents ();
261+
262+ // Mark that we have populated data
263+ m_hasPopulatedData = true ;
264+
266265 updateStatus (QString (" Found %1 heap objects" ).arg (events.size ()));
267266 }
268267 catch (const std::exception& e)
@@ -277,6 +276,7 @@ void TTDHeapQueryWidget::performQuery()
277276void TTDHeapQueryWidget::clearResults ()
278277{
279278 m_resultsTable->setRowCount (0 );
279+ m_hasPopulatedData = false ;
280280 updateStatus (" Results cleared" );
281281}
282282
@@ -499,6 +499,22 @@ void TTDHeapQueryWidget::copyEntireTable()
499499 QApplication::clipboard ()->setText (tableData.join (" \n " ));
500500}
501501
502+ void TTDHeapQueryWidget::onDebuggerEvent (const DebuggerEvent& event)
503+ {
504+ switch (event.type )
505+ {
506+ case TargetStoppedEventType:
507+ // When the target stops, populate data if not already populated
508+ if (!m_hasPopulatedData && m_controller && m_controller->IsTTD ())
509+ {
510+ performQuery ();
511+ }
512+ break ;
513+ default :
514+ break ;
515+ }
516+ }
517+
502518// TTDHeapWidget implementation (tab container)
503519TTDHeapWidget::TTDHeapWidget (QWidget* parent, BinaryViewRef data)
504520 : QWidget(parent), m_data(data)
0 commit comments