Import Upstream version 2.7.18
This commit is contained in:
3477
Mac/Modules/menu/_Menumodule.c
Normal file
3477
Mac/Modules/menu/_Menumodule.c
Normal file
File diff suppressed because it is too large
Load Diff
123
Mac/Modules/menu/menuedit.py
Normal file
123
Mac/Modules/menu/menuedit.py
Normal file
@@ -0,0 +1,123 @@
|
||||
f = Function(MenuHandle, 'as_Menu', (Handle, 'h', InMode))
|
||||
functions.append(f)
|
||||
|
||||
f = Method(Handle, 'as_Resource', (MenuHandle, 'h', InMode))
|
||||
methods.append(f)
|
||||
|
||||
# The following have "Mac" prepended to their names in the include file
|
||||
# since UH 3.1, sigh...
|
||||
f = Function(MenuHandle, 'GetMenu',
|
||||
(short, 'resourceID', InMode),
|
||||
)
|
||||
functions.append(f)
|
||||
|
||||
f = Method(void, 'AppendMenu',
|
||||
(MenuHandle, 'menu', InMode),
|
||||
(ConstStr255Param, 'data', InMode),
|
||||
)
|
||||
methods.append(f)
|
||||
|
||||
f = Method(void, 'InsertMenu',
|
||||
(MenuHandle, 'theMenu', InMode),
|
||||
(short, 'beforeID', InMode),
|
||||
)
|
||||
methods.append(f)
|
||||
|
||||
f = Function(void, 'DeleteMenu',
|
||||
(short, 'menuID', InMode),
|
||||
)
|
||||
functions.append(f)
|
||||
|
||||
f = Method(void, 'InsertMenuItem',
|
||||
(MenuHandle, 'theMenu', InMode),
|
||||
(ConstStr255Param, 'itemString', InMode),
|
||||
(short, 'afterItem', InMode),
|
||||
)
|
||||
methods.append(f)
|
||||
|
||||
f = Method(void, 'EnableMenuItem',
|
||||
(MenuHandle, 'theMenu', InMode),
|
||||
(UInt16, 'item', InMode),
|
||||
)
|
||||
methods.append(f)
|
||||
|
||||
f = Method(void, 'CheckMenuItem',
|
||||
(MenuRef, 'theMenu', InMode),
|
||||
(short, 'item', InMode),
|
||||
(Boolean, 'checked', InMode),
|
||||
)
|
||||
methods.append(f)
|
||||
|
||||
|
||||
f = Function(void, 'DrawMenuBar',
|
||||
)
|
||||
functions.append(f)
|
||||
|
||||
|
||||
#
|
||||
# The following functions take an *optional* MenuRef as their first argument
|
||||
#
|
||||
|
||||
f = Function(ItemCount, 'CountMenuItemsWithCommandID',
|
||||
(OptMenuRef, 'inMenu', InMode),
|
||||
(MenuCommand, 'inCommandID', InMode),
|
||||
)
|
||||
functions.append(f)
|
||||
|
||||
f = Function(OSStatus, 'GetIndMenuItemWithCommandID',
|
||||
(OptMenuRef, 'inMenu', InMode),
|
||||
(MenuCommand, 'inCommandID', InMode),
|
||||
(UInt32, 'inItemIndex', InMode),
|
||||
(MenuRef, 'outMenu', OutMode),
|
||||
(MenuItemIndex, 'outIndex', OutMode),
|
||||
)
|
||||
functions.append(f)
|
||||
|
||||
f = Function(void, 'EnableMenuCommand',
|
||||
(OptMenuRef, 'inMenu', InMode),
|
||||
(MenuCommand, 'inCommandID', InMode),
|
||||
)
|
||||
functions.append(f)
|
||||
|
||||
f = Function(void, 'DisableMenuCommand',
|
||||
(OptMenuRef, 'inMenu', InMode),
|
||||
(MenuCommand, 'inCommandID', InMode),
|
||||
)
|
||||
functions.append(f)
|
||||
|
||||
f = Function(Boolean, 'IsMenuCommandEnabled',
|
||||
(OptMenuRef, 'inMenu', InMode),
|
||||
(MenuCommand, 'inCommandID', InMode),
|
||||
)
|
||||
functions.append(f)
|
||||
|
||||
f = Function(OSStatus, 'SetMenuCommandMark',
|
||||
(OptMenuRef, 'inMenu', InMode),
|
||||
(MenuCommand, 'inCommandID', InMode),
|
||||
(UniChar, 'inMark', InMode),
|
||||
)
|
||||
functions.append(f)
|
||||
|
||||
f = Function(OSStatus, 'GetMenuCommandMark',
|
||||
(OptMenuRef, 'inMenu', InMode),
|
||||
(MenuCommand, 'inCommandID', InMode),
|
||||
(UniChar, 'outMark', OutMode),
|
||||
)
|
||||
functions.append(f)
|
||||
|
||||
f = Function(OSStatus, 'GetMenuCommandPropertySize',
|
||||
(OptMenuRef, 'inMenu', InMode),
|
||||
(MenuCommand, 'inCommandID', InMode),
|
||||
(OSType, 'inPropertyCreator', InMode),
|
||||
(OSType, 'inPropertyTag', InMode),
|
||||
(ByteCount, 'outSize', OutMode),
|
||||
)
|
||||
functions.append(f)
|
||||
|
||||
f = Function(OSStatus, 'RemoveMenuCommandProperty',
|
||||
(OptMenuRef, 'inMenu', InMode),
|
||||
(MenuCommand, 'inCommandID', InMode),
|
||||
(OSType, 'inPropertyCreator', InMode),
|
||||
(OSType, 'inPropertyTag', InMode),
|
||||
)
|
||||
functions.append(f)
|
||||
96
Mac/Modules/menu/menuscan.py
Normal file
96
Mac/Modules/menu/menuscan.py
Normal file
@@ -0,0 +1,96 @@
|
||||
# Scan <Menus.h>, generating menugen.py.
|
||||
import sys
|
||||
from bgenlocations import TOOLBOXDIR, BGENDIR
|
||||
sys.path.append(BGENDIR)
|
||||
|
||||
from scantools import Scanner
|
||||
|
||||
def main():
|
||||
input = "Menus.h"
|
||||
output = "menugen.py"
|
||||
defsoutput = TOOLBOXDIR + "Menus.py"
|
||||
scanner = MyScanner(input, output, defsoutput)
|
||||
scanner.scan()
|
||||
scanner.close()
|
||||
print "=== Testing definitions output code ==="
|
||||
execfile(defsoutput, {}, {})
|
||||
print "=== Done scanning and generating, now doing 'import menusupport' ==="
|
||||
import menusupport
|
||||
print "=== Done. It's up to you to compile Menumodule.c ==="
|
||||
|
||||
class MyScanner(Scanner):
|
||||
|
||||
def destination(self, type, name, arglist):
|
||||
classname = "Function"
|
||||
listname = "functions"
|
||||
if arglist:
|
||||
t, n, m = arglist[0]
|
||||
if t in ("MenuHandle", "MenuRef") and m == "InMode":
|
||||
classname = "Method"
|
||||
listname = "methods"
|
||||
return classname, listname
|
||||
|
||||
def makeblacklistnames(self):
|
||||
return [
|
||||
## "IsShowContextualMenuClick", # Can't find it in the library
|
||||
## "InitContextualMenus", # ditto
|
||||
"GetMenuItemProperty", # difficult for the moment
|
||||
"GetMenuItemPropertySize",
|
||||
"SetMenuItemProperty",
|
||||
"RemoveMenuItemProperty",
|
||||
"SetMenuCommandProperty",
|
||||
"GetMenuCommandProperty",
|
||||
"GetMenuTitle", # Funny arg/returnvalue
|
||||
"SetMenuTitle",
|
||||
"SetMenuTitleIcon", # void*
|
||||
# OS8 calls:
|
||||
'GetMenuItemRefCon2',
|
||||
'SetMenuItemRefCon2',
|
||||
'EnableItem',
|
||||
'DisableItem',
|
||||
'CheckItem',
|
||||
'CountMItems',
|
||||
'OpenDeskAcc',
|
||||
'SystemEdit',
|
||||
'SystemMenu',
|
||||
'SetMenuFlash',
|
||||
'InitMenus',
|
||||
'InitProcMenu',
|
||||
]
|
||||
|
||||
def makeblacklisttypes(self):
|
||||
return [
|
||||
'MCTableHandle',
|
||||
'MCEntryPtr',
|
||||
'MCTablePtr',
|
||||
'AEDesc_ptr', # For now: doable, but not easy
|
||||
'ProcessSerialNumber', # ditto
|
||||
"MenuDefSpecPtr", # Too difficult for now
|
||||
"MenuDefSpec_ptr", # ditto
|
||||
"MenuTrackingData",
|
||||
"void_ptr", # Don't know yet.
|
||||
"EventRef", # For now, not exported yet.
|
||||
"MenuItemDataPtr", # Not yet.
|
||||
"MenuItemDataRec_ptr",
|
||||
]
|
||||
|
||||
def makerepairinstructions(self):
|
||||
return [
|
||||
([("Str255", "itemString", "InMode")],
|
||||
[("*", "*", "OutMode")]),
|
||||
|
||||
([("void_ptr", "*", "InMode"), ("long", "*", "InMode")],
|
||||
[("InBuffer", "*", "*")]),
|
||||
|
||||
([("void", "*", "OutMode"), ("long", "*", "InMode"),
|
||||
("long", "*", "OutMode")],
|
||||
[("VarVarOutBuffer", "*", "InOutMode")]),
|
||||
([("MenuRef", 'outHierMenu', "OutMode")],
|
||||
[("OptMenuRef", 'outHierMenu', "OutMode")]),
|
||||
]
|
||||
|
||||
def writeinitialdefs(self):
|
||||
self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
108
Mac/Modules/menu/menusupport.py
Normal file
108
Mac/Modules/menu/menusupport.py
Normal file
@@ -0,0 +1,108 @@
|
||||
# This script generates a Python interface for an Apple Macintosh Manager.
|
||||
# It uses the "bgen" package to generate C code.
|
||||
# The function specifications are generated by scanning the mamager's header file,
|
||||
# using the "scantools" package (customized for this particular manager).
|
||||
|
||||
import string
|
||||
|
||||
# Declarations that change for each manager
|
||||
MACHEADERFILE = 'Menus.h' # The Apple header file
|
||||
MODNAME = '_Menu' # The name of the module
|
||||
OBJECTNAME = 'Menu' # The basic name of the objects used here
|
||||
|
||||
# The following is *usually* unchanged but may still require tuning
|
||||
MODPREFIX = 'Menu' # The prefix for module-wide routines
|
||||
OBJECTTYPE = OBJECTNAME + 'Handle' # The C type used to represent them
|
||||
OBJECTPREFIX = MODPREFIX + 'Obj' # The prefix for object methods
|
||||
INPUTFILE = string.lower(MODPREFIX) + 'gen.py' # The file generated by the scanner
|
||||
EXTRAFILE = string.lower(MODPREFIX) + 'edit.py' # A similar file but hand-made
|
||||
OUTPUTFILE = MODNAME + "module.c" # The file generated by this program
|
||||
|
||||
from macsupport import *
|
||||
|
||||
# Create the type objects
|
||||
|
||||
MenuHandle = OpaqueByValueType(OBJECTTYPE, OBJECTPREFIX)
|
||||
MenuRef = MenuHandle
|
||||
OptMenuRef = OpaqueByValueType(OBJECTTYPE, "Opt" + OBJECTPREFIX)
|
||||
Handle = OpaqueByValueType("Handle", "ResObj")
|
||||
MenuBarHandle = OpaqueByValueType("MenuBarHandle", "ResObj")
|
||||
MenuID = Type("MenuID", "h")
|
||||
MenuItemIndex = Type("MenuItemIndex", "h")
|
||||
MenuItemID = Type("MenuItemID", "l")
|
||||
MenuCommand = Type("MenuCommand", "l")
|
||||
MenuAttributes = Type("MenuAttributes", "l")
|
||||
MenuItemAttributes = Type("MenuItemAttributes", "l")
|
||||
unsigned_char = Type('unsigned char', 'b')
|
||||
FMFontFamily = Type("FMFontFamily", "h")
|
||||
FMFontStyle = Type("FMFontStyle", "h")
|
||||
UniChar = Type("UniChar", "h")
|
||||
|
||||
includestuff = includestuff + """
|
||||
#include <Carbon/Carbon.h>
|
||||
|
||||
|
||||
#ifdef USE_TOOLBOX_OBJECT_GLUE
|
||||
|
||||
extern PyObject *_MenuObj_New(MenuHandle);
|
||||
extern int _MenuObj_Convert(PyObject *, MenuHandle *);
|
||||
|
||||
#define MenuObj_New _MenuObj_New
|
||||
#define MenuObj_Convert _MenuObj_Convert
|
||||
#endif
|
||||
|
||||
#define as_Menu(h) ((MenuHandle)h)
|
||||
#define as_Resource(h) ((Handle)h)
|
||||
|
||||
|
||||
/* Alternative version of MenuObj_New, which returns None for NULL argument */
|
||||
PyObject *OptMenuObj_New(MenuRef itself)
|
||||
{
|
||||
if (itself == NULL) {
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
return MenuObj_New(itself);
|
||||
}
|
||||
|
||||
/* Alternative version of MenuObj_Convert, which returns NULL for a None argument */
|
||||
int OptMenuObj_Convert(PyObject *v, MenuRef *p_itself)
|
||||
{
|
||||
if ( v == Py_None ) {
|
||||
*p_itself = NULL;
|
||||
return 1;
|
||||
}
|
||||
return MenuObj_Convert(v, p_itself);
|
||||
}
|
||||
"""
|
||||
|
||||
initstuff = initstuff + """
|
||||
PyMac_INIT_TOOLBOX_OBJECT_NEW(MenuHandle, MenuObj_New);
|
||||
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(MenuHandle, MenuObj_Convert);
|
||||
"""
|
||||
|
||||
class MyObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
|
||||
pass
|
||||
|
||||
# Create the generator groups and link them
|
||||
module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff)
|
||||
object = MyObjectDefinition(OBJECTNAME, OBJECTPREFIX, OBJECTTYPE)
|
||||
module.addobject(object)
|
||||
|
||||
# Create the generator classes used to populate the lists
|
||||
Function = OSErrWeakLinkFunctionGenerator
|
||||
Method = OSErrWeakLinkMethodGenerator
|
||||
|
||||
# Create and populate the lists
|
||||
functions = []
|
||||
methods = []
|
||||
execfile(INPUTFILE)
|
||||
execfile(EXTRAFILE)
|
||||
|
||||
# add the populated lists to the generator groups
|
||||
for f in functions: module.add(f)
|
||||
for f in methods: object.add(f)
|
||||
|
||||
# generate output (open the output file as late as possible)
|
||||
SetOutputFileName(OUTPUTFILE)
|
||||
module.generate()
|
||||
Reference in New Issue
Block a user