Skip to content

Commit 62773d8

Browse files
authored
Duplicate query parameters when creating new tabs in TTD memory/calls widgets (#858)
1 parent 8124878 commit 62773d8

File tree

4 files changed

+114
-0
lines changed

4 files changed

+114
-0
lines changed

ui/ttdcallswidget.cpp

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,35 @@ void TTDCallsQueryWidget::setParametersAndQuery(const std::string& symbols, uint
559559
performQuery();
560560
}
561561

562+
void TTDCallsQueryWidget::setParameters(const std::string& symbols, uint64_t startAddr, uint64_t endAddr)
563+
{
564+
// Set symbol parameters
565+
m_symbolsEdit->setText(QString::fromStdString(symbols));
566+
567+
// Set address range
568+
if (startAddr != 0)
569+
m_startAddressEdit->setText(QString("0x%1").arg(startAddr, 0, 16));
570+
if (endAddr != 0)
571+
m_endAddressEdit->setText(QString("0x%1").arg(endAddr, 0, 16));
572+
573+
// Don't execute query
574+
}
575+
576+
void TTDCallsQueryWidget::setParameters(const QString& symbols, const QString& startAddr, const QString& endAddr)
577+
{
578+
// Set symbol parameters as string
579+
if (!symbols.isEmpty())
580+
m_symbolsEdit->setText(symbols);
581+
582+
// Set address range as strings
583+
if (!startAddr.isEmpty())
584+
m_startAddressEdit->setText(startAddr);
585+
if (!endAddr.isEmpty())
586+
m_endAddressEdit->setText(endAddr);
587+
588+
// Don't execute query
589+
}
590+
562591
bool TTDCallsQueryWidget::isUnused() const
563592
{
564593
// Consider a tab unused if it has no results
@@ -608,9 +637,27 @@ void TTDCallsWidget::setupUI()
608637

609638
void TTDCallsWidget::createNewTab()
610639
{
640+
// Get parameters from current tab if exists
641+
TTDCallsQueryWidget* currentWidget = qobject_cast<TTDCallsQueryWidget*>(m_tabWidget->currentWidget());
642+
QString symbols, startAddr, endAddr;
643+
644+
if (currentWidget)
645+
{
646+
symbols = currentWidget->getSymbols();
647+
startAddr = currentWidget->getStartAddress();
648+
endAddr = currentWidget->getEndAddress();
649+
}
650+
651+
// Create new tab
611652
auto queryWidget = new TTDCallsQueryWidget(this, m_data);
612653
int index = m_tabWidget->addTab(queryWidget, QString("Query %1").arg(m_tabWidget->count() + 1));
613654
m_tabWidget->setCurrentIndex(index);
655+
656+
// Set parameters from previous tab if any existed
657+
if (currentWidget && (!symbols.isEmpty() || !startAddr.isEmpty() || !endAddr.isEmpty()))
658+
{
659+
queryWidget->setParameters(symbols, startAddr, endAddr);
660+
}
614661
}
615662

616663
void TTDCallsWidget::closeTab(int index)

ui/ttdcallswidget.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,17 @@ class TTDCallsQueryWidget : public QWidget
112112
// Method to set parameters and execute query from context menu
113113
void setParametersAndQuery(const std::string& symbols, uint64_t startAddr = 0, uint64_t endAddr = 0);
114114

115+
// Method to set parameters without executing query (for duplicating tabs)
116+
void setParameters(const std::string& symbols, uint64_t startAddr = 0, uint64_t endAddr = 0);
117+
void setParameters(const QString& symbols, const QString& startAddr, const QString& endAddr);
118+
115119
// Method to check if this tab is unused (no results and default parameters)
116120
bool isUnused() const;
121+
122+
// Methods to get current query parameters for duplication
123+
QString getSymbols() const { return m_symbolsEdit->text(); }
124+
QString getStartAddress() const { return m_startAddressEdit->text(); }
125+
QString getEndAddress() const { return m_endAddressEdit->text(); }
117126

118127
private Q_SLOTS:
119128
void performQuery();

ui/ttdmemorywidget.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,36 @@ void TTDMemoryQueryWidget::setParametersAndQuery(uint64_t startAddr, uint64_t en
658658
performQuery();
659659
}
660660

661+
void TTDMemoryQueryWidget::setParameters(uint64_t startAddr, uint64_t endAddr, TTDMemoryAccessType accessType)
662+
{
663+
// Set address fields
664+
m_startAddressEdit->setText(QString("0x%1").arg(startAddr, 0, 16));
665+
m_endAddressEdit->setText(QString("0x%1").arg(endAddr, 0, 16));
666+
667+
// Set access type checkboxes
668+
m_readAccessCheck->setChecked(accessType & TTDMemoryRead);
669+
m_writeAccessCheck->setChecked(accessType & TTDMemoryWrite);
670+
m_executeAccessCheck->setChecked(accessType & TTDMemoryExecute);
671+
672+
// Don't trigger the query
673+
}
674+
675+
void TTDMemoryQueryWidget::setParameters(const QString& startAddr, const QString& endAddr, TTDMemoryAccessType accessType)
676+
{
677+
// Set address fields as strings
678+
if (!startAddr.isEmpty())
679+
m_startAddressEdit->setText(startAddr);
680+
if (!endAddr.isEmpty())
681+
m_endAddressEdit->setText(endAddr);
682+
683+
// Set access type checkboxes
684+
m_readAccessCheck->setChecked(accessType & TTDMemoryRead);
685+
m_writeAccessCheck->setChecked(accessType & TTDMemoryWrite);
686+
m_executeAccessCheck->setChecked(accessType & TTDMemoryExecute);
687+
688+
// Don't trigger the query
689+
}
690+
661691
bool TTDMemoryQueryWidget::isUnused() const
662692
{
663693
// Consider a tab unused if it has no results
@@ -707,9 +737,28 @@ void TTDMemoryWidget::setupUI()
707737

708738
void TTDMemoryWidget::createNewTab()
709739
{
740+
// Get parameters from current tab if exists
741+
TTDMemoryQueryWidget* currentWidget = qobject_cast<TTDMemoryQueryWidget*>(m_tabWidget->currentWidget());
742+
QString startAddr, endAddr;
743+
TTDMemoryAccessType accessType = static_cast<TTDMemoryAccessType>(0);
744+
745+
if (currentWidget)
746+
{
747+
startAddr = currentWidget->getStartAddress();
748+
endAddr = currentWidget->getEndAddress();
749+
accessType = currentWidget->getCurrentAccessType();
750+
}
751+
752+
// Create new tab
710753
TTDMemoryQueryWidget* queryWidget = new TTDMemoryQueryWidget(this, m_data);
711754
int tabIndex = m_tabWidget->addTab(queryWidget, QString("Query %1").arg(m_tabWidget->count() + 1));
712755
m_tabWidget->setCurrentIndex(tabIndex);
756+
757+
// Set parameters from previous tab if any existed
758+
if (currentWidget && (!startAddr.isEmpty() || !endAddr.isEmpty() || accessType != 0))
759+
{
760+
queryWidget->setParameters(startAddr, endAddr, accessType);
761+
}
713762
}
714763

715764
void TTDMemoryWidget::closeTab(int index)

ui/ttdmemorywidget.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,17 @@ class TTDMemoryQueryWidget : public QWidget
129129
// Method to set parameters and execute query from context menu
130130
void setParametersAndQuery(uint64_t startAddr, uint64_t endAddr, TTDMemoryAccessType accessType);
131131

132+
// Method to set parameters without executing query (for duplicating tabs)
133+
void setParameters(uint64_t startAddr, uint64_t endAddr, TTDMemoryAccessType accessType);
134+
void setParameters(const QString& startAddr, const QString& endAddr, TTDMemoryAccessType accessType);
135+
132136
// Method to check if this tab is unused (no results and default parameters)
133137
bool isUnused() const;
138+
139+
// Methods to get current query parameters for duplication
140+
QString getStartAddress() const { return m_startAddressEdit->text(); }
141+
QString getEndAddress() const { return m_endAddressEdit->text(); }
142+
TTDMemoryAccessType getCurrentAccessType() const { return const_cast<TTDMemoryQueryWidget*>(this)->getSelectedAccessTypes(); }
134143

135144
private Q_SLOTS:
136145
void performQuery();

0 commit comments

Comments
 (0)