7 _arrowright
= Qd
.GetPicture(472)
8 _arrowdown
= Qd
.GetPicture(473)
12 class PopupWidget(Wbase
.ClickableWidget
):
14 def __init__(self
, possize
, items
= [], callback
= None):
15 Wbase
.Widget
.__init
__(self
, possize
)
18 self
._callback
= callback
22 Wbase
.Widget
.close(self
)
26 def draw(self
, visRgn
= None):
28 Qd
.FrameRect(self
._bounds
)
29 l
, t
, r
, b
= self
._bounds
32 pictframe
= (l
, t
, l
+ 10, t
+ 10)
33 Qd
.DrawPicture(_arrowright
, pictframe
)
35 def click(self
, point
, modifiers
):
38 self
.menu
= FrameWork
.Menu(self
._parentwindow
.parent
.menubar
, 'Foo', -1)
39 self
._additems
(self
._items
, self
.menu
)
42 l
, t
, r
, b
= self
._bounds
43 l
, t
= Qd
.LocalToGlobal((l
+1, t
+1))
44 Wbase
.SetCursor("arrow")
45 reply
= self
.menu
.menu
.PopUpMenuSelect(t
, l
, 1)
47 id = (reply
& 0xffff0000) >> 16
49 self
._menu
_callback
(id, item
)
55 def _additems(self
, items
, menu
):
56 from FrameWork
import SubMenu
, MenuItem
62 elif type(item
) == ListType
:
63 submenu
= SubMenu(menu
, item
[0])
64 self
._additems
(item
[1:], submenu
)
66 elif type(item
) == StringType
:
67 menuitemtext
= object = item
68 elif type(item
) == TupleType
and len(item
) == 2:
69 menuitemtext
, object = item
71 raise WidgetsError
, "illegal itemlist for popup menu"
73 if menuitemtext
[:1] == '\0':
74 check
= ord(menuitemtext
[1])
75 menuitemtext
= menuitemtext
[2:]
78 menuitem
= MenuItem(menu
, menuitemtext
, None, None)
81 self
._itemsdict
[(menu_id
, menuitem
.item
)] = object
84 menus
= self
._parentwindow
.parent
.menubar
.menus
85 for id, item
in self
._itemsdict
.keys():
91 def _menu_callback(self
, id, item
):
92 thing
= self
._itemsdict
[(id, item
)]
96 Wbase
.CallbackCall(self
._callback
, 0, thing
)
99 class PopupMenu(PopupWidget
):
103 self
.menu
= WFrameWorkPatch
.Menu(self
._parentwindow
.parent
.menubar
, 'Foo', -1)
104 self
._additems
(self
._items
, self
.menu
)
108 Wbase
.Widget
.close(self
)
113 def set(self
, items
):
116 self
.menu
= WFrameWorkPatch
.Menu(self
._parentwindow
.parent
.menubar
, 'Foo', -1)
118 self
._additems
(self
._items
, self
.menu
)
120 def click(self
, point
, modifiers
):
121 if not self
._enabled
:
124 l
, t
, r
, b
= self
._bounds
125 l
, t
= Qd
.LocalToGlobal((l
+1, t
+1))
126 Wbase
.SetCursor("arrow")
127 reply
= self
.menu
.menu
.PopUpMenuSelect(t
, l
, 1)
129 id = (reply
& 0xffff0000) >> 16
130 item
= reply
& 0xffff
131 self
._menu
_callback
(id, item
)
134 class FontMenu(PopupMenu
):
138 def __init__(self
, possize
, callback
):
139 PopupMenu
.__init
__(self
, possize
)
141 self
._callback
= callback
151 raise Wbase
.WidgetsError
, "can't change font menu widget"
153 def _menu_callback(self
, id, item
):
154 fontname
= self
.menu
.menu
.GetMenuItemText(item
)
156 Wbase
.CallbackCall(self
._callback
, 0, fontname
)
158 def click(self
, point
, modifiers
):
159 if not self
._enabled
:
162 return PopupMenu
.click(self
, point
, modifiers
)
166 if FontMenu
.menu
is not None:
169 FontMenu
.menu
= WFrameWorkPatch
.Menu(W
.getapplication().menubar
, 'Foo', -1)
171 for i
in range(FontMenu
.menu
.menu
.CountMItems(), 0, -1):
172 FontMenu
.menu
.menu
.DeleteMenuItem(i
)
173 FontMenu
.menu
.menu
.AppendResMenu('FOND')
179 for i
in range(1, Res
.CountResources('FOND') + 1):
180 r
= Res
.GetIndResource('FOND', i
)
181 fontnames
.append(r
.GetResInfo()[2])