class ObjectNode(DefaultMutableTreeNode): def __init__(self, *args, **kwargs): DefaultMutableTreeNode.__init__(self, *args, **kwargs) self.expanded = 0 self.m_children = [] self.children = Vector() self.model = ObjectNodeModel() self.nodes = {} self.is_leaf = -1 def toString(self): """The result from toString() is automatically displayed as node label""" return str(self.userObject) def _initChildren(self): if not self.m_children: self.m_children = self.model.getChildren(self.userObject) items = self.m_children.items() object_sort(items) self.m_children_keys = map(lambda x: x[0], items) def getChildCount(self): if self.userObject is None: return self._initChildren() return len(self.m_children) def isLeaf(self): if self.m_children: return len(self.m_children) == 0 if self.is_leaf == -1: try: children = self.model.getChildren(self.userObject, CheckingDict()) self.is_leaf = len(children) == 0 except DictWriteException: self.is_leaf = 0 return self.is_leaf def getChildAt(self, i): self._initChildren() if not self.nodes.has_key(i): self.expanded = 1 key = self.m_children_keys[i] value = self.m_children[key] node = ObjectNode(value) node.setParent(self) self.nodes[i] = node return self.nodes[i] def getIndex(self, aChild): return self.children.indexOf(aChild)