mirror of
https://github.com/python/cpython.git
synced 2025-10-27 08:46:53 +00:00
Initial revision
This commit is contained in:
parent
7cc5735ef2
commit
cb5704e6a8
36 changed files with 8306 additions and 0 deletions
182
Mac/Contrib/PyIDE-src/IDELib/Widgets/Wmenus.py
Normal file
182
Mac/Contrib/PyIDE-src/IDELib/Widgets/Wmenus.py
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
import FrameWork
|
||||
import Qd
|
||||
import Wbase
|
||||
from types import *
|
||||
import WFrameWorkPatch
|
||||
|
||||
_arrowright = Qd.GetPicture(472)
|
||||
_arrowdown = Qd.GetPicture(473)
|
||||
|
||||
|
||||
|
||||
class PopupWidget(Wbase.ClickableWidget):
|
||||
|
||||
def __init__(self, possize, items = [], callback = None):
|
||||
Wbase.Widget.__init__(self, possize)
|
||||
self._items = items
|
||||
self._itemsdict = {}
|
||||
self._callback = callback
|
||||
self._enabled = 1
|
||||
|
||||
def close(self):
|
||||
Wbase.Widget.close(self)
|
||||
self._items = None
|
||||
self._itemsdict = {}
|
||||
|
||||
def draw(self, visRgn = None):
|
||||
if self._visible:
|
||||
Qd.FrameRect(self._bounds)
|
||||
l, t, r, b = self._bounds
|
||||
l = l + 2
|
||||
t = t + 3
|
||||
pictframe = (l, t, l + 10, t + 10)
|
||||
Qd.DrawPicture(_arrowright, pictframe)
|
||||
|
||||
def click(self, point, modifiers):
|
||||
if not self._enabled:
|
||||
return
|
||||
self.menu = FrameWork.Menu(self._parentwindow.parent.menubar, 'Foo', -1)
|
||||
self._additems(self._items, self.menu)
|
||||
|
||||
self.SetPort()
|
||||
l, t, r, b = self._bounds
|
||||
l, t = Qd.LocalToGlobal((l+1, t+1))
|
||||
Wbase.SetCursor("arrow")
|
||||
reply = self.menu.menu.PopUpMenuSelect(t, l, 1)
|
||||
if reply:
|
||||
id = (reply & 0xffff0000) >> 16
|
||||
item = reply & 0xffff
|
||||
self._menu_callback(id, item)
|
||||
self._emptymenu()
|
||||
|
||||
def set(self, items):
|
||||
self._items = items
|
||||
|
||||
def _additems(self, items, menu):
|
||||
from FrameWork import SubMenu, MenuItem
|
||||
menu_id = menu.id
|
||||
for item in items:
|
||||
if item == "-":
|
||||
menu.addseparator()
|
||||
continue
|
||||
elif type(item) == ListType:
|
||||
submenu = SubMenu(menu, item[0])
|
||||
self._additems(item[1:], submenu)
|
||||
continue
|
||||
elif type(item) == StringType:
|
||||
menuitemtext = object = item
|
||||
elif type(item) == TupleType and len(item) == 2:
|
||||
menuitemtext, object = item
|
||||
else:
|
||||
raise WidgetsError, "illegal itemlist for popup menu"
|
||||
|
||||
if menuitemtext[:1] == '\0':
|
||||
check = ord(menuitemtext[1])
|
||||
menuitemtext = menuitemtext[2:]
|
||||
else:
|
||||
check = 0
|
||||
menuitem = MenuItem(menu, menuitemtext, None, None)
|
||||
if check:
|
||||
menuitem.check(1)
|
||||
self._itemsdict[(menu_id, menuitem.item)] = object
|
||||
|
||||
def _emptymenu(self):
|
||||
menus = self._parentwindow.parent.menubar.menus
|
||||
for id, item in self._itemsdict.keys():
|
||||
if menus.has_key(id):
|
||||
self.menu = menus[id]
|
||||
self.menu.delete()
|
||||
self._itemsdict = {}
|
||||
|
||||
def _menu_callback(self, id, item):
|
||||
thing = self._itemsdict[(id, item)]
|
||||
if callable(thing):
|
||||
thing()
|
||||
elif self._callback:
|
||||
Wbase.CallbackCall(self._callback, 0, thing)
|
||||
|
||||
|
||||
class PopupMenu(PopupWidget):
|
||||
|
||||
def open(self):
|
||||
self._calcbounds()
|
||||
self.menu = WFrameWorkPatch.Menu(self._parentwindow.parent.menubar, 'Foo', -1)
|
||||
self._additems(self._items, self.menu)
|
||||
|
||||
def close(self):
|
||||
self._emptymenu()
|
||||
Wbase.Widget.close(self)
|
||||
self._items = None
|
||||
self._itemsdict = {}
|
||||
self.menu = None
|
||||
|
||||
def set(self, items):
|
||||
if self._itemsdict:
|
||||
self._emptymenu()
|
||||
self.menu = WFrameWorkPatch.Menu(self._parentwindow.parent.menubar, 'Foo', -1)
|
||||
self._items = items
|
||||
self._additems(self._items, self.menu)
|
||||
|
||||
def click(self, point, modifiers):
|
||||
if not self._enabled:
|
||||
return
|
||||
self.SetPort()
|
||||
l, t, r, b = self._bounds
|
||||
l, t = Qd.LocalToGlobal((l+1, t+1))
|
||||
Wbase.SetCursor("arrow")
|
||||
reply = self.menu.menu.PopUpMenuSelect(t, l, 1)
|
||||
if reply:
|
||||
id = (reply & 0xffff0000) >> 16
|
||||
item = reply & 0xffff
|
||||
self._menu_callback(id, item)
|
||||
|
||||
|
||||
class FontMenu(PopupMenu):
|
||||
|
||||
menu = None
|
||||
|
||||
def __init__(self, possize, callback):
|
||||
PopupMenu.__init__(self, possize)
|
||||
makefontmenu()
|
||||
self._callback = callback
|
||||
self._enabled = 1
|
||||
|
||||
def open(self):
|
||||
self._calcbounds()
|
||||
|
||||
def close(self):
|
||||
pass
|
||||
|
||||
def set(self):
|
||||
raise Wbase.WidgetsError, "can't change font menu widget"
|
||||
|
||||
def _menu_callback(self, id, item):
|
||||
fontname = self.menu.menu.GetMenuItemText(item)
|
||||
if self._callback:
|
||||
Wbase.CallbackCall(self._callback, 0, fontname)
|
||||
|
||||
def click(self, point, modifiers):
|
||||
if not self._enabled:
|
||||
return
|
||||
makefontmenu()
|
||||
return PopupMenu.click(self, point, modifiers)
|
||||
|
||||
|
||||
def makefontmenu():
|
||||
if FontMenu.menu is not None:
|
||||
return
|
||||
import W
|
||||
FontMenu.menu = WFrameWorkPatch.Menu(W.getapplication().menubar, 'Foo', -1)
|
||||
W.SetCursor('watch')
|
||||
for i in range(FontMenu.menu.menu.CountMItems(), 0, -1):
|
||||
FontMenu.menu.menu.DeleteMenuItem(i)
|
||||
FontMenu.menu.menu.AppendResMenu('FOND')
|
||||
|
||||
|
||||
def _getfontlist():
|
||||
import Res
|
||||
fontnames = []
|
||||
for i in range(1, Res.CountResources('FOND') + 1):
|
||||
r = Res.GetIndResource('FOND', i)
|
||||
fontnames.append(r.GetResInfo()[2])
|
||||
return fontnames
|
||||
Loading…
Add table
Add a link
Reference in a new issue