From 0cd06f55bc3618567246cf97417ee632db70dfab Mon Sep 17 00:00:00 2001 From: hjk <qtc-committer@nokia.com> Date: Mon, 15 Mar 2010 15:36:00 +0100 Subject: [PATCH] debugger: don't hard code typeformats except for ints and strings --- share/qtcreator/gdbmacros/dumper.py | 11 +++++------ share/qtcreator/gdbmacros/gdbmacros.py | 13 ++++++------- src/plugins/debugger/gdb/gdbengine.cpp | 5 +++-- src/plugins/debugger/watchhandler.cpp | 17 ++++++++--------- src/plugins/debugger/watchhandler.h | 1 + 5 files changed, 23 insertions(+), 24 deletions(-) diff --git a/share/qtcreator/gdbmacros/dumper.py b/share/qtcreator/gdbmacros/dumper.py index 7304f942153..e5c5a6a4a85 100644 --- a/share/qtcreator/gdbmacros/dumper.py +++ b/share/qtcreator/gdbmacros/dumper.py @@ -575,14 +575,13 @@ class FrameCommand(gdb.Command): module = sys.modules[__name__] self.dumpers = {} - if useFancy == -1: - output = "dumpers=[" + if False: + dumpers = "" + typeformats = "" for key, value in module.__dict__.items(): if key.startswith("qdump__"): - if output != "dumpers=[": - output += "," - output += '"' + key[7:] + '"' - output += "]," + dumpers += '"' + key[7:] + '",' + output = "dumpers=[%s]," % dumpers #output += "qtversion=[%d,%d,%d]" #output += "qtversion=[4,6,0]," output += "namespace=\"%s\"," % qtNamespace() diff --git a/share/qtcreator/gdbmacros/gdbmacros.py b/share/qtcreator/gdbmacros/gdbmacros.py index c8d01858edb..7255fed290e 100644 --- a/share/qtcreator/gdbmacros/gdbmacros.py +++ b/share/qtcreator/gdbmacros/gdbmacros.py @@ -392,6 +392,7 @@ def qdump__QImage(d, item): d.putValue("(%dx%d)" % (d_ptr["width"], d_ptr["height"])) bits = d_ptr["data"] nbytes = d_ptr["nbytes"] + d.putField("typeformats", "Normal,Displayed"); d.putNumChild(0) #d.putNumChild(1) if d.isExpanded(item): @@ -401,12 +402,12 @@ def qdump__QImage(d, item): d.putType(" "); d.putNumChild(0) d.putValue("size: %s bytes" % nbytes); - #d.putField("valuetooltipencoded", "6") - #d.putField("valuetooltip", encodeCharArray(bits, nbytes)) d.endHash() d.endChildren() format = d.itemFormat(item) - if format == 1: + if format == 0: + d.putField("editformat", 0) # Magic marker for "delete widget" + elif format == 1: if False: # Take four bytes at a time, this is critical for performance. # In fact, even four at a time is too slow beyond 100x100 or so. @@ -429,10 +430,8 @@ def qdump__QImage(d, item): (filename, cleanAddress(p), cleanAddress(p + nbytes))) d.putField("editformat", 3) # Magic marker for external "QImage" data. d.beginItem("editvalue") - d.put(" %d" % int(d_ptr["width"])) - d.put(" %d" % int(d_ptr["height"])) - d.put(" %d" % int(d_ptr["format"])) - d.put(" %s" % filename) + d.put(" %d %d %d %s" % (d_ptr["width"], d_ptr["height"], + d_ptr["format"], filename)) d.endItem() diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 9924ed5e554..5d12b9d8a97 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -3369,14 +3369,15 @@ void GdbEngine::handleChildren(const WatchData &data0, const GdbMi &item, mi = item.findChild("editformat"); if (mi.isValid()) data.editformat = mi.data().toInt(); + mi = item.findChild("typeformats"); + if (mi.isValid()) + data.typeFormats = QString::fromUtf8(mi.data()); setWatchDataValue(data, item.findChild("value"), item.findChild("valueencoded").data().toInt()); setWatchDataAddress(data, item.findChild("addr")); setWatchDataExpression(data, item.findChild("exp")); setWatchDataSAddress(data, item.findChild("saddr")); - setWatchDataValueToolTip(data, item.findChild("valuetooltip"), - item.findChild("valuetooltipencoded").data().toInt()); setWatchDataValueEnabled(data, item.findChild("valueenabled")); setWatchDataValueEditable(data, item.findChild("valueeditable")); setWatchDataChildCount(data, item.findChild("numchild")); diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index d6e39b18053..b8c0f1e64fc 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -108,6 +108,7 @@ public: //////////////////////////////////////////////////////////////////// WatchData::WatchData() : + editformat(0), hasChildren(false), generation(-1), valueEnabled(true), @@ -818,6 +819,8 @@ QVariant WatchModel::data(const QModelIndex &idx, int role) const return m_handler->m_expandedINames.contains(data.iname); case TypeFormatListRole: + if (!data.typeFormats.isEmpty()) + return data.typeFormats.split(','); if (isIntType(data.type)) return QStringList() << tr("decimal") << tr("hexadecimal") << tr("binary") << tr("octal"); @@ -828,10 +831,6 @@ QVariant WatchModel::data(const QModelIndex &idx, int role) const << tr("UTF8 string") << tr("UTF16 string") << tr("UCS4 string"); - if (data.type.endsWith(QLatin1String("QImage"))) - return QStringList() - << tr("normal") - << tr("displayed"); break; case TypeFormatRole: @@ -1255,9 +1254,7 @@ void WatchHandler::insertData(const WatchData &data) QTC_ASSERT(model, return); MODEL_DEBUG("NOTHING NEEDED: " << data.toString()); model->insertData(data); - - if (!data.editvalue.isEmpty()) - showEditValue(data); + showEditValue(data); } } @@ -1352,8 +1349,10 @@ static void swapEndian(char *d, int nchar) void WatchHandler::showEditValue(const WatchData &data) { QWidget *w = m_editWindows.value(data.iname); - - if (data.editformat == 0x1 || data.editformat == 0x3) { + if (data.editformat == 0x0) { + m_editWindows.remove(data.iname); + delete w; + } else if (data.editformat == 0x1 || data.editformat == 0x3) { // QImage if (!w) { w = new QLabel; diff --git a/src/plugins/debugger/watchhandler.h b/src/plugins/debugger/watchhandler.h index 9e9f0594fee..e2f4ddf0f93 100644 --- a/src/plugins/debugger/watchhandler.h +++ b/src/plugins/debugger/watchhandler.h @@ -127,6 +127,7 @@ public: QByteArray editvalue; // Displayed value int editformat; // Format of displayed value QString valuetooltip; // Tooltip in value column + QString typeFormats; // Selection of formats of displayed value QString type; // Type for further processing QString displayedType;// Displayed type (optional) QByteArray variable; // Name of internal Gdb variable if created -- GitLab