]> granicus.if.org Git - python/commitdiff
Unified handle-conversion scheme to
authorJack Jansen <jack.jansen@cwi.nl>
Thu, 23 Dec 1999 14:32:06 +0000 (14:32 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Thu, 23 Dec 1999 14:32:06 +0000 (14:32 +0000)
  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
Mac/Modules/ctl/ctledit.py
Mac/Modules/ctl/ctlsupport.py
Mac/Modules/list/Listmodule.c
Mac/Modules/list/listsupport.py
Mac/Modules/menu/Menumodule.c
Mac/Modules/menu/menuedit.py
Mac/Modules/menu/menusupport.py
Mac/Modules/te/TEmodule.c
Mac/Modules/te/tesupport.py

index d1deee8684b2f9c035b69fee847b593dd7e0ef5d..3648a554d5cfc5ec11355879e7686a4476c88524 100644 (file)
@@ -45,6 +45,7 @@ extern PyObject *WinObj_WhichWindow(WindowPtr);
 #include <Controls.h>
 
 #define as_Control(h) ((ControlHandle)h)
+#define as_Resource(ctl) ((Handle)ctl)
 
 #define resNotFound -192 /* Can't include <Errors.h> 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,
index 97534e2bdbd4415ef4000722363c8bbd91cfbb48..ea433e5802d28b0d12cd00f7dbbce8bd3d9122c2 100644 (file)
@@ -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 = """
index 4a4620fcb421846302c6e8812080a4a5626ec58c..8ac9d5c543168dc63e3e4c2e4ccc653bee14b7de 100644 (file)
@@ -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 <Errors.h> because of Python's "errors.h" */
 
index 5d934bf45018aee27dcaa24b48c946c9602003df..c9091e6b35504ff35110c6f78e8a01c70ae77973 100644 (file)
@@ -44,6 +44,9 @@ extern PyObject *WinObj_WhichWindow(WindowPtr);
 
 #include <Lists.h>
 
+#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}
 };
 
index 686875d26d655f523807a73f3bcb3ec2f1bad9e4..4fd7d7e8c83f4a7b9b233058906678607072bafe 100644 (file)
@@ -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)
index 52308b70ce4de09d7ffcb9e6fc559a9f9d7b4862..e40ace748064c2cf619217ff749d296cb6bdc08e 100644 (file)
@@ -48,6 +48,7 @@ extern PyObject *WinObj_WhichWindow(WindowPtr);
 #define resNotFound -192 /* Can't include <Errors.h> 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,
index 8e7d12b4186630f66874c13a39322fabde08cc05..5409663eba0a8e5ec888cf86f2948bc3209a5908 100644 (file)
@@ -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
index 6424ed9a9375b27b2543d9b50aa2caf3b9bf7c91..b706a36e94d94b7f54855674ca5b971f43aa6164 100644 (file)
@@ -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 <Errors.h> because of Python's "errors.h" */
 
 #define as_Menu(h) ((MenuHandle)h)
+#define as_Resource(h) ((Handle)h)
 """
 
 class MyObjectDefinition(GlobalObjectDefinition):
index 5d5e05a76e43cd9045283f9316d1807ee0fea8a6..5b6502031f88fda5548b53bbd379260d87c0fc05 100644 (file)
@@ -44,6 +44,9 @@ extern PyObject *WinObj_WhichWindow(WindowPtr);
 
 #include <TextEdit.h>
 
+#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}
 };
 
index 7802ae9d5eb5d9c80e1aab29b5107141f353af97..b078649f2e46d521b19569c62915a84504fbf9fe 100644 (file)
@@ -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)