def METHOD_NAME(self, data, parent, name='', hideRoot=False, path=()):
    if hideRoot:
        node = parent
    else:
        node = QtWidgets.QTreeWidgetItem([name, "", ""])
        parent.addChild(node)
    # record the path to the node so it can be retrieved later
    # (this is used by DiffTreeWidget)
    self.nodes[path] = node
    typeStr, desc, childs, widget = self.parse(data)
    # Truncate description and add text box if needed
    if len(desc) > 100:
        desc = desc[:97] + '...'
        if widget is None:
            widget = QtWidgets.QPlainTextEdit(str(data))
            widget.setMaximumHeight(200)
            widget.setReadOnly(True)
    node.setText(1, typeStr)
    node.setText(2, desc)
    # Add widget to new subnode
    if widget is not None:
        self.widgets.append(widget)
        subnode = QtWidgets.QTreeWidgetItem(["", "", ""])
        node.addChild(subnode)
        self.setItemWidget(subnode, 0, widget)
        subnode.setFirstColumnSpanned(True)
    # recurse to children
    for key, data in childs.items():
        self.METHOD_NAME(data, node, str(key), path=path+(key,))