summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Mac/Tools/IDE/Wmenus.py64
1 files changed, 60 insertions, 4 deletions
diff --git a/Mac/Tools/IDE/Wmenus.py b/Mac/Tools/IDE/Wmenus.py
index 387590b..6cbd41d 100644
--- a/Mac/Tools/IDE/Wmenus.py
+++ b/Mac/Tools/IDE/Wmenus.py
@@ -1,6 +1,6 @@
import FrameWork
import Qd
-import Wbase
+import Wbase, Wcontrols, Ctl, Controls
from types import *
import Wapplication
@@ -8,21 +8,77 @@ _arrowright = Qd.GetPicture(472)
_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):
"""Simple title-less popup widget. Should be 16x16 pixels.
Builds the menu items on the fly, good for dynamic popup menus."""
- def __init__(self, possize, items = [], callback = None):
- Wbase.Widget.__init__(self, possize)
+ def __init__(self, possize, items=None, callback=None):
+ Wbase.ClickableWidget.__init__(self, possize)
+ if items is None:
+ items = []
self._items = items
self._itemsdict = {}
self._callback = callback
self._enabled = 1
def close(self):
- Wbase.Widget.close(self)
+ Wbase.ClickableWidget.close(self)
self._items = None
self._itemsdict = {}