From 1fba319d6724aead6360a8ce1deaaea2a640ad41 Mon Sep 17 00:00:00 2001 From: Gyedo Jeon Date: Thu, 25 Feb 2010 02:25:04 +0000 Subject: [PATCH] Made hotkeys be shown in menu item --- direct/src/leveleditor/HotKeyUI.py | 4 +- direct/src/leveleditor/LevelEditorBase.py | 22 +++++- direct/src/leveleditor/LevelEditorUIBase.py | 79 ++++++++++++++++----- 3 files changed, 86 insertions(+), 19 deletions(-) diff --git a/direct/src/leveleditor/HotKeyUI.py b/direct/src/leveleditor/HotKeyUI.py index 35a822934b..d64201a923 100755 --- a/direct/src/leveleditor/HotKeyUI.py +++ b/direct/src/leveleditor/HotKeyUI.py @@ -111,6 +111,7 @@ class EditHotKeyDialog(wx.Dialog): class HotKeyPanel(ScrolledPanel): def __init__(self, parent): ScrolledPanel.__init__(self, parent, -1) + self.parent = parent self.updateUI() def updateUI(self): @@ -135,6 +136,7 @@ class HotKeyPanel(ScrolledPanel): self.SetSizer(vbox) self.Layout() self.SetupScrolling(self, scroll_y=True, rate_y=20) + self.parent.parent.updateMenu() def onEdit(self, evt, key): base.le.ui.wxApp.Unbind(wx.EVT_CHAR) @@ -152,7 +154,7 @@ class HotKeyPanel(ScrolledPanel): class HotKeyUI(wx.Dialog): def __init__(self, parent, id, title): wx.Dialog.__init__(self, parent, id, title, size=(550, 500)) - + self.parent = parent panel = HotKeyPanel(self) vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(panel, 1, wx.EXPAND, 0) diff --git a/direct/src/leveleditor/LevelEditorBase.py b/direct/src/leveleditor/LevelEditorBase.py index 3d4a4ce2dc..849e6a21e4 100755 --- a/direct/src/leveleditor/LevelEditorBase.py +++ b/direct/src/leveleditor/LevelEditorBase.py @@ -123,6 +123,10 @@ class LevelEditorBase(DirectObject): ('LE-Duplicate', self.objectMgr.duplicateSelected), ('DIRECT_manipulateObjectCleanup', self.cleanUpManipulating), ('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 @@ -286,9 +290,25 @@ class LevelEditorBase(DirectObject): elif line.startswith('gridSpacing'): gridSpacing = float(configLines[i]) 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.updateMenu() except: pass diff --git a/direct/src/leveleditor/LevelEditorUIBase.py b/direct/src/leveleditor/LevelEditorUIBase.py index be2df56ef7..ae6ada329a 100755 --- a/direct/src/leveleditor/LevelEditorUIBase.py +++ b/direct/src/leveleditor/LevelEditorUIBase.py @@ -85,8 +85,39 @@ class PandaTextDropTarget(wx.TextDropTarget): action() 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 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): # Create the Wx app @@ -102,51 +133,65 @@ class LevelEditorUIBase(WxAppShell): self.initialize() 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) - 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) - 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.menuEdit = wx.Menu() 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) - 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) - 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) - 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.menuOptions = wx.Menu() 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.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.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.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.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) + 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): self.createMenu() @@ -273,18 +318,18 @@ class LevelEditorUIBase(WxAppShell): self.wxApp.ProcessIdle() if task != None: return task.cont - def onNew(self, evt): + def onNew(self, evt=None): self.editor.reset() self.sceneGraphUI.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) if dialog.ShowModal() == wx.ID_OK: self.editor.load(dialog.GetPath()) dialog.Destroy() - def onSave(self, evt): + def onSave(self, evt=None): if self.editor.currentFile is None: self.onSaveAs(evt) else: