diff --git a/direct/src/leveleditor/FileMgr.py b/direct/src/leveleditor/FileMgr.py index 61a66e945b..1b7fde2eb4 100755 --- a/direct/src/leveleditor/FileMgr.py +++ b/direct/src/leveleditor/FileMgr.py @@ -14,12 +14,18 @@ class FileMgr: f = open(fileName, 'w') f.write("from pandac.PandaModules import *\n") f.write("\nobjectMgr = base.le.objectMgr\n") + f.write('ui = base.le.ui\n') + f.write('\nui.sceneGraphUI.reset()\n\n') f.write("# temporary place holder for nodepath\n") f.write("objects = {}\n") saveData = self.editor.objectMgr.getSaveData() for data in saveData: f.write(data) f.write('\n') + saveDataLayers = self.editor.ui.layerEditorUI.getSaveData() + for data in saveDataLayers: + f.write(data) + f.write('\n') f.close() except IOError: print 'failed to save %s'%fileName diff --git a/direct/src/leveleditor/LayerEditorUI.py b/direct/src/leveleditor/LayerEditorUI.py index 89f67263e5..1d2753d36f 100644 --- a/direct/src/leveleditor/LayerEditorUI.py +++ b/direct/src/leveleditor/LayerEditorUI.py @@ -14,7 +14,9 @@ class LayerEditorUI(wx.Panel): self.editor = editor self.editorTxt = "Layer Editor" + self.saveData = [] self.layersDataDict = dict() + self.layersDataDictNextKey = 0 self.llist = wx.ListCtrl(self, -1, style=wx.LC_REPORT|wx.LC_EDIT_LABELS|wx.LC_NO_HEADER) self.llist.InsertColumn(0, "Layers") @@ -44,36 +46,41 @@ class LayerEditorUI(wx.Panel): self.popupmenu = wx.Menu() for item in self.menuItems: menuItem = self.popupmenu.Append(-1, item) - self.Bind(wx.EVT_MENU, self.OnPopupItemSelected, menuItem) + self.Bind(wx.EVT_MENU, self.onPopupItemSelected, menuItem) - self.Bind(wx.EVT_CONTEXT_MENU, self.OnShowPopup) + self.Bind(wx.EVT_CONTEXT_MENU, self.onShowPopup) self.llist.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.onShowMembers) - def OnShowPopup(self, event): + def reset(self): #import pdb;set_trace() + self.layersDataDict.clear() + self.layersDataDictNextKey = 0 + self.llist.DeleteAllItems() + + def onShowPopup(self, event): pos = event.GetPosition() pos = self.ScreenToClient(pos) self.PopupMenu(self.popupmenu, pos) - def OnPopupItemSelected(self, event): + def onPopupItemSelected(self, event): menuItem = self.popupmenu.FindItemById(event.GetId()) text = menuItem.GetText() if text == self.opAddObj: - self.AddObj() + self.addObj() elif text == self.opRemoveObj: - self.RemoveObj() + self.removeObj() elif text == self.opShow: self.onShowMembers() elif text == self.opAdd: - self.AddLayer() + self.addLayer() elif text == self.opDelete: - self.DeleteLayer() + self.deleteLayer() elif text == self.opRename: - self.RenameLayer() + self.renameLayer() else: wx.MessageBox("You selected item '%s'" % text) - def FindLabel(self, text): + def findLabel(self, text): found = False for index in range(self.llist.GetItemCount()): itemtext = self.llist.GetItemText(index) @@ -81,52 +88,64 @@ class LayerEditorUI(wx.Panel): return True return found - def AddLayer(self): + def addLayerData(self, idx, objUID): + self.removeObjData(objUID) + layerData = self.layersDataDict[idx] + layerData.append(objUID) + + def addLayerEntry(self, name, idx): + index = self.llist.InsertStringItem(self.llist.GetItemCount(), name) + self.llist.SetItemData(index, idx) + layersData = list() + self.layersDataDict[idx] = layersData + if idx > self.layersDataDictNextKey: + self.layersDataDictNextKey = idx + + def addLayer(self): + #import pdb;set_trace() count = self.llist.GetItemCount() i = 1 text = "Layer%s"%(count + i) - found = self.FindLabel(text) + found = self.findLabel(text) while found: i = i + 1 - text = "Layer%s"%(count+i) - found = self.FindLabel(text) - index = self.llist.InsertStringItem(count, text) - self.llist.SetItemData(index, count + i) - layersData = list() - self.layersDataDict[count + i] = layersData + text = "Layer%s"%(count + i) + found = self.findLabel(text) - def DeleteLayer(self): - import pdb;set_trace() + self.layersDataDictNextKey = self.layersDataDictNextKey + 1 + self.addLayerEntry(text, self.layersDataDictNextKey) + + def deleteLayer(self): index = self.llist.GetFirstSelected() if index != -1: key = self.llist.GetItemData(index) del(self.layersDataDict[key]) item = self.llist.DeleteItem(index) - def RenameLayer(self): - #import pdb;set_trace() + def renameLayer(self): index = self.llist.GetFirstSelected() if index != -1: self.llist.SetItemState(index, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED) self.llist.SetItemState(index, wx.LIST_STATE_FOCUSED, wx.LIST_STATE_FOCUSED) - def RemoveObj(self): - #import pdb;set_trace() + def removeObjData(self, objUID): + layersDataDictKeys = self.layersDataDict.keys() + for i in range(len(layersDataDictKeys)): + layersData = self.layersDataDict[layersDataDictKeys[i]] + for j in range(len(layersData)): + if layersData[j] == objUID: + del(layersData[j]) + + def removeObj(self): objNodePath = base.direct.selected.last if objNodePath is None: wx.MessageBox("No object was selected.", self.editorTxt, wx.OK|wx.ICON_EXCLAMATION) return obj = self.editor.objectMgr.findObjectByNodePath(objNodePath) if obj is not None: - layersDataDictKeys = self.layersDataDict.keys() - for i in range(len(layersDataDictKeys)): - layersData = self.layersDataDict[layersDataDictKeys[i]] - for j in range(len(layersData)): - if layersData[j] == obj[OG.OBJ_UID]: - del(layersData[j]) + self.removeObjData(obj[OG.OBJ_UID]) - def AddObj(self): - #import pdb;set_trace() + def addObj(self): index = self.llist.GetFirstSelected() if index == -1: wx.MessageBox("No layer was selected.", self.editorTxt, wx.OK|wx.ICON_EXCLAMATION) @@ -147,14 +166,12 @@ class LayerEditorUI(wx.Panel): return # Looking for the object in the other layers # If the object is found - delete it. - self.RemoveObj() + self.removeObj() layersData.append(obj[OG.OBJ_UID]) def onShowMembers(self, event): - #import pdb;set_trace() item = event.GetItem() - layerMembers = list() layerName = item.GetText() key = item.GetData() @@ -168,4 +185,19 @@ class LayerEditorUI(wx.Panel): #do something here dialog.GetStringSelection() dialog.Destroy() + + def traverse(self): + self.saveData.append("ui.layerEditorUI.reset()") + for index in range(self.llist.GetItemCount()): + self.saveData.append("ui.layerEditorUI.addLayerEntry('%s', %s )"%(self.llist.GetItemText(index), self.llist.GetItemData(index))) + layersDataDictKeys = self.layersDataDict.keys() + for i in range(len(layersDataDictKeys)): + layerData = self.layersDataDict[layersDataDictKeys[i]] + for j in range(len(layerData)): + self.saveData.append("ui.layerEditorUI.addLayerData(%s, '%s')"%(layersDataDictKeys[i], layerData[j])) + + def getSaveData(self): + self.saveData = [] + self.traverse() + return self.saveData diff --git a/direct/src/leveleditor/LevelEditorUI.py b/direct/src/leveleditor/LevelEditorUI.py index 0bbb762c8c..91fcdadfd4 100755 --- a/direct/src/leveleditor/LevelEditorUI.py +++ b/direct/src/leveleditor/LevelEditorUI.py @@ -9,6 +9,7 @@ from ViewPort import * from ObjectPaletteUI import * from ObjectPropertyUI import * from SceneGraphUI import * +from LayerEditorUI import * from HotKeyUI import * class PandaTextDropTarget(wx.TextDropTarget): @@ -117,6 +118,7 @@ class LevelEditorUI(WxAppShell): self.objectPaletteUI = ObjectPaletteUI(self.leftBarUpPane, self.editor) self.objectPropertyUI = ObjectPropertyUI(self.rightBarUpPane, self.editor) self.sceneGraphUI = SceneGraphUI(self.leftBarDownPane, self.editor) + self.layerEditorUI = LayerEditorUI(self.rightBarDownPane, self.editor) def onSetFocus(self): print 'wx got focus' @@ -150,6 +152,7 @@ class LevelEditorUI(WxAppShell): def onNew(self, evt): self.editor.reset() self.sceneGraphUI.reset() + self.layerEditorUI.reset() def onLoad(self, evt): dialog = wx.FileDialog(None, "Choose a file", os.getcwd(), "", "*.py", wx.OPEN)