From a1a0fef2ea9ece5b16f9e6c37800778c64844e69 Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Thu, 23 Dec 1999 14:32:06 +0000 Subject: Unified handle-conversion scheme to handle = Ctl.as_Resource(ctl) ctl = Ctl.as_Control(handle) and similarly for List, Menu, TE. The old handle.as_Control() methods are still there for backward compatability. --- Mac/Modules/ctl/Ctlmodule.c | 13 +++++++++---- Mac/Modules/ctl/ctledit.py | 8 +------- Mac/Modules/ctl/ctlsupport.py | 1 + Mac/Modules/list/Listmodule.c | 37 +++++++++++++++++++++++++++++++++++++ Mac/Modules/list/listsupport.py | 14 ++++++++++++-- Mac/Modules/menu/Menumodule.c | 13 +++++++++---- Mac/Modules/menu/menuedit.py | 11 ++--------- Mac/Modules/menu/menusupport.py | 2 ++ Mac/Modules/te/TEmodule.c | 37 +++++++++++++++++++++++++++++++++++++ Mac/Modules/te/tesupport.py | 11 ++++++++++- 10 files changed, 120 insertions(+), 27 deletions(-) diff --git a/Mac/Modules/ctl/Ctlmodule.c b/Mac/Modules/ctl/Ctlmodule.c index d1deee8..3648a55 100644 --- a/Mac/Modules/ctl/Ctlmodule.c +++ b/Mac/Modules/ctl/Ctlmodule.c @@ -45,6 +45,7 @@ extern PyObject *WinObj_WhichWindow(WindowPtr); #include #define as_Control(h) ((ControlHandle)h) +#define as_Resource(ctl) ((Handle)ctl) #define resNotFound -192 /* Can't include because of Python's "errors.h" */ @@ -1008,9 +1009,13 @@ static PyObject *CtlObj_as_Resource(_self, _args) PyObject *_args; { PyObject *_res = NULL; - - return ResObj_New((Handle)_self->ob_itself); - + Handle _rv; + if (!PyArg_ParseTuple(_args, "")) + return NULL; + _rv = as_Resource(_self->ob_itself); + _res = Py_BuildValue("O&", + ResObj_New, _rv); + return _res; } static PyObject *CtlObj_DisposeControl(_self, _args) @@ -1400,7 +1405,7 @@ static PyMethodDef CtlObj_methods[] = { {"GetControlDataSize", (PyCFunction)CtlObj_GetControlDataSize, 1, "(ControlPartCode inPart, ResType inTagName) -> (Size outMaxSize)"}, {"as_Resource", (PyCFunction)CtlObj_as_Resource, 1, - "Return this Control as a Resource"}, + "() -> (Handle _rv)"}, {"DisposeControl", (PyCFunction)CtlObj_DisposeControl, 1, "() -> None"}, {"TrackControl", (PyCFunction)CtlObj_TrackControl, 1, diff --git a/Mac/Modules/ctl/ctledit.py b/Mac/Modules/ctl/ctledit.py index 97534e2..ea433e5 100644 --- a/Mac/Modules/ctl/ctledit.py +++ b/Mac/Modules/ctl/ctledit.py @@ -2,13 +2,7 @@ f = Function(ControlHandle, 'as_Control', (Handle, 'h', InMode)) functions.append(f) -as_resource_body = """ -return ResObj_New((Handle)_self->ob_itself); -""" - -f = ManualGenerator("as_Resource", as_resource_body) -f.docstring = lambda : "Return this Control as a Resource" - +f = Method(Handle, 'as_Resource', (ControlHandle, 'ctl', InMode)) methods.append(f) DisposeControl_body = """ diff --git a/Mac/Modules/ctl/ctlsupport.py b/Mac/Modules/ctl/ctlsupport.py index 4a4620f..8ac9d5c 100644 --- a/Mac/Modules/ctl/ctlsupport.py +++ b/Mac/Modules/ctl/ctlsupport.py @@ -45,6 +45,7 @@ includestuff = includestuff + """ #include <%s>""" % MACHEADERFILE + """ #define as_Control(h) ((ControlHandle)h) +#define as_Resource(ctl) ((Handle)ctl) #define resNotFound -192 /* Can't include because of Python's "errors.h" */ diff --git a/Mac/Modules/list/Listmodule.c b/Mac/Modules/list/Listmodule.c index 5d934bf..c9091e6 100644 --- a/Mac/Modules/list/Listmodule.c +++ b/Mac/Modules/list/Listmodule.c @@ -44,6 +44,9 @@ extern PyObject *WinObj_WhichWindow(WindowPtr); #include +#define as_List(x) ((ListHandle)x) +#define as_Resource(lh) ((Handle)lh) + static PyObject *List_Error; /* ------------------------ Object type List ------------------------ */ @@ -506,6 +509,20 @@ static PyObject *ListObj_LDraw(_self, _args) return _res; } +static PyObject *ListObj_as_Resource(_self, _args) + ListObject *_self; + PyObject *_args; +{ + PyObject *_res = NULL; + Handle _rv; + if (!PyArg_ParseTuple(_args, "")) + return NULL; + _rv = as_Resource(_self->ob_itself); + _res = Py_BuildValue("O&", + ResObj_New, _rv); + return _res; +} + static PyMethodDef ListObj_methods[] = { {"LAddColumn", (PyCFunction)ListObj_LAddColumn, 1, "(short count, short colNum) -> (short _rv)"}, @@ -551,6 +568,8 @@ static PyMethodDef ListObj_methods[] = { "(Boolean setIt, Point theCell) -> None"}, {"LDraw", (PyCFunction)ListObj_LDraw, 1, "(Point theCell) -> None"}, + {"as_Resource", (PyCFunction)ListObj_as_Resource, 1, + "() -> (Handle _rv)"}, {NULL, NULL, 0} }; @@ -662,9 +681,27 @@ static PyObject *List_LNew(_self, _args) return _res; } +static PyObject *List_as_List(_self, _args) + PyObject *_self; + PyObject *_args; +{ + PyObject *_res = NULL; + ListHandle _rv; + Handle h; + if (!PyArg_ParseTuple(_args, "O&", + ResObj_Convert, &h)) + return NULL; + _rv = as_List(h); + _res = Py_BuildValue("O&", + ListObj_New, _rv); + return _res; +} + static PyMethodDef List_methods[] = { {"LNew", (PyCFunction)List_LNew, 1, "(Rect rView, Rect dataBounds, Point cSize, short theProc, WindowPtr theWindow, Boolean drawIt, Boolean hasGrow, Boolean scrollHoriz, Boolean scrollVert) -> (ListHandle _rv)"}, + {"as_List", (PyCFunction)List_as_List, 1, + "(Handle h) -> (ListHandle _rv)"}, {NULL, NULL, 0} }; diff --git a/Mac/Modules/list/listsupport.py b/Mac/Modules/list/listsupport.py index 686875d..4fd7d7e 100644 --- a/Mac/Modules/list/listsupport.py +++ b/Mac/Modules/list/listsupport.py @@ -27,10 +27,13 @@ VarOutBufferShortsize = VarHeapOutputBufferType('char', 'short', 's') # (buf, &l InBufferShortsize = VarInputBufferType('char', 'short', 's') # (buf, len) RgnHandle = OpaqueByValueType("RgnHandle", "ResObj") - +Handle = OpaqueByValueType("Handle", "ResObj") includestuff = includestuff + """ #include <%s>""" % MACHEADERFILE + """ + +#define as_List(x) ((ListHandle)x) +#define as_Resource(lh) ((Handle)lh) """ class ListMethodGenerator(MethodGenerator): @@ -93,7 +96,7 @@ class MyObjectDefinition(GlobalObjectDefinition): def outputSetattr(self): Output(setattrCode) - + # From here on it's basically all boiler plate... # Create the generator groups and link them @@ -110,6 +113,13 @@ functions = [] methods = [] execfile(INPUTFILE) +# Function to convert any handle to a list and vv. +f = Function(ListHandle, 'as_List', (Handle, 'h', InMode)) +functions.append(f) + +f = Method(Handle, 'as_Resource', (ListHandle, 'lh', InMode)) +methods.append(f) + # add the populated lists to the generator groups # (in a different wordl the scan program would generate this) for f in functions: module.add(f) diff --git a/Mac/Modules/menu/Menumodule.c b/Mac/Modules/menu/Menumodule.c index 52308b7..e40ace7 100644 --- a/Mac/Modules/menu/Menumodule.c +++ b/Mac/Modules/menu/Menumodule.c @@ -48,6 +48,7 @@ extern PyObject *WinObj_WhichWindow(WindowPtr); #define resNotFound -192 /* Can't include because of Python's "errors.h" */ #define as_Menu(h) ((MenuHandle)h) +#define as_Resource(h) ((Handle)h) static PyObject *Menu_Error; @@ -1123,9 +1124,13 @@ static PyObject *MenuObj_as_Resource(_self, _args) PyObject *_args; { PyObject *_res = NULL; - - return ResObj_New((Handle)_self->ob_itself); - + Handle _rv; + if (!PyArg_ParseTuple(_args, "")) + return NULL; + _rv = as_Resource(_self->ob_itself); + _res = Py_BuildValue("O&", + ResObj_New, _rv); + return _res; } static PyObject *MenuObj_AppendMenu(_self, _args) @@ -1291,7 +1296,7 @@ static PyMethodDef MenuObj_methods[] = { {"IsMenuItemIconEnabled", (PyCFunction)MenuObj_IsMenuItemIconEnabled, 1, "(UInt16 item) -> (Boolean _rv)"}, {"as_Resource", (PyCFunction)MenuObj_as_Resource, 1, - "Return this Menu as a Resource"}, + "() -> (Handle _rv)"}, {"AppendMenu", (PyCFunction)MenuObj_AppendMenu, 1, "(Str255 data) -> None"}, {"InsertMenu", (PyCFunction)MenuObj_InsertMenu, 1, diff --git a/Mac/Modules/menu/menuedit.py b/Mac/Modules/menu/menuedit.py index 8e7d12b..5409663 100644 --- a/Mac/Modules/menu/menuedit.py +++ b/Mac/Modules/menu/menuedit.py @@ -3,17 +3,10 @@ f = Function(void, 'OpenDeskAcc', ) functions.append(f) -f = Function(MenuHandle, 'as_Menu', - (Handle, 'h', InMode)) +f = Function(MenuHandle, 'as_Menu', (Handle, 'h', InMode)) functions.append(f) -as_resource_body = """ -return ResObj_New((Handle)_self->ob_itself); -""" - -f = ManualGenerator("as_Resource", as_resource_body) -f.docstring = lambda : "Return this Menu as a Resource" - +f = Method(Handle, 'as_Resource', (MenuHandle, 'h', InMode)) methods.append(f) # The following have "Mac" prepended to their names in the include file diff --git a/Mac/Modules/menu/menusupport.py b/Mac/Modules/menu/menusupport.py index 6424ed9..b706a36 100644 --- a/Mac/Modules/menu/menusupport.py +++ b/Mac/Modules/menu/menusupport.py @@ -24,6 +24,7 @@ from macsupport import * MenuHandle = OpaqueByValueType(OBJECTTYPE, OBJECTPREFIX) MenuRef = MenuHandle +Handle = OpaqueByValueType("Handle", "ResObj") unsigned_char = Type('unsigned char', 'b') @@ -34,6 +35,7 @@ includestuff = includestuff + """ #define resNotFound -192 /* Can't include because of Python's "errors.h" */ #define as_Menu(h) ((MenuHandle)h) +#define as_Resource(h) ((Handle)h) """ class MyObjectDefinition(GlobalObjectDefinition): diff --git a/Mac/Modules/te/TEmodule.c b/Mac/Modules/te/TEmodule.c index 5d5e05a..5b65020 100644 --- a/Mac/Modules/te/TEmodule.c +++ b/Mac/Modules/te/TEmodule.c @@ -44,6 +44,9 @@ extern PyObject *WinObj_WhichWindow(WindowPtr); #include +#define as_TE(h) ((TEHandle)h) +#define as_Handle(teh) ((Handle)teh) + /* Exported by Qdmodule.c: */ extern PyObject *QdRGB_New(RGBColor *); extern int QdRGB_Convert(PyObject *, RGBColor *); @@ -740,6 +743,20 @@ static PyObject *TEObj_TEGetHiliteRgn(_self, _args) return _res; } +static PyObject *TEObj_as_Handle(_self, _args) + TEObject *_self; + PyObject *_args; +{ + PyObject *_res = NULL; + Handle _rv; + if (!PyArg_ParseTuple(_args, "")) + return NULL; + _rv = as_Handle(_self->ob_itself); + _res = Py_BuildValue("O&", + ResObj_New, _rv); + return _res; +} + static PyMethodDef TEObj_methods[] = { {"TESetText", (PyCFunction)TEObj_TESetText, 1, "(Buffer text) -> None"}, @@ -813,6 +830,8 @@ static PyMethodDef TEObj_methods[] = { "(short feature, short action) -> (short _rv)"}, {"TEGetHiliteRgn", (PyCFunction)TEObj_TEGetHiliteRgn, 1, "(RgnHandle region) -> None"}, + {"as_Handle", (PyCFunction)TEObj_as_Handle, 1, + "() -> (Handle _rv)"}, {NULL, NULL, 0} }; @@ -1029,6 +1048,22 @@ static PyObject *TE_TEToScrap(_self, _args) return _res; } +static PyObject *TE_as_TE(_self, _args) + PyObject *_self; + PyObject *_args; +{ + PyObject *_res = NULL; + TEHandle _rv; + Handle h; + if (!PyArg_ParseTuple(_args, "O&", + ResObj_Convert, &h)) + return NULL; + _rv = as_TE(h); + _res = Py_BuildValue("O&", + TEObj_New, _rv); + return _res; +} + static PyMethodDef TE_methods[] = { {"TEScrapHandle", (PyCFunction)TE_TEScrapHandle, 1, "() -> (Handle _rv)"}, @@ -1046,6 +1081,8 @@ static PyMethodDef TE_methods[] = { "() -> None"}, {"TEToScrap", (PyCFunction)TE_TEToScrap, 1, "() -> None"}, + {"as_TE", (PyCFunction)TE_as_TE, 1, + "(Handle h) -> (TEHandle _rv)"}, {NULL, NULL, 0} }; diff --git a/Mac/Modules/te/tesupport.py b/Mac/Modules/te/tesupport.py index 7802ae9..b078649 100644 --- a/Mac/Modules/te/tesupport.py +++ b/Mac/Modules/te/tesupport.py @@ -23,7 +23,7 @@ from macsupport import * # Create the type objects TEHandle = OpaqueByValueType("TEHandle", "TEObj") CharsHandle = OpaqueByValueType("CharsHandle", "ResObj") -##Handle = OpaqueByValueType("Handle", "ResObj") +Handle = OpaqueByValueType("Handle", "ResObj") StScrpHandle = OpaqueByValueType("StScrpHandle", "ResObj") TEStyleHandle = OpaqueByValueType("TEStyleHandle", "ResObj") RgnHandle = OpaqueByValueType("RgnHandle", "ResObj") @@ -34,6 +34,9 @@ TextStyle_ptr = TextStyle includestuff = includestuff + """ #include <%s>""" % MACHEADERFILE + """ +#define as_TE(h) ((TEHandle)h) +#define as_Resource(teh) ((Handle)teh) + /* Exported by Qdmodule.c: */ extern PyObject *QdRGB_New(RGBColor *); extern int QdRGB_Convert(PyObject *, RGBColor *); @@ -143,6 +146,12 @@ functions = [] methods = [] execfile(INPUTFILE) +# Converter from/to handle +f = Function(TEHandle, 'as_TE', (Handle, 'h', InMode)) +functions.append(f) +f = Method(Handle, 'as_Resource', (TEHandle, 'teh', InMode)) +methods.append(f) + # add the populated lists to the generator groups # (in a different wordl the scan program would generate this) for f in functions: module.add(f) -- cgit v0.12