GRASS Programmer's Manual  6.4.2(2012)
menu.py
Go to the documentation of this file.
00001 """!
00002 @package menu.py
00003 
00004 @brief Menu classes for wxGUI
00005 
00006 Classes:
00007  - Menu
00008 
00009 (C) 2010 by the GRASS Development Team
00010 This program is free software under the GNU General Public License
00011 (>=v2). Read the file COPYING that comes with GRASS for details.
00012 
00013 @author Martin Landa <landa.martin gmail.com>
00014 @author Pawel Netzel (menu customization)
00015 @author Milena Nowotarska (menu customization)
00016 @author Robert Szczepanek (menu customization)
00017 @author Vaclav Petras <wenzeslaus gmail.com> (menu customization)
00018 """
00019 
00020 import wx
00021 
00022 import globalvar
00023 import utils
00024 
00025 from preferences import globalSettings as UserSettings
00026 
00027 class Menu(wx.MenuBar):
00028     def __init__(self, parent, data):
00029         """!Creates menubar"""
00030         wx.MenuBar.__init__(self)
00031         self.parent   = parent
00032         self.menudata = data
00033         self.menucmd  = dict()
00034         
00035         self.menustyle = UserSettings.Get(group='appearance', key='menustyle', subkey='selection')
00036         
00037         for eachMenuData in self.menudata.GetMenu():
00038             for eachHeading in eachMenuData:
00039                 menuLabel = eachHeading[0]
00040                 menuItems = eachHeading[1]
00041                 self.Append(self._createMenu(menuItems), menuLabel)
00042         
00043     def _createMenu(self, menuData):
00044         """!Creates menu"""
00045         menu = wx.Menu()
00046         for eachItem in menuData:
00047             if len(eachItem) == 2:
00048                 label = eachItem[0]
00049                 subMenu = self._createMenu(eachItem[1])
00050                 menu.AppendMenu(wx.ID_ANY, label, subMenu)
00051             else:
00052                 self._createMenuItem(menu, self.menustyle, *eachItem)
00053         
00054         self.parent.Bind(wx.EVT_MENU_HIGHLIGHT_ALL, self.OnMenuHighlight)
00055         
00056         return menu
00057 
00058     def _createMenuItem(self, menu, menustyle, label, help, handler, gcmd, keywords,
00059                         shortcut = '', kind = wx.ITEM_NORMAL):
00060         """!Creates menu items
00061         There are three menu styles (menu item text styles).
00062         1 -- label only, 2 -- label and cmd name, 3 -- cmd name only
00063         """
00064         if not label:
00065             menu.AppendSeparator()
00066             return
00067         
00068         if len(gcmd) > 0:
00069             helpString = gcmd + ' -- ' + help
00070             if menustyle == 1:
00071                 label += '   [' + gcmd + ']'
00072             elif menustyle == 2:
00073                 label = '      [' + gcmd + ']'
00074         else:
00075             helpString = help
00076         
00077         if shortcut:
00078             label += '\t' + shortcut
00079         
00080         menuItem = menu.Append(wx.ID_ANY, label, helpString, kind)
00081         
00082         self.menucmd[menuItem.GetId()] = gcmd
00083         
00084         if gcmd: 
00085             try: 
00086                 cmd = utils.split(str(gcmd)) 
00087             except UnicodeError: 
00088                 cmd = utils.split(utils.EncodeString((gcmd))) 
00089             if cmd and cmd[0] not in globalvar.grassCmd['all']: 
00090                 menuItem.Enable(False)
00091         
00092         rhandler = eval('self.parent.' + handler)
00093         
00094         self.parent.Bind(wx.EVT_MENU, rhandler, menuItem)
00095 
00096     def GetData(self):
00097         """!Get menu data"""
00098         return self.menudata
00099     
00100     def GetCmd(self):
00101         """!Get list of commands
00102 
00103         @return list of commands
00104         """
00105         return self.menucmd
00106         
00107     def OnMenuHighlight(self, event):
00108         """
00109         Default menu help handler
00110         """
00111          # Show how to get menu item info from this event handler
00112         id = event.GetMenuId()
00113         item = self.FindItemById(id)
00114         if item:
00115             text = item.GetText()
00116             help = item.GetHelp()
00117 
00118         # but in this case just call Skip so the default is done
00119         event.Skip()
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines