GRASS Programmer's Manual  6.4.3(2013)-r
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Macros Pages
menu.py
Go to the documentation of this file.
1 """!
2 @package gui_core.menu
3 
4 @brief Menu classes for wxGUI
5 
6 Classes:
7  - menu::Menu
8 
9 (C) 2010 by the GRASS Development Team
10 
11 This program is free software under the GNU General Public License
12 (>=v2). Read the file COPYING that comes with GRASS for details.
13 
14 @author Martin Landa <landa.martin gmail.com>
15 @author Pawel Netzel (menu customization)
16 @author Milena Nowotarska (menu customization)
17 @author Robert Szczepanek (menu customization)
18 @author Vaclav Petras <wenzeslaus gmail.com> (menu customization)
19 """
20 
21 import wx
22 
23 from core import globalvar
24 from core import utils
25 from core.gcmd import EncodeString
26 from core.settings import UserSettings
27 
28 class Menu(wx.MenuBar):
29  def __init__(self, parent, data):
30  """!Creates menubar"""
31  wx.MenuBar.__init__(self)
32  self.parent = parent
33  self.menudata = data
34  self.menucmd = dict()
35 
36  self.menustyle = UserSettings.Get(group='appearance', key='menustyle', subkey='selection')
37 
38  for eachMenuData in self.menudata.GetMenu():
39  for eachHeading in eachMenuData:
40  menuLabel = eachHeading[0]
41  menuItems = eachHeading[1]
42  self.Append(self._createMenu(menuItems), menuLabel)
43 
44  def _createMenu(self, menuData):
45  """!Creates menu"""
46  menu = wx.Menu()
47  for eachItem in menuData:
48  if len(eachItem) == 2:
49  label = eachItem[0]
50  subMenu = self._createMenu(eachItem[1])
51  menu.AppendMenu(wx.ID_ANY, label, subMenu)
52  else:
53  self._createMenuItem(menu, self.menustyle, *eachItem)
54 
55  self.parent.Bind(wx.EVT_MENU_HIGHLIGHT_ALL, self.OnMenuHighlight)
56 
57  return menu
58 
59  def _createMenuItem(self, menu, menustyle, label, help, handler, gcmd, keywords,
60  shortcut = '', wxId = wx.ID_ANY, kind = wx.ITEM_NORMAL):
61  """!Creates menu items
62  There are three menu styles (menu item text styles).
63  1 -- label only, 2 -- label and cmd name, 3 -- cmd name only
64  """
65  if not label:
66  menu.AppendSeparator()
67  return
68 
69  if len(gcmd) > 0:
70  helpString = gcmd + ' -- ' + help
71  if menustyle == 1:
72  label += ' [' + gcmd + ']'
73  elif menustyle == 2:
74  label = ' [' + gcmd + ']'
75  else:
76  helpString = help
77 
78  if shortcut:
79  label += '\t' + shortcut
80 
81  menuItem = menu.Append(wxId, label, helpString, kind)
82 
83  self.menucmd[menuItem.GetId()] = gcmd
84 
85  if gcmd:
86  try:
87  cmd = utils.split(str(gcmd))
88  except UnicodeError:
89  cmd = utils.split(EncodeString((gcmd)))
90  if cmd and cmd[0] not in globalvar.grassCmd:
91  menuItem.Enable(False)
92 
93  rhandler = eval('self.parent.' + handler)
94 
95  self.parent.Bind(wx.EVT_MENU, rhandler, menuItem)
96 
97  def GetData(self):
98  """!Get menu data"""
99  return self.menudata
100 
101  def GetCmd(self):
102  """!Get list of commands
103 
104  @return list of commands
105  """
106  return self.menucmd
107 
108  def OnMenuHighlight(self, event):
109  """
110  Default menu help handler
111  """
112  # Show how to get menu item info from this event handler
113  id = event.GetMenuId()
114  item = self.FindItemById(id)
115  if item:
116  text = item.GetText()
117  help = item.GetHelp()
118 
119  # but in this case just call Skip so the default is done
120  event.Skip()
def __init__
Creates menubar.
Definition: menu.py:29
def EncodeString
Return encoded string using system locales.
Definition: gcmd.py:91
menucmd
Definition: menu.py:34
wxGUI command interface
def OnMenuHighlight
Definition: menu.py:108
def split
Platform spefic shlex.split.
Definition: core/utils.py:37
parent
Definition: menu.py:32
def GetData
Get menu data.
Definition: menu.py:97
menustyle
Definition: menu.py:36
menudata
Definition: menu.py:33
def _createMenu
Creates menu.
Definition: menu.py:44
def _createMenuItem
Creates menu items There are three menu styles (menu item text styles).
Definition: menu.py:60
Default GUI settings.
def GetCmd
Get list of commands.
Definition: menu.py:101