instrumented persistence for layer editor

This commit is contained in:
Arkady Trestman 2009-12-23 04:37:54 +00:00
parent 539b132333
commit fa965060c1
3 changed files with 76 additions and 35 deletions

View File

@ -14,12 +14,18 @@ class FileMgr:
f = open(fileName, 'w') f = open(fileName, 'w')
f.write("from pandac.PandaModules import *\n") f.write("from pandac.PandaModules import *\n")
f.write("\nobjectMgr = base.le.objectMgr\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("# temporary place holder for nodepath\n")
f.write("objects = {}\n") f.write("objects = {}\n")
saveData = self.editor.objectMgr.getSaveData() saveData = self.editor.objectMgr.getSaveData()
for data in saveData: for data in saveData:
f.write(data) f.write(data)
f.write('\n') f.write('\n')
saveDataLayers = self.editor.ui.layerEditorUI.getSaveData()
for data in saveDataLayers:
f.write(data)
f.write('\n')
f.close() f.close()
except IOError: except IOError:
print 'failed to save %s'%fileName print 'failed to save %s'%fileName

View File

@ -14,7 +14,9 @@ class LayerEditorUI(wx.Panel):
self.editor = editor self.editor = editor
self.editorTxt = "Layer Editor" self.editorTxt = "Layer Editor"
self.saveData = []
self.layersDataDict = dict() 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 = wx.ListCtrl(self, -1, style=wx.LC_REPORT|wx.LC_EDIT_LABELS|wx.LC_NO_HEADER)
self.llist.InsertColumn(0, "Layers") self.llist.InsertColumn(0, "Layers")
@ -44,36 +46,41 @@ class LayerEditorUI(wx.Panel):
self.popupmenu = wx.Menu() self.popupmenu = wx.Menu()
for item in self.menuItems: for item in self.menuItems:
menuItem = self.popupmenu.Append(-1, item) 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) self.llist.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.onShowMembers)
def OnShowPopup(self, event): def reset(self):
#import pdb;set_trace() #import pdb;set_trace()
self.layersDataDict.clear()
self.layersDataDictNextKey = 0
self.llist.DeleteAllItems()
def onShowPopup(self, event):
pos = event.GetPosition() pos = event.GetPosition()
pos = self.ScreenToClient(pos) pos = self.ScreenToClient(pos)
self.PopupMenu(self.popupmenu, pos) self.PopupMenu(self.popupmenu, pos)
def OnPopupItemSelected(self, event): def onPopupItemSelected(self, event):
menuItem = self.popupmenu.FindItemById(event.GetId()) menuItem = self.popupmenu.FindItemById(event.GetId())
text = menuItem.GetText() text = menuItem.GetText()
if text == self.opAddObj: if text == self.opAddObj:
self.AddObj() self.addObj()
elif text == self.opRemoveObj: elif text == self.opRemoveObj:
self.RemoveObj() self.removeObj()
elif text == self.opShow: elif text == self.opShow:
self.onShowMembers() self.onShowMembers()
elif text == self.opAdd: elif text == self.opAdd:
self.AddLayer() self.addLayer()
elif text == self.opDelete: elif text == self.opDelete:
self.DeleteLayer() self.deleteLayer()
elif text == self.opRename: elif text == self.opRename:
self.RenameLayer() self.renameLayer()
else: else:
wx.MessageBox("You selected item '%s'" % text) wx.MessageBox("You selected item '%s'" % text)
def FindLabel(self, text): def findLabel(self, text):
found = False found = False
for index in range(self.llist.GetItemCount()): for index in range(self.llist.GetItemCount()):
itemtext = self.llist.GetItemText(index) itemtext = self.llist.GetItemText(index)
@ -81,52 +88,64 @@ class LayerEditorUI(wx.Panel):
return True return True
return found 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() count = self.llist.GetItemCount()
i = 1 i = 1
text = "Layer%s"%(count + i) text = "Layer%s"%(count + i)
found = self.FindLabel(text) found = self.findLabel(text)
while found: while found:
i = i + 1 i = i + 1
text = "Layer%s"%(count+i) text = "Layer%s"%(count + i)
found = self.FindLabel(text) found = self.findLabel(text)
index = self.llist.InsertStringItem(count, text)
self.llist.SetItemData(index, count + i)
layersData = list()
self.layersDataDict[count + i] = layersData
def DeleteLayer(self): self.layersDataDictNextKey = self.layersDataDictNextKey + 1
import pdb;set_trace() self.addLayerEntry(text, self.layersDataDictNextKey)
def deleteLayer(self):
index = self.llist.GetFirstSelected() index = self.llist.GetFirstSelected()
if index != -1: if index != -1:
key = self.llist.GetItemData(index) key = self.llist.GetItemData(index)
del(self.layersDataDict[key]) del(self.layersDataDict[key])
item = self.llist.DeleteItem(index) item = self.llist.DeleteItem(index)
def RenameLayer(self): def renameLayer(self):
#import pdb;set_trace()
index = self.llist.GetFirstSelected() index = self.llist.GetFirstSelected()
if index != -1: if index != -1:
self.llist.SetItemState(index, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED) self.llist.SetItemState(index, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
self.llist.SetItemState(index, wx.LIST_STATE_FOCUSED, wx.LIST_STATE_FOCUSED) self.llist.SetItemState(index, wx.LIST_STATE_FOCUSED, wx.LIST_STATE_FOCUSED)
def RemoveObj(self): def removeObjData(self, objUID):
#import pdb;set_trace() 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 objNodePath = base.direct.selected.last
if objNodePath is None: if objNodePath is None:
wx.MessageBox("No object was selected.", self.editorTxt, wx.OK|wx.ICON_EXCLAMATION) wx.MessageBox("No object was selected.", self.editorTxt, wx.OK|wx.ICON_EXCLAMATION)
return return
obj = self.editor.objectMgr.findObjectByNodePath(objNodePath) obj = self.editor.objectMgr.findObjectByNodePath(objNodePath)
if obj is not None: if obj is not None:
layersDataDictKeys = self.layersDataDict.keys() self.removeObjData(obj[OG.OBJ_UID])
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])
def AddObj(self): def addObj(self):
#import pdb;set_trace()
index = self.llist.GetFirstSelected() index = self.llist.GetFirstSelected()
if index == -1: if index == -1:
wx.MessageBox("No layer was selected.", self.editorTxt, wx.OK|wx.ICON_EXCLAMATION) wx.MessageBox("No layer was selected.", self.editorTxt, wx.OK|wx.ICON_EXCLAMATION)
@ -147,14 +166,12 @@ class LayerEditorUI(wx.Panel):
return return
# Looking for the object in the other layers # Looking for the object in the other layers
# If the object is found - delete it. # If the object is found - delete it.
self.RemoveObj() self.removeObj()
layersData.append(obj[OG.OBJ_UID]) layersData.append(obj[OG.OBJ_UID])
def onShowMembers(self, event): def onShowMembers(self, event):
#import pdb;set_trace()
item = event.GetItem() item = event.GetItem()
layerMembers = list() layerMembers = list()
layerName = item.GetText() layerName = item.GetText()
key = item.GetData() key = item.GetData()
@ -168,4 +185,19 @@ class LayerEditorUI(wx.Panel):
#do something here #do something here
dialog.GetStringSelection() dialog.GetStringSelection()
dialog.Destroy() 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

View File

@ -9,6 +9,7 @@ from ViewPort import *
from ObjectPaletteUI import * from ObjectPaletteUI import *
from ObjectPropertyUI import * from ObjectPropertyUI import *
from SceneGraphUI import * from SceneGraphUI import *
from LayerEditorUI import *
from HotKeyUI import * from HotKeyUI import *
class PandaTextDropTarget(wx.TextDropTarget): class PandaTextDropTarget(wx.TextDropTarget):
@ -117,6 +118,7 @@ class LevelEditorUI(WxAppShell):
self.objectPaletteUI = ObjectPaletteUI(self.leftBarUpPane, self.editor) self.objectPaletteUI = ObjectPaletteUI(self.leftBarUpPane, self.editor)
self.objectPropertyUI = ObjectPropertyUI(self.rightBarUpPane, self.editor) self.objectPropertyUI = ObjectPropertyUI(self.rightBarUpPane, self.editor)
self.sceneGraphUI = SceneGraphUI(self.leftBarDownPane, self.editor) self.sceneGraphUI = SceneGraphUI(self.leftBarDownPane, self.editor)
self.layerEditorUI = LayerEditorUI(self.rightBarDownPane, self.editor)
def onSetFocus(self): def onSetFocus(self):
print 'wx got focus' print 'wx got focus'
@ -150,6 +152,7 @@ class LevelEditorUI(WxAppShell):
def onNew(self, evt): def onNew(self, evt):
self.editor.reset() self.editor.reset()
self.sceneGraphUI.reset() self.sceneGraphUI.reset()
self.layerEditorUI.reset()
def onLoad(self, evt): def onLoad(self, evt):
dialog = wx.FileDialog(None, "Choose a file", os.getcwd(), "", "*.py", wx.OPEN) dialog = wx.FileDialog(None, "Choose a file", os.getcwd(), "", "*.py", wx.OPEN)