menu.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import wx
  2. import globalvar
  3. class Menu(wx.MenuBar):
  4. def __init__(self, parent, data):
  5. """!Creates menubar"""
  6. wx.MenuBar.__init__(self)
  7. self.parent = parent
  8. self.menudata = data
  9. self.menucmd = dict()
  10. for eachMenuData in self.menudata.GetMenu():
  11. for eachHeading in eachMenuData:
  12. menuLabel = eachHeading[0]
  13. menuItems = eachHeading[1]
  14. self.Append(self._createMenu(menuItems), menuLabel)
  15. def _createMenu(self, menuData):
  16. """!Creates menu"""
  17. menu = wx.Menu()
  18. for eachItem in menuData:
  19. if len(eachItem) == 2:
  20. label = eachItem[0]
  21. subMenu = self._createMenu(eachItem[1])
  22. menu.AppendMenu(wx.ID_ANY, label, subMenu)
  23. else:
  24. self._createMenuItem(menu, *eachItem)
  25. self.parent.Bind(wx.EVT_MENU_HIGHLIGHT_ALL, self.OnMenuHighlight)
  26. return menu
  27. def _createMenuItem(self, menu, label, help, handler, gcmd, keywords,
  28. shortcut = '', kind = wx.ITEM_NORMAL):
  29. """!Creates menu items"""
  30. if not label:
  31. menu.AppendSeparator()
  32. return
  33. if len(gcmd) > 0:
  34. helpString = gcmd + ' -- ' + help
  35. else:
  36. helpString = help
  37. if shortcut:
  38. label += '\t' + shortcut
  39. menuItem = menu.Append(wx.ID_ANY, label, helpString, kind)
  40. self.menucmd[menuItem.GetId()] = gcmd
  41. if len(gcmd) > 0 and \
  42. gcmd.split()[0] not in globalvar.grassCmd['all']:
  43. menuItem.Enable (False)
  44. rhandler = eval('self.parent.' + handler)
  45. self.parent.Bind(wx.EVT_MENU, rhandler, menuItem)
  46. def GetData(self):
  47. """!Get menu data"""
  48. return self.menudata
  49. def GetCmd(self):
  50. """!Get list of commands
  51. @return list of commands
  52. """
  53. return self.menucmd
  54. def OnMenuHighlight(self, event):
  55. """
  56. Default menu help handler
  57. """
  58. # Show how to get menu item info from this event handler
  59. id = event.GetMenuId()
  60. item = self.FindItemById(id)
  61. if item:
  62. text = item.GetText()
  63. help = item.GetHelp()
  64. # but in this case just call Skip so the default is done
  65. event.Skip()