|
@@ -1,254 +1,255 @@
|
|
|
-"""
|
|
|
|
|
-Defines Layer UI
|
|
|
|
|
-"""
|
|
|
|
|
-import wx
|
|
|
|
|
-import sys
|
|
|
|
|
-import cPickle as pickle
|
|
|
|
|
-from pandac.PandaModules import *
|
|
|
|
|
-
|
|
|
|
|
-import ObjectGlobals as OG
|
|
|
|
|
-
|
|
|
|
|
-class LayerEditorUI(wx.Panel):
|
|
|
|
|
- def __init__(self, parent, editor):
|
|
|
|
|
- wx.Panel.__init__(self, parent)
|
|
|
|
|
-
|
|
|
|
|
- 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")
|
|
|
|
|
-
|
|
|
|
|
- sizer = wx.BoxSizer(wx.VERTICAL)
|
|
|
|
|
- sizer.Add(self.llist, 1, wx.EXPAND, 0)
|
|
|
|
|
- self.SetSizer(sizer); self.Layout()
|
|
|
|
|
-
|
|
|
|
|
- parentSizer = wx.BoxSizer(wx.VERTICAL)
|
|
|
|
|
- parentSizer.Add(self, 1, wx.EXPAND, 0)
|
|
|
|
|
- parent.SetSizer(parentSizer); parent.Layout()
|
|
|
|
|
-
|
|
|
|
|
- self.opAdd = "Add Layer"
|
|
|
|
|
- self.opDelete = "Delete Layer"
|
|
|
|
|
- self.opRename = "Rename Layer"
|
|
|
|
|
- self.opAddObj = "Add Selected Object"
|
|
|
|
|
- self.opRemoveObj = "Remove Selected Object"
|
|
|
|
|
- self.opShowObj = "Show Layer Objects"
|
|
|
|
|
- self.opHideObj = "Hide Layer Objects"
|
|
|
|
|
-
|
|
|
|
|
- self.menuItemsGen = list()
|
|
|
|
|
- self.menuItemsGen.append(self.opAdd)
|
|
|
|
|
- #self.menuItems.append(self.opRename)
|
|
|
|
|
-
|
|
|
|
|
- self.menuItemsObj = list()
|
|
|
|
|
- self.menuItemsObj.append(self.opAddObj)
|
|
|
|
|
- self.menuItemsObj.append(self.opRemoveObj)
|
|
|
|
|
- self.menuItemsObj.append(self.opShowObj)
|
|
|
|
|
- self.menuItemsObj.append(self.opHideObj)
|
|
|
|
|
- self.menuItemsObj.append(self.opDelete)
|
|
|
|
|
-
|
|
|
|
|
- self.popupmenu = wx.Menu()
|
|
|
|
|
- for item in self.menuItemsGen:
|
|
|
|
|
- menuItem = self.popupmenu.Append(-1, item)
|
|
|
|
|
- self.Bind(wx.EVT_MENU, self.onPopupItemSelected, menuItem)
|
|
|
|
|
-
|
|
|
|
|
- self.Bind(wx.EVT_CONTEXT_MENU, self.onShowPopup)
|
|
|
|
|
- self.llist.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.onShowMembers)
|
|
|
|
|
-
|
|
|
|
|
- def menuAppendGenItems(self):
|
|
|
|
|
- for item in self.menuItemsGen:
|
|
|
|
|
- menuItem = self.popupmenu.Append(-1, item)
|
|
|
|
|
- self.Bind(wx.EVT_MENU, self.onPopupItemSelected, menuItem)
|
|
|
|
|
-
|
|
|
|
|
- def menuAppendObjItems(self):
|
|
|
|
|
- for item in self.menuItemsObj:
|
|
|
|
|
- menuItem = self.popupmenu.Append(-1, item)
|
|
|
|
|
- self.Bind(wx.EVT_MENU, self.onPopupItemSelected, menuItem)
|
|
|
|
|
-
|
|
|
|
|
- def onShowPopup(self, event):
|
|
|
|
|
- pos = event.GetPosition()
|
|
|
|
|
- pos = self.ScreenToClient(pos)
|
|
|
|
|
-
|
|
|
|
|
- for menuItem in self.popupmenu.GetMenuItems():
|
|
|
|
|
- self.popupmenu.RemoveItem(menuItem)
|
|
|
|
|
-
|
|
|
|
|
- #import pdb;set_trace()
|
|
|
|
|
- hitItem, flags = self.llist.HitTest(pos)
|
|
|
|
|
- if hitItem == -1:
|
|
|
|
|
- self.menuAppendGenItems()
|
|
|
|
|
- else:
|
|
|
|
|
- self.menuAppendObjItems()
|
|
|
|
|
- self.PopupMenu(self.popupmenu, pos)
|
|
|
|
|
-
|
|
|
|
|
- def onPopupItemSelected(self, event):
|
|
|
|
|
- menuItem = self.popupmenu.FindItemById(event.GetId())
|
|
|
|
|
- text = menuItem.GetText()
|
|
|
|
|
- if text == self.opAddObj:
|
|
|
|
|
- self.addObj()
|
|
|
|
|
- elif text == self.opRemoveObj:
|
|
|
|
|
- self.removeObj()
|
|
|
|
|
- elif text == self.opShowObj:
|
|
|
|
|
- self.HideObj(False)
|
|
|
|
|
- elif text == self.opHideObj:
|
|
|
|
|
- self.HideObj(True)
|
|
|
|
|
- elif text == self.opAdd:
|
|
|
|
|
- self.addLayer()
|
|
|
|
|
- elif text == self.opDelete:
|
|
|
|
|
- self.deleteLayer()
|
|
|
|
|
- elif text == self.opRename:
|
|
|
|
|
- self.renameLayer()
|
|
|
|
|
- else:
|
|
|
|
|
- wx.MessageBox("You selected item '%s'" % text)
|
|
|
|
|
-
|
|
|
|
|
- def reset(self):
|
|
|
|
|
- #import pdb;set_trace()
|
|
|
|
|
- self.layersDataDict.clear()
|
|
|
|
|
- self.layersDataDictNextKey = 0
|
|
|
|
|
- self.llist.DeleteAllItems()
|
|
|
|
|
-
|
|
|
|
|
- def findLabel(self, text):
|
|
|
|
|
- found = False
|
|
|
|
|
- for index in range(self.llist.GetItemCount()):
|
|
|
|
|
- itemtext = self.llist.GetItemText(index)
|
|
|
|
|
- if itemtext == text:
|
|
|
|
|
- return True
|
|
|
|
|
- return found
|
|
|
|
|
-
|
|
|
|
|
- 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)
|
|
|
|
|
- while found:
|
|
|
|
|
- i = i + 1
|
|
|
|
|
- text = "Layer%s"%(count + i)
|
|
|
|
|
- found = self.findLabel(text)
|
|
|
|
|
-
|
|
|
|
|
- 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):
|
|
|
|
|
- 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 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:
|
|
|
|
|
- self.removeObjData(obj[OG.OBJ_UID])
|
|
|
|
|
-
|
|
|
|
|
- def addObj(self):
|
|
|
|
|
- index = self.llist.GetFirstSelected()
|
|
|
|
|
- if index == -1:
|
|
|
|
|
- wx.MessageBox("No layer was selected.", self.editorTxt, wx.OK|wx.ICON_EXCLAMATION)
|
|
|
|
|
- return
|
|
|
|
|
- objNodePath = base.direct.selected.last
|
|
|
|
|
- if objNodePath is None:
|
|
|
|
|
- wx.MessageBox("No object was selected.", self.editorTxt, wx.OK|wx.ICON_EXCLAMATION)
|
|
|
|
|
- return
|
|
|
|
|
-
|
|
|
|
|
- # Checking if the object was laready added to the layer
|
|
|
|
|
- obj = self.editor.objectMgr.findObjectByNodePath(objNodePath)
|
|
|
|
|
- if obj is not None:
|
|
|
|
|
- i = self.llist.GetItemData(index)
|
|
|
|
|
- layersData = self.layersDataDict[i]
|
|
|
|
|
- for j in range(len(layersData)):
|
|
|
|
|
- if layersData[j] == obj[OG.OBJ_UID]:
|
|
|
|
|
- wx.MessageBox("Selected object already is this layer", self.editorTxt, wx.OK|wx.ICON_EXCLAMATION)
|
|
|
|
|
- return
|
|
|
|
|
- # Looking for the object in the other layers
|
|
|
|
|
- # If the object is found - delete it.
|
|
|
|
|
- self.removeObj()
|
|
|
|
|
-
|
|
|
|
|
- layersData.append(obj[OG.OBJ_UID])
|
|
|
|
|
-
|
|
|
|
|
- def onShowMembers(self, event):
|
|
|
|
|
- item = event.GetItem()
|
|
|
|
|
- layerMembers = list()
|
|
|
|
|
- layerName = item.GetText()
|
|
|
|
|
- key = item.GetData()
|
|
|
|
|
- layerData = self.layersDataDict[key]
|
|
|
|
|
- for i in range(len(layerData)):
|
|
|
|
|
- obj = self.editor.objectMgr.findObjectById(layerData[i])
|
|
|
|
|
- namestr = "%s_%s"%(obj[OG.OBJ_DEF].name, obj[OG.OBJ_UID])
|
|
|
|
|
- layerMembers.append(namestr)
|
|
|
|
|
- dialog = wx.SingleChoiceDialog(None, layerName, self.editorTxt, layerMembers)
|
|
|
|
|
- if dialog.ShowModal() == wx.ID_OK:
|
|
|
|
|
- #do something here
|
|
|
|
|
- dialog.GetStringSelection()
|
|
|
|
|
- dialog.Destroy()
|
|
|
|
|
-
|
|
|
|
|
- def HideObj(self, hide):
|
|
|
|
|
- index = self.llist.GetFirstSelected()
|
|
|
|
|
- if index == -1:
|
|
|
|
|
- wx.MessageBox("No layer was selected.", self.editorTxt, wx.OK|wx.ICON_EXCLAMATION)
|
|
|
|
|
- return
|
|
|
|
|
-
|
|
|
|
|
- key = self.llist.GetItemData(index)
|
|
|
|
|
- layerData = self.layersDataDict[key]
|
|
|
|
|
- if len(layerData) == 0:
|
|
|
|
|
- return
|
|
|
|
|
- for i in range(len(layerData)):
|
|
|
|
|
- obj = self.editor.objectMgr.findObjectById(layerData[i])
|
|
|
|
|
- if hide:
|
|
|
|
|
- obj[OG.OBJ_NP].hide()
|
|
|
|
|
- else:
|
|
|
|
|
- obj[OG.OBJ_NP].show()
|
|
|
|
|
-
|
|
|
|
|
- font = wx.Font
|
|
|
|
|
- font = self.llist.GetItemFont(index)
|
|
|
|
|
- if hide:
|
|
|
|
|
- font.SetWeight(wx.FONTWEIGHT_BOLD)
|
|
|
|
|
- else:
|
|
|
|
|
- font.SetWeight(wx.FONTWEIGHT_NORMAL)
|
|
|
|
|
- self.llist.SetItemFont(index, font)
|
|
|
|
|
-
|
|
|
|
|
- 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
|
|
|
|
|
-
|
|
|
|
|
|
|
+"""
|
|
|
|
|
+Defines Layer UI
|
|
|
|
|
+"""
|
|
|
|
|
+import wx
|
|
|
|
|
+import sys
|
|
|
|
|
+import cPickle as pickle
|
|
|
|
|
+from pandac.PandaModules import *
|
|
|
|
|
+
|
|
|
|
|
+import ObjectGlobals as OG
|
|
|
|
|
+
|
|
|
|
|
+class LayerEditorUI(wx.Panel):
|
|
|
|
|
+ def __init__(self, parent, editor):
|
|
|
|
|
+ wx.Panel.__init__(self, parent)
|
|
|
|
|
+
|
|
|
|
|
+ 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")
|
|
|
|
|
+
|
|
|
|
|
+ sizer = wx.BoxSizer(wx.VERTICAL)
|
|
|
|
|
+ sizer.Add(self.llist, 1, wx.EXPAND, 0)
|
|
|
|
|
+ self.SetSizer(sizer); self.Layout()
|
|
|
|
|
+
|
|
|
|
|
+ parentSizer = wx.BoxSizer(wx.VERTICAL)
|
|
|
|
|
+ parentSizer.Add(self, 1, wx.EXPAND, 0)
|
|
|
|
|
+ parent.SetSizer(parentSizer); parent.Layout()
|
|
|
|
|
+
|
|
|
|
|
+ self.opAdd = "Add Layer"
|
|
|
|
|
+ self.opDelete = "Delete Layer"
|
|
|
|
|
+ self.opRename = "Rename Layer"
|
|
|
|
|
+ self.opAddObj = "Add Selected Object"
|
|
|
|
|
+ self.opRemoveObj = "Remove Selected Object"
|
|
|
|
|
+ self.opShowObj = "Show Layer Objects"
|
|
|
|
|
+ self.opHideObj = "Hide Layer Objects"
|
|
|
|
|
+
|
|
|
|
|
+ self.menuItemsGen = list()
|
|
|
|
|
+ self.menuItemsGen.append(self.opAdd)
|
|
|
|
|
+ #self.menuItems.append(self.opRename)
|
|
|
|
|
+
|
|
|
|
|
+ self.menuItemsObj = list()
|
|
|
|
|
+ self.menuItemsObj.append(self.opAddObj)
|
|
|
|
|
+ self.menuItemsObj.append(self.opRemoveObj)
|
|
|
|
|
+ self.menuItemsObj.append(self.opShowObj)
|
|
|
|
|
+ self.menuItemsObj.append(self.opHideObj)
|
|
|
|
|
+ self.menuItemsObj.append(self.opDelete)
|
|
|
|
|
+
|
|
|
|
|
+ self.popupmenu = wx.Menu()
|
|
|
|
|
+ for item in self.menuItemsGen:
|
|
|
|
|
+ menuItem = self.popupmenu.Append(-1, item)
|
|
|
|
|
+ self.Bind(wx.EVT_MENU, self.onPopupItemSelected, menuItem)
|
|
|
|
|
+
|
|
|
|
|
+ self.Bind(wx.EVT_CONTEXT_MENU, self.onShowPopup)
|
|
|
|
|
+ self.llist.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.onShowMembers)
|
|
|
|
|
+
|
|
|
|
|
+ def menuAppendGenItems(self):
|
|
|
|
|
+ for item in self.menuItemsGen:
|
|
|
|
|
+ menuItem = self.popupmenu.Append(-1, item)
|
|
|
|
|
+ self.Bind(wx.EVT_MENU, self.onPopupItemSelected, menuItem)
|
|
|
|
|
+
|
|
|
|
|
+ def menuAppendObjItems(self):
|
|
|
|
|
+ for item in self.menuItemsObj:
|
|
|
|
|
+ menuItem = self.popupmenu.Append(-1, item)
|
|
|
|
|
+ self.Bind(wx.EVT_MENU, self.onPopupItemSelected, menuItem)
|
|
|
|
|
+
|
|
|
|
|
+ def onShowPopup(self, event):
|
|
|
|
|
+ pos = event.GetPosition()
|
|
|
|
|
+ pos = self.ScreenToClient(pos)
|
|
|
|
|
+
|
|
|
|
|
+ for menuItem in self.popupmenu.GetMenuItems():
|
|
|
|
|
+ self.popupmenu.RemoveItem(menuItem)
|
|
|
|
|
+
|
|
|
|
|
+ #import pdb;set_trace()
|
|
|
|
|
+ hitItem, flags = self.llist.HitTest(pos)
|
|
|
|
|
+ if hitItem == -1:
|
|
|
|
|
+ self.menuAppendGenItems()
|
|
|
|
|
+ else:
|
|
|
|
|
+ self.menuAppendObjItems()
|
|
|
|
|
+ self.PopupMenu(self.popupmenu, pos)
|
|
|
|
|
+
|
|
|
|
|
+ def onPopupItemSelected(self, event):
|
|
|
|
|
+ menuItem = self.popupmenu.FindItemById(event.GetId())
|
|
|
|
|
+ text = menuItem.GetText()
|
|
|
|
|
+ if text == self.opAddObj:
|
|
|
|
|
+ self.addObj()
|
|
|
|
|
+ elif text == self.opRemoveObj:
|
|
|
|
|
+ self.removeObj()
|
|
|
|
|
+ elif text == self.opShowObj:
|
|
|
|
|
+ self.HideObj(False)
|
|
|
|
|
+ elif text == self.opHideObj:
|
|
|
|
|
+ self.HideObj(True)
|
|
|
|
|
+ elif text == self.opAdd:
|
|
|
|
|
+ self.addLayer()
|
|
|
|
|
+ elif text == self.opDelete:
|
|
|
|
|
+ self.deleteLayer()
|
|
|
|
|
+ elif text == self.opRename:
|
|
|
|
|
+ self.renameLayer()
|
|
|
|
|
+ else:
|
|
|
|
|
+ wx.MessageBox("You selected item '%s'" % text)
|
|
|
|
|
+
|
|
|
|
|
+ def reset(self):
|
|
|
|
|
+ #import pdb;set_trace()
|
|
|
|
|
+ self.layersDataDict.clear()
|
|
|
|
|
+ self.layersDataDictNextKey = 0
|
|
|
|
|
+ self.llist.DeleteAllItems()
|
|
|
|
|
+
|
|
|
|
|
+ def findLabel(self, text):
|
|
|
|
|
+ found = False
|
|
|
|
|
+ for index in range(self.llist.GetItemCount()):
|
|
|
|
|
+ itemtext = self.llist.GetItemText(index)
|
|
|
|
|
+ if itemtext == text:
|
|
|
|
|
+ return True
|
|
|
|
|
+ return found
|
|
|
|
|
+
|
|
|
|
|
+ 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)
|
|
|
|
|
+ while found:
|
|
|
|
|
+ i = i + 1
|
|
|
|
|
+ text = "Layer%s"%(count + i)
|
|
|
|
|
+ found = self.findLabel(text)
|
|
|
|
|
+
|
|
|
|
|
+ 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):
|
|
|
|
|
+ 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 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:
|
|
|
|
|
+ self.removeObjData(obj[OG.OBJ_UID])
|
|
|
|
|
+
|
|
|
|
|
+ def addObj(self):
|
|
|
|
|
+ index = self.llist.GetFirstSelected()
|
|
|
|
|
+ if index == -1:
|
|
|
|
|
+ wx.MessageBox("No layer was selected.", self.editorTxt, wx.OK|wx.ICON_EXCLAMATION)
|
|
|
|
|
+ return
|
|
|
|
|
+ objNodePath = base.direct.selected.last
|
|
|
|
|
+ if objNodePath is None:
|
|
|
|
|
+ wx.MessageBox("No object was selected.", self.editorTxt, wx.OK|wx.ICON_EXCLAMATION)
|
|
|
|
|
+ return
|
|
|
|
|
+
|
|
|
|
|
+ # Checking if the object was laready added to the layer
|
|
|
|
|
+ obj = self.editor.objectMgr.findObjectByNodePath(objNodePath)
|
|
|
|
|
+ if obj is not None:
|
|
|
|
|
+ i = self.llist.GetItemData(index)
|
|
|
|
|
+ layersData = self.layersDataDict[i]
|
|
|
|
|
+ for j in range(len(layersData)):
|
|
|
|
|
+ if layersData[j] == obj[OG.OBJ_UID]:
|
|
|
|
|
+ wx.MessageBox("Selected object already is this layer", self.editorTxt, wx.OK|wx.ICON_EXCLAMATION)
|
|
|
|
|
+ return
|
|
|
|
|
+ # Looking for the object in the other layers
|
|
|
|
|
+ # If the object is found - delete it.
|
|
|
|
|
+ self.removeObj()
|
|
|
|
|
+
|
|
|
|
|
+ layersData.append(obj[OG.OBJ_UID])
|
|
|
|
|
+
|
|
|
|
|
+ def onShowMembers(self, event):
|
|
|
|
|
+ item = event.GetItem()
|
|
|
|
|
+ layerMembers = list()
|
|
|
|
|
+ layerName = item.GetText()
|
|
|
|
|
+ key = item.GetData()
|
|
|
|
|
+ layerData = self.layersDataDict[key]
|
|
|
|
|
+ for i in range(len(layerData)):
|
|
|
|
|
+ obj = self.editor.objectMgr.findObjectById(layerData[i])
|
|
|
|
|
+ namestr = "%s_%s"%(obj[OG.OBJ_DEF].name, obj[OG.OBJ_UID])
|
|
|
|
|
+ layerMembers.append(namestr)
|
|
|
|
|
+ dialog = wx.SingleChoiceDialog(None, layerName, self.editorTxt, layerMembers)
|
|
|
|
|
+ if dialog.ShowModal() == wx.ID_OK:
|
|
|
|
|
+ #do something here
|
|
|
|
|
+ dialog.GetStringSelection()
|
|
|
|
|
+ dialog.Destroy()
|
|
|
|
|
+
|
|
|
|
|
+ def HideObj(self, hide):
|
|
|
|
|
+ index = self.llist.GetFirstSelected()
|
|
|
|
|
+ if index == -1:
|
|
|
|
|
+ wx.MessageBox("No layer was selected.", self.editorTxt, wx.OK|wx.ICON_EXCLAMATION)
|
|
|
|
|
+ return
|
|
|
|
|
+
|
|
|
|
|
+ key = self.llist.GetItemData(index)
|
|
|
|
|
+ layerData = self.layersDataDict[key]
|
|
|
|
|
+ if len(layerData) == 0:
|
|
|
|
|
+ return
|
|
|
|
|
+ for i in range(len(layerData)):
|
|
|
|
|
+ obj = self.editor.objectMgr.findObjectById(layerData[i])
|
|
|
|
|
+ if hide:
|
|
|
|
|
+ obj[OG.OBJ_NP].hide()
|
|
|
|
|
+ else:
|
|
|
|
|
+ obj[OG.OBJ_NP].show()
|
|
|
|
|
+
|
|
|
|
|
+ font = wx.Font
|
|
|
|
|
+ font = self.llist.GetItemFont(index)
|
|
|
|
|
+ if hide:
|
|
|
|
|
+ font.SetWeight(wx.FONTWEIGHT_BOLD)
|
|
|
|
|
+ else:
|
|
|
|
|
+ font.SetWeight(wx.FONTWEIGHT_NORMAL)
|
|
|
|
|
+ self.llist.SetItemFont(index, font)
|
|
|
|
|
+
|
|
|
|
|
+ def traverse(self):
|
|
|
|
|
+ self.saveData.append("\nif hasattr(base, 'le'):")
|
|
|
|
|
+ self.saveData.append("\tui.layerEditorUI.reset()")
|
|
|
|
|
+ for index in range(self.llist.GetItemCount()):
|
|
|
|
|
+ self.saveData.append("\tui.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("\tui.layerEditorUI.addLayerData(%s, '%s')"%(layersDataDictKeys[i], layerData[j]))
|
|
|
|
|
+
|
|
|
|
|
+ def getSaveData(self):
|
|
|
|
|
+ self.saveData = []
|
|
|
|
|
+ self.traverse()
|
|
|
|
|
+ return self.saveData
|
|
|
|
|
+
|