| 1 | n/a | ##resource_body = """ |
|---|
| 2 | n/a | ##char *buf; |
|---|
| 3 | n/a | ##int len; |
|---|
| 4 | n/a | ##Handle h; |
|---|
| 5 | n/a | ## |
|---|
| 6 | n/a | ##if (!PyArg_ParseTuple(_args, "s#", &buf, &len)) |
|---|
| 7 | n/a | ## return NULL; |
|---|
| 8 | n/a | ##h = NewHandle(len); |
|---|
| 9 | n/a | ##if ( h == NULL ) { |
|---|
| 10 | n/a | ## PyErr_NoMemory(); |
|---|
| 11 | n/a | ## return NULL; |
|---|
| 12 | n/a | ##} |
|---|
| 13 | n/a | ##HLock(h); |
|---|
| 14 | n/a | ##memcpy(*h, buf, len); |
|---|
| 15 | n/a | ##HUnlock(h); |
|---|
| 16 | n/a | ##_res = ResObj_New(h); |
|---|
| 17 | n/a | ##return _res; |
|---|
| 18 | n/a | ##""" |
|---|
| 19 | n/a | ## |
|---|
| 20 | n/a | ##f = ManualGenerator("Resource", resource_body) |
|---|
| 21 | n/a | ##f.docstring = lambda: """Convert a string to a resource object. |
|---|
| 22 | n/a | ## |
|---|
| 23 | n/a | ##The created resource object is actually just a handle, |
|---|
| 24 | n/a | ##apply AddResource() to write it to a resource file. |
|---|
| 25 | n/a | ##See also the Handle() docstring. |
|---|
| 26 | n/a | ##""" |
|---|
| 27 | n/a | ##functions.append(f) |
|---|
| 28 | n/a | |
|---|
| 29 | n/a | handle_body = """ |
|---|
| 30 | n/a | char *buf; |
|---|
| 31 | n/a | int len; |
|---|
| 32 | n/a | Handle h; |
|---|
| 33 | n/a | ResourceObject *rv; |
|---|
| 34 | n/a | |
|---|
| 35 | n/a | if (!PyArg_ParseTuple(_args, "s#", &buf, &len)) |
|---|
| 36 | n/a | return NULL; |
|---|
| 37 | n/a | h = NewHandle(len); |
|---|
| 38 | n/a | if ( h == NULL ) { |
|---|
| 39 | n/a | PyErr_NoMemory(); |
|---|
| 40 | n/a | return NULL; |
|---|
| 41 | n/a | } |
|---|
| 42 | n/a | HLock(h); |
|---|
| 43 | n/a | memcpy(*h, buf, len); |
|---|
| 44 | n/a | HUnlock(h); |
|---|
| 45 | n/a | rv = (ResourceObject *)ResObj_New(h); |
|---|
| 46 | n/a | rv->ob_freeit = PyMac_AutoDisposeHandle; |
|---|
| 47 | n/a | _res = (PyObject *)rv; |
|---|
| 48 | n/a | return _res; |
|---|
| 49 | n/a | """ |
|---|
| 50 | n/a | |
|---|
| 51 | n/a | f = ManualGenerator("Handle", handle_body) |
|---|
| 52 | n/a | f.docstring = lambda: """Convert a string to a Handle object. |
|---|
| 53 | n/a | |
|---|
| 54 | n/a | Resource() and Handle() are very similar, but objects created with Handle() are |
|---|
| 55 | n/a | by default automatically DisposeHandle()d upon object cleanup. Use AutoDispose() |
|---|
| 56 | n/a | to change this. |
|---|
| 57 | n/a | """ |
|---|
| 58 | n/a | functions.append(f) |
|---|
| 59 | n/a | |
|---|
| 60 | n/a | # Convert resources to other things. |
|---|
| 61 | n/a | |
|---|
| 62 | n/a | as_xxx_body = """ |
|---|
| 63 | n/a | _res = %sObj_New((%sHandle)_self->ob_itself); |
|---|
| 64 | n/a | return _res; |
|---|
| 65 | n/a | """ |
|---|
| 66 | n/a | |
|---|
| 67 | n/a | def genresconverter(longname, shortname): |
|---|
| 68 | n/a | |
|---|
| 69 | n/a | f = ManualGenerator("as_%s"%longname, as_xxx_body%(shortname, longname)) |
|---|
| 70 | n/a | docstring = "Return this resource/handle as a %s"%longname |
|---|
| 71 | n/a | f.docstring = lambda docstring=docstring: docstring |
|---|
| 72 | n/a | return f |
|---|
| 73 | n/a | |
|---|
| 74 | n/a | resmethods.append(genresconverter("Control", "Ctl")) |
|---|
| 75 | n/a | resmethods.append(genresconverter("Menu", "Menu")) |
|---|
| 76 | n/a | |
|---|
| 77 | n/a | # The definition of this one is MacLoadResource, so we do it by hand... |
|---|
| 78 | n/a | |
|---|
| 79 | n/a | f = ResMethod(void, 'LoadResource', |
|---|
| 80 | n/a | (Handle, 'theResource', InMode), |
|---|
| 81 | n/a | ) |
|---|
| 82 | n/a | resmethods.append(f) |
|---|
| 83 | n/a | |
|---|
| 84 | n/a | # |
|---|
| 85 | n/a | # A method to set the auto-dispose flag |
|---|
| 86 | n/a | # |
|---|
| 87 | n/a | AutoDispose_body = """ |
|---|
| 88 | n/a | int onoff, old = 0; |
|---|
| 89 | n/a | if (!PyArg_ParseTuple(_args, "i", &onoff)) |
|---|
| 90 | n/a | return NULL; |
|---|
| 91 | n/a | if ( _self->ob_freeit ) |
|---|
| 92 | n/a | old = 1; |
|---|
| 93 | n/a | if ( onoff ) |
|---|
| 94 | n/a | _self->ob_freeit = PyMac_AutoDisposeHandle; |
|---|
| 95 | n/a | else |
|---|
| 96 | n/a | _self->ob_freeit = NULL; |
|---|
| 97 | n/a | _res = Py_BuildValue("i", old); |
|---|
| 98 | n/a | return _res; |
|---|
| 99 | n/a | """ |
|---|
| 100 | n/a | f = ManualGenerator("AutoDispose", AutoDispose_body) |
|---|
| 101 | n/a | f.docstring = lambda: "(int)->int. Automatically DisposeHandle the object on Python object cleanup" |
|---|
| 102 | n/a | resmethods.append(f) |
|---|