diff --git a/src/SeerGdbWidget.cpp b/src/SeerGdbWidget.cpp index f0c4536..1224129 100644 --- a/src/SeerGdbWidget.cpp +++ b/src/SeerGdbWidget.cpp @@ -239,8 +239,13 @@ SeerGdbWidget::SeerGdbWidget (QWidget* parent) : QWidget(parent) { QObject::connect(variableManagerWidget->variableTrackerBrowserWidget(), &SeerVariableTrackerBrowserWidget::refreshVariableTrackerNames, this, &SeerGdbWidget::handleGdbDataListValues); QObject::connect(variableManagerWidget->variableTrackerBrowserWidget(), &SeerVariableTrackerBrowserWidget::addVariableExpression, this, &SeerGdbWidget::handleGdbDataAddExpression); QObject::connect(variableManagerWidget->variableTrackerBrowserWidget(), &SeerVariableTrackerBrowserWidget::deleteVariableExpressions, this, &SeerGdbWidget::handleGdbDataDeleteExpressions); + QObject::connect(variableManagerWidget->variableTrackerBrowserWidget(), &SeerVariableTrackerBrowserWidget::addMemoryVisualize, this, &SeerGdbWidget::handleGdbMemoryAddExpression); + QObject::connect(variableManagerWidget->variableTrackerBrowserWidget(), &SeerVariableTrackerBrowserWidget::addArrayVisualize, this, &SeerGdbWidget::handleGdbArrayAddExpression); + QObject::connect(variableManagerWidget->variableTrackerBrowserWidget(), &SeerVariableTrackerBrowserWidget::addStructVisualize, this, &SeerGdbWidget::handleGdbVarAddExpression); QObject::connect(variableManagerWidget->variableLoggerBrowserWidget(), &SeerVariableLoggerBrowserWidget::evaluateVariableExpression, this, &SeerGdbWidget::handleGdbDataEvaluateExpression); - + QObject::connect(variableManagerWidget->variableLoggerBrowserWidget(), &SeerVariableLoggerBrowserWidget::addMemoryVisualize, this, &SeerGdbWidget::handleGdbMemoryAddExpression); + QObject::connect(variableManagerWidget->variableLoggerBrowserWidget(), &SeerVariableLoggerBrowserWidget::addArrayVisualize, this, &SeerGdbWidget::handleGdbArrayAddExpression); + QObject::connect(variableManagerWidget->variableLoggerBrowserWidget(), &SeerVariableLoggerBrowserWidget::addStructVisualize, this, &SeerGdbWidget::handleGdbVarAddExpression); QObject::connect(variableManagerWidget->registerValuesBrowserWidget(), &SeerRegisterValuesBrowserWidget::refreshRegisterNames, this, &SeerGdbWidget::handleGdbRegisterListNames); QObject::connect(variableManagerWidget->registerValuesBrowserWidget(), &SeerRegisterValuesBrowserWidget::refreshRegisterValues, this, &SeerGdbWidget::handleGdbRegisterListValues); QObject::connect(variableManagerWidget->registerValuesBrowserWidget(), &SeerRegisterValuesBrowserWidget::setRegisterValue, this, &SeerGdbWidget::handleGdbRegisterSetValue); diff --git a/src/SeerRegisterValuesBrowserWidget.cpp b/src/SeerRegisterValuesBrowserWidget.cpp index 57f8732..700f947 100644 --- a/src/SeerRegisterValuesBrowserWidget.cpp +++ b/src/SeerRegisterValuesBrowserWidget.cpp @@ -131,8 +131,6 @@ void SeerRegisterValuesBrowserWidget::handleText (const QString& text) { QString frame_text = Seer::parseFirst(newtext, "register-names=", '[', ']', false); - //qDebug() << frame_text; - QStringList name_list = Seer::parse(frame_text, "", '"', '"', false); int i = 0; @@ -173,8 +171,6 @@ void SeerRegisterValuesBrowserWidget::handleText (const QString& text) { // {number=\"3\",value=\"0x7fffffffd548\"},{number=\"4\",value=\"0x7fffffffd538\"},{number=\"5\",value=\"0x1\"},... // {number=\"205\",value=\"0x0\"},{number=\"206\",value=\"0x0\"}]" - //qDebug() << text; - QString newtext = Seer::filterEscapes(text); // Filter escaped characters. QString frame_text = Seer::parseFirst(newtext, "register-values=", '[', ']', false); diff --git a/src/SeerStackArgumentsBrowserWidget.cpp b/src/SeerStackArgumentsBrowserWidget.cpp index 0bd4091..8d4fcdc 100644 --- a/src/SeerStackArgumentsBrowserWidget.cpp +++ b/src/SeerStackArgumentsBrowserWidget.cpp @@ -62,8 +62,6 @@ void SeerStackArgumentsBrowserWidget::handleText (const QString& text) { QStringList frame_list = Seer::parse(text, "frame=", '{', '}', false); - //qDebug() << frame_list.count() << frame_list; - // Mark each entry initially as "unused". // Later, some will be marked as "reused" or "new". Then the "unused" ones will // be deleted. @@ -75,14 +73,9 @@ void SeerStackArgumentsBrowserWidget::handleText (const QString& text) { for ( const auto& frame_text : frame_list ) { - //qDebug() << frame_text; - QString level_text = Seer::parseFirst(frame_text, "level=", '"', '"', false); QString args_text = Seer::parseFirst(frame_text, "args=", '[', ']', false); - //qDebug() << level_text; - //qDebug() << args_text; - QStringList namevalue_list = Seer::parse(args_text, "", '{', '}', false); QList matches = argumentsTreeWidget->findItems(level_text, Qt::MatchExactly, 0); @@ -264,8 +257,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to log. if (action == addVariableLoggerExpressionAction) { - //qDebug() << "addVariableLoggerExpression" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addVariableLoggerExpression(item->text(1)); @@ -277,8 +268,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to log. if (action == addVariableLoggerAsteriskExpressionAction) { - //qDebug() << "addVariableLoggerAsteriskExpression" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addVariableLoggerExpression(QString("*") + item->text(1)); @@ -290,8 +279,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to log. if (action == addVariableLoggerAmpersandExpressionAction) { - //qDebug() << "addVariableLoggerAmpersandExpression" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addVariableLoggerExpression(QString("&") + item->text(1)); @@ -303,8 +290,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to log. if (action == addVariableLoggerAsteriskAmpersandExpressionAction) { - //qDebug() << "addVariableLoggerAsteriskAmpersandExpression" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addVariableLoggerExpression(QString("*&") + item->text(1)); @@ -316,8 +301,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to track. if (action == addVariableTrackerExpressionAction) { - //qDebug() << "addVariableTrackerExpression" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addVariableTrackerExpression(item->text(1)); @@ -330,8 +313,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to track. if (action == addVariableTrackerAsteriskExpressionAction) { - //qDebug() << "addVariableTrackerAsteriskExpression" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addVariableTrackerExpression(QString("*") + item->text(1)); @@ -344,8 +325,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to track. if (action == addVariableTrackerAmpersandExpressionAction) { - //qDebug() << "addVariableTrackerAmpersandExpression" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addVariableTrackerExpression(QString("&") + item->text(1)); @@ -358,8 +337,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to track. if (action == addVariableTrackerAsteriskAmpersandExpressionAction) { - //qDebug() << "addVariableTrackerAsteriskAmpersandExpression" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addVariableTrackerExpression(QString("*&") + item->text(1)); @@ -372,8 +349,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding memory to visualize. if (action == addMemoryVisualizerAction) { - //qDebug() << "addMemoryVisualizer" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addMemoryVisualize(item->text(1)); @@ -385,8 +360,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding memory to visualize. if (action == addMemoryAsteriskVisualizerAction) { - //qDebug() << "addMemoryAsteriskVisualizer" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addMemoryVisualize(QString("*") + item->text(1)); @@ -398,8 +371,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding memory to visualize. if (action == addMemoryAmpersandVisualizerAction) { - //qDebug() << "addMemoryAmpersandVisualizer" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addMemoryVisualize(QString("&") + item->text(1)); @@ -411,8 +382,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding array to visualize. if (action == addArrayVisualizerAction) { - //qDebug() << "addArrayVisualizer" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addArrayVisualize(item->text(1)); @@ -424,8 +393,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding array to visualize. if (action == addArrayAsteriskVisualizerAction) { - //qDebug() << "addArrayAsteriskVisualizer" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addArrayVisualize(QString("*") + item->text(1)); @@ -437,8 +404,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding array to visualize. if (action == addArrayAmpersandVisualizerAction) { - //qDebug() << "addArrayAmpersandVisualizer" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addArrayVisualize(QString("&") + item->text(1)); @@ -450,8 +415,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding struct to visualize. if (action == addStructVisualizerAction) { - //qDebug() << "addStructVisualizer" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addStructVisualize(item->text(1)); @@ -463,8 +426,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding array to visualize. if (action == addStructAsteriskVisualizerAction) { - //qDebug() << "addStructAsteriskVisualizer" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addStructVisualize(QString("*") + item->text(1)); @@ -476,8 +437,6 @@ void SeerStackArgumentsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding array to visualize. if (action == addStructAmpersandVisualizerAction) { - //qDebug() << "addStructAmpersandVisualizer" << item->text(1); - // Emit the signals. if (item->text(1) != "") { emit addStructVisualize(QString("&") + item->text(1)); @@ -511,8 +470,6 @@ void SeerStackArgumentsBrowserWidget::handleItemEntered (QTreeWidgetItem* item, Q_UNUSED(column); - //qDebug() << item->text(0) << column; - if (item->text(0) != "") { for (int i=0; icolumnCount(); i++) { // The "level" item does not have a tooltip. item->setToolTip(i, ""); diff --git a/src/SeerStackFramesBrowserWidget.cpp b/src/SeerStackFramesBrowserWidget.cpp index f2762f3..763690c 100644 --- a/src/SeerStackFramesBrowserWidget.cpp +++ b/src/SeerStackFramesBrowserWidget.cpp @@ -52,8 +52,6 @@ void SeerStackFramesBrowserWidget::handleText (const QString& text) { // frame={level=\"1\",addr=\"0x0000000000400cc3\",func=\"main\",file=\"helloworld.cpp\",fullname=\"/home/erniep/Development/Peak/src/Seer/helloworld/helloworld.cpp\",line=\"14\",arch=\"i386:x86-64\"} // ] - //qDebug() << text; - // If we are simply moving up and down the stack (via frame-select) then the text won't change. // If it is different, reconstruct the tree. Select the first frame. if (text != _previousStackFrameText) { @@ -84,8 +82,6 @@ void SeerStackFramesBrowserWidget::handleText (const QString& text) { QString line_text = Seer::parseFirst(frame_text, "line=", '"', '"', false); QString arch_text = Seer::parseFirst(frame_text, "arch=", '"', '"', false); - // qDebug() << file_text << fullname_text << line_text; - // Create the item. QTreeWidgetItem* item = new QTreeWidgetItem; item->setText(0, level_text); @@ -174,8 +170,6 @@ void SeerStackFramesBrowserWidget::handleItemClicked (QTreeWidgetItem* item, int int lineno = item->text(3).toInt(); - //qDebug() << "Emit selectedFile and selectedFrame"; - emit selectedFile(item->text(2), item->text(4), lineno); emit selectedFrame(item->text(0).toInt()); emit selectedAddress(item->text(5)); @@ -185,8 +179,6 @@ void SeerStackFramesBrowserWidget::handleItemEntered (QTreeWidgetItem* item, int Q_UNUSED(column); - //qDebug() << item->text(0) << column; - item->setToolTip(0, item->text(0) + " : " + item->text(1) + " : " + item->text(2) + " : " + item->text(3)); for (int i=1; icolumnCount(); i++) { // Copy tooltip to other columns. diff --git a/src/SeerStackLocalsBrowserWidget.cpp b/src/SeerStackLocalsBrowserWidget.cpp index 43d0ef5..767d4ba 100644 --- a/src/SeerStackLocalsBrowserWidget.cpp +++ b/src/SeerStackLocalsBrowserWidget.cpp @@ -233,8 +233,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to log. if (action == addVariableLoggerExpressionAction) { - //qDebug() << "addVariableLoggerExpression" << variable; - // Emit the signals. if (variable != "") { emit addVariableLoggerExpression(variable); @@ -246,8 +244,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to log. if (action == addVariableLoggerAsteriskExpressionAction) { - //qDebug() << "addVariableLoggerAsteriskExpression" << variable; - // Emit the signals. if (variable != "") { emit addVariableLoggerExpression(QString("*") + variable); @@ -259,8 +255,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to log. if (action == addVariableLoggerAmpersandExpressionAction) { - //qDebug() << "addVariableLoggerAmpersandExpression" << variable; - // Emit the signals. if (variable != "") { emit addVariableLoggerExpression(QString("&") + variable); @@ -272,8 +266,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to log. if (action == addVariableLoggerAsteriskAmpersandExpressionAction) { - //qDebug() << "addVariableLoggerAsteriskAmpersandExpression" << variable; - // Emit the signals. if (variable != "") { emit addVariableLoggerExpression(QString("*&") + variable); @@ -285,8 +277,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to track. if (action == addVariableTrackerExpressionAction) { - //qDebug() << "addVariableTrackerExpression" << variable; - // Emit the signals. if (variable != "") { emit addVariableTrackerExpression(variable); @@ -299,8 +289,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to track. if (action == addVariableTrackerAsteriskExpressionAction) { - //qDebug() << "addVariableTrackerAsteriskExpression" << variable; - // Emit the signals. if (variable != "") { emit addVariableTrackerExpression(QString("*") + variable); @@ -313,8 +301,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to track. if (action == addVariableTrackerAmpersandExpressionAction) { - //qDebug() << "addVariableTrackerAmpersandExpression" << variable; - // Emit the signals. if (variable != "") { emit addVariableTrackerExpression(QString("&") + variable); @@ -327,8 +313,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding a variable to track. if (action == addVariableTrackerAsteriskAmpersandExpressionAction) { - //qDebug() << "addVariableTrackerAsteriskAmpersandExpression" << variable; - // Emit the signals. if (variable != "") { emit addVariableTrackerExpression(QString("*&") + variable); @@ -341,8 +325,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding memory to visualize. if (action == addMemoryVisualizerAction) { - //qDebug() << "addMemoryVisualizer" << variable; - // Emit the signals. if (variable != "") { emit addMemoryVisualize(variable); @@ -354,8 +336,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding memory to visualize. if (action == addMemoryAsteriskVisualizerAction) { - //qDebug() << "addMemoryAsteriskVisualizer" << variable; - // Emit the signals. if (variable != "") { emit addMemoryVisualize(QString("*") + variable); @@ -367,8 +347,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding memory to visualize. if (action == addMemoryAmpersandVisualizerAction) { - //qDebug() << "addMemoryAmpersandVisualizer" << variable; - // Emit the signals. if (variable != "") { emit addMemoryVisualize(QString("&") + variable); @@ -380,8 +358,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding array to visualize. if (action == addArrayVisualizerAction) { - //qDebug() << "addArrayVisualizer" << variable; - // Emit the signals. if (variable != "") { emit addArrayVisualize(variable); @@ -393,8 +369,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding array to visualize. if (action == addArrayAsteriskVisualizerAction) { - //qDebug() << "addArrayAsteriskVisualizer" << variable; - // Emit the signals. if (variable != "") { emit addArrayVisualize(QString("*") + variable); @@ -406,8 +380,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding array to visualize. if (action == addArrayAmpersandVisualizerAction) { - //qDebug() << "addArrayAmpersandVisualizer" << variable; - // Emit the signals. if (variable != "") { emit addArrayVisualize(QString("&") + variable); @@ -419,8 +391,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding struct to visualize. if (action == addStructVisualizerAction) { - //qDebug() << "addStructVisualizer" << variable; - // Emit the signals. if (variable != "") { emit addStructVisualize(variable); @@ -432,8 +402,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding struct to visualize. if (action == addStructAsteriskVisualizerAction) { - //qDebug() << "addStructAsteriskVisualizer" << variable; - // Emit the signals. if (variable != "") { emit addStructVisualize(QString("*") + variable); @@ -445,8 +413,6 @@ void SeerStackLocalsBrowserWidget::handleContextMenu (const QPoint& pos) { // Handle adding struct to visualize. if (action == addStructAmpersandVisualizerAction) { - //qDebug() << "addStructAmpersandVisualizer" << variable; - // Emit the signals. if (variable != "") { emit addStructVisualize(QString("&") + variable); @@ -480,8 +446,6 @@ void SeerStackLocalsBrowserWidget::handleItemEntered (QTreeWidgetItem* item, int Q_UNUSED(column); - //qDebug() << item->text(0) << column; - item->setToolTip(0, item->text(0) + " : " + Seer::elideText(item->text(2), Qt::ElideRight, 100)); for (int i=1; icolumnCount(); i++) { // Copy tooltip to the other columns. diff --git a/src/SeerVariableLoggerBrowserWidget.cpp b/src/SeerVariableLoggerBrowserWidget.cpp index 932d740..63fe5e3 100644 --- a/src/SeerVariableLoggerBrowserWidget.cpp +++ b/src/SeerVariableLoggerBrowserWidget.cpp @@ -74,8 +74,6 @@ void SeerVariableLoggerBrowserWidget::handleText (const QString& text) { }else if (text.contains(QRegularExpression("^([0-9]+)\\^error,msg="))) { - //qDebug() << text; - // "1^error,msg=\"No symbol \\\"j\\\" in current context.\"" QString id_text = text.section('^', 0,0); @@ -139,8 +137,6 @@ void SeerVariableLoggerBrowserWidget::handleEvaluateVariableExpression (int expr void SeerVariableLoggerBrowserWidget::addVariableExpression (QString expression) { - //qDebug(); - if (expression != "") { int id = Seer::createID(); @@ -153,8 +149,6 @@ void SeerVariableLoggerBrowserWidget::addVariableExpression (QString expression) void SeerVariableLoggerBrowserWidget::handleAddLineEdit () { - //qDebug(); - QString expression = variableAddLineEdit->text(); variableAddLineEdit->clear(); @@ -222,8 +216,6 @@ void SeerVariableLoggerBrowserWidget::handleItemEntered (QTreeWidgetItem* item, Q_UNUSED(column); - //qDebug() << item->text(3) << column; - item->setToolTip(0, item->text(0) + " : " + item->text(1) + " : " + Seer::elideText(item->text(2), Qt::ElideRight, 100)); for (int i=1; icolumnCount(); i++) { // Copy tooltip to other columns. @@ -278,54 +270,214 @@ void SeerVariableLoggerBrowserWidget::handleContextMenu (const QPoint& pos) { QTreeWidgetItem* item = variablesTreeWidget->itemAt(pos); // Construct the menu. - QMenu* menu = new QMenu("Options", this); - QAction* copyAction = menu->addAction("Copy selected"); - QAction* copyAllAction = menu->addAction("Copy all"); + QAction* addMemoryVisualizerAction = new QAction(); + QAction* addMemoryAsteriskVisualizerAction = new QAction(); + QAction* addMemoryAmpersandVisualizerAction = new QAction(); + QAction* addArrayVisualizerAction = new QAction(); + QAction* addArrayAsteriskVisualizerAction = new QAction(); + QAction* addArrayAmpersandVisualizerAction = new QAction(); + QAction* addStructVisualizerAction = new QAction(); + QAction* addStructAsteriskVisualizerAction = new QAction(); + QAction* addStructAmpersandVisualizerAction = new QAction(); - // If no selected item, disable 'selected' copy but allow 'all'. + QMenu menu("Options", this); + + QMenu memoryVisualizerMenu("Add variable to a Memory Visualizer"); + memoryVisualizerMenu.addAction(addMemoryVisualizerAction); + memoryVisualizerMenu.addAction(addMemoryAsteriskVisualizerAction); + memoryVisualizerMenu.addAction(addMemoryAmpersandVisualizerAction); + menu.addMenu(&memoryVisualizerMenu); + + QMenu arrayVisualizerMenu("Add variable to an Array Visualizer"); + arrayVisualizerMenu.addAction(addArrayVisualizerAction); + arrayVisualizerMenu.addAction(addArrayAsteriskVisualizerAction); + arrayVisualizerMenu.addAction(addArrayAmpersandVisualizerAction); + menu.addMenu(&arrayVisualizerMenu); + + QMenu structVisualizerMenu("Add variable to a Struct Visualizer"); + structVisualizerMenu.addAction(addStructVisualizerAction); + structVisualizerMenu.addAction(addStructAsteriskVisualizerAction); + structVisualizerMenu.addAction(addStructAmpersandVisualizerAction); + menu.addMenu(&structVisualizerMenu); + + QAction* copyAction = menu.addAction("Copy selected"); + QAction* copyAllAction = menu.addAction("Copy all"); + + QString actionText; + if (item != 0) { + actionText = item->text(1); + } + + QString variable; + if (item != 0) { + // Build up a variable string, incase it is a nested struct. + QTreeWidgetItem* i = item; + variable = item->text(1); + while (i->parent() != 0) { + variable = i->parent()->text(1) + "." + variable; + i = i->parent(); + } + } + + addMemoryVisualizerAction->setText(QString("\"%1\"").arg(actionText)); + addMemoryAsteriskVisualizerAction->setText(QString("\"*%1\"").arg(actionText)); + addMemoryAmpersandVisualizerAction->setText(QString("\"&&%1\"").arg(actionText)); + addArrayVisualizerAction->setText(QString("\"%1\"").arg(actionText)); + addArrayAsteriskVisualizerAction->setText(QString("\"*%1\"").arg(actionText)); + addArrayAmpersandVisualizerAction->setText(QString("\"&&%1\"").arg(actionText)); + addStructVisualizerAction->setText(QString("\"%1\"").arg(actionText)); + addStructAsteriskVisualizerAction->setText(QString("\"*%1\"").arg(actionText)); + addStructAmpersandVisualizerAction->setText(QString("\"&&%1\"").arg(actionText)); + + + // If no selected item, disable everything but allow 'copyall'. if (item == 0) { + memoryVisualizerMenu.setEnabled(false); + arrayVisualizerMenu.setEnabled(false); + structVisualizerMenu.setEnabled(false); copyAction->setEnabled(false); } // Execute the menu. Return if nothing. - QAction* action = menu->exec(variablesTreeWidget->mapToGlobal(pos)); + QAction* action = menu.exec(variablesTreeWidget->mapToGlobal(pos)); if (action == 0) { return; } - // Get selected tree items. - QList items; + if (action == copyAction || action == copyAction) { + // Get selected tree items. + QList items; - // Get list of 'select' items. - if (action == copyAction) { - items = variablesTreeWidget->selectedItems(); + // Get list of 'select' items. + if (action == copyAction) { + items = variablesTreeWidget->selectedItems(); + } + + // Get list of 'all' items. + if (action == copyAllAction) { + items = variablesTreeWidget->findItems(QString("*"), Qt::MatchWrap | Qt::MatchWildcard); + } + + // Populate the clipboard. + if (items.size() == 0) { + return; + } + + QClipboard* clipboard = QGuiApplication::clipboard(); + + QString text; + + for (int i=0; itext(1) + ":" + items[i]->text(2); + } + + clipboard->setText(text, QClipboard::Clipboard); + clipboard->setText(text, QClipboard::Selection); } - // Get list of 'all' items. - if (action == copyAllAction) { - items = variablesTreeWidget->findItems(QString("*"), Qt::MatchWrap | Qt::MatchWildcard); - } + // Handle adding memory to visualize. + if (action == addMemoryVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addMemoryVisualize(variable); + } - // Populate the clipboard. - if (items.size() == 0) { return; } - QClipboard* clipboard = QGuiApplication::clipboard(); + // Handle adding memory to visualize. + if (action == addMemoryAsteriskVisualizerAction) { - QString text; - - for (int i=0; itext(1) + ":" + items[i]->text(2); + return; } - clipboard->setText(text, QClipboard::Clipboard); - clipboard->setText(text, QClipboard::Selection); + // Handle adding memory to visualize. + if (action == addMemoryAmpersandVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addMemoryVisualize(QString("&") + variable); + } + + return; + } + + // Handle adding array to visualize. + if (action == addArrayVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addArrayVisualize(variable); + } + + return; + } + + // Handle adding array to visualize. + if (action == addArrayAsteriskVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addArrayVisualize(QString("*") + variable); + } + + return; + } + + // Handle adding array to visualize. + if (action == addArrayAmpersandVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addArrayVisualize(QString("&") + variable); + } + + return; + } + + // Handle adding struct to visualize. + if (action == addStructVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addStructVisualize(variable); + } + + return; + } + + // Handle adding array to visualize. + if (action == addStructAsteriskVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addStructVisualize(QString("*") + variable); + } + + return; + } + + // Handle adding array to visualize. + if (action == addStructAmpersandVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addStructVisualize(QString("&") + variable); + } + + return; + } } diff --git a/src/SeerVariableLoggerBrowserWidget.h b/src/SeerVariableLoggerBrowserWidget.h index 22b28a4..f27e742 100644 --- a/src/SeerVariableLoggerBrowserWidget.h +++ b/src/SeerVariableLoggerBrowserWidget.h @@ -29,6 +29,9 @@ class SeerVariableLoggerBrowserWidget : public QWidget, protected Ui::SeerVariab signals: void evaluateVariableExpression (int expressionid, QString expression); + void addMemoryVisualize (QString expression); + void addArrayVisualize (QString expression); + void addStructVisualize (QString expression); protected: void handleItemCreate (QTreeWidgetItem* parentItem, const QString& id_text, const QString& timestamp_text, const QString& name_text, const QString& value_text); diff --git a/src/SeerVariableTrackerBrowserWidget.cpp b/src/SeerVariableTrackerBrowserWidget.cpp index 64fa53b..fbd1023 100644 --- a/src/SeerVariableTrackerBrowserWidget.cpp +++ b/src/SeerVariableTrackerBrowserWidget.cpp @@ -309,29 +309,7 @@ void SeerVariableTrackerBrowserWidget::showEvent (QShowEvent* event) { void SeerVariableTrackerBrowserWidget::handleItemCreate (QTreeWidgetItem* item, const QString& value_text) { - /* - { - qDebug() << "BEFORE==================================================" << item->text(0) << item << item->parent(); - int i = 0; - for (i=0; ichildCount(); i++) { - qDebug() << ">" << item->child(i)->text(0) << item->child(i)->text(1) << item->child(i)->text(2) << item->child(i)->text(3) << item->child(i) << item->child(i)->parent(); - } - qDebug() << "========================================================" << i; - } - */ - handleItemCreate(item, item->text(2), item->text(0), value_text); - - /* - { - qDebug() << "AFTER==================================================" << item->text(0) << item << item->parent(); - int i = 0; - for (i=0; ichildCount(); i++) { - qDebug() << ">" << item->child(i)->text(0) << item->child(i)->text(1) << item->child(i)->text(2) << item->child(i)->text(3) << item->child(i) << item->child(i)->parent(); - } - qDebug() << "========================================================" << i; - } - */ } void SeerVariableTrackerBrowserWidget::handleItemCreate (QTreeWidgetItem* parentItem, const QString& id_text, const QString& name_text, const QString& value_text) { @@ -432,54 +410,213 @@ void SeerVariableTrackerBrowserWidget::handleContextMenu (const QPoint& pos) { QTreeWidgetItem* item = variablesTreeWidget->itemAt(pos); // Construct the menu. - QMenu* menu = new QMenu("Options", this); - QAction* copyAction = menu->addAction("Copy selected"); - QAction* copyAllAction = menu->addAction("Copy all"); + QAction* addMemoryVisualizerAction = new QAction(); + QAction* addMemoryAsteriskVisualizerAction = new QAction(); + QAction* addMemoryAmpersandVisualizerAction = new QAction(); + QAction* addArrayVisualizerAction = new QAction(); + QAction* addArrayAsteriskVisualizerAction = new QAction(); + QAction* addArrayAmpersandVisualizerAction = new QAction(); + QAction* addStructVisualizerAction = new QAction(); + QAction* addStructAsteriskVisualizerAction = new QAction(); + QAction* addStructAmpersandVisualizerAction = new QAction(); - // If no selected item, disable 'selected' copy but allow 'all'. + QMenu menu("Options", this); + + QMenu memoryVisualizerMenu("Add variable to a Memory Visualizer"); + memoryVisualizerMenu.addAction(addMemoryVisualizerAction); + memoryVisualizerMenu.addAction(addMemoryAsteriskVisualizerAction); + memoryVisualizerMenu.addAction(addMemoryAmpersandVisualizerAction); + menu.addMenu(&memoryVisualizerMenu); + + QMenu arrayVisualizerMenu("Add variable to an Array Visualizer"); + arrayVisualizerMenu.addAction(addArrayVisualizerAction); + arrayVisualizerMenu.addAction(addArrayAsteriskVisualizerAction); + arrayVisualizerMenu.addAction(addArrayAmpersandVisualizerAction); + menu.addMenu(&arrayVisualizerMenu); + + QMenu structVisualizerMenu("Add variable to a Struct Visualizer"); + structVisualizerMenu.addAction(addStructVisualizerAction); + structVisualizerMenu.addAction(addStructAsteriskVisualizerAction); + structVisualizerMenu.addAction(addStructAmpersandVisualizerAction); + menu.addMenu(&structVisualizerMenu); + + QAction* copyAction = menu.addAction("Copy selected"); + QAction* copyAllAction = menu.addAction("Copy all"); + + QString actionText; + if (item != 0) { + actionText = item->text(0); + } + + QString variable; + if (item != 0) { + // Build up a variable string, incase it is a nested struct. + QTreeWidgetItem* i = item; + variable = item->text(0); + while (i->parent() != 0) { + variable = i->parent()->text(0) + "." + variable; + i = i->parent(); + } + } + + addMemoryVisualizerAction->setText(QString("\"%1\"").arg(actionText)); + addMemoryAsteriskVisualizerAction->setText(QString("\"*%1\"").arg(actionText)); + addMemoryAmpersandVisualizerAction->setText(QString("\"&&%1\"").arg(actionText)); + addArrayVisualizerAction->setText(QString("\"%1\"").arg(actionText)); + addArrayAsteriskVisualizerAction->setText(QString("\"*%1\"").arg(actionText)); + addArrayAmpersandVisualizerAction->setText(QString("\"&&%1\"").arg(actionText)); + addStructVisualizerAction->setText(QString("\"%1\"").arg(actionText)); + addStructAsteriskVisualizerAction->setText(QString("\"*%1\"").arg(actionText)); + addStructAmpersandVisualizerAction->setText(QString("\"&&%1\"").arg(actionText)); + + // If no selected item, disable everything but allow 'copyall'. if (item == 0) { + memoryVisualizerMenu.setEnabled(false); + arrayVisualizerMenu.setEnabled(false); + structVisualizerMenu.setEnabled(false); copyAction->setEnabled(false); } // Execute the menu. Return if nothing. - QAction* action = menu->exec(variablesTreeWidget->mapToGlobal(pos)); + QAction* action = menu.exec(variablesTreeWidget->mapToGlobal(pos)); if (action == 0) { return; } - // Get selected tree items. - QList items; + if (action == copyAction || action == copyAction) { + // Get selected tree items. + QList items; - // Get list of 'select' items. - if (action == copyAction) { - items = variablesTreeWidget->selectedItems(); + // Get list of 'select' items. + if (action == copyAction) { + items = variablesTreeWidget->selectedItems(); + } + + // Get list of 'all' items. + if (action == copyAllAction) { + items = variablesTreeWidget->findItems(QString("*"), Qt::MatchWrap | Qt::MatchWildcard); + } + + // Populate the clipboard. + if (items.count() == 0) { + return; + } + + QClipboard* clipboard = QGuiApplication::clipboard(); + + QString text; + + for (int i=0; itext(0) + ":" + items[i]->text(1); + } + + clipboard->setText(text, QClipboard::Clipboard); + clipboard->setText(text, QClipboard::Selection); } - // Get list of 'all' items. - if (action == copyAllAction) { - items = variablesTreeWidget->findItems(QString("*"), Qt::MatchWrap | Qt::MatchWildcard); - } + // Handle adding memory to visualize. + if (action == addMemoryVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addMemoryVisualize(variable); + } - // Populate the clipboard. - if (items.count() == 0) { return; } - QClipboard* clipboard = QGuiApplication::clipboard(); + // Handle adding memory to visualize. + if (action == addMemoryAsteriskVisualizerAction) { - QString text; - - for (int i=0; itext(0) + ":" + items[i]->text(1); + return; } - clipboard->setText(text, QClipboard::Clipboard); - clipboard->setText(text, QClipboard::Selection); + // Handle adding memory to visualize. + if (action == addMemoryAmpersandVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addMemoryVisualize(QString("&") + variable); + } + + return; + } + + // Handle adding array to visualize. + if (action == addArrayVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addArrayVisualize(variable); + } + + return; + } + + // Handle adding array to visualize. + if (action == addArrayAsteriskVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addArrayVisualize(QString("*") + variable); + } + + return; + } + + // Handle adding array to visualize. + if (action == addArrayAmpersandVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addArrayVisualize(QString("&") + variable); + } + + return; + } + + // Handle adding struct to visualize. + if (action == addStructVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addStructVisualize(variable); + } + + return; + } + + // Handle adding array to visualize. + if (action == addStructAsteriskVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addStructVisualize(QString("*") + variable); + } + + return; + } + + // Handle adding array to visualize. + if (action == addStructAmpersandVisualizerAction) { + + // Emit the signals. + if (variable != "") { + emit addStructVisualize(QString("&") + variable); + } + + return; + } } diff --git a/src/SeerVariableTrackerBrowserWidget.h b/src/SeerVariableTrackerBrowserWidget.h index 3c7c84b..7e9032c 100644 --- a/src/SeerVariableTrackerBrowserWidget.h +++ b/src/SeerVariableTrackerBrowserWidget.h @@ -32,6 +32,9 @@ class SeerVariableTrackerBrowserWidget : public QWidget, protected Ui::SeerVaria void refreshVariableTrackerValues (); void addVariableExpression (QString expression); void deleteVariableExpressions (QString expressionids); + void addMemoryVisualize (QString expression); + void addArrayVisualize (QString expression); + void addStructVisualize (QString expression); protected: void handleItemCreate (QTreeWidgetItem* item, const QString& value_text);