/Mac/Modules/res/resedit.py
http://unladen-swallow.googlecode.com/ · Python · 102 lines · 60 code · 10 blank · 32 comment · 0 complexity · 533b1cc73ee059d1be16b645fb4e7fe1 MD5 · raw file
- ##resource_body = """
- ##char *buf;
- ##int len;
- ##Handle h;
- ##
- ##if (!PyArg_ParseTuple(_args, "s#", &buf, &len))
- ## return NULL;
- ##h = NewHandle(len);
- ##if ( h == NULL ) {
- ## PyErr_NoMemory();
- ## return NULL;
- ##}
- ##HLock(h);
- ##memcpy(*h, buf, len);
- ##HUnlock(h);
- ##_res = ResObj_New(h);
- ##return _res;
- ##"""
- ##
- ##f = ManualGenerator("Resource", resource_body)
- ##f.docstring = lambda: """Convert a string to a resource object.
- ##
- ##The created resource object is actually just a handle,
- ##apply AddResource() to write it to a resource file.
- ##See also the Handle() docstring.
- ##"""
- ##functions.append(f)
- handle_body = """
- char *buf;
- int len;
- Handle h;
- ResourceObject *rv;
- if (!PyArg_ParseTuple(_args, "s#", &buf, &len))
- return NULL;
- h = NewHandle(len);
- if ( h == NULL ) {
- PyErr_NoMemory();
- return NULL;
- }
- HLock(h);
- memcpy(*h, buf, len);
- HUnlock(h);
- rv = (ResourceObject *)ResObj_New(h);
- rv->ob_freeit = PyMac_AutoDisposeHandle;
- _res = (PyObject *)rv;
- return _res;
- """
- f = ManualGenerator("Handle", handle_body)
- f.docstring = lambda: """Convert a string to a Handle object.
- Resource() and Handle() are very similar, but objects created with Handle() are
- by default automatically DisposeHandle()d upon object cleanup. Use AutoDispose()
- to change this.
- """
- functions.append(f)
- # Convert resources to other things.
- as_xxx_body = """
- _res = %sObj_New((%sHandle)_self->ob_itself);
- return _res;
- """
- def genresconverter(longname, shortname):
- f = ManualGenerator("as_%s"%longname, as_xxx_body%(shortname, longname))
- docstring = "Return this resource/handle as a %s"%longname
- f.docstring = lambda docstring=docstring: docstring
- return f
- resmethods.append(genresconverter("Control", "Ctl"))
- resmethods.append(genresconverter("Menu", "Menu"))
- # The definition of this one is MacLoadResource, so we do it by hand...
- f = ResMethod(void, 'LoadResource',
- (Handle, 'theResource', InMode),
- )
- resmethods.append(f)
- #
- # A method to set the auto-dispose flag
- #
- AutoDispose_body = """
- int onoff, old = 0;
- if (!PyArg_ParseTuple(_args, "i", &onoff))
- return NULL;
- if ( _self->ob_freeit )
- old = 1;
- if ( onoff )
- _self->ob_freeit = PyMac_AutoDisposeHandle;
- else
- _self->ob_freeit = NULL;
- _res = Py_BuildValue("i", old);
- return _res;
- """
- f = ManualGenerator("AutoDispose", AutoDispose_body)
- f.docstring = lambda: "(int)->int. Automatically DisposeHandle the object on Python object cleanup"
- resmethods.append(f)