@@ -27,6 +27,7 @@ limitations under the License.
2727#include < QToolButton>
2828#include < QPropertyAnimation>
2929#include < QFrame>
30+ #include < map>
3031
3132// ExpandableGroupBox implementation
3233ExpandableGroupBox::ExpandableGroupBox (const QString& title, QWidget* parent)
@@ -708,6 +709,21 @@ TTDMemoryAccessType TTDMemoryQueryWidget::getSelectedAccessTypes()
708709 return accessType;
709710}
710711
712+ void TTDMemoryQueryWidget::setParametersAndQuery (uint64_t startAddr, uint64_t endAddr, TTDMemoryAccessType accessType)
713+ {
714+ // Set address fields
715+ m_startAddressEdit->setText (QString (" 0x%1" ).arg (startAddr, 0 , 16 ));
716+ m_endAddressEdit->setText (QString (" 0x%1" ).arg (endAddr, 0 , 16 ));
717+
718+ // Set access type checkboxes
719+ m_readAccessCheck->setChecked (accessType & TTDMemoryRead);
720+ m_writeAccessCheck->setChecked (accessType & TTDMemoryWrite);
721+ m_executeAccessCheck->setChecked (accessType & TTDMemoryExecute);
722+
723+ // Trigger the query
724+ performQuery ();
725+ }
726+
711727// TTDMemoryWidget implementation (tab container)
712728TTDMemoryWidget::TTDMemoryWidget (QWidget* parent, BinaryViewRef data)
713729 : QWidget(parent), m_data(data)
@@ -771,6 +787,27 @@ void TTDMemoryWidget::closeTab(int index)
771787 }
772788}
773789
790+ TTDMemoryQueryWidget* TTDMemoryWidget::getCurrentOrNewQueryWidget ()
791+ {
792+ // Get current tab widget
793+ TTDMemoryQueryWidget* currentWidget = qobject_cast<TTDMemoryQueryWidget*>(m_tabWidget->currentWidget ());
794+ if (currentWidget)
795+ return currentWidget;
796+
797+ // If no current widget or cast failed, create a new tab
798+ createNewTab ();
799+ return qobject_cast<TTDMemoryQueryWidget*>(m_tabWidget->currentWidget ());
800+ }
801+
802+ void TTDMemoryWidget::setParametersAndQuery (uint64_t startAddr, uint64_t endAddr, TTDMemoryAccessType accessType)
803+ {
804+ TTDMemoryQueryWidget* queryWidget = getCurrentOrNewQueryWidget ();
805+ if (queryWidget)
806+ {
807+ queryWidget->setParametersAndQuery (startAddr, endAddr, accessType);
808+ }
809+ }
810+
774811
775812
776813// TTDMemorySidebarWidget implementation
@@ -792,21 +829,56 @@ TTDMemorySidebarWidget::~TTDMemorySidebarWidget()
792829{
793830}
794831
832+ void TTDMemorySidebarWidget::setParametersAndQuery (uint64_t startAddr, uint64_t endAddr, TTDMemoryAccessType accessType)
833+ {
834+ if (m_memoryWidget)
835+ {
836+ m_memoryWidget->setParametersAndQuery (startAddr, endAddr, accessType);
837+ }
838+ }
839+
795840
796841// TTDMemoryWidgetType implementation
842+ std::map<std::pair<ViewFrame*, BinaryViewRef>, TTDMemoryWidgetType::PendingQuery> TTDMemoryWidgetType::s_pendingQueries;
843+
797844TTDMemoryWidgetType::TTDMemoryWidgetType ()
798845 : SidebarWidgetType(QIcon(" :/debugger/ttd-memory" ).pixmap(QSize(64 , 64 )).toImage(), "TTD Memory")
799846{
800847}
801848
802- SidebarWidget* TTDMemoryWidgetType::createWidget (ViewFrame*, BinaryViewRef data)
849+ SidebarWidget* TTDMemoryWidgetType::createWidget (ViewFrame* frame , BinaryViewRef data)
803850{
804- return new TTDMemorySidebarWidget (data);
851+ TTDMemorySidebarWidget* widget = new TTDMemorySidebarWidget (data);
852+
853+ // Check if there's a pending query for this frame/data combination
854+ auto key = std::make_pair (frame, data);
855+ auto it = s_pendingQueries.find (key);
856+ if (it != s_pendingQueries.end ())
857+ {
858+ const PendingQuery& query = it->second ;
859+ widget->setParametersAndQuery (query.startAddr , query.endAddr , query.accessType );
860+ s_pendingQueries.erase (it);
861+ }
862+
863+ return widget;
805864}
806865
807866SidebarContentClassifier* TTDMemoryWidgetType::contentClassifier (ViewFrame*, BinaryViewRef data)
808867{
809868 return new ActiveDebugSessionSidebarContentClassifier (data);
810869}
811870
871+ void TTDMemoryWidgetType::SetPendingQuery (ViewFrame* frame, BinaryViewRef data, uint64_t startAddr, uint64_t endAddr, TTDMemoryAccessType accessType)
872+ {
873+ auto key = std::make_pair (frame, data);
874+ PendingQuery query;
875+ query.startAddr = startAddr;
876+ query.endAddr = endAddr;
877+ query.accessType = accessType;
878+ s_pendingQueries[key] = query;
879+
880+ // Try to find if the widget is already active and apply the query immediately
881+ // This is a best-effort approach - the widget might apply the query when it becomes active
882+ }
883+
812884#include " ttdmemorywidget.moc"
0 commit comments