]> granicus.if.org Git - python/commitdiff
Added a PopupMenu class.
authorJack Jansen <jack.jansen@cwi.nl>
Wed, 6 May 1998 15:33:09 +0000 (15:33 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Wed, 6 May 1998 15:33:09 +0000 (15:33 +0000)
Mac/Lib/FrameWork.py

index c002b1f9df59fcd84a341054e9a5ec53fae6152f..69378b5c0d86b4423b6f132c33775c8681650fb9 100644 (file)
@@ -453,10 +453,11 @@ class MenuBar:
                if DEBUG: print 'Newmenu', title, id # XXXX
                m = NewMenu(id, title)
                m.InsertMenu(after)
-               if self.parent:
-                       self.parent.needmenubarredraw = 1
-               else:
-                       DrawMenuBar()
+               if after >= 0:
+                       if self.parent:
+                               self.parent.needmenubarredraw = 1
+                       else:
+                               DrawMenuBar()
                return id, m
                
        def delmenu(self, id):
@@ -582,6 +583,27 @@ class Menu:
                        self.menu.EnableItem(0)
                else:
                        self.menu.DisableItem(0)
+                       
+class PopupMenu(Menu):
+       def __init__(self, bar):
+               Menu.__init__(self, bar, '(popup)', -1)
+               
+       def popup(self, x, y, event, default=1, window=None):
+               # NOTE that x and y are global coordinates, and they should probably
+               # be topleft of the button the user clicked (not mouse-coordinates),
+               # so the popup nicely overlaps.
+               reply = self.menu.PopUpMenuSelect(x, y, default)
+               if not reply:
+                       return
+               id = (reply & 0xffff0000) >> 16
+               item = reply & 0xffff
+               if not window:
+                       wid = Win.FrontWindow()
+                       try:
+                               window = self.bar.parent._windows[wid]
+                       except:
+                               pass # If we can't find the window we pass None
+               self.dispatch(id, item, window, event)
 
 class MenuItem:
        def __init__(self, menu, title, shortcut=None, callback=None, kind=None):