VarObjs: add editable/noneditable support.

This commit is contained in:
Ernie Pasveer
2022-09-05 13:29:41 -05:00
parent faa74fcdf5
commit 2e7e3f407f
7 changed files with 109 additions and 39 deletions
+7
View File
@@ -189,3 +189,10 @@
^done,numchild="0",has_more="0"
"-var-show-attributes seer4.public.name"
"-var-show-attributes seer4.public.age"
^done,attr="noneditable"
^done,attr="editable"
+2 -2
View File
@@ -53,8 +53,8 @@ class QHistoryLineEdit : public QLineEdit {
void lineExecuted (QString);
protected:
void keyPressEvent (QKeyEvent *) Q_DECL_OVERRIDE;
void wheelEvent (QWheelEvent *) Q_DECL_OVERRIDE;
void keyPressEvent (QKeyEvent* event) Q_DECL_OVERRIDE;
void wheelEvent (QWheelEvent* event) Q_DECL_OVERRIDE;
void previousLine ();
void nextLine ();
+12
View File
@@ -1573,6 +1573,17 @@ void SeerGdbWidget::handleGdbVarObjDelete (int expressionid, QString objname) {
handleGdbCommand(str);
}
void SeerGdbWidget::handleGdbVarObjAttributes (int objid, QString objname) {
if (executableLaunchMode() == "") {
return;
}
QString str = QString("%1-var-show-attributes \"%2\"").arg(objid).arg(objname);
handleGdbCommand(str);
}
void SeerGdbWidget::handleGdbDataListValues () {
if (executableLaunchMode() == "") {
@@ -1779,6 +1790,7 @@ void SeerGdbWidget::handleGdbVarAddExpression (QString expression) {
QObject::connect(w, &SeerVarVisualizerWidget::varObjUpdate, this, &SeerGdbWidget::handleGdbVarObjUpdate);
QObject::connect(w, &SeerVarVisualizerWidget::varObjAssign, this, &SeerGdbWidget::handleGdbVarObjAssign);
QObject::connect(w, &SeerVarVisualizerWidget::varObjDelete, this, &SeerGdbWidget::handleGdbVarObjDelete);
QObject::connect(w, &SeerVarVisualizerWidget::varObjAttributes, this, &SeerGdbWidget::handleGdbVarObjAttributes);
QObject::connect(w, &SeerVarVisualizerWidget::addMemoryVisualize, this, &SeerGdbWidget::handleGdbMemoryAddExpression);
QObject::connect(w, &SeerVarVisualizerWidget::addArrayVisualize, this, &SeerGdbWidget::handleGdbArrayAddExpression);
QObject::connect(w, &SeerVarVisualizerWidget::addStructVisualize, this, &SeerGdbWidget::handleGdbStructAddExpression);
+1
View File
@@ -211,6 +211,7 @@ class SeerGdbWidget : public QWidget, protected Ui::SeerGdbWidgetForm {
void handleGdbVarObjUpdate (int expressionid, QString objname);
void handleGdbVarObjAssign (int expressionid, QString objname, QString value);
void handleGdbVarObjDelete (int expressionid, QString objname);
void handleGdbVarObjAttributes (int objid, QString objname);
void handleGdbDataListValues ();
void handleGdbDataListExpressions ();
void handleGdbDataAddExpression (QString expression);
+75 -37
View File
@@ -5,6 +5,7 @@
#include <QtWidgets/QTreeWidgetItemIterator>
#include <QtWidgets/QMenu>
#include <QtWidgets/QAction>
#include <QtWidgets/QMessageBox>
#include <QtGui/QIcon>
#include <QtCore/QRegExp>
#include <QtCore/QTimer>
@@ -34,10 +35,12 @@ SeerVarVisualizerWidget::SeerVarVisualizerWidget (QWidget* parent) : QWidget(par
variableTreeWidget->resizeColumnToContents(1); // value
variableTreeWidget->resizeColumnToContents(2); // type
variableTreeWidget->resizeColumnToContents(3); // varobj name
variableTreeWidget->resizeColumnToContents(4); // exp
variableTreeWidget->resizeColumnToContents(5); // numchild
variableTreeWidget->resizeColumnToContents(6); // thread-id
variableTreeWidget->resizeColumnToContents(7); // has_more
variableTreeWidget->resizeColumnToContents(4); // varobj id
variableTreeWidget->resizeColumnToContents(5); // exp
variableTreeWidget->resizeColumnToContents(6); // numchild
variableTreeWidget->resizeColumnToContents(7); // thread-id
variableTreeWidget->resizeColumnToContents(8); // has_more
variableTreeWidget->resizeColumnToContents(9); // editable
variableTreeWidget->clear();
debugCheckBox->setChecked(false);
@@ -55,7 +58,9 @@ SeerVarVisualizerWidget::SeerVarVisualizerWidget (QWidget* parent) : QWidget(par
variableTreeWidget->setItemDelegateForColumn(4, new QNoEditDelegate(this));
variableTreeWidget->setItemDelegateForColumn(5, new QNoEditDelegate(this));
variableTreeWidget->setItemDelegateForColumn(6, new QNoEditDelegate(this));
variableTreeWidget->setItemDelegateForColumn(6, new QNoEditDelegate(this));
variableTreeWidget->setItemDelegateForColumn(7, new QNoEditDelegate(this));
variableTreeWidget->setItemDelegateForColumn(8, new QNoEditDelegate(this));
variableTreeWidget->setItemDelegateForColumn(9, new QNoEditDelegate(this));
// Connect things.
@@ -103,6 +108,7 @@ void SeerVarVisualizerWidget::setVariableName (const QString& name) {
variableTreeWidget->clear();
if (variableNameLineEdit->text() != "") {
QTreeWidgetItem* item = new QTreeWidgetItem;
item->setText(0, name);
@@ -112,6 +118,9 @@ void SeerVarVisualizerWidget::setVariableName (const QString& name) {
item->setText(4, "");
item->setText(5, "");
item->setText(6, "");
item->setText(7, "");
item->setText(8, "");
item->setText(9, "");
variableTreeWidget->addTopLevelItem(item);
}
@@ -159,22 +168,24 @@ void SeerVarVisualizerWidget::handleText (const QString& text) {
return;
}
int varObjID = Seer::createID(); // Create id for queries.
topItem->setText(1, Seer::filterEscapes(value_text));
topItem->setText(2, type_text);
topItem->setText(3, name_text);
topItem->setText(4, exp_text);
topItem->setText(5, numchild_text);
topItem->setText(6, threadid_text);
topItem->setText(7, hasmore_text);
topItem->setText(4, QString::number(varObjID));
topItem->setText(5, exp_text);
topItem->setText(6, numchild_text);
topItem->setText(7, threadid_text);
topItem->setText(8, hasmore_text);
topItem->setText(9, "");
if (exp_text != "") {
topItem->setText(0, exp_text);
}
// Allow editing if the item has no children and has a value.
if (numchild_text == "0" && value_text != "") {
topItem->setFlags(topItem->flags() | Qt::ItemIsEditable);
}
// Ask for its editable attributes.
emit varObjAttributes (varObjID, name_text);
// If there are children, add a placeholder.
if (numchild_text != "0") {
@@ -262,23 +273,25 @@ void SeerVarVisualizerWidget::handleText (const QString& text) {
// Create the item.
QTreeWidgetItem* item = new QTreeWidgetItem;
int varObjID = Seer::createID(); // Create id for queries.
item->setText(0, "");
item->setText(1, Seer::filterEscapes(value_text));
item->setText(2, type_text);
item->setText(3, name_text);
item->setText(4, exp_text);
item->setText(5, numchild_text);
item->setText(6, threadid_text);
item->setText(7, hasmore_text);
item->setText(4, QString::number(varObjID));
item->setText(5, exp_text);
item->setText(6, numchild_text);
item->setText(7, threadid_text);
item->setText(8, hasmore_text);
item->setText(9, "");
if (exp_text != "") {
item->setText(0, exp_text);
}
// Allow editing if the item has no children and has a value.
if (numchild_text == "0" && value_text != "") {
item->setFlags(item->flags() | Qt::ItemIsEditable);
}
// Ask for its editable attributes.
emit varObjAttributes (varObjID, name_text);
// If there are children, add a placeholder.
bool expandItem = false;
@@ -400,6 +413,33 @@ void SeerVarVisualizerWidget::handleText (const QString& text) {
}
}else if (text.contains(QRegExp("^([0-9]+)\\^done,attr="))) {
//qDebug() << "var-show-attributes" << text;
// 4^done,attr="noneditable"
// 4^done,attr="editable"
QString id_text = text.section('^', 0,0);
QString editable_text = Seer::parseFirst(text, "attr=", '"', '"', false);
// Do we have any items that match the varobjid?
QList<QTreeWidgetItem*> matches = variableTreeWidget->findItems(id_text, Qt::MatchExactly|Qt::MatchRecursive, 4);
if (matches.size() > 0) {
QTreeWidgetItem* item = matches.takeFirst();
item->setText(9, editable_text);
if (editable_text == "editable") {
item->setFlags(item->flags() | Qt::ItemIsEditable);
}else{
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
}
}
}else if (text.contains(QRegExp("^([0-9]+)\\^error,msg="))) {
//qDebug() << text;
@@ -409,17 +449,9 @@ void SeerVarVisualizerWidget::handleText (const QString& text) {
if (id_text.toInt() == _variableId) {
QTreeWidgetItem* topItem = variableTreeWidget->topLevelItem(0);
if (topItem == 0) {
return;
}
// Delete all subitems of the toplevel item.
deleteItems(topItem->takeChildren());
// Set the error text.
topItem->setText(1, "");
topItem->setText(2, Seer::filterEscapes(msg_text));
QMessageBox::warning(this, "Seer",
QString("Visualizer Error: '%1'\n").arg(Seer::filterEscapes(msg_text)),
QMessageBox::Ok);
}
@@ -747,6 +779,8 @@ void SeerVarVisualizerWidget::handleResizeColumns () {
variableTreeWidget->resizeColumnToContents(5);
variableTreeWidget->resizeColumnToContents(6);
variableTreeWidget->resizeColumnToContents(7);
variableTreeWidget->resizeColumnToContents(8);
variableTreeWidget->resizeColumnToContents(9);
}
void SeerVarVisualizerWidget::handleHideDebugColumns (bool flag) {
@@ -759,6 +793,8 @@ void SeerVarVisualizerWidget::handleHideDebugColumns (bool flag) {
variableTreeWidget->setColumnHidden(5, flag);
variableTreeWidget->setColumnHidden(6, flag);
variableTreeWidget->setColumnHidden(7, flag);
variableTreeWidget->setColumnHidden(8, flag);
variableTreeWidget->setColumnHidden(9, flag);
handleResizeColumns();
}
@@ -919,15 +955,17 @@ void SeerVarVisualizerWidget::debug (QString message, QTreeWidgetItem* item) {
// 1 value
// 2 type
// 3 varobj name
// 4 exp
// 5 numchild
// 6 thread-id
// 7 has_more
// 4 varobj id
// 5 exp
// 6 numchild
// 7 thread-id
// 8 has_more
// 8 editable
if (item == 0) {
qDebug() << message << "NULL";
}else{
qDebug() << message << item->text(0) << item->text(1) << item->text(2) << item->text(3) << item->text(4) << item->text(5) << item->text(6) << item->text(7);
qDebug() << message << item->text(0) << item->text(1) << item->text(2) << item->text(3) << item->text(4) << item->text(5) << item->text(6) << item->text(7) << item->text(8) << item->text(9);
}
}
+2
View File
@@ -1,6 +1,7 @@
#pragma once
#include <QtWidgets/QWidget>
#include <QtGui/QKeyEvent>
#include "ui_SeerVarVisualizerWidget.h"
class SeerVarVisualizerWidget : public QWidget, protected Ui::SeerVarVisualizerWidgetForm {
@@ -20,6 +21,7 @@ class SeerVarVisualizerWidget : public QWidget, protected Ui::SeerVarVisualizerW
void varObjUpdate (int expressionid, QString objname);
void varObjDelete (int expressionid, QString objname);
void varObjAssign (int expressionid, QString objname, QString value);
void varObjAttributes (int objid, QString objname);
void addMemoryVisualize (QString expression);
void addArrayVisualize (QString expression);
void addStructVisualize (QString expression);
+10
View File
@@ -78,6 +78,11 @@
<string>VarObj</string>
</property>
</column>
<column>
<property name="text">
<string>VarObjID</string>
</property>
</column>
<column>
<property name="text">
<string>Exp</string>
@@ -98,6 +103,11 @@
<string>HasMore</string>
</property>
</column>
<column>
<property name="text">
<string>Editable</string>
</property>
</column>
</widget>
</item>
<item row="0" column="1">