Browse Source

installed interractive ShowPandaObjects

Arkady Trestman 16 years ago
parent
commit
29ad1a585c
2 changed files with 40 additions and 6 deletions
  1. 9 2
      direct/src/leveleditor/LevelEditorUI.py
  2. 31 4
      direct/src/leveleditor/SceneGraphUI.py

+ 9 - 2
direct/src/leveleditor/LevelEditorUI.py

@@ -67,7 +67,11 @@ class LevelEditorUI(WxAppShell):
 
 
         self.gridSizeMenuItem = self.menuOptions.Append(-1, "&Grid Size ")
         self.gridSizeMenuItem = self.menuOptions.Append(-1, "&Grid Size ")
         self.Bind(wx.EVT_MENU, self.onGridSize, self.gridSizeMenuItem)
         self.Bind(wx.EVT_MENU, self.onGridSize, self.gridSizeMenuItem)
-        
+
+        self.showPandaObjectsMenuItem = self.menuOptions.Append(-1, "&Show Panda Objects", kind = wx.ITEM_CHECK)
+        self.Bind(wx.EVT_MENU, self.onShowPandaObjects, self.showPandaObjectsMenuItem)
+
+
     def createInterface(self):
     def createInterface(self):
         self.createMenu()
         self.createMenu()
         
         
@@ -175,7 +179,10 @@ class LevelEditorUI(WxAppShell):
     def onGridSize(self, evt):
     def onGridSize(self, evt):
         gridSizeUI = GridSizeUI(self, -1, 'Change Grid Size', self.perspView.grid.gridSize, self.perspView.grid.gridSpacing)
         gridSizeUI = GridSizeUI(self, -1, 'Change Grid Size', self.perspView.grid.gridSize, self.perspView.grid.gridSpacing)
         gridSizeUI.ShowModal()
         gridSizeUI.ShowModal()
-        gridSizeUI.Destroy()        
+        gridSizeUI.Destroy()
+        
+    def onShowPandaObjects(self, evt):
+        self.sceneGraphUI.showPandaObjectChildren()
 
 
     def onDestroy(self, evt):
     def onDestroy(self, evt):
         self.editor.saveSettings()
         self.editor.saveSettings()

+ 31 - 4
direct/src/leveleditor/SceneGraphUI.py

@@ -22,11 +22,10 @@ class SceneGraphUI(wx.Panel):
         wx.Panel.__init__(self, parent)
         wx.Panel.__init__(self, parent)
 
 
         self.editor = editor
         self.editor = editor
-
-        # self.palette = self.editor.objectPalette
         self.tree = wx.TreeCtrl(self)
         self.tree = wx.TreeCtrl(self)
         self.root = self.tree.AddRoot('render')
         self.root = self.tree.AddRoot('render')
-        #self.addTreeNodes(root, self.palette.data)
+
+        self.shouldShowPandaObjChildren = False
 
 
         sizer = wx.BoxSizer(wx.VERTICAL)
         sizer = wx.BoxSizer(wx.VERTICAL)
         sizer.Add(self.tree, 1, wx.EXPAND, 0)
         sizer.Add(self.tree, 1, wx.EXPAND, 0)
@@ -66,6 +65,21 @@ class SceneGraphUI(wx.Panel):
         objNodePath = obj[OG.OBJ_NP]
         objNodePath = obj[OG.OBJ_NP]
         self.traversePandaObjects(item, objNodePath)
         self.traversePandaObjects(item, objNodePath)
 
 
+    def removePandaObjectChildren(self, parent):
+        # first, find Panda Object's NodePath of the item
+        itemId = self.tree.GetItemPyData(parent)
+        obj = self.editor.objectMgr.findObjectById(itemId)
+        if obj is None:
+           self.tree.Delete(parent)
+           return
+        item, cookie = self.tree.GetFirstChild(parent)
+        while item:
+           # recurse...
+           itemToRemove = item
+           # continue iteration to the next child
+           item, cookie = self.tree.GetNextChild(parent, cookie)
+           self.removePandaObjectChildren(itemToRemove)
+
     def add(self, item, parentName = None):
     def add(self, item, parentName = None):
         # import pdb;pdb.set_trace()
         # import pdb;pdb.set_trace()
         if item is None:
         if item is None:
@@ -81,7 +95,8 @@ class SceneGraphUI(wx.Panel):
         self.tree.SetItemPyData(newItem, obj[OG.OBJ_UID])
         self.tree.SetItemPyData(newItem, obj[OG.OBJ_UID])
         
         
         # adding children of PandaObj
         # adding children of PandaObj
-        self.addPandaObjectChildren(newItem)
+        if self.shouldShowPandaObjChildren:
+           self.addPandaObjectChildren(newItem)
         self.tree.Expand(self.root)
         self.tree.Expand(self.root)
 
 
     def traverse(self, parent, itemId):
     def traverse(self, parent, itemId):
@@ -167,6 +182,18 @@ class SceneGraphUI(wx.Panel):
            dragToItemObjNodePath = dragToItemObj[OG.OBJ_NP]
            dragToItemObjNodePath = dragToItemObj[OG.OBJ_NP]
            objNodePath.wrtReparentTo(dragToItemObjNodePath)
            objNodePath.wrtReparentTo(dragToItemObjNodePath)
 
 
+    def showPandaObjectChildren(self):
+        #import pdb;set_trace()
+        self.shouldShowPandaObjChildren = not self.shouldShowPandaObjChildren
+        item, cookie = self.tree.GetFirstChild(self.root)
+        while item:
+             if self.shouldShowPandaObjChildren:
+                self.addPandaObjectChildren(item)
+             else:
+                self.removePandaObjectChildren(item)
+             # continue iteration to the next child
+             item, cookie = self.tree.GetNextChild(self.root, cookie)
+
     def onSelected(self, event):
     def onSelected(self, event):
         itemId = self.tree.GetItemPyData(event.GetItem())
         itemId = self.tree.GetItemPyData(event.GetItem())
         if itemId:
         if itemId: