mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-14 07:46:39 -04:00
Made hotkeys be shown in menu item
This commit is contained in:
parent
ae1f9ee618
commit
1fba319d67
@ -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)
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -85,9 +85,40 @@ 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
|
||||||
self.wxApp = wx.App(redirect = False)
|
self.wxApp = wx.App(redirect = False)
|
||||||
@ -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")
|
menuItem = self.menuFile.Insert(1, ID_OPEN, self.MENU_TEXTS[ID_OPEN][0])
|
||||||
self.Bind(wx.EVT_MENU, self.onLoad, menuItem)
|
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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user