7 _arrowright
= Qd
.GetPicture(472)
8 _arrowdown
= Qd
.GetPicture(473)
12 class PopupWidget(Wbase
.ClickableWidget
):
14 """Simple title-less popup widget. Should be 16x16 pixels.
15 Builds the menu items on the fly, good for dynamic popup menus."""
17 def __init__(self
, possize
, items
= [], callback
= None):
18 Wbase
.Widget
.__init
__(self
, possize
)
21 self
._callback
= callback
25 Wbase
.Widget
.close(self
)
29 def draw(self
, visRgn
= None):
31 Qd
.FrameRect(self
._bounds
)
32 Qd
.EraseRect(Qd
.InsetRect(self
._bounds
, 1, 1))
33 l
, t
, r
, b
= self
._bounds
36 pictframe
= (l
, t
, l
+ 10, t
+ 10)
37 Qd
.DrawPicture(_arrowright
, pictframe
)
39 def click(self
, point
, modifiers
):
42 self
.menu
= FrameWork
.Menu(self
._parentwindow
.parent
.menubar
, 'Foo', -1)
43 self
._additems
(self
._items
, self
.menu
)
45 l
, t
, r
, b
= self
._bounds
46 l
, t
= Qd
.LocalToGlobal((l
+1, t
+1))
47 Wbase
.SetCursor("arrow")
48 self
.menu
.menu
.EnableItem(0)
49 reply
= self
.menu
.menu
.PopUpMenuSelect(t
, l
, 1)
51 id = (reply
& 0xffff0000) >> 16
53 self
._menu
_callback
(id, item
)
62 def _additems(self
, items
, menu
):
63 from FrameWork
import SubMenu
, MenuItem
69 elif type(item
) == ListType
:
70 submenu
= SubMenu(menu
, item
[0])
71 self
._additems
(item
[1:], submenu
)
73 elif type(item
) == StringType
:
74 menuitemtext
= object = item
75 elif type(item
) == TupleType
and len(item
) == 2:
76 menuitemtext
, object = item
78 raise Wbase
.WidgetsError
, "illegal itemlist for popup menu"
80 if menuitemtext
[:1] == '\0':
81 check
= ord(menuitemtext
[1])
82 menuitemtext
= menuitemtext
[2:]
85 menuitem
= MenuItem(menu
, menuitemtext
, None, None)
88 self
._itemsdict
[(menu_id
, menuitem
.item
)] = object
91 menus
= self
._parentwindow
.parent
.menubar
.menus
92 for id, item
in self
._itemsdict
.keys():
98 def _menu_callback(self
, id, item
):
99 thing
= self
._itemsdict
[(id, item
)]
103 Wbase
.CallbackCall(self
._callback
, 0, thing
)
106 class PopupMenu(PopupWidget
):
108 """Simple title-less popup widget. Should be 16x16 pixels.
109 Prebuilds the menu items, good for static (non changing) popup menus."""
113 self
.menu
= Wapplication
.Menu(self
._parentwindow
.parent
.menubar
, 'Foo', -1)
114 self
._additems
(self
._items
, self
.menu
)
118 Wbase
.Widget
.close(self
)
123 def set(self
, items
):
126 self
.menu
= Wapplication
.Menu(self
._parentwindow
.parent
.menubar
, 'Foo', -1)
128 self
._additems
(self
._items
, self
.menu
)
130 def click(self
, point
, modifiers
):
131 if not self
._enabled
:
134 l
, t
, r
, b
= self
._bounds
135 l
, t
= Qd
.LocalToGlobal((l
+1, t
+1))
136 Wbase
.SetCursor("arrow")
137 self
.menu
.menu
.EnableItem(0)
138 reply
= self
.menu
.menu
.PopUpMenuSelect(t
, l
, 1)
140 id = (reply
& 0xffff0000) >> 16
141 item
= reply
& 0xffff
142 self
._menu
_callback
(id, item
)
145 class FontMenu(PopupMenu
):
147 """A font popup menu."""
151 def __init__(self
, possize
, callback
):
152 PopupMenu
.__init
__(self
, possize
)
154 self
._callback
= callback
164 raise Wbase
.WidgetsError
, "can't change font menu widget"
166 def _menu_callback(self
, id, item
):
167 fontname
= self
.menu
.menu
.GetMenuItemText(item
)
169 Wbase
.CallbackCall(self
._callback
, 0, fontname
)
171 def click(self
, point
, modifiers
):
172 if not self
._enabled
:
175 return PopupMenu
.click(self
, point
, modifiers
)
179 """helper for font menu"""
180 if FontMenu
.menu
is not None:
183 FontMenu
.menu
= Wapplication
.Menu(W
.getapplication().menubar
, 'Foo', -1)
185 for i
in range(FontMenu
.menu
.menu
.CountMItems(), 0, -1):
186 FontMenu
.menu
.menu
.DeleteMenuItem(i
)
187 FontMenu
.menu
.menu
.AppendResMenu('FOND')
193 for i
in range(1, Res
.CountResources('FOND') + 1):
194 r
= Res
.GetIndResource('FOND', i
)
195 fontnames
.append(r
.GetResInfo()[2])