From 7a4844fa34c43ca09f505b286f8c4ba8fa8bb611 Mon Sep 17 00:00:00 2001 From: Arkady Trestman Date: Wed, 10 Mar 2010 02:10:06 +0000 Subject: [PATCH] improved tree building performance --- direct/src/leveleditor/ProtoPaletteUI.py | 40 +++++++++++------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/direct/src/leveleditor/ProtoPaletteUI.py b/direct/src/leveleditor/ProtoPaletteUI.py index 53345ffb45..25b6102024 100755 --- a/direct/src/leveleditor/ProtoPaletteUI.py +++ b/direct/src/leveleditor/ProtoPaletteUI.py @@ -52,8 +52,10 @@ class ProtoPaletteUI(wx.Panel): validator=wx.DefaultValidator, name="treeCtrl") self.rootName = "Proto Objects" self.root = self.tree.AddRoot(self.rootName) - self.addTreeNodes(self.root, self.palette.dataStruct) - + + self.dataKeys = self.palette.dataStruct.keys()[:] + self.addTreeNodes(self.root, self.palette.rootName, self.palette.dataStruct, self.dataKeys) + self.editorTxt = "Proto Objects Editor" self.opAdd = "Add Group" @@ -109,27 +111,21 @@ class ProtoPaletteUI(wx.Panel): item, cookie = self.tree.GetNextChild(parent, cookie) return None - def addTreeNode(self, itemText, parentItem, items): - newItem = wx.TreeItemId - parentText = items[itemText] - if parentText == self.palette.rootName: - newItem = self.tree.AppendItem(parentItem, itemText) - self.tree.SetItemPyData(newItem, itemText) - else: - item = self.traverse(parentItem, parentText) - if item is None: - item = self.addTreeNode(parentText, parentItem, items) + def addTreeNodes(self, parentItem, parentItemName, items, itemKeys): + roots = [] + rootItems = [] + #import pdb;set_trace() + for key in itemKeys: + if parentItemName == items[key]: + roots.append(key) + for root in roots: + newItem = self.tree.AppendItem(parentItem, root) + self.tree.SetItemPyData(newItem, root) + rootItems.append(newItem) + itemKeys.remove(root) + for rootItem in rootItems: + self.addTreeNodes(rootItem, self.tree.GetItemText(rootItem), items, itemKeys) - newItem = self.tree.AppendItem(item, itemText) - self.tree.SetItemPyData(newItem, itemText) - - return newItem - - def addTreeNodes(self, parentItem, items): - for key in items.keys(): - item = self.traverse(parentItem, key) - if item is None: - self.addTreeNode(key, parentItem, items) def onBeginDrag(self, event): item = event.GetItem()