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