menudata.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. """
  2. @package menudata.py
  3. @brief Complex list for main menu entries for GRASS wxPython GUI.
  4. Classes:
  5. - Data
  6. COPYRIGHT: (C) 2007-2008 by the GRASS Development Team
  7. This program is free software under the GNU General Public
  8. License (>=v2). Read the file COPYING that comes with GRASS
  9. for details.
  10. @author Michael Barton (Arizona State University)
  11. @author Yann Chemin <yann.chemin gmail.com>
  12. @author Martin Landa <landa.martin gmail.com>
  13. @author Glynn Clements
  14. """
  15. import os
  16. try:
  17. import xml.etree.ElementTree as etree
  18. except ImportError:
  19. import elementtree.ElementTree as etree # Python <= 2.4
  20. class Data:
  21. '''Data object that returns menu descriptions to be used in wxgui.py.'''
  22. def getMenuItem(self, mi):
  23. if mi.tag == 'separator':
  24. return ('', '', '', '')
  25. elif mi.tag == 'menuitem':
  26. label = _(mi.find('label').text)
  27. help = _(mi.find('help').text)
  28. handler = mi.find('handler').text
  29. gcmd = mi.find('command')
  30. if gcmd != None:
  31. gcmd = gcmd.text
  32. else:
  33. gcmd = ""
  34. return (label, help, handler, gcmd)
  35. elif mi.tag == 'menu':
  36. return self.getMenu(mi)
  37. else:
  38. raise Exception()
  39. def getMenu(self, m):
  40. label = _(m.find('label').text)
  41. items = m.find('items')
  42. return (label, tuple(map(self.getMenuItem, items)))
  43. def getMenuBar(self, mb):
  44. return tuple(map(self.getMenu, mb.findall('menu')))
  45. def getMenuData(self, md):
  46. return list(map(self.getMenuBar, md.findall('menubar')))
  47. def GetMenu(self):
  48. filename = os.getenv('GISBASE') + '/etc/wxpython/xml/menudata.xml'
  49. tree = etree.parse(filename)
  50. return self.getMenuData(tree.getroot())