Source code for cgl.ui.widgets.containers.node
# -*- coding: utf-8 -*-
# noinspection PyUnresolvedReferences
from PySide6 import QtXml
# noinspection PyPropertyAccess,PyProtectedMember
[docs]
class Node(object):
def __init__(self, name, parent=None):
self._name = name
self._parent = parent
self._children = []
self._value = None
if parent:
parent.addChild(self)
[docs]
@staticmethod
def typeInfo():
return 'NODE'
[docs]
def addChild(self, child):
self._children.append(child)
[docs]
def insertChild(self, position, child):
if position < 0 or position > len(self._children):
return False
self._children.insert(position, child)
child._parent = self
return True
[docs]
def removeChild(self, position):
if position < 0 or position > len(self._children):
return False
self._children.pop(position)
self.child._parent = None
return True
# noinspection PyArgumentList
[docs]
def attrs(self):
classes = self.__class__.__mro__
keyvalued = {}
for cls in classes:
for key, value in cls.__dict__.items():
if isinstance(value, property):
keyvalued[key] = value.fget(self)
return keyvalued
[docs]
def to_xml(self):
doc = QtXml.QDomDocument()
node = doc.createElement(self.typeInfo())
doc.appendChild(node)
for i in self._children:
i._recurseXml(doc, node)
return doc.toString(indent=4)
def _recurse_xml(self, doc, parent):
node = doc.createElement(self.typeInfo())
parent.appendChild(node)
attrs = self.attrs().items()
for k, v in attrs:
node.setAttribute(k, v)
for child in self._children:
child._recurse_xml(doc, node)
[docs]
def to_list(self):
output = []
if self._children:
for child in self._children:
output += [self.name, child.to_list()]
else:
output += [self.name, self.value]
return output
[docs]
def to_dict(self, d):
for child in self._children:
child._recurse_dict(d)
return d
def _recurse_dict(self, d):
if self._children:
d[self.name] = {}
for child in self._children:
child._recurse_dict(d[self.name])
else:
d[self.name] = self.value
# noinspection PyMethodParameters
def name():
def fget(self):
return self._name
def fset(self, value):
self._name = value
return locals()
name = property(**name())
# noinspection PyMethodParameters
def value():
def fget(self):
return self._value
def fset(self, value):
self._value = value
return locals()
value = property(**value())
[docs]
def child(self, row):
return self._children[row]
[docs]
def childCount(self):
return len(self._children)
[docs]
def parent(self):
return self._parent
[docs]
def row(self):
if self._parent is not None:
return self._parent._children.index(self)
# noinspection PyPep8Naming
[docs]
def log(self, tabLevel=-1):
output = ''
tabLevel += 1
for i in range(tabLevel):
output += ' '
output += ''.join(('|----', self._name, ' = ', '\n'))
for child in self._children:
output += child.log(tabLevel)
tabLevel -= 1
output += '\n'
return output
def __repr__(self):
return self.log()
[docs]
def data(self, column):
if column==0:
return self.name
elif column==1:
return self.value
[docs]
def setData(self, column, value):
if column==0:
self.name = value
if column == 1:
self.value = value
[docs]
@staticmethod
def resource():
return None