|
@@ -1,11 +1,12 @@
|
|
|
"""!
|
|
|
@package menudata.py
|
|
|
|
|
|
-@brief Complex list for main menu entries for GRASS wxPython GUI.
|
|
|
+@brief Complex list for menu entries for wxGUI.
|
|
|
|
|
|
Classes:
|
|
|
- Data
|
|
|
- - MenuTree
|
|
|
+ - ManagerData
|
|
|
+ - ModelerData
|
|
|
|
|
|
Usage:
|
|
|
@code
|
|
@@ -16,11 +17,11 @@ where <i>action</i>:
|
|
|
- strings (default)
|
|
|
- tree
|
|
|
- commands
|
|
|
+ - dump
|
|
|
|
|
|
-(C) 2007-2009 by the GRASS Development Team
|
|
|
-This program is free software under the GNU General Public
|
|
|
-License (>=v2). Read the file COPYING that comes with GRASS
|
|
|
-for details.
|
|
|
+(C) 2007-2010 by the GRASS Development Team
|
|
|
+This program is free software under the GNU General Public License
|
|
|
+(>=v2). Read the file COPYING that comes with GRASS for details.
|
|
|
|
|
|
@author Michael Barton (Arizona State University)
|
|
|
@author Yann Chemin <yann.chemin gmail.com>
|
|
@@ -38,55 +39,46 @@ except ImportError:
|
|
|
|
|
|
import globalvar
|
|
|
|
|
|
-class Data:
|
|
|
- '''!Data object that returns menu descriptions to be used in wxgui.py.'''
|
|
|
- def __init__(self, filename=None):
|
|
|
- if not filename:
|
|
|
- gisbase = os.getenv('GISBASE')
|
|
|
- filename = os.path.join(globalvar.ETCWXDIR, 'xml', 'menudata.xml')
|
|
|
+class MenuData:
|
|
|
+ """!Abstract menu data class"""
|
|
|
+ def __init__(self, filename):
|
|
|
self.tree = etree.parse(filename)
|
|
|
|
|
|
- def getMenuItem(self, mi):
|
|
|
- if mi.tag == 'separator':
|
|
|
- return ('', '', '', '', '')
|
|
|
- elif mi.tag == 'menuitem':
|
|
|
- label = _(mi.find('label').text)
|
|
|
- help = _(mi.find('help').text)
|
|
|
- handler = mi.find('handler').text
|
|
|
- gcmd = mi.find('command') # optional
|
|
|
- keywords = mi.find('keywords') # optional
|
|
|
- shortcut = mi.find('shortcut') # optional
|
|
|
- if gcmd != None:
|
|
|
- gcmd = gcmd.text
|
|
|
- else:
|
|
|
- gcmd = ""
|
|
|
- if keywords != None:
|
|
|
- keywords = keywords.text
|
|
|
- else:
|
|
|
- keywords = ""
|
|
|
- if shortcut != None:
|
|
|
- shortcut = shortcut.text
|
|
|
- else:
|
|
|
- shortcut = ""
|
|
|
- return (label, help, handler, gcmd, keywords, shortcut)
|
|
|
- elif mi.tag == 'menu':
|
|
|
- return self.getMenu(mi)
|
|
|
- else:
|
|
|
- raise Exception()
|
|
|
+ def _getMenu(self, m):
|
|
|
+ """!Get menu
|
|
|
|
|
|
- def getMenu(self, m):
|
|
|
+ @param m menu
|
|
|
+
|
|
|
+ @return label, menu items
|
|
|
+ """
|
|
|
label = _(m.find('label').text)
|
|
|
items = m.find('items')
|
|
|
- return (label, tuple(map(self.getMenuItem, items)))
|
|
|
+ return (label, tuple(map(self._getMenuItem, items)))
|
|
|
+
|
|
|
+ def _getMenuBar(self, mb):
|
|
|
+ """!Get menu bar
|
|
|
|
|
|
- def getMenuBar(self, mb):
|
|
|
- return tuple(map(self.getMenu, mb.findall('menu')))
|
|
|
+ @param mb menu bar instance
|
|
|
+
|
|
|
+ @return menu items
|
|
|
+ """
|
|
|
+ return tuple(map(self._getMenu, mb.findall('menu')))
|
|
|
|
|
|
- def getMenuData(self, md):
|
|
|
- return list(map(self.getMenuBar, md.findall('menubar')))
|
|
|
+ def _getMenuData(self, md):
|
|
|
+ """!Get menu data
|
|
|
+
|
|
|
+ @param md menu data instace
|
|
|
+
|
|
|
+ @return menu data
|
|
|
+ """
|
|
|
+ return list(map(self._getMenuBar, md.findall('menubar')))
|
|
|
|
|
|
def GetMenu(self):
|
|
|
- return self.getMenuData(self.tree.getroot())
|
|
|
+ """!Get menu
|
|
|
+
|
|
|
+ @return menu data
|
|
|
+ """
|
|
|
+ return self._getMenuData(self.tree.getroot())
|
|
|
|
|
|
def PrintStrings(self, fh):
|
|
|
"""!Print menu strings to file (used for localization)
|
|
@@ -105,10 +97,10 @@ class Data:
|
|
|
level = 0
|
|
|
for eachMenuData in self.GetMenu():
|
|
|
for label, items in eachMenuData:
|
|
|
- fh.write('- %s\n' % label)
|
|
|
- self.__PrintTreeItems(fh, level + 1, items)
|
|
|
-
|
|
|
- def __PrintTreeItems(self, fh, level, menuData):
|
|
|
+ fh.write('- %s\n' % label.replace('&', ''))
|
|
|
+ self._PrintTreeItems(fh, level + 1, items)
|
|
|
+
|
|
|
+ def _PrintTreeItems(self, fh, level, menuData):
|
|
|
"""!Print menu tree items to file (used by PrintTree)
|
|
|
|
|
|
@param fh file descriptor
|
|
@@ -118,7 +110,7 @@ class Data:
|
|
|
if len(eachItem) == 2:
|
|
|
if eachItem[0]:
|
|
|
fh.write('%s - %s\n' % (' ' * level, eachItem[0]))
|
|
|
- self.__PrintTreeItems(fh, level + 1, eachItem[1])
|
|
|
+ self._PrintTreeItems(fh, level + 1, eachItem[1])
|
|
|
else:
|
|
|
if eachItem[0]:
|
|
|
fh.write('%s - %s\n' % (' ' * level, eachItem[0]))
|
|
@@ -132,10 +124,10 @@ class Data:
|
|
|
for eachMenuData in self.GetMenu():
|
|
|
for label, items in eachMenuData:
|
|
|
menuItems = [label, ]
|
|
|
- self.__PrintCommandsItems(fh, level + 1, items,
|
|
|
- menuItems, itemSep, menuSep)
|
|
|
+ self._PrintCommandsItems(fh, level + 1, items,
|
|
|
+ menuItems, itemSep, menuSep)
|
|
|
|
|
|
- def __PrintCommandsItems(self, fh, level, menuData,
|
|
|
+ def _PrintCommandsItems(self, fh, level, menuData,
|
|
|
menuItems, itemSep, menuSep):
|
|
|
"""!Print commands item (used by PrintCommands)
|
|
|
|
|
@@ -149,7 +141,7 @@ class Data:
|
|
|
menuItems[level] = eachItem[0]
|
|
|
except IndexError:
|
|
|
menuItems.append(eachItem[0])
|
|
|
- self.__PrintCommandsItems(fh, level + 1, eachItem[1],
|
|
|
+ self._PrintCommandsItems(fh, level + 1, eachItem[1],
|
|
|
menuItems, itemSep, menuSep)
|
|
|
else:
|
|
|
try:
|
|
@@ -159,10 +151,50 @@ class Data:
|
|
|
|
|
|
if eachItem[3]:
|
|
|
fh.write('%s%s' % (eachItem[3], itemSep))
|
|
|
- fh.write(menuSep.join(menuItems))
|
|
|
+ fh.write(menuSep.join(map(lambda x: x.replace('&', ''), menuItems)))
|
|
|
fh.write('%s%s' % (menuSep, eachItem[0]))
|
|
|
fh.write('\n')
|
|
|
|
|
|
+class ManagerData(MenuData):
|
|
|
+ def __init__(self, filename = None):
|
|
|
+ if not filename:
|
|
|
+ gisbase = os.getenv('GISBASE')
|
|
|
+ filename = os.path.join(globalvar.ETCWXDIR, 'xml', 'menudata.xml')
|
|
|
+
|
|
|
+ MenuData.__init__(self, filename)
|
|
|
+
|
|
|
+ def _getMenuItem(self, mi):
|
|
|
+ """!Get menu item
|
|
|
+
|
|
|
+ @param mi menu item instance
|
|
|
+ """
|
|
|
+ if mi.tag == 'separator':
|
|
|
+ return ('', '', '', '', '')
|
|
|
+ elif mi.tag == 'menuitem':
|
|
|
+ label = _(mi.find('label').text)
|
|
|
+ help = _(mi.find('help').text)
|
|
|
+ handler = mi.find('handler').text
|
|
|
+ gcmd = mi.find('command') # optional
|
|
|
+ keywords = mi.find('keywords') # optional
|
|
|
+ shortcut = mi.find('shortcut') # optional
|
|
|
+ if gcmd != None:
|
|
|
+ gcmd = gcmd.text
|
|
|
+ else:
|
|
|
+ gcmd = ""
|
|
|
+ if keywords != None:
|
|
|
+ keywords = keywords.text
|
|
|
+ else:
|
|
|
+ keywords = ""
|
|
|
+ if shortcut != None:
|
|
|
+ shortcut = shortcut.text
|
|
|
+ else:
|
|
|
+ shortcut = ""
|
|
|
+ return (label, help, handler, gcmd, keywords, shortcut)
|
|
|
+ elif mi.tag == 'menu':
|
|
|
+ return self._getMenu(mi)
|
|
|
+ else:
|
|
|
+ raise Exception()
|
|
|
+
|
|
|
def GetModules(self):
|
|
|
"""!Create dictionary of modules used to search module by
|
|
|
keywords, description, etc."""
|
|
@@ -205,9 +237,9 @@ if __name__ == "__main__":
|
|
|
file = sys.argv[2]
|
|
|
|
|
|
if file:
|
|
|
- data = Data(file)
|
|
|
+ data = ManagerData(file)
|
|
|
else:
|
|
|
- data = Data()
|
|
|
+ data = ManagerData()
|
|
|
|
|
|
if action == 'strings':
|
|
|
data.PrintStrings(sys.stdout)
|