added popup control (jvr)

This commit is contained in:
Just van Rossum 2000-04-09 19:45:08 +00:00
parent 7051e5263e
commit d949b5cdba

View file

@ -1,6 +1,6 @@
import FrameWork import FrameWork
import Qd import Qd
import Wbase import Wbase, Wcontrols, Ctl, Controls
from types import * from types import *
import Wapplication import Wapplication
@ -8,21 +8,77 @@ _arrowright = Qd.GetPicture(472)
_arrowdown = Qd.GetPicture(473) _arrowdown = Qd.GetPicture(473)
class PopupControl(Wcontrols.ControlWidget):
def __init__(self, possize, items=None, callback=None):
if items is None:
items = []
procID = Controls.popupMenuProc|Controls.popupFixedWidth|Controls.useWFont
Wcontrols.ControlWidget.__init__(self, possize, "", procID, callback, 0, 0, 0)
self._items = items[:]
def set(self, value):
self._control.SetControlValue(value+1)
def get(self):
return self._control.GetControlValue() - 1
def open(self):
self.menu = menu = FrameWork.Menu(self._parentwindow.parent.menubar, 'Foo', -1)
for i in range(len(self._items)):
item = self._items[i]
if type(item) == StringType:
menuitemtext = object = item
elif type(item) == TupleType and len(item) == 2:
menuitemtext, object = item
self._items[i] = object
else:
raise Wbase.WidgetsError, "illegal itemlist for popup menu"
menuitem = FrameWork.MenuItem(menu, menuitemtext, None, None)
self._calcbounds()
self._control = Ctl.NewControl(self._parentwindow.wid,
self._bounds,
self._title,
1,
self._value,
self.menu.id,
self._max,
self._procID,
0)
self.SetPort()
self.enable(self._enabled)
def close(self):
self.menu.delete()
return Wcontrols.ControlWidget.close(self)
def click(self, point, modifiers):
if not self._enabled:
return
part = self._control.TrackControl(point, -1)
if part:
if self._callback:
Wbase.CallbackCall(self._callback, 0, self._items[self.get()])
class PopupWidget(Wbase.ClickableWidget): class PopupWidget(Wbase.ClickableWidget):
"""Simple title-less popup widget. Should be 16x16 pixels. """Simple title-less popup widget. Should be 16x16 pixels.
Builds the menu items on the fly, good for dynamic popup menus.""" Builds the menu items on the fly, good for dynamic popup menus."""
def __init__(self, possize, items = [], callback = None): def __init__(self, possize, items=None, callback=None):
Wbase.Widget.__init__(self, possize) Wbase.ClickableWidget.__init__(self, possize)
if items is None:
items = []
self._items = items self._items = items
self._itemsdict = {} self._itemsdict = {}
self._callback = callback self._callback = callback
self._enabled = 1 self._enabled = 1
def close(self): def close(self):
Wbase.Widget.close(self) Wbase.ClickableWidget.close(self)
self._items = None self._items = None
self._itemsdict = {} self._itemsdict = {}