menu.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. """!
  2. @package menu.py
  3. @brief Menu classes for wxGUI
  4. Classes:
  5. - Menu
  6. (C) 2010 by the GRASS Development Team
  7. This program is free software under the GNU General Public License
  8. (>=v2). Read the file COPYING that comes with GRASS for details.
  9. @author Martin Landa <landa.martin gmail.com>
  10. """
  11. import shlex
  12. import wx
  13. import globalvar
  14. class Menu(wx.MenuBar):
  15. def __init__(self, parent, data):
  16. """!Creates menubar"""
  17. wx.MenuBar.__init__(self)
  18. self.parent = parent
  19. self.menudata = data
  20. self.menucmd = dict()
  21. for eachMenuData in self.menudata.GetMenu():
  22. for eachHeading in eachMenuData:
  23. menuLabel = eachHeading[0]
  24. menuItems = eachHeading[1]
  25. self.Append(self._createMenu(menuItems), menuLabel)
  26. def _createMenu(self, menuData):
  27. """!Creates menu"""
  28. menu = wx.Menu()
  29. for eachItem in menuData:
  30. if len(eachItem) == 2:
  31. label = eachItem[0]
  32. subMenu = self._createMenu(eachItem[1])
  33. menu.AppendMenu(wx.ID_ANY, label, subMenu)
  34. else:
  35. self._createMenuItem(menu, *eachItem)
  36. self.parent.Bind(wx.EVT_MENU_HIGHLIGHT_ALL, self.OnMenuHighlight)
  37. return menu
  38. def _createMenuItem(self, menu, label, help, handler, gcmd, keywords,
  39. shortcut = '', kind = wx.ITEM_NORMAL):
  40. """!Creates menu items"""
  41. if not label:
  42. menu.AppendSeparator()
  43. return
  44. if len(gcmd) > 0:
  45. helpString = gcmd + ' -- ' + help
  46. else:
  47. helpString = help
  48. if shortcut:
  49. label += '\t' + shortcut
  50. menuItem = menu.Append(wx.ID_ANY, label, helpString, kind)
  51. self.menucmd[menuItem.GetId()] = gcmd
  52. if gcmd:
  53. try:
  54. cmd = shlex.split(str(gcmd))
  55. except UnicodeError:
  56. cmd = shlex.split(utils.EncodeString((gcmd)))
  57. if cmd and cmd[0] not in globalvar.grassCmd['all']:
  58. menuItem.Enable(False)
  59. rhandler = eval('self.parent.' + handler)
  60. self.parent.Bind(wx.EVT_MENU, rhandler, menuItem)
  61. def GetData(self):
  62. """!Get menu data"""
  63. return self.menudata
  64. def GetCmd(self):
  65. """!Get list of commands
  66. @return list of commands
  67. """
  68. return self.menucmd
  69. def OnMenuHighlight(self, event):
  70. """
  71. Default menu help handler
  72. """
  73. # Show how to get menu item info from this event handler
  74. id = event.GetMenuId()
  75. item = self.FindItemById(id)
  76. if item:
  77. text = item.GetText()
  78. help = item.GetHelp()
  79. # but in this case just call Skip so the default is done
  80. event.Skip()