Debugger: Add a QStandardItem dumper

Change-Id: I503b17e1f36158a774dcf096b19ba628f0cc0205
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2016-11-23 16:07:45 +01:00
parent 800a932e19
commit 9d7a1fcb0f
3 changed files with 45 additions and 21 deletions
+16 -13
View File
@@ -215,8 +215,7 @@ class Children:
return True
class PairedChildrenData:
def __init__(self, d, pairType, keyType, valueType):
self.pairType = pairType
def __init__(self, d, keyType, valueType):
self.keyType = keyType
self.valueType = valueType
@@ -233,7 +232,7 @@ class PairedChildren(Children):
keyType = pairType[0].unqualified()
if valueType is None:
valueType = pairType[1]
d.pairData = PairedChildrenData(d, pairType, keyType, valueType)
d.pairData = PairedChildrenData(d, keyType, valueType)
d.pairData.kname = 'key' if useKeyAndValue else 'first'
d.pairData.vname = 'value' if useKeyAndValue else 'second'
@@ -810,17 +809,21 @@ class DumperBase:
self.putNumChild(0)
def putPairItem(self, index, pair):
(first, second) = pair if isinstance(pair, tuple) else pair.members(False)
with SubItem(self, index):
with Children(self):
key = self.putSubItem(self.pairData.kname, first)
value = self.putSubItem(self.pairData.vname, second)
if index is not None:
self.putField('keyprefix', '[%s] ' % index)
self.putField('key', key.value)
if key.encoding is not None:
self.putField('keyencoded', key.encoding)
self.putValue(value.value, value.encoding)
self.putPairContents(index, pair,
self.pairData.kname, self.pairData.vname)
def putPairContents(self, index, pair, kname, vname):
with Children(self):
first, second = pair if isinstance(pair, tuple) else pair.members(False)
key = self.putSubItem(kname, first)
value = self.putSubItem(vname, second)
if index is not None:
self.putField('keyprefix', '[%s] ' % index)
self.putField('key', key.value)
if key.encoding is not None:
self.putField('keyencoded', key.encoding)
self.putValue(value.value, value.encoding)
def putCallItem(self, name, rettype, value, func, *args):
with SubItem(self, name):
+15 -8
View File
@@ -190,6 +190,21 @@ def qdump_X_QModelIndex(d, value):
d.putCallItem('parent', '@QModelIndex', value, 'parent')
#gdb.execute('call free($mi)')
def qdump__QStandardItemData(d, value):
role, pad, val = value.split('{@Qt::ItemDataRole}@{QVariant}')
d.putPairContents(role.value(), (role, val), 'role', 'value')
def qdump__QStandardItem(d, value):
vtable, dptr = value.split('pp')
vtable1, model, parent, values, children, rows, cols, item = d.split('pppPPIIp', dptr)
d.putValue(' ')
d.putNumChild(1)
if d.isExpanded():
with Children(d):
d.putSubItem('[model]', d.createValue(model, '@QStandardItemModel'))
d.putSubItem('[values]', d.createVectorItem(values, 'QStandardItemData'))
d.putSubItem('[children]', d.createVectorItem(children, '@QStandardItem*'))
def qdump__QDate(d, value):
jd = value.pointer()
@@ -1232,14 +1247,6 @@ def qdump__QGraphicsPolygonItem(d, value):
d.putItemCount(size)
d.putPlotData(data, size, d.createType('QPointF'))
def qdump__QStandardItem(d, value):
d.putBetterType(d.currentType)
try:
d.putItem(value['d_ptr'])
except:
d.putPlainChildren(value)
def qedit__QString(d, value, data):
d.call('void', value, 'resize', str(len(data)))
(base, size, alloc) = d.stringData(value)
+14
View File
@@ -6335,6 +6335,20 @@ void tst_Dumpers::dumper_data()
+ Check("v15", "\"utf16\"", "@QJSValue (QString)")
+ Check("v15.1", "[1]", "116", "@QChar");
QTest::newRow("QStandardItem")
<< Data("#include <QStandardItemModel>",
"QStandardItemModel m;\n"
"QStandardItem *root = m.invisibleRootItem();\n"
"for (int i = 0; i < 4; ++i) {\n"
" QStandardItem *item = new QStandardItem(QString(\"item %1\").arg(i));\n"
" item->setData(123);\n"
" root->appendRow(item);\n"
"}\n")
+ GuiProfile()
+ Check("root.[children].0.[values].0.value", "\"item 0\"", "@QVariant (@QString)");
QTest::newRow("Internal1")
<< Data("struct QtcDumperTest_FieldAccessByIndex { int d[3] = { 10, 11, 12 }; };\n",
"QtcDumperTest_FieldAccessByIndex d; unused(&d);\n")