Changeset 391 for python/trunk/Mac/Modules/Nav.c
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Mac/Modules/Nav.c
r2 r391 45 45 static pascal void 46 46 my_eventProc(NavEventCallbackMessage callBackSelector, 47 48 49 { 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 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 } 70 70 } 71 71 72 72 static pascal Boolean 73 73 my_previewProc(NavCBRecPtr callBackParms, 74 75 { 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 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; 95 95 } 96 96 97 97 static pascal Boolean 98 98 my_filterProc(AEDesc *theItem, void *info, 99 100 101 { 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 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; 122 122 } 123 123 … … 125 125 static int 126 126 filldialogoptions(PyObject *d, 127 128 129 130 131 132 133 134 135 { 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 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; 213 213 } 214 214 … … 218 218 219 219 typedef struct { 220 221 220 PyObject_HEAD 221 NavReplyRecord itself; 222 222 } navrrobject; 223 223 … … 235 235 nav_NavTranslateFile(navrrobject *self, PyObject *args) 236 236 { 237 238 239 240 241 242 243 244 245 246 247 248 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; 249 249 } 250 250 … … 256 256 nav_NavCompleteSave(navrrobject *self, PyObject *args) 257 257 { 258 259 260 261 262 263 264 265 266 267 268 269 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; 270 270 } 271 271 272 272 273 273 static 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 */ 278 278 }; 279 279 … … 284 284 newnavrrobject(NavReplyRecord *itself) 285 285 { 286 287 288 289 290 291 292 286 navrrobject *self; 287 288 self = PyObject_NEW(navrrobject, &Navrrtype); 289 if (self == NULL) 290 return NULL; 291 self->itself = *itself; 292 return self; 293 293 } 294 294 … … 297 297 navrr_dealloc(navrrobject *self) 298 298 { 299 300 299 NavDisposeReply(&self->itself); 300 PyObject_DEL(self); 301 301 } 302 302 … … 304 304 navrr_getattr(navrrobject *self, char *name) 305 305 { 306 307 308 309 310 311 "ssssssssss", 312 313 "isStationery", "translationNeeded", 314 "selection", 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 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); 399 399 } 400 400 … … 402 402 navrr_setattr(navrrobject *self, char *name, PyObject *v) 403 403 { 404 405 406 407 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 410 static char Navrrtype__doc__[] = 411 411 "Record containing result of a Nav file selection call. Use dir() for member names." 412 412 ; 413 413 414 414 static PyTypeObject Navrrtype = { 415 416 0,/*ob_size*/417 "Nav.NavReplyRecord",/*tp_name*/418 sizeof(navrrobject),/*tp_basicsize*/419 0,/*tp_itemsize*/420 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 435 436 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 */ 437 437 }; 438 438 439 439 /* End of code for NavReplyRecord objects */ 440 440 441 441 /* ----------------------------------------------------- */ 442 442 … … 448 448 nav_NavGetFile(PyObject *self, PyObject *args, PyObject *kw) 449 449 { 450 451 AEDesc*defaultLocation = NULL;452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 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); 476 476 } 477 477 … … 483 483 nav_NavPutFile(PyObject *self, PyObject *args, PyObject *kw) 484 484 { 485 486 AEDesc*defaultLocation = NULL;487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 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); 510 510 } 511 511 … … 518 518 nav_NavAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw) 519 519 { 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 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); 541 541 } 542 542 … … 548 548 nav_NavCustomAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw) 549 549 { 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 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); 570 570 } 571 571 … … 577 577 nav_NavAskDiscardChanges(PyObject *self, PyObject *args, PyObject *kw) 578 578 { 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 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); 599 599 } 600 600 … … 606 606 nav_NavChooseFile(PyObject *self, PyObject *args, PyObject *kw) 607 607 { 608 609 AEDesc*defaultLocation = NULL;610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 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); 634 634 } 635 635 … … 641 641 nav_NavChooseFolder(PyObject *self, PyObject *args, PyObject *kw) 642 642 { 643 644 AEDesc*defaultLocation = NULL;645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 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); 667 667 } 668 668 … … 674 674 nav_NavChooseVolume(PyObject *self, PyObject *args, PyObject *kw) 675 675 { 676 677 AEDesc*defaultLocation = NULL;678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 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); 700 700 } 701 701 … … 707 707 nav_NavChooseObject(PyObject *self, PyObject *args, PyObject *kw) 708 708 { 709 710 AEDesc*defaultLocation = NULL;711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 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); 733 733 } 734 734 … … 740 740 nav_NavNewFolder(PyObject *self, PyObject *args, PyObject *kw) 741 741 { 742 743 AEDesc*defaultLocation = NULL;744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 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); 764 764 } 765 765 … … 775 775 { 776 776 777 778 779 780 777 if (!PyArg_ParseTuple(args, "")) 778 return NULL; 779 Py_INCREF(Py_None); 780 return Py_None; 781 781 } 782 782 #endif … … 789 789 nav_NavServicesCanRun(PyObject *self, PyObject *args) 790 790 { 791 792 793 794 795 791 Boolean rv; 792 if (!PyArg_ParseTuple(args, "")) 793 return NULL; 794 rv = NavServicesCanRun(); 795 return Py_BuildValue("l", (long)rv); 796 796 } 797 797 … … 803 803 nav_NavServicesAvailable(PyObject *self, PyObject *args) 804 804 { 805 806 807 808 809 810 805 Boolean rv; 806 807 if (!PyArg_ParseTuple(args, "")) 808 return NULL; 809 rv = NavServicesAvailable(); 810 return Py_BuildValue("l", (long)rv); 811 811 } 812 812 /* XX */ … … 819 819 { 820 820 821 822 823 824 825 821 if (!PyArg_ParseTuple(args, "")) 822 return NULL; 823 NavLoad(); 824 Py_INCREF(Py_None); 825 return Py_None; 826 826 } 827 827 … … 834 834 { 835 835 836 837 838 839 840 836 if (!PyArg_ParseTuple(args, "")) 837 return NULL; 838 NavUnload(); 839 Py_INCREF(Py_None); 840 return Py_None; 841 841 } 842 842 … … 848 848 nav_NavLibraryVersion(PyObject *self, PyObject *args) 849 849 { 850 851 852 853 854 855 850 UInt32 rv; 851 852 if (!PyArg_ParseTuple(args, "")) 853 return NULL; 854 rv = NavLibraryVersion(); 855 return Py_BuildValue("l", (long)rv); 856 856 } 857 857 … … 863 863 nav_NavGetDefaultDialogOptions(PyObject *self, PyObject *args) 864 864 { 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 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 ); 887 887 } 888 888 … … 890 890 891 891 static 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__}, 902 902 #if 0 903 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS,nav_NavCustomControl__doc__},903 {"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__}, 904 904 #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 */ 912 912 }; 913 913 … … 915 915 /* Initialization function for the module (*must* be called initNav) */ 916 916 917 static char Nav_module_documentation[] = 917 static char Nav_module_documentation[] = 918 918 "Interface to Navigation Services\n" 919 919 "Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n" … … 931 931 initNav(void) 932 932 { 933 PyObject *m, *d;934 935 if (PyErr_WarnPy3k("In 3.x, Nav is removed.", 1))936 return;937 938 933 #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); 965 964 #endif /* !__LP64__ */ 966 967 } 968 965 966 } 967
Note:
See TracChangeset
for help on using the changeset viewer.