Browse Source

added layer objects hiding functionality

Arkady Trestman 16 years ago
parent
commit
1611842d46
1 changed files with 68 additions and 17 deletions
  1. 68 17
      direct/src/leveleditor/LayerEditorUI.py

+ 68 - 17
direct/src/leveleditor/LayerEditorUI.py

@@ -30,36 +30,54 @@ class LayerEditorUI(wx.Panel):
 
 
         self.opAdd       = "Add Layer"
         self.opAdd       = "Add Layer"
         self.opDelete    = "Delete Layer"
         self.opDelete    = "Delete Layer"
+        self.opRename    = "Rename Layer"
         self.opAddObj    = "Add Selected Object"
         self.opAddObj    = "Add Selected Object"
         self.opRemoveObj = "Remove Selected Object"
         self.opRemoveObj = "Remove Selected Object"
-        self.opShow      = "Show Members"
-        self.opRename    = "Rename Layer"
+        self.opShowObj   = "Show Layer Objects"
+        self.opHideObj   = "Hide Layer Objects"
 
 
-        self.menuItems = list()
-        self.menuItems.append(self.opAdd)
-        self.menuItems.append(self.opDelete)
-        self.menuItems.append(self.opAddObj)
-        self.menuItems.append(self.opRemoveObj)
-        self.menuItems.append(self.opShow)
+        self.menuItemsGen = list()
+        self.menuItemsGen.append(self.opAdd)
         #self.menuItems.append(self.opRename)
         #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()
         self.popupmenu = wx.Menu()
-        for item in self.menuItems:
+        for item in self.menuItemsGen:
             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 reset(self):
-        #import pdb;set_trace()
-        self.layersDataDict.clear()
-        self.layersDataDictNextKey = 0
-        self.llist.DeleteAllItems()
+    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):
     def onShowPopup(self, event):
         pos = event.GetPosition()
         pos = event.GetPosition()
         pos = self.ScreenToClient(pos)
         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)
         self.PopupMenu(self.popupmenu, pos)
 
 
     def onPopupItemSelected(self, event):
     def onPopupItemSelected(self, event):
@@ -69,8 +87,10 @@ class LayerEditorUI(wx.Panel):
            self.addObj()
            self.addObj()
         elif text == self.opRemoveObj:
         elif text == self.opRemoveObj:
            self.removeObj()
            self.removeObj()
-        elif text == self.opShow:
-           self.onShowMembers()
+        elif text == self.opShowObj:
+           self.HideObj(False)
+        elif text == self.opHideObj:
+           self.HideObj(True)
         elif text == self.opAdd:
         elif text == self.opAdd:
            self.addLayer()
            self.addLayer()
         elif text == self.opDelete:
         elif text == self.opDelete:
@@ -80,6 +100,12 @@ class LayerEditorUI(wx.Panel):
         else:
         else:
            wx.MessageBox("You selected item '%s'" % text)
            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):
     def findLabel(self, text):
         found = False
         found = False
         for index in range(self.llist.GetItemCount()):
         for index in range(self.llist.GetItemCount()):
@@ -185,7 +211,32 @@ class LayerEditorUI(wx.Panel):
            #do something here
            #do something here
            dialog.GetStringSelection()
            dialog.GetStringSelection()
         dialog.Destroy()
         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):
     def traverse(self):
         self.saveData.append("ui.layerEditorUI.reset()")
         self.saveData.append("ui.layerEditorUI.reset()")
         for index in range(self.llist.GetItemCount()):
         for index in range(self.llist.GetItemCount()):