def METHOD_NAME(self, index: QModelIndex, role: Qt.ItemDataRole = Qt.DisplayRole):
    """Gets the node data.
    Args:
        index (QModelIndex): Index to get data for
        role (Qt.ItemDataRole): The role..  Defaults to Qt.DisplayRole.
    Returns:
        object: fetched data
    """
    if not index.isValid():
        return None
    if self.component is None:
        return None
    # The data in a form suitable for editing in an editor. (QString)
    if role == Qt.EditRole:
        return self.METHOD_NAME(index, Qt.DisplayRole)
    # Bold the first
    if (role == Qt.FontRole) and (index.column() == 0):
        font = QFont()
        font.setBold(True)
        return font
    if role == Qt.TextAlignmentRole:
        return int(Qt.AlignTop | Qt.AlignLeft)
    if role == Qt.DisplayRole:
        node = self.nodeFromIndex(index)
        if node:
            # the first column is either a leaf key or a branch
            # the second column is always a leaf value or for a branch is ''.
            if isinstance(node, BranchNode):
                # Handle a branch (which is a nested subdictionary, which can be expanded)
                if index.column() == 0:
                    return node.name
                return ''
            # We have a leaf
            elif index.column() == 0:
                return str(node.label)  # key
            elif index.column() == 1:
                return str(node.value)  # value
            elif index.column() == 2:
                # TODO: If the parser fails, this can throw an error
                return str(self.design.parse_value(node.value))
            else:
                return None
    return None