Made hotkeys be shown in menu item

This commit is contained in:
Gyedo Jeon 2010-02-25 02:25:04 +00:00
parent ae1f9ee618
commit 1fba319d67
3 changed files with 86 additions and 19 deletions

View File

@ -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)

View File

@ -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

View File

@ -85,9 +85,40 @@ 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
self.wxApp = wx.App(redirect = False)
@ -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: