Browse Source

Made hotkeys be shown in menu item

Gyedo Jeon 16 years ago
parent
commit
1fba319d67

+ 3 - 1
direct/src/leveleditor/HotKeyUI.py

@@ -111,6 +111,7 @@ class EditHotKeyDialog(wx.Dialog):
 class HotKeyPanel(ScrolledPanel):
 class HotKeyPanel(ScrolledPanel):
     def __init__(self, parent):
     def __init__(self, parent):
         ScrolledPanel.__init__(self, parent, -1)
         ScrolledPanel.__init__(self, parent, -1)
+        self.parent = parent
         self.updateUI()
         self.updateUI()
 
 
     def updateUI(self):
     def updateUI(self):
@@ -135,6 +136,7 @@ class HotKeyPanel(ScrolledPanel):
         self.SetSizer(vbox)
         self.SetSizer(vbox)
         self.Layout()
         self.Layout()
         self.SetupScrolling(self, scroll_y=True, rate_y=20)
         self.SetupScrolling(self, scroll_y=True, rate_y=20)
+        self.parent.parent.updateMenu()
 
 
     def onEdit(self, evt, key):
     def onEdit(self, evt, key):
         base.le.ui.wxApp.Unbind(wx.EVT_CHAR)        
         base.le.ui.wxApp.Unbind(wx.EVT_CHAR)        
@@ -152,7 +154,7 @@ class HotKeyPanel(ScrolledPanel):
 class HotKeyUI(wx.Dialog):
 class HotKeyUI(wx.Dialog):
     def __init__(self, parent, id, title):
     def __init__(self, parent, id, title):
         wx.Dialog.__init__(self, parent, id, title, size=(550, 500))
         wx.Dialog.__init__(self, parent, id, title, size=(550, 500))
-
+        self.parent = parent
         panel = HotKeyPanel(self)
         panel = HotKeyPanel(self)
         vbox = wx.BoxSizer(wx.VERTICAL)
         vbox = wx.BoxSizer(wx.VERTICAL)
         vbox.Add(panel, 1, wx.EXPAND, 0)
         vbox.Add(panel, 1, wx.EXPAND, 0)

+ 21 - 1
direct/src/leveleditor/LevelEditorBase.py

@@ -123,6 +123,10 @@ class LevelEditorBase(DirectObject):
             ('LE-Duplicate', self.objectMgr.duplicateSelected),
             ('LE-Duplicate', self.objectMgr.duplicateSelected),
             ('DIRECT_manipulateObjectCleanup', self.cleanUpManipulating),
             ('DIRECT_manipulateObjectCleanup', self.cleanUpManipulating),
             ('LE-MakeLive', self.objectMgr.makeSelectedLive),
             ('LE-MakeLive', self.objectMgr.makeSelectedLive),
+            ('LE-NewScene', self.ui.onNew),
+            ('LE-SaveScene', self.ui.onSave),
+            ('LE-OpenScene', self.ui.onOpen),
+            ('LE-Quit', self.ui.quit),
             ])
             ])
 
 
         # Add all the action events
         # Add all the action events
@@ -286,9 +290,25 @@ class LevelEditorBase(DirectObject):
                 elif line.startswith('gridSpacing'):
                 elif line.startswith('gridSpacing'):
                     gridSpacing = float(configLines[i])
                     gridSpacing = float(configLines[i])
                 elif line.startswith('hotKey'):
                 elif line.startswith('hotKey'):
-                    base.direct.hotKeyMap.update(eval(configLines[i]))
+                    customHotKeyMap = eval(configLines[i])
+                    customHotKeyDict = {}
+                    for hotKey in customHotKeyMap.keys():
+                        desc = customHotKeyMap[hotKey]
+                        customHotKeyDict[desc[1]] = hotKey
+
+                    overriddenKeys = []
+                    for key in base.direct.hotKeyMap.keys():
+                        desc = base.direct.hotKeyMap[key]
+                        if desc[1] in customHotKeyDict.keys():
+                            overriddenKeys.append(key)
+
+                    for key in overriddenKeys:
+                        del base.direct.hotKeyMap[key]
+                            
+                    base.direct.hotKeyMap.update(customHotKeyMap)
 
 
             self.ui.updateGrids(gridSize, gridSpacing)
             self.ui.updateGrids(gridSize, gridSpacing)
+            self.ui.updateMenu()
         except:
         except:
             pass
             pass
 
 

+ 62 - 17
direct/src/leveleditor/LevelEditorUIBase.py

@@ -85,8 +85,39 @@ class PandaTextDropTarget(wx.TextDropTarget):
             action()
             action()
         del iRay
         del iRay
 
 
+ID_NEW = 101
+ID_OPEN = 102
+ID_SAVE = 103
+ID_SAVE_AS = 104
+ID_DUPLICATE = 201
+ID_MAKE_LIVE = 202
+ID_UNDO = 203
+ID_REDO = 204
+ID_SHOW_GRID = 301
+ID_GRID_SIZE = 302
+ID_GRID_SNAP = 303
+ID_SHOW_PANDA_OBJECT = 304
+ID_HOT_KEYS = 305
+
 class LevelEditorUIBase(WxAppShell):
 class LevelEditorUIBase(WxAppShell):
     """ Class for Panda3D LevelEditor """ 
     """ Class for Panda3D LevelEditor """ 
+
+    MENU_TEXTS = {
+        ID_NEW : ("&New", "LE-NewScene"),
+        ID_OPEN : ("&Open", "LE-OpenScene"),
+        ID_SAVE : ("&Save", "LE-SaveScene"),
+        ID_SAVE_AS : ("Save &As", None),
+        wx.ID_EXIT : ("&Quit", "LE-Quit"),
+        ID_DUPLICATE : ("&Duplicate", "LE-Duplicate"),
+        ID_MAKE_LIVE : ("Make &Live", "LE-MakeLive"),
+        ID_UNDO : ("&Undo", "LE-Undo"),
+        ID_REDO : ("&Redo", "LE-Redo"),
+        ID_SHOW_GRID : ("&Show Grid", None),
+        ID_GRID_SIZE : ("&Grid Size", None),
+        ID_GRID_SNAP : ("Grid S&nap", None),
+        ID_SHOW_PANDA_OBJECT : ("Show &Panda Objects", None),
+        ID_HOT_KEYS : ("&Hot Keys", None),
+        }
     
     
     def __init__(self, editor, *args, **kw):
     def __init__(self, editor, *args, **kw):
         # Create the Wx app
         # Create the Wx app
@@ -102,51 +133,65 @@ class LevelEditorUIBase(WxAppShell):
         self.initialize()
         self.initialize()
 
 
     def createMenu(self):
     def createMenu(self):
-        menuItem = self.menuFile.Insert(0, -1 , "&New")
+        menuItem = self.menuFile.Insert(0, ID_NEW, self.MENU_TEXTS[ID_NEW][0])
         self.Bind(wx.EVT_MENU, self.onNew, menuItem)
         self.Bind(wx.EVT_MENU, self.onNew, menuItem)
         
         
-        menuItem = self.menuFile.Insert(1, -1 , "&Load")
-        self.Bind(wx.EVT_MENU, self.onLoad, menuItem)
+        menuItem = self.menuFile.Insert(1, ID_OPEN, self.MENU_TEXTS[ID_OPEN][0])
+        self.Bind(wx.EVT_MENU, self.onOpen, menuItem)
 
 
-        menuItem = self.menuFile.Insert(2, -1 , "&Save")
+        menuItem = self.menuFile.Insert(2, ID_SAVE, self.MENU_TEXTS[ID_SAVE][0])
         self.Bind(wx.EVT_MENU, self.onSave, menuItem)
         self.Bind(wx.EVT_MENU, self.onSave, menuItem)
 
 
-        menuItem = self.menuFile.Insert(3, -1 , "Save &As")
+        menuItem = self.menuFile.Insert(3, ID_SAVE_AS, self.MENU_TEXTS[ID_SAVE_AS][0])
         self.Bind(wx.EVT_MENU, self.onSaveAs, menuItem)
         self.Bind(wx.EVT_MENU, self.onSaveAs, menuItem)
 
 
         self.menuEdit = wx.Menu()
         self.menuEdit = wx.Menu()
         self.menuBar.Insert(1, self.menuEdit, "&Edit")
         self.menuBar.Insert(1, self.menuEdit, "&Edit")
 
 
-        menuItem = self.menuEdit.Append(-1, "&Duplicate")
+        menuItem = self.menuEdit.Append(ID_DUPLICATE, self.MENU_TEXTS[ID_DUPLICATE][0])
         self.Bind(wx.EVT_MENU, self.onDuplicate, menuItem)
         self.Bind(wx.EVT_MENU, self.onDuplicate, menuItem)
 
 
-        menuItem = self.menuEdit.Append(-1, "Make &Live")
+        menuItem = self.menuEdit.Append(ID_MAKE_LIVE, self.MENU_TEXTS[ID_MAKE_LIVE][0])
         self.Bind(wx.EVT_MENU, self.onMakeLive, menuItem)
         self.Bind(wx.EVT_MENU, self.onMakeLive, menuItem)
 
 
-        menuItem = self.menuEdit.Append(-1, "&Undo")
+        menuItem = self.menuEdit.Append(ID_UNDO, self.MENU_TEXTS[ID_UNDO][0])
         self.Bind(wx.EVT_MENU, self.editor.actionMgr.undo, menuItem)
         self.Bind(wx.EVT_MENU, self.editor.actionMgr.undo, menuItem)
 
 
-        menuItem = self.menuEdit.Append(-1, "&Redo")
+        menuItem = self.menuEdit.Append(ID_REDO, self.MENU_TEXTS[ID_REDO][0])
         self.Bind(wx.EVT_MENU, self.editor.actionMgr.redo, menuItem)
         self.Bind(wx.EVT_MENU, self.editor.actionMgr.redo, menuItem)
 
 
         self.menuOptions = wx.Menu()
         self.menuOptions = wx.Menu()
         self.menuBar.Insert(2, self.menuOptions, "&Options")
         self.menuBar.Insert(2, self.menuOptions, "&Options")
 
 
-        self.showGridMenuItem = self.menuOptions.Append(-1, "&Show Grid", kind = wx.ITEM_CHECK)
+        self.showGridMenuItem = self.menuOptions.Append(ID_SHOW_GRID, self.MENU_TEXTS[ID_SHOW_GRID][0], kind = wx.ITEM_CHECK)
         self.Bind(wx.EVT_MENU, self.toggleGrid, self.showGridMenuItem)
         self.Bind(wx.EVT_MENU, self.toggleGrid, self.showGridMenuItem)
 
 
-        self.gridSizeMenuItem = self.menuOptions.Append(-1, "&Grid Size")
+        self.gridSizeMenuItem = self.menuOptions.Append(ID_GRID_SIZE, self.MENU_TEXTS[ID_GRID_SIZE][0])
         self.Bind(wx.EVT_MENU, self.onGridSize, self.gridSizeMenuItem)
         self.Bind(wx.EVT_MENU, self.onGridSize, self.gridSizeMenuItem)
 
 
-        self.gridSnapMenuItem = self.menuOptions.Append(-1, "Grid S&nap", kind = wx.ITEM_CHECK)
+        self.gridSnapMenuItem = self.menuOptions.Append(ID_GRID_SNAP, self.MENU_TEXTS[ID_GRID_SNAP][0], kind = wx.ITEM_CHECK)
         self.Bind(wx.EVT_MENU, self.toggleGridSnap, self.gridSnapMenuItem)
         self.Bind(wx.EVT_MENU, self.toggleGridSnap, self.gridSnapMenuItem)
 
 
-        self.showPandaObjectsMenuItem = self.menuOptions.Append(-1, "Show &Panda Objects", kind = wx.ITEM_CHECK)
+        self.showPandaObjectsMenuItem = self.menuOptions.Append(ID_SHOW_PANDA_OBJECT, self.MENU_TEXTS[ID_SHOW_PANDA_OBJECT][0], kind = wx.ITEM_CHECK)
         self.Bind(wx.EVT_MENU, self.onShowPandaObjects, self.showPandaObjectsMenuItem)
         self.Bind(wx.EVT_MENU, self.onShowPandaObjects, self.showPandaObjectsMenuItem)
 
 
-        self.hotKeysMenuItem = self.menuOptions.Append(-1, "&Hot Keys")
+        self.hotKeysMenuItem = self.menuOptions.Append(ID_HOT_KEYS, self.MENU_TEXTS[ID_HOT_KEYS][0])
         self.Bind(wx.EVT_MENU, self.onHotKeys, self.hotKeysMenuItem)
         self.Bind(wx.EVT_MENU, self.onHotKeys, self.hotKeysMenuItem)
 
 
+    def updateMenu(self):
+        hotKeyDict = {}
+        for hotKey in base.direct.hotKeyMap.keys():
+            desc = base.direct.hotKeyMap[hotKey]
+            hotKeyDict[desc[1]] = hotKey
+            
+        for id in self.MENU_TEXTS.keys():
+            desc = self.MENU_TEXTS[id]
+            if desc[1]:
+                menuItem = self.menuBar.FindItemById(id)
+                hotKey = hotKeyDict.get(desc[1])
+                if hotKey:
+                    menuItem.SetText(desc[0] + "\t%s"%hotKey)
+
     def createInterface(self):
     def createInterface(self):
         self.createMenu()
         self.createMenu()
         
         
@@ -273,18 +318,18 @@ class LevelEditorUIBase(WxAppShell):
         self.wxApp.ProcessIdle()
         self.wxApp.ProcessIdle()
         if task != None: return task.cont
         if task != None: return task.cont
 
 
-    def onNew(self, evt):
+    def onNew(self, evt=None):
         self.editor.reset()
         self.editor.reset()
         self.sceneGraphUI.reset()
         self.sceneGraphUI.reset()
         self.layerEditorUI.reset()
         self.layerEditorUI.reset()
 
 
-    def onLoad(self, evt):
+    def onOpen(self, evt=None):
         dialog = wx.FileDialog(None, "Choose a file", os.getcwd(), "", "*.py", wx.OPEN)
         dialog = wx.FileDialog(None, "Choose a file", os.getcwd(), "", "*.py", wx.OPEN)
         if dialog.ShowModal() == wx.ID_OK:
         if dialog.ShowModal() == wx.ID_OK:
             self.editor.load(dialog.GetPath())
             self.editor.load(dialog.GetPath())
         dialog.Destroy()
         dialog.Destroy()
 
 
-    def onSave(self, evt):
+    def onSave(self, evt=None):
         if self.editor.currentFile is None:
         if self.editor.currentFile is None:
             self.onSaveAs(evt)
             self.onSaveAs(evt)
         else:
         else: