Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/Mac/Modules/Nav.c

    r2 r391  
    4545static pascal void
    4646my_eventProc(NavEventCallbackMessage callBackSelector,
    47                         NavCBRecPtr callBackParms,
    48                         NavCallBackUserData callbackUD)
    49 {
    50         PyObject *dict = (PyObject *)callbackUD;
    51         PyObject *pyfunc;
    52         PyObject *rv;
    53        
    54         if (!dict) return;
    55         if ( (pyfunc = PyDict_GetItemString(dict, "eventProc")) == NULL ) {
    56                 PyErr_Print();
    57                 return;
    58         }
    59         if ( pyfunc == Py_None ) {
    60                 return;
    61         }
    62         rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
    63                         (void *)callBackParms, sizeof(NavCBRec));
    64         if ( rv )
    65                 Py_DECREF(rv);
    66         else {
    67                 PySys_WriteStderr("Nav: exception in eventProc callback\n");
    68                 PyErr_Print();
    69         }
     47                        NavCBRecPtr callBackParms,
     48                        NavCallBackUserData callbackUD)
     49{
     50    PyObject *dict = (PyObject *)callbackUD;
     51    PyObject *pyfunc;
     52    PyObject *rv;
     53
     54    if (!dict) return;
     55    if ( (pyfunc = PyDict_GetItemString(dict, "eventProc")) == NULL ) {
     56        PyErr_Print();
     57        return;
     58    }
     59    if ( pyfunc == Py_None ) {
     60        return;
     61    }
     62    rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
     63                    (void *)callBackParms, sizeof(NavCBRec));
     64    if ( rv )
     65        Py_DECREF(rv);
     66    else {
     67        PySys_WriteStderr("Nav: exception in eventProc callback\n");
     68        PyErr_Print();
     69    }
    7070}
    7171
    7272static pascal Boolean
    7373my_previewProc(NavCBRecPtr callBackParms,
    74                            NavCallBackUserData callbackUD)
    75 {
    76         PyObject *dict = (PyObject *)callbackUD;
    77         PyObject *pyfunc;
    78         PyObject *rv;
    79         Boolean c_rv = false;
    80        
    81         if (!dict) return false;
    82         if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
    83                 PyErr_Print();
    84                 return false;
    85         }
    86         rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
    87         if ( rv ) {
    88                 c_rv = PyObject_IsTrue(rv);
    89                 Py_DECREF(rv);
    90         } else {
    91                 PySys_WriteStderr("Nav: exception in previewProc callback\n");
    92                 PyErr_Print();
    93         }
    94         return c_rv;
     74                           NavCallBackUserData callbackUD)
     75{
     76    PyObject *dict = (PyObject *)callbackUD;
     77    PyObject *pyfunc;
     78    PyObject *rv;
     79    Boolean c_rv = false;
     80
     81    if (!dict) return false;
     82    if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
     83        PyErr_Print();
     84        return false;
     85    }
     86    rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
     87    if ( rv ) {
     88        c_rv = PyObject_IsTrue(rv);
     89        Py_DECREF(rv);
     90    } else {
     91        PySys_WriteStderr("Nav: exception in previewProc callback\n");
     92        PyErr_Print();
     93    }
     94    return c_rv;
    9595}
    9696
    9797static pascal Boolean
    9898my_filterProc(AEDesc *theItem, void *info,
    99                           NavCallBackUserData callbackUD,
    100                           NavFilterModes filterMode)
    101 {
    102         PyObject *dict = (PyObject *)callbackUD;
    103         PyObject *pyfunc;
    104         PyObject *rv;
    105         Boolean c_rv = false;
    106        
    107         if (!dict) return false;
    108         if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
    109                 PyErr_Print();
    110                 return false;
    111         }
    112         rv = PyObject_CallFunction(pyfunc, "O&s#h",
    113                 AEDesc_NewBorrowed, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
    114         if ( rv ) {
    115                 c_rv = PyObject_IsTrue(rv);
    116                 Py_DECREF(rv);
    117         } else {
    118                 PySys_WriteStderr("Nav: exception in filterProc callback\n");
    119                 PyErr_Print();
    120         }
    121         return c_rv;
     99                          NavCallBackUserData callbackUD,
     100                          NavFilterModes filterMode)
     101{
     102    PyObject *dict = (PyObject *)callbackUD;
     103    PyObject *pyfunc;
     104    PyObject *rv;
     105    Boolean c_rv = false;
     106
     107    if (!dict) return false;
     108    if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
     109        PyErr_Print();
     110        return false;
     111    }
     112    rv = PyObject_CallFunction(pyfunc, "O&s#h",
     113        AEDesc_NewBorrowed, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
     114    if ( rv ) {
     115        c_rv = PyObject_IsTrue(rv);
     116        Py_DECREF(rv);
     117    } else {
     118        PySys_WriteStderr("Nav: exception in filterProc callback\n");
     119        PyErr_Print();
     120    }
     121    return c_rv;
    122122}
    123123
     
    125125static int
    126126filldialogoptions(PyObject *d,
    127                 AEDesc **defaultLocationP,
    128                 NavDialogOptions *opt,
    129                 NavEventUPP *eventProcP,
    130                 NavPreviewUPP *previewProcP,
    131                 NavObjectFilterUPP *filterProcP,
    132                 NavTypeListHandle *typeListP,
    133                 OSType *fileTypeP,
    134                 OSType *fileCreatorP)
    135 {
    136         Py_ssize_t pos = 0;
    137         PyObject *key, *value;
    138         char *keystr;
    139         AEDesc *defaultLocation_storage;
    140        
    141         NavGetDefaultDialogOptions(opt);
    142 
    143         while ( PyDict_Next(d, &pos, &key, &value) ) {
    144                 if ( !key || !value || !PyString_Check(key) ) {
    145                         PyErr_SetString(ErrorObject, "DialogOption has non-string key");
    146                         return 0;
    147                 }
    148                 keystr = PyString_AsString(key);
    149                 if( strcmp(keystr, "defaultLocation") == 0 ) {
    150                         if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
    151                                 PyErr_NoMemory();
    152                                 return 0;
    153                         }
    154                         if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
    155                                 PyMem_DEL(defaultLocation_storage);
    156                                 return 0;
    157                         }
    158                         *defaultLocationP = defaultLocation_storage;
    159                 } else if( strcmp(keystr, "version") == 0 ) {
    160                         if ( !PyArg_Parse(value, "H", &opt->version) )
    161                                 return 0;
    162                 } else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
    163                         if ( !PyArg_Parse(value, "k", &opt->dialogOptionFlags) )
    164                                 return 0;
    165                 } else if( strcmp(keystr, "location") == 0 ) {
    166                         if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
    167                                 return 0;
    168                 } else if( strcmp(keystr, "clientName") == 0 ) {
    169                         if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
    170                                 return 0;
    171                 } else if( strcmp(keystr, "windowTitle") == 0 ) {
    172                         if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
    173                                 return 0;
    174                 } else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
    175                         if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
    176                                 return 0;
    177                 } else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
    178                         if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
    179                                 return 0;
    180                 } else if( strcmp(keystr, "savedFileName") == 0 ) {
    181                         if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
    182                                 return 0;
    183                 } else if( strcmp(keystr, "message") == 0 ) {
    184                         if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
    185                                 return 0;
    186                 } else if( strcmp(keystr, "preferenceKey") == 0 ) {
    187                         if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
    188                                 return 0;
    189                 } else if( strcmp(keystr, "popupExtension") == 0 ) {
    190                         if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
    191                                 return 0;
    192                 } else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) {
    193                         *eventProcP = my_eventProcUPP;
    194                 } else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) {
    195                         *previewProcP = my_previewProcUPP;
    196                 } else if( filterProcP && strcmp(keystr, "filterProc") == 0 ) {
    197                         *filterProcP = my_filterProcUPP;
    198                 } else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
    199                         if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
    200                                 return 0;
    201                 } else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
    202                         if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
    203                                 return 0;
    204                 } else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
    205                         if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
    206                                 return 0;
    207                 } else {
    208                         PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
    209                         return 0;
    210                 }
    211         }
    212         return 1;
     127                AEDesc **defaultLocationP,
     128                NavDialogOptions *opt,
     129                NavEventUPP *eventProcP,
     130                NavPreviewUPP *previewProcP,
     131                NavObjectFilterUPP *filterProcP,
     132                NavTypeListHandle *typeListP,
     133                OSType *fileTypeP,
     134                OSType *fileCreatorP)
     135{
     136    Py_ssize_t pos = 0;
     137    PyObject *key, *value;
     138    char *keystr;
     139    AEDesc *defaultLocation_storage;
     140
     141    NavGetDefaultDialogOptions(opt);
     142
     143    while ( PyDict_Next(d, &pos, &key, &value) ) {
     144        if ( !key || !value || !PyString_Check(key) ) {
     145            PyErr_SetString(ErrorObject, "DialogOption has non-string key");
     146            return 0;
     147        }
     148        keystr = PyString_AsString(key);
     149        if( strcmp(keystr, "defaultLocation") == 0 ) {
     150            if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
     151                PyErr_NoMemory();
     152                return 0;
     153            }
     154            if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
     155                PyMem_DEL(defaultLocation_storage);
     156                return 0;
     157            }
     158            *defaultLocationP = defaultLocation_storage;
     159        } else if( strcmp(keystr, "version") == 0 ) {
     160            if ( !PyArg_Parse(value, "H", &opt->version) )
     161                return 0;
     162        } else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
     163            if ( !PyArg_Parse(value, "k", &opt->dialogOptionFlags) )
     164                return 0;
     165        } else if( strcmp(keystr, "location") == 0 ) {
     166            if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
     167                return 0;
     168        } else if( strcmp(keystr, "clientName") == 0 ) {
     169            if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
     170                return 0;
     171        } else if( strcmp(keystr, "windowTitle") == 0 ) {
     172            if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
     173                return 0;
     174        } else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
     175            if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
     176                return 0;
     177        } else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
     178            if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
     179                return 0;
     180        } else if( strcmp(keystr, "savedFileName") == 0 ) {
     181            if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
     182                return 0;
     183        } else if( strcmp(keystr, "message") == 0 ) {
     184            if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
     185                return 0;
     186        } else if( strcmp(keystr, "preferenceKey") == 0 ) {
     187            if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
     188                return 0;
     189        } else if( strcmp(keystr, "popupExtension") == 0 ) {
     190            if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
     191                return 0;
     192        } else if( eventProcP && strcmp(keystr, "eventProc") == 0 ) {
     193            *eventProcP = my_eventProcUPP;
     194        } else if( previewProcP && strcmp(keystr, "previewProc") == 0 ) {
     195            *previewProcP = my_previewProcUPP;
     196        } else if( filterProcP && strcmp(keystr, "filterProc") == 0 ) {
     197            *filterProcP = my_filterProcUPP;
     198        } else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
     199            if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
     200                return 0;
     201        } else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
     202            if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
     203                return 0;
     204        } else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
     205            if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
     206                return 0;
     207        } else {
     208            PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
     209            return 0;
     210        }
     211    }
     212    return 1;
    213213}
    214214
     
    218218
    219219typedef struct {
    220         PyObject_HEAD
    221         NavReplyRecord itself;
     220    PyObject_HEAD
     221    NavReplyRecord itself;
    222222} navrrobject;
    223223
     
    235235nav_NavTranslateFile(navrrobject *self, PyObject *args)
    236236{
    237         NavTranslationOptions howToTranslate;
    238         OSErr err;
    239 
    240         if (!PyArg_ParseTuple(args, "k", &howToTranslate))
    241                 return NULL;
    242         err = NavTranslateFile(&self->itself, howToTranslate);
    243         if ( err ) {
    244                 PyErr_Mac(ErrorObject, err);
    245                 return NULL;
    246         }
    247         Py_INCREF(Py_None);
    248         return Py_None;
     237    NavTranslationOptions howToTranslate;
     238    OSErr err;
     239
     240    if (!PyArg_ParseTuple(args, "k", &howToTranslate))
     241        return NULL;
     242    err = NavTranslateFile(&self->itself, howToTranslate);
     243    if ( err ) {
     244        PyErr_Mac(ErrorObject, err);
     245        return NULL;
     246    }
     247    Py_INCREF(Py_None);
     248    return Py_None;
    249249}
    250250
     
    256256nav_NavCompleteSave(navrrobject *self, PyObject *args)
    257257{
    258         NavTranslationOptions howToTranslate;
    259         OSErr err;
    260 
    261         if (!PyArg_ParseTuple(args, "k", &howToTranslate))
    262                 return NULL;
    263         err = NavCompleteSave(&self->itself, howToTranslate);
    264         if ( err ) {
    265                 PyErr_Mac(ErrorObject, err);
    266                 return NULL;
    267         }
    268         Py_INCREF(Py_None);
    269         return Py_None;
     258    NavTranslationOptions howToTranslate;
     259    OSErr err;
     260
     261    if (!PyArg_ParseTuple(args, "k", &howToTranslate))
     262        return NULL;
     263    err = NavCompleteSave(&self->itself, howToTranslate);
     264    if ( err ) {
     265        PyErr_Mac(ErrorObject, err);
     266        return NULL;
     267    }
     268    Py_INCREF(Py_None);
     269    return Py_None;
    270270}
    271271
    272272
    273273static struct PyMethodDef navrr_methods[] = {
    274  {"NavTranslateFile",   (PyCFunction)nav_NavTranslateFile,      METH_VARARGS,   nav_NavTranslateFile__doc__},
    275  {"NavCompleteSave",    (PyCFunction)nav_NavCompleteSave,       METH_VARARGS,   nav_NavCompleteSave__doc__},
    276        
    277         {NULL,          NULL}           /* sentinel */
     274 {"NavTranslateFile",   (PyCFunction)nav_NavTranslateFile,      METH_VARARGS,   nav_NavTranslateFile__doc__},
     275 {"NavCompleteSave",    (PyCFunction)nav_NavCompleteSave,       METH_VARARGS,   nav_NavCompleteSave__doc__},
     276
     277    {NULL,              NULL}           /* sentinel */
    278278};
    279279
     
    284284newnavrrobject(NavReplyRecord *itself)
    285285{
    286         navrrobject *self;
    287        
    288         self = PyObject_NEW(navrrobject, &Navrrtype);
    289         if (self == NULL)
    290                 return NULL;
    291         self->itself = *itself;
    292         return self;
     286    navrrobject *self;
     287
     288    self = PyObject_NEW(navrrobject, &Navrrtype);
     289    if (self == NULL)
     290        return NULL;
     291    self->itself = *itself;
     292    return self;
    293293}
    294294
     
    297297navrr_dealloc(navrrobject *self)
    298298{
    299         NavDisposeReply(&self->itself);
    300         PyObject_DEL(self);
     299    NavDisposeReply(&self->itself);
     300    PyObject_DEL(self);
    301301}
    302302
     
    304304navrr_getattr(navrrobject *self, char *name)
    305305{
    306         FSRef fsr;
    307         FSSpec fss;
    308        
    309         if( strcmp(name, "__members__") == 0 )
    310                 return Py_BuildValue(
    311                                 "ssssssssss",
    312                                 "version", "validRecord", "replacing",
    313                         "isStationery", "translationNeeded",
    314                         "selection",
    315                         "selection_fsr",
    316                         "fileTranslation", "keyScript", "saveFileName");
    317 
    318         if( strcmp(name, "version") == 0 )
    319                 return Py_BuildValue("h", self->itself.version);
    320         if( strcmp(name, "validRecord") == 0 )
    321                 return Py_BuildValue("l", (long)self->itself.validRecord);
    322         if( strcmp(name, "replacing") == 0 )
    323                 return Py_BuildValue("l", (long)self->itself.replacing);
    324         if( strcmp(name, "isStationery") == 0 )
    325                 return Py_BuildValue("l", (long)self->itself.isStationery);
    326         if( strcmp(name, "translationNeeded") == 0 )
    327                 return Py_BuildValue("l", (long)self->itself.translationNeeded);
    328         if( strcmp(name, "selection") == 0 ) {
    329                 SInt32 i;
    330                 long count;
    331                 OSErr err;
    332                 PyObject *rv, *rvitem;
    333                 AEDesc desc;
    334                
    335                 if ((err=AECountItems(&self->itself.selection, &count))) {
    336                         PyErr_Mac(ErrorObject, err);
    337                         return NULL;
    338                 }
    339                 if ( (rv=PyList_New(count)) == NULL )
    340                         return NULL;
    341                 for(i=0; i<count; i++) {
    342                         desc.dataHandle = NULL;
    343                         if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc))) {
    344                                 Py_DECREF(rv);
    345                                 PyErr_Mac(ErrorObject, err);
    346                                 return NULL;
    347                         }
    348                         if ((err=AEGetDescData(&desc, &fss, sizeof(FSSpec)))) {
    349                                 Py_DECREF(rv);
    350                                 PyErr_Mac(ErrorObject, err);
    351                                 return NULL;
    352                         }
    353                         rvitem = PyMac_BuildFSSpec(&fss);
    354                         PyList_SetItem(rv, i, rvitem);
    355                         AEDisposeDesc(&desc);
    356                 }
    357                 return rv;
    358         }
    359         if( strcmp(name, "selection_fsr") == 0 ) {
    360                 SInt32 i;
    361                 long count;
    362                 OSErr err;
    363                 PyObject *rv, *rvitem;
    364                 AEDesc desc;
    365                
    366                 if ((err=AECountItems(&self->itself.selection, &count))) {
    367                         PyErr_Mac(ErrorObject, err);
    368                         return NULL;
    369                 }
    370                 if ( (rv=PyList_New(count)) == NULL )
    371                         return NULL;
    372                 for(i=0; i<count; i++) {
    373                         desc.dataHandle = NULL;
    374                         if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSRef, NULL, &desc))) {
    375                                 Py_DECREF(rv);
    376                                 PyErr_Mac(ErrorObject, err);
    377                                 return NULL;
    378                         }
    379                         if ((err=AEGetDescData(&desc, &fsr, sizeof(FSRef)))) {
    380                                 Py_DECREF(rv);
    381                                 PyErr_Mac(ErrorObject, err);
    382                                 return NULL;
    383                         }
    384                         rvitem = PyMac_BuildFSRef(&fsr);
    385                         PyList_SetItem(rv, i, rvitem);
    386                         AEDisposeDesc(&desc);
    387                 }
    388                 return rv;
    389         }
    390         if( strcmp(name, "fileTranslation") == 0 )
    391                 return ResObj_New((Handle)self->itself.fileTranslation);
    392         if( strcmp(name, "keyScript") == 0 )
    393                 return Py_BuildValue("h", (short)self->itself.keyScript);
    394         if( strcmp(name, "saveFileName") == 0 )
    395                 return Py_BuildValue("O&", CFStringRefObj_New, self->itself.saveFileName);
    396 
    397 
    398         return Py_FindMethod(navrr_methods, (PyObject *)self, name);
     306    FSRef fsr;
     307    FSSpec fss;
     308
     309    if( strcmp(name, "__members__") == 0 )
     310        return Py_BuildValue(
     311                        "ssssssssss",
     312                        "version", "validRecord", "replacing",
     313            "isStationery", "translationNeeded",
     314            "selection",
     315            "selection_fsr",
     316            "fileTranslation", "keyScript", "saveFileName");
     317
     318    if( strcmp(name, "version") == 0 )
     319        return Py_BuildValue("h", self->itself.version);
     320    if( strcmp(name, "validRecord") == 0 )
     321        return Py_BuildValue("l", (long)self->itself.validRecord);
     322    if( strcmp(name, "replacing") == 0 )
     323        return Py_BuildValue("l", (long)self->itself.replacing);
     324    if( strcmp(name, "isStationery") == 0 )
     325        return Py_BuildValue("l", (long)self->itself.isStationery);
     326    if( strcmp(name, "translationNeeded") == 0 )
     327        return Py_BuildValue("l", (long)self->itself.translationNeeded);
     328    if( strcmp(name, "selection") == 0 ) {
     329        SInt32 i;
     330        long count;
     331        OSErr err;
     332        PyObject *rv, *rvitem;
     333        AEDesc desc;
     334
     335        if ((err=AECountItems(&self->itself.selection, &count))) {
     336            PyErr_Mac(ErrorObject, err);
     337            return NULL;
     338        }
     339        if ( (rv=PyList_New(count)) == NULL )
     340            return NULL;
     341        for(i=0; i<count; i++) {
     342            desc.dataHandle = NULL;
     343            if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc))) {
     344                Py_DECREF(rv);
     345                PyErr_Mac(ErrorObject, err);
     346                return NULL;
     347            }
     348            if ((err=AEGetDescData(&desc, &fss, sizeof(FSSpec)))) {
     349                Py_DECREF(rv);
     350                PyErr_Mac(ErrorObject, err);
     351                return NULL;
     352            }
     353            rvitem = PyMac_BuildFSSpec(&fss);
     354            PyList_SetItem(rv, i, rvitem);
     355            AEDisposeDesc(&desc);
     356        }
     357        return rv;
     358    }
     359    if( strcmp(name, "selection_fsr") == 0 ) {
     360        SInt32 i;
     361        long count;
     362        OSErr err;
     363        PyObject *rv, *rvitem;
     364        AEDesc desc;
     365
     366        if ((err=AECountItems(&self->itself.selection, &count))) {
     367            PyErr_Mac(ErrorObject, err);
     368            return NULL;
     369        }
     370        if ( (rv=PyList_New(count)) == NULL )
     371            return NULL;
     372        for(i=0; i<count; i++) {
     373            desc.dataHandle = NULL;
     374            if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSRef, NULL, &desc))) {
     375                Py_DECREF(rv);
     376                PyErr_Mac(ErrorObject, err);
     377                return NULL;
     378            }
     379            if ((err=AEGetDescData(&desc, &fsr, sizeof(FSRef)))) {
     380                Py_DECREF(rv);
     381                PyErr_Mac(ErrorObject, err);
     382                return NULL;
     383            }
     384            rvitem = PyMac_BuildFSRef(&fsr);
     385            PyList_SetItem(rv, i, rvitem);
     386            AEDisposeDesc(&desc);
     387        }
     388        return rv;
     389    }
     390    if( strcmp(name, "fileTranslation") == 0 )
     391        return ResObj_New((Handle)self->itself.fileTranslation);
     392    if( strcmp(name, "keyScript") == 0 )
     393        return Py_BuildValue("h", (short)self->itself.keyScript);
     394    if( strcmp(name, "saveFileName") == 0 )
     395        return Py_BuildValue("O&", CFStringRefObj_New, self->itself.saveFileName);
     396
     397
     398    return Py_FindMethod(navrr_methods, (PyObject *)self, name);
    399399}
    400400
     
    402402navrr_setattr(navrrobject *self, char *name, PyObject *v)
    403403{
    404         /* Set attribute 'name' to value 'v'. v==NULL means delete */
    405        
    406         /* XXXX Add your own setattr code here */
    407         return -1;
    408 }
    409 
    410 static char Navrrtype__doc__[] = 
     404    /* Set attribute 'name' to value 'v'. v==NULL means delete */
     405
     406    /* XXXX Add your own setattr code here */
     407    return -1;
     408}
     409
     410static char Navrrtype__doc__[] =
    411411"Record containing result of a Nav file selection call. Use dir() for member names."
    412412;
    413413
    414414static PyTypeObject Navrrtype = {
    415         PyObject_HEAD_INIT(&PyType_Type)
    416         0,                              /*ob_size*/
    417         "Nav.NavReplyRecord",                   /*tp_name*/
    418         sizeof(navrrobject),            /*tp_basicsize*/
    419         0,                              /*tp_itemsize*/
    420         /* methods */
    421         (destructor)navrr_dealloc,      /*tp_dealloc*/
    422         (printfunc)0,           /*tp_print*/
    423         (getattrfunc)navrr_getattr,     /*tp_getattr*/
    424         (setattrfunc)navrr_setattr,     /*tp_setattr*/
    425         (cmpfunc)0,             /*tp_compare*/
    426         (reprfunc)0,            /*tp_repr*/
    427         0,                      /*tp_as_number*/
    428         0,              /*tp_as_sequence*/
    429         0,              /*tp_as_mapping*/
    430         (hashfunc)0,            /*tp_hash*/
    431         (ternaryfunc)0,         /*tp_call*/
    432         (reprfunc)0,            /*tp_str*/
    433 
    434         /* Space for future expansion */
    435         0L,0L,0L,0L,
    436         Navrrtype__doc__ /* Documentation string */
     415    PyObject_HEAD_INIT(&PyType_Type)
     416    0,                                  /*ob_size*/
     417    "Nav.NavReplyRecord",                       /*tp_name*/
     418    sizeof(navrrobject),                /*tp_basicsize*/
     419    0,                                  /*tp_itemsize*/
     420    /* methods */
     421    (destructor)navrr_dealloc,          /*tp_dealloc*/
     422    (printfunc)0,               /*tp_print*/
     423    (getattrfunc)navrr_getattr,         /*tp_getattr*/
     424    (setattrfunc)navrr_setattr,         /*tp_setattr*/
     425    (cmpfunc)0,                 /*tp_compare*/
     426    (reprfunc)0,                /*tp_repr*/
     427    0,                          /*tp_as_number*/
     428    0,                  /*tp_as_sequence*/
     429    0,                  /*tp_as_mapping*/
     430    (hashfunc)0,                /*tp_hash*/
     431    (ternaryfunc)0,             /*tp_call*/
     432    (reprfunc)0,                /*tp_str*/
     433
     434    /* Space for future expansion */
     435    0L,0L,0L,0L,
     436    Navrrtype__doc__ /* Documentation string */
    437437};
    438438
    439439/* End of code for NavReplyRecord objects */
    440                
     440
    441441/* ----------------------------------------------------- */
    442442
     
    448448nav_NavGetFile(PyObject *self, PyObject *args, PyObject *kw)
    449449{
    450         PyObject *dict;
    451         AEDesc  *defaultLocation = NULL;
    452         NavReplyRecord reply;
    453         NavDialogOptions dialogOptions;
    454         NavEventUPP eventProc = NULL;
    455         NavPreviewUPP previewProc = NULL;
    456         NavObjectFilterUPP filterProc = NULL;
    457         NavTypeListHandle typeList = NULL;
    458         OSErr err;
    459 
    460         if ( kw && PyObject_IsTrue(kw) ) {
    461                 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
    462                         return NULL;
    463                 dict = kw;
    464         } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
    465                 return NULL;
    466         if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
    467                 return NULL;
    468         err = NavGetFile(defaultLocation, &reply, &dialogOptions,
    469                         eventProc, previewProc, filterProc, typeList, (void *)dict);
    470         PyMem_DEL(defaultLocation);
    471         if ( err ) {
    472                 PyErr_Mac(ErrorObject, err);
    473                 return NULL;
    474         }
    475         return (PyObject *)newnavrrobject(&reply);
     450    PyObject *dict;
     451    AEDesc      *defaultLocation = NULL;
     452    NavReplyRecord reply;
     453    NavDialogOptions dialogOptions;
     454    NavEventUPP eventProc = NULL;
     455    NavPreviewUPP previewProc = NULL;
     456    NavObjectFilterUPP filterProc = NULL;
     457    NavTypeListHandle typeList = NULL;
     458    OSErr err;
     459
     460    if ( kw && PyObject_IsTrue(kw) ) {
     461        if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
     462            return NULL;
     463        dict = kw;
     464    } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
     465        return NULL;
     466    if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
     467        return NULL;
     468    err = NavGetFile(defaultLocation, &reply, &dialogOptions,
     469                    eventProc, previewProc, filterProc, typeList, (void *)dict);
     470    PyMem_DEL(defaultLocation);
     471    if ( err ) {
     472        PyErr_Mac(ErrorObject, err);
     473        return NULL;
     474    }
     475    return (PyObject *)newnavrrobject(&reply);
    476476}
    477477
     
    483483nav_NavPutFile(PyObject *self, PyObject *args, PyObject *kw)
    484484{
    485         PyObject *dict;
    486         AEDesc  *defaultLocation = NULL;
    487         NavReplyRecord reply;
    488         NavDialogOptions dialogOptions;
    489         NavEventUPP eventProc = NULL;
    490         OSType fileType;
    491         OSType fileCreator;
    492         OSErr err;
    493 
    494         if ( kw && PyObject_IsTrue(kw) ) {
    495                 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
    496                         return NULL;
    497                 dict = kw;
    498         } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
    499                 return NULL;
    500         if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
    501                 return NULL;
    502         err = NavPutFile(defaultLocation, &reply, &dialogOptions,
    503                         eventProc, fileType, fileCreator, (void *)dict);
    504         PyMem_DEL(defaultLocation);
    505         if ( err ) {
    506                 PyErr_Mac(ErrorObject, err);
    507                 return NULL;
    508         }
    509         return (PyObject *)newnavrrobject(&reply);
     485    PyObject *dict;
     486    AEDesc      *defaultLocation = NULL;
     487    NavReplyRecord reply;
     488    NavDialogOptions dialogOptions;
     489    NavEventUPP eventProc = NULL;
     490    OSType fileType;
     491    OSType fileCreator;
     492    OSErr err;
     493
     494    if ( kw && PyObject_IsTrue(kw) ) {
     495        if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
     496            return NULL;
     497        dict = kw;
     498    } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
     499        return NULL;
     500    if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
     501        return NULL;
     502    err = NavPutFile(defaultLocation, &reply, &dialogOptions,
     503                    eventProc, fileType, fileCreator, (void *)dict);
     504    PyMem_DEL(defaultLocation);
     505    if ( err ) {
     506        PyErr_Mac(ErrorObject, err);
     507        return NULL;
     508    }
     509    return (PyObject *)newnavrrobject(&reply);
    510510}
    511511
     
    518518nav_NavAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
    519519{
    520         PyObject *dict;
    521         NavDialogOptions dialogOptions;
    522         NavAskSaveChangesAction action;
    523         NavAskSaveChangesResult reply;
    524         NavEventUPP eventProc = NULL;
    525         OSErr err;
    526 
    527         if ( kw && PyObject_IsTrue(kw) ) {
    528                 if (!PyArg_ParseTuple(args, "k", &action))
    529                         return NULL;
    530                 dict = kw;
    531         } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
    532                 return NULL;
    533         if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
    534                 return NULL;
    535         err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
    536         if ( err ) {
    537                 PyErr_Mac(ErrorObject, err);
    538                 return NULL;
    539         }
    540         return Py_BuildValue("l", (long)reply);
     520    PyObject *dict;
     521    NavDialogOptions dialogOptions;
     522    NavAskSaveChangesAction action;
     523    NavAskSaveChangesResult reply;
     524    NavEventUPP eventProc = NULL;
     525    OSErr err;
     526
     527    if ( kw && PyObject_IsTrue(kw) ) {
     528        if (!PyArg_ParseTuple(args, "k", &action))
     529            return NULL;
     530        dict = kw;
     531    } else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
     532        return NULL;
     533    if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
     534        return NULL;
     535    err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
     536    if ( err ) {
     537        PyErr_Mac(ErrorObject, err);
     538        return NULL;
     539    }
     540    return Py_BuildValue("l", (long)reply);
    541541}
    542542
     
    548548nav_NavCustomAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
    549549{
    550         PyObject *dict;
    551         NavDialogOptions dialogOptions;
    552         NavAskSaveChangesResult reply;
    553         NavEventUPP eventProc = NULL;
    554         OSErr err;
    555 
    556         if ( kw && PyObject_IsTrue(kw) ) {
    557                 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
    558                         return NULL;
    559                 dict = kw;
    560         } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
    561                 return NULL;
    562         if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
    563                 return NULL;
    564         err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
    565         if ( err ) {
    566                 PyErr_Mac(ErrorObject, err);
    567                 return NULL;
    568         }
    569         return Py_BuildValue("l", (long)reply);
     550    PyObject *dict;
     551    NavDialogOptions dialogOptions;
     552    NavAskSaveChangesResult reply;
     553    NavEventUPP eventProc = NULL;
     554    OSErr err;
     555
     556    if ( kw && PyObject_IsTrue(kw) ) {
     557        if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
     558            return NULL;
     559        dict = kw;
     560    } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
     561        return NULL;
     562    if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
     563        return NULL;
     564    err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
     565    if ( err ) {
     566        PyErr_Mac(ErrorObject, err);
     567        return NULL;
     568    }
     569    return Py_BuildValue("l", (long)reply);
    570570}
    571571
     
    577577nav_NavAskDiscardChanges(PyObject *self, PyObject *args, PyObject *kw)
    578578{
    579         PyObject *dict;
    580         NavDialogOptions dialogOptions;
    581         NavAskSaveChangesResult reply;
    582         NavEventUPP eventProc = NULL;
    583         OSErr err;
    584 
    585         if ( kw && PyObject_IsTrue(kw) ) {
    586                 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
    587                         return NULL;
    588                 dict = kw;
    589         } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
    590                 return NULL;
    591         if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
    592                 return NULL;
    593         err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
    594         if ( err ) {
    595                 PyErr_Mac(ErrorObject, err);
    596                 return NULL;
    597         }
    598         return Py_BuildValue("l", (long)reply);
     579    PyObject *dict;
     580    NavDialogOptions dialogOptions;
     581    NavAskSaveChangesResult reply;
     582    NavEventUPP eventProc = NULL;
     583    OSErr err;
     584
     585    if ( kw && PyObject_IsTrue(kw) ) {
     586        if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
     587            return NULL;
     588        dict = kw;
     589    } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
     590        return NULL;
     591    if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
     592        return NULL;
     593    err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
     594    if ( err ) {
     595        PyErr_Mac(ErrorObject, err);
     596        return NULL;
     597    }
     598    return Py_BuildValue("l", (long)reply);
    599599}
    600600
     
    606606nav_NavChooseFile(PyObject *self, PyObject *args, PyObject *kw)
    607607{
    608         PyObject *dict;
    609         AEDesc  *defaultLocation = NULL;
    610         NavReplyRecord reply;
    611         NavDialogOptions dialogOptions;
    612         NavEventUPP eventProc = NULL;
    613         NavPreviewUPP previewProc = NULL;
    614         NavObjectFilterUPP filterProc = NULL;
    615         NavTypeListHandle typeList = NULL;
    616         OSErr err;
    617 
    618         if ( kw && PyObject_IsTrue(kw) ) {
    619                 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
    620                         return NULL;
    621                 dict = kw;
    622         } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
    623                 return NULL;
    624         if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
    625                 return NULL;
    626         err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
    627                         eventProc, previewProc, filterProc, typeList, (void *)dict);
    628         PyMem_DEL(defaultLocation);
    629         if ( err ) {
    630                 PyErr_Mac(ErrorObject, err);
    631                 return NULL;
    632         }
    633         return (PyObject *)newnavrrobject(&reply);
     608    PyObject *dict;
     609    AEDesc      *defaultLocation = NULL;
     610    NavReplyRecord reply;
     611    NavDialogOptions dialogOptions;
     612    NavEventUPP eventProc = NULL;
     613    NavPreviewUPP previewProc = NULL;
     614    NavObjectFilterUPP filterProc = NULL;
     615    NavTypeListHandle typeList = NULL;
     616    OSErr err;
     617
     618    if ( kw && PyObject_IsTrue(kw) ) {
     619        if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
     620            return NULL;
     621        dict = kw;
     622    } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
     623        return NULL;
     624    if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
     625        return NULL;
     626    err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
     627                    eventProc, previewProc, filterProc, typeList, (void *)dict);
     628    PyMem_DEL(defaultLocation);
     629    if ( err ) {
     630        PyErr_Mac(ErrorObject, err);
     631        return NULL;
     632    }
     633    return (PyObject *)newnavrrobject(&reply);
    634634}
    635635
     
    641641nav_NavChooseFolder(PyObject *self, PyObject *args, PyObject *kw)
    642642{
    643         PyObject *dict;
    644         AEDesc  *defaultLocation = NULL;
    645         NavReplyRecord reply;
    646         NavDialogOptions dialogOptions;
    647         NavEventUPP eventProc = NULL;
    648         NavObjectFilterUPP filterProc = NULL;
    649         OSErr err;
    650 
    651         if ( kw && PyObject_IsTrue(kw) ) {
    652                 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
    653                         return NULL;
    654                 dict = kw;
    655         } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
    656                 return NULL;
    657         if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
    658                 return NULL;
    659         err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
    660                         eventProc, filterProc, (void *)dict);
    661         PyMem_DEL(defaultLocation);
    662         if ( err ) {
    663                 PyErr_Mac(ErrorObject, err);
    664                 return NULL;
    665         }
    666         return (PyObject *)newnavrrobject(&reply);
     643    PyObject *dict;
     644    AEDesc      *defaultLocation = NULL;
     645    NavReplyRecord reply;
     646    NavDialogOptions dialogOptions;
     647    NavEventUPP eventProc = NULL;
     648    NavObjectFilterUPP filterProc = NULL;
     649    OSErr err;
     650
     651    if ( kw && PyObject_IsTrue(kw) ) {
     652        if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
     653            return NULL;
     654        dict = kw;
     655    } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
     656        return NULL;
     657    if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
     658        return NULL;
     659    err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
     660                    eventProc, filterProc, (void *)dict);
     661    PyMem_DEL(defaultLocation);
     662    if ( err ) {
     663        PyErr_Mac(ErrorObject, err);
     664        return NULL;
     665    }
     666    return (PyObject *)newnavrrobject(&reply);
    667667}
    668668
     
    674674nav_NavChooseVolume(PyObject *self, PyObject *args, PyObject *kw)
    675675{
    676         PyObject *dict;
    677         AEDesc  *defaultLocation = NULL;
    678         NavReplyRecord reply;
    679         NavDialogOptions dialogOptions;
    680         NavEventUPP eventProc = NULL;
    681         NavObjectFilterUPP filterProc = NULL;
    682         OSErr err;
    683 
    684         if ( kw && PyObject_IsTrue(kw) ) {
    685                 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
    686                         return NULL;
    687                 dict = kw;
    688         } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
    689                 return NULL;
    690         if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
    691                 return NULL;
    692         err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
    693                         eventProc, filterProc, (void *)dict);
    694         PyMem_DEL(defaultLocation);
    695         if ( err ) {
    696                 PyErr_Mac(ErrorObject, err);
    697                 return NULL;
    698         }
    699         return (PyObject *)newnavrrobject(&reply);
     676    PyObject *dict;
     677    AEDesc      *defaultLocation = NULL;
     678    NavReplyRecord reply;
     679    NavDialogOptions dialogOptions;
     680    NavEventUPP eventProc = NULL;
     681    NavObjectFilterUPP filterProc = NULL;
     682    OSErr err;
     683
     684    if ( kw && PyObject_IsTrue(kw) ) {
     685        if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
     686            return NULL;
     687        dict = kw;
     688    } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
     689        return NULL;
     690    if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
     691        return NULL;
     692    err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
     693                    eventProc, filterProc, (void *)dict);
     694    PyMem_DEL(defaultLocation);
     695    if ( err ) {
     696        PyErr_Mac(ErrorObject, err);
     697        return NULL;
     698    }
     699    return (PyObject *)newnavrrobject(&reply);
    700700}
    701701
     
    707707nav_NavChooseObject(PyObject *self, PyObject *args, PyObject *kw)
    708708{
    709         PyObject *dict;
    710         AEDesc  *defaultLocation = NULL;
    711         NavReplyRecord reply;
    712         NavDialogOptions dialogOptions;
    713         NavEventUPP eventProc = NULL;
    714         NavObjectFilterUPP filterProc = NULL;
    715         OSErr err;
    716 
    717         if ( kw && PyObject_IsTrue(kw) ) {
    718                 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
    719                         return NULL;
    720                 dict = kw;
    721         } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
    722                 return NULL;
    723         if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
    724                 return NULL;
    725         err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
    726                         eventProc, filterProc, (void *)dict);
    727         PyMem_DEL(defaultLocation);
    728         if ( err ) {
    729                 PyErr_Mac(ErrorObject, err);
    730                 return NULL;
    731         }
    732         return (PyObject *)newnavrrobject(&reply);
     709    PyObject *dict;
     710    AEDesc      *defaultLocation = NULL;
     711    NavReplyRecord reply;
     712    NavDialogOptions dialogOptions;
     713    NavEventUPP eventProc = NULL;
     714    NavObjectFilterUPP filterProc = NULL;
     715    OSErr err;
     716
     717    if ( kw && PyObject_IsTrue(kw) ) {
     718        if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
     719            return NULL;
     720        dict = kw;
     721    } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
     722        return NULL;
     723    if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
     724        return NULL;
     725    err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
     726                    eventProc, filterProc, (void *)dict);
     727    PyMem_DEL(defaultLocation);
     728    if ( err ) {
     729        PyErr_Mac(ErrorObject, err);
     730        return NULL;
     731    }
     732    return (PyObject *)newnavrrobject(&reply);
    733733}
    734734
     
    740740nav_NavNewFolder(PyObject *self, PyObject *args, PyObject *kw)
    741741{
    742         PyObject *dict;
    743         AEDesc  *defaultLocation = NULL;
    744         NavReplyRecord reply;
    745         NavDialogOptions dialogOptions;
    746         NavEventUPP eventProc = NULL;
    747         OSErr err;
    748 
    749         if ( kw && PyObject_IsTrue(kw) ) {
    750                 if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
    751                         return NULL;
    752                 dict = kw;
    753         } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
    754                 return NULL;
    755         if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
    756                 return NULL;
    757         err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
    758         PyMem_DEL(defaultLocation);
    759         if ( err ) {
    760                 PyErr_Mac(ErrorObject, err);
    761                 return NULL;
    762         }
    763         return (PyObject *)newnavrrobject(&reply);
     742    PyObject *dict;
     743    AEDesc      *defaultLocation = NULL;
     744    NavReplyRecord reply;
     745    NavDialogOptions dialogOptions;
     746    NavEventUPP eventProc = NULL;
     747    OSErr err;
     748
     749    if ( kw && PyObject_IsTrue(kw) ) {
     750        if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
     751            return NULL;
     752        dict = kw;
     753    } else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
     754        return NULL;
     755    if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
     756        return NULL;
     757    err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
     758    PyMem_DEL(defaultLocation);
     759    if ( err ) {
     760        PyErr_Mac(ErrorObject, err);
     761        return NULL;
     762    }
     763    return (PyObject *)newnavrrobject(&reply);
    764764}
    765765
     
    775775{
    776776
    777         if (!PyArg_ParseTuple(args, ""))
    778                 return NULL;
    779         Py_INCREF(Py_None);
    780         return Py_None;
     777    if (!PyArg_ParseTuple(args, ""))
     778        return NULL;
     779    Py_INCREF(Py_None);
     780    return Py_None;
    781781}
    782782#endif
     
    789789nav_NavServicesCanRun(PyObject *self, PyObject *args)
    790790{
    791         Boolean rv;
    792         if (!PyArg_ParseTuple(args, ""))
    793                 return NULL;
    794         rv = NavServicesCanRun();
    795         return Py_BuildValue("l", (long)rv);
     791    Boolean rv;
     792    if (!PyArg_ParseTuple(args, ""))
     793        return NULL;
     794    rv = NavServicesCanRun();
     795    return Py_BuildValue("l", (long)rv);
    796796}
    797797
     
    803803nav_NavServicesAvailable(PyObject *self, PyObject *args)
    804804{
    805         Boolean rv;
    806        
    807         if (!PyArg_ParseTuple(args, ""))
    808                 return NULL;
    809         rv = NavServicesAvailable();
    810         return Py_BuildValue("l", (long)rv);
     805    Boolean rv;
     806
     807    if (!PyArg_ParseTuple(args, ""))
     808        return NULL;
     809    rv = NavServicesAvailable();
     810    return Py_BuildValue("l", (long)rv);
    811811}
    812812/* XX */
     
    819819{
    820820
    821         if (!PyArg_ParseTuple(args, ""))
    822                 return NULL;
    823         NavLoad();
    824         Py_INCREF(Py_None);
    825         return Py_None;
     821    if (!PyArg_ParseTuple(args, ""))
     822        return NULL;
     823    NavLoad();
     824    Py_INCREF(Py_None);
     825    return Py_None;
    826826}
    827827
     
    834834{
    835835
    836         if (!PyArg_ParseTuple(args, ""))
    837                 return NULL;
    838         NavUnload();
    839         Py_INCREF(Py_None);
    840         return Py_None;
     836    if (!PyArg_ParseTuple(args, ""))
     837        return NULL;
     838    NavUnload();
     839    Py_INCREF(Py_None);
     840    return Py_None;
    841841}
    842842
     
    848848nav_NavLibraryVersion(PyObject *self, PyObject *args)
    849849{
    850         UInt32 rv;
    851        
    852         if (!PyArg_ParseTuple(args, ""))
    853                 return NULL;
    854         rv = NavLibraryVersion();
    855         return Py_BuildValue("l", (long)rv);
     850    UInt32 rv;
     851
     852    if (!PyArg_ParseTuple(args, ""))
     853        return NULL;
     854    rv = NavLibraryVersion();
     855    return Py_BuildValue("l", (long)rv);
    856856}
    857857
     
    863863nav_NavGetDefaultDialogOptions(PyObject *self, PyObject *args)
    864864{
    865         NavDialogOptions dialogOptions;
    866         OSErr err;
    867        
    868         err = NavGetDefaultDialogOptions(&dialogOptions);
    869         if ( err ) {
    870                 PyErr_Mac(ErrorObject, err);
    871                 return NULL;
    872         }
    873         return Py_BuildValue(
    874                         "{s:h,s:l,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&}",
    875                 "version", dialogOptions.version,
    876                 "dialogOptionFlags", dialogOptions.dialogOptionFlags,
    877                 "location", PyMac_BuildPoint, dialogOptions.location,
    878                 "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
    879                 "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
    880                 "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
    881                 "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
    882                 "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
    883                 "message", PyMac_BuildStr255, &dialogOptions.message,
    884                 "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey
    885                 ,"popupExtension", OptResObj_New, dialogOptions.popupExtension
    886                 );
     865    NavDialogOptions dialogOptions;
     866    OSErr err;
     867
     868    err = NavGetDefaultDialogOptions(&dialogOptions);
     869    if ( err ) {
     870        PyErr_Mac(ErrorObject, err);
     871        return NULL;
     872    }
     873    return Py_BuildValue(
     874                    "{s:h,s:l,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&}",
     875        "version", dialogOptions.version,
     876        "dialogOptionFlags", dialogOptions.dialogOptionFlags,
     877        "location", PyMac_BuildPoint, dialogOptions.location,
     878        "clientName", PyMac_BuildStr255, &dialogOptions.clientName,
     879        "windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
     880        "actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
     881        "cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
     882        "savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
     883        "message", PyMac_BuildStr255, &dialogOptions.message,
     884        "preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey
     885        ,"popupExtension", OptResObj_New, dialogOptions.popupExtension
     886        );
    887887}
    888888
     
    890890
    891891static struct PyMethodDef nav_methods[] = {
    892         {"NavGetFile",  (PyCFunction)nav_NavGetFile,    METH_VARARGS|METH_KEYWORDS,     nav_NavGetFile__doc__},
    893  {"NavPutFile", (PyCFunction)nav_NavPutFile,    METH_VARARGS|METH_KEYWORDS,     nav_NavPutFile__doc__},
    894  {"NavAskSaveChanges",  (PyCFunction)nav_NavAskSaveChanges,     METH_VARARGS|METH_KEYWORDS,     nav_NavAskSaveChanges__doc__},
    895  {"NavCustomAskSaveChanges",    (PyCFunction)nav_NavCustomAskSaveChanges,       METH_VARARGS|METH_KEYWORDS,     nav_NavCustomAskSaveChanges__doc__},
    896  {"NavAskDiscardChanges",       (PyCFunction)nav_NavAskDiscardChanges,  METH_VARARGS|METH_KEYWORDS,     nav_NavAskDiscardChanges__doc__},
    897  {"NavChooseFile",      (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS,     nav_NavChooseFile__doc__},
    898  {"NavChooseFolder",    (PyCFunction)nav_NavChooseFolder,       METH_VARARGS|METH_KEYWORDS,     nav_NavChooseFolder__doc__},
    899  {"NavChooseVolume",    (PyCFunction)nav_NavChooseVolume,       METH_VARARGS|METH_KEYWORDS,     nav_NavChooseVolume__doc__},
    900  {"NavChooseObject",    (PyCFunction)nav_NavChooseObject,       METH_VARARGS|METH_KEYWORDS,     nav_NavChooseObject__doc__},
    901  {"NavNewFolder",       (PyCFunction)nav_NavNewFolder,  METH_VARARGS|METH_KEYWORDS,     nav_NavNewFolder__doc__},
     892    {"NavGetFile",      (PyCFunction)nav_NavGetFile,    METH_VARARGS|METH_KEYWORDS,     nav_NavGetFile__doc__},
     893 {"NavPutFile", (PyCFunction)nav_NavPutFile,    METH_VARARGS|METH_KEYWORDS,     nav_NavPutFile__doc__},
     894 {"NavAskSaveChanges",  (PyCFunction)nav_NavAskSaveChanges,     METH_VARARGS|METH_KEYWORDS,     nav_NavAskSaveChanges__doc__},
     895 {"NavCustomAskSaveChanges",    (PyCFunction)nav_NavCustomAskSaveChanges,       METH_VARARGS|METH_KEYWORDS,     nav_NavCustomAskSaveChanges__doc__},
     896 {"NavAskDiscardChanges",       (PyCFunction)nav_NavAskDiscardChanges,  METH_VARARGS|METH_KEYWORDS,     nav_NavAskDiscardChanges__doc__},
     897 {"NavChooseFile",      (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS,     nav_NavChooseFile__doc__},
     898 {"NavChooseFolder",    (PyCFunction)nav_NavChooseFolder,       METH_VARARGS|METH_KEYWORDS,     nav_NavChooseFolder__doc__},
     899 {"NavChooseVolume",    (PyCFunction)nav_NavChooseVolume,       METH_VARARGS|METH_KEYWORDS,     nav_NavChooseVolume__doc__},
     900 {"NavChooseObject",    (PyCFunction)nav_NavChooseObject,       METH_VARARGS|METH_KEYWORDS,     nav_NavChooseObject__doc__},
     901 {"NavNewFolder",       (PyCFunction)nav_NavNewFolder,  METH_VARARGS|METH_KEYWORDS,     nav_NavNewFolder__doc__},
    902902#if 0
    903  {"NavCustomControl",   (PyCFunction)nav_NavCustomControl,      METH_VARARGS,   nav_NavCustomControl__doc__},
     903 {"NavCustomControl",   (PyCFunction)nav_NavCustomControl,      METH_VARARGS,   nav_NavCustomControl__doc__},
    904904#endif
    905  {"NavServicesCanRun",  (PyCFunction)nav_NavServicesCanRun,     METH_VARARGS,   nav_NavServicesCanRun__doc__},
    906  {"NavServicesAvailable",       (PyCFunction)nav_NavServicesAvailable,  METH_VARARGS,   nav_NavServicesAvailable__doc__},
    907  {"NavLoad",    (PyCFunction)nav_NavLoad,       METH_VARARGS,   nav_NavLoad__doc__},
    908  {"NavUnload",  (PyCFunction)nav_NavUnload,     METH_VARARGS,   nav_NavUnload__doc__},
    909  {"NavLibraryVersion",  (PyCFunction)nav_NavLibraryVersion,     METH_VARARGS,   nav_NavLibraryVersion__doc__},
    910  {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions,    METH_VARARGS,   nav_NavGetDefaultDialogOptions__doc__},
    911         {NULL,   (PyCFunction)NULL, 0, NULL}            /* sentinel */
     905 {"NavServicesCanRun",  (PyCFunction)nav_NavServicesCanRun,     METH_VARARGS,   nav_NavServicesCanRun__doc__},
     906 {"NavServicesAvailable",       (PyCFunction)nav_NavServicesAvailable,  METH_VARARGS,   nav_NavServicesAvailable__doc__},
     907 {"NavLoad",    (PyCFunction)nav_NavLoad,       METH_VARARGS,   nav_NavLoad__doc__},
     908 {"NavUnload",  (PyCFunction)nav_NavUnload,     METH_VARARGS,   nav_NavUnload__doc__},
     909 {"NavLibraryVersion",  (PyCFunction)nav_NavLibraryVersion,     METH_VARARGS,   nav_NavLibraryVersion__doc__},
     910 {"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions,    METH_VARARGS,   nav_NavGetDefaultDialogOptions__doc__},
     911    {NULL,       (PyCFunction)NULL, 0, NULL}            /* sentinel */
    912912};
    913913
     
    915915/* Initialization function for the module (*must* be called initNav) */
    916916
    917 static char Nav_module_documentation[] = 
     917static char Nav_module_documentation[] =
    918918"Interface to Navigation Services\n"
    919919"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
     
    931931initNav(void)
    932932{
    933         PyObject *m, *d;
    934        
    935         if (PyErr_WarnPy3k("In 3.x, Nav is removed.", 1))
    936                 return;
    937 
    938933#ifdef __LP64__
    939         PyErr_SetString(PyExc_ImportError, "Navigation Services not available in 64-bit mode");
    940         return;
    941 
    942 #else   /* !__LP64__ */
    943 
    944         /* Test that we have NavServices */
    945         if ( !NavServicesAvailable() ) {
    946                 PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
    947                 return;
    948         }
    949         /* Create the module and add the functions */
    950         m = Py_InitModule4("Nav", nav_methods,
    951                 Nav_module_documentation,
    952                 (PyObject*)NULL,PYTHON_API_VERSION);
    953 
    954         /* Add some symbolic constants to the module */
    955         d = PyModule_GetDict(m);
    956         ErrorObject = PyString_FromString("Nav.error");
    957         PyDict_SetItemString(d, "error", ErrorObject);
    958 
    959         /* XXXX Add constants here */
    960        
    961         /* Set UPPs */
    962         my_eventProcUPP = NewNavEventUPP(my_eventProc);
    963         my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
    964         my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);
     934    PyErr_SetString(PyExc_ImportError, "Navigation Services not available in 64-bit mode");
     935    return;
     936
     937#else   /* !__LP64__ */
     938    PyObject *m, *d;
     939
     940    if (PyErr_WarnPy3k("In 3.x, the Nav module is removed.", 1))
     941        return;
     942
     943    /* Test that we have NavServices */
     944    if ( !NavServicesAvailable() ) {
     945        PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
     946        return;
     947    }
     948    /* Create the module and add the functions */
     949    m = Py_InitModule4("Nav", nav_methods,
     950        Nav_module_documentation,
     951        (PyObject*)NULL,PYTHON_API_VERSION);
     952
     953    /* Add some symbolic constants to the module */
     954    d = PyModule_GetDict(m);
     955    ErrorObject = PyString_FromString("Nav.error");
     956    PyDict_SetItemString(d, "error", ErrorObject);
     957
     958    /* XXXX Add constants here */
     959
     960    /* Set UPPs */
     961    my_eventProcUPP = NewNavEventUPP(my_eventProc);
     962    my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
     963    my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);
    965964#endif /* !__LP64__ */
    966        
    967 }
    968 
     965
     966}
     967
Note: See TracChangeset for help on using the changeset viewer.