/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/UI/menu.py
ViewVC logotype

Contents of /branches/WIP-pyshapelib-bramz/Thuban/UI/menu.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 214 - (show annotations)
Tue Jul 16 15:25:24 2002 UTC (22 years, 7 months ago) by bh
Original Path: trunk/thuban/Thuban/UI/menu.py
File MIME type: text/x-python
File size: 3565 byte(s)
	* Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
	completely

1 # Copyright (C) 2001, 2002 by Intevation GmbH
2 # Author:
3 # Bernhard Herzog <[email protected]>
4 #
5 # This program is free software under the GPL (>=v2)
6 # Read the file COPYING coming with Thuban for details.
7
8 """Menu management"""
9
10 __version__ = "$Revision$"
11
12
13 class Menu:
14
15 """Represent a menu or submenu.
16
17 A menu has a name and a title. The name can be used to identify
18 menus internally while the title is intended for use in the GUI.
19
20 Menu items can be added with the Insert* methods.
21 """
22
23 def __init__(self, name, title, items = None):
24 """Initialize the menu.
25
26 Parameters:
27 name -- the name of the menu
28 title -- the (possibly localized) title of the menu
29 items -- (optional) a list of menu items.
30
31 The items list may contains strings with command names, None to
32 indicate separators or Menu instances for submenus.
33 """
34 self.name = name
35 self.title = title
36 if items is None:
37 self.items = []
38 else:
39 self.items = items
40
41 def item_index(self, item):
42 """Return the index of item in the menu.
43
44 Return None it item is not found.
45 """
46 try:
47 return self.items.index(item)
48 except ValueError:
49 return None
50
51 def find_menu(self, name):
52 """Return the submenu named name or None if no such item exists"""
53 for item in self.items:
54 if isinstance(item, Menu) and item.name == name:
55 return item
56 return None
57
58 def InsertItem(self, item, menu = (), after = None):
59 """Insert a menu item.
60
61 Parameters:
62
63 item -- the menu item to insert must be either a string with
64 the command's name or a Menu instance.
65
66 menu -- (optional) the submenu to insert into. It should be a
67 sequence of menu names.
68
69 after -- (optional) insert the new item after this one. after
70 should be the name of a command.
71 """
72 # if menu is given, get the first submenu
73 if menu:
74 submenu_index = self.find_menu(menu[0])
75 if submenu_index is not None:
76 submenu_index.InsertItem(item, menu = menu[1:], after = after)
77 else:
78 # the submenu doesn't exist yet. Raise an error.
79 raise KeyError("Submenu %s doesn't exist" % menu[0])
80 else:
81 if after is not None:
82 idx = self.item_index(after)
83 else:
84 idx = None
85
86 if idx is not None:
87 self.items.insert(idx + 1, item)
88 else:
89 self.items.append(item)
90
91 def InsertSeparator(self):
92 """Insert a separator"""
93 self.InsertItem(None)
94
95 def InsertMenu(self, name, title, menu = (), after = None):
96 """Insert and return a new menu.
97
98 Parameters:
99
100 name -- the (internal) name of the menu
101
102 title -- the (possibly localized) title
103
104 menu -- (optional) the submenu to insert into. It should be a
105 sequence of menu names.
106
107 after -- (optional) insert the new item after this one. after
108 should be the name of a command.
109 """
110 newmenu = Menu(name, title)
111 self.InsertItem(newmenu, menu = menu, after = after)
112 return newmenu
113
114 def SetItems(self, items):
115 """Replace the contents of the menu by items."""
116 self.items = items
117

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26