Example #1
0
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)