Просмотр исходного кода

improved tree building performance

Arkady Trestman 16 лет назад
Родитель
Сommit
7a4844fa34
1 измененных файлов с 18 добавлено и 22 удалено
  1. 18 22
      direct/src/leveleditor/ProtoPaletteUI.py

+ 18 - 22
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)
-
-           newItem = self.tree.AppendItem(item, itemText)
-           self.tree.SetItemPyData(newItem, itemText)
-
-        return newItem
+    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)
 
-    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()