1
/***********************************************************
2
Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
7
Permission to use, copy, modify, and distribute this software and its
8
documentation for any purpose and without fee is hereby granted,
9
provided that the above copyright notice appear in all copies and that
10
both that copyright notice and this permission notice appear in
11
supporting documentation, and that the names of Stichting Mathematisch
12
Centrum or CWI or Corporation for National Research Initiatives or
13
CNRI not be used in advertising or publicity pertaining to
14
distribution of the software without specific, written prior
17
While CWI is the initial source for this software, a modified version
18
is made available by the Corporation for National Research Initiatives
19
(CNRI) at the Internet address ftp://ftp.python.org.
21
STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22
REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23
MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24
CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26
PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28
PERFORMANCE OF THIS SOFTWARE.
30
******************************************************************/
33
#include "pymactoolbox.h"
34
#include <Carbon/Carbon.h>
36
static PyObject *ErrorObject;
38
static NavEventUPP my_eventProcUPP;
39
static NavPreviewUPP my_previewProcUPP;
40
static NavObjectFilterUPP my_filterProcUPP;
42
/* Callback functions */
44
my_eventProc(NavEventCallbackMessage callBackSelector,
45
NavCBRecPtr callBackParms,
46
NavCallBackUserData callbackUD)
48
PyObject *dict = (PyObject *)callbackUD;
53
if ( (pyfunc = PyDict_GetItemString(dict, "eventProc")) == NULL ) {
57
if ( pyfunc == Py_None ) {
60
rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
61
(void *)callBackParms, sizeof(NavCBRec));
65
PySys_WriteStderr("Nav: exception in eventProc callback\n");
71
my_previewProc(NavCBRecPtr callBackParms,
72
NavCallBackUserData callbackUD)
74
PyObject *dict = (PyObject *)callbackUD;
79
if (!dict) return false;
80
if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
84
rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
86
c_rv = PyObject_IsTrue(rv);
89
PySys_WriteStderr("Nav: exception in previewProc callback\n");
96
my_filterProc(AEDesc *theItem, void *info,
97
NavCallBackUserData callbackUD,
98
NavFilterModes filterMode)
100
PyObject *dict = (PyObject *)callbackUD;
103
Boolean c_rv = false;
105
if (!dict) return false;
106
if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
110
rv = PyObject_CallFunction(pyfunc, "O&s#h",
111
AEDesc_NewBorrowed, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
113
c_rv = PyObject_IsTrue(rv);
116
PySys_WriteStderr("Nav: exception in filterProc callback\n");
122
/* ----------------------------------------------------- */
124
filldialogoptions(PyObject *d,
125
AEDesc **defaultLocationP,
126
NavDialogOptions *opt,
127
NavEventUPP *eventProcP,
128
NavPreviewUPP *previewProcP,
129
NavObjectFilterUPP *filterProcP,
130
NavTypeListHandle *typeListP,
132
OSType *fileCreatorP)
135
PyObject *key, *value;
137
AEDesc *defaultLocation_storage;
139
NavGetDefaultDialogOptions(opt);
141
while ( PyDict_Next(d, &pos, &key, &value) ) {
142
if ( !key || !value || !PyString_Check(key) ) {
143
PyErr_SetString(ErrorObject, "DialogOption has non-string key");
146
keystr = PyString_AsString(key);
147
if( strcmp(keystr, "defaultLocation") == 0 ) {
148
if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
152
if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
153
PyMem_DEL(defaultLocation_storage);
156
*defaultLocationP = defaultLocation_storage;
157
} else if( strcmp(keystr, "version") == 0 ) {
158
if ( !PyArg_Parse(value, "H", &opt->version) )
160
} else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
161
if ( !PyArg_Parse(value, "k", &opt->dialogOptionFlags) )
163
} else if( strcmp(keystr, "location") == 0 ) {
164
if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
166
} else if( strcmp(keystr, "clientName") == 0 ) {
167
if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
169
} else if( strcmp(keystr, "windowTitle") == 0 ) {
170
if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
172
} else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
173
if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
175
} else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
176
if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
178
} else if( strcmp(keystr, "savedFileName") == 0 ) {
179
if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
181
} else if( strcmp(keystr, "message") == 0 ) {
182
if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
184
} else if( strcmp(keystr, "preferenceKey") == 0 ) {
185
if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
188
} else if( strcmp(keystr, "popupExtension") == 0 ) {
189
if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
191
#endif /* !__LP64__ */
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;
199
} else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
200
if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
202
#endif /* !__LP64__ */
203
} else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
204
if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
206
} else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
207
if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
210
PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
217
/* ----------------------------------------------------- */
219
/* Declarations for objects of type NavReplyRecord */
223
NavReplyRecord itself;
226
static PyTypeObject Navrrtype;
230
/* ---------------------------------------------------------------- */
232
static char nav_NavTranslateFile__doc__[] =
233
"(NavTranslationOptions)->None"
237
nav_NavTranslateFile(navrrobject *self, PyObject *args)
239
NavTranslationOptions howToTranslate;
242
if (!PyArg_ParseTuple(args, "k", &howToTranslate))
244
err = NavTranslateFile(&self->itself, howToTranslate);
246
PyErr_Mac(ErrorObject, err);
253
static char nav_NavCompleteSave__doc__[] =
254
"(NavTranslationOptions)->None"
258
nav_NavCompleteSave(navrrobject *self, PyObject *args)
260
NavTranslationOptions howToTranslate;
263
if (!PyArg_ParseTuple(args, "k", &howToTranslate))
265
err = NavCompleteSave(&self->itself, howToTranslate);
267
PyErr_Mac(ErrorObject, err);
275
static struct PyMethodDef navrr_methods[] = {
276
{"NavTranslateFile", (PyCFunction)nav_NavTranslateFile, METH_VARARGS, nav_NavTranslateFile__doc__},
277
{"NavCompleteSave", (PyCFunction)nav_NavCompleteSave, METH_VARARGS, nav_NavCompleteSave__doc__},
279
{NULL, NULL} /* sentinel */
286
newnavrrobject(NavReplyRecord *itself)
290
self = PyObject_NEW(navrrobject, &Navrrtype);
293
self->itself = *itself;
299
navrr_dealloc(navrrobject *self)
301
NavDisposeReply(&self->itself);
306
navrr_getattr(navrrobject *self, char *name)
311
#endif /* !__LP64__ */
313
if( strcmp(name, "__members__") == 0 )
314
return Py_BuildValue(
319
#endif /* __LP64__ */
320
"version", "validRecord", "replacing",
321
"isStationery", "translationNeeded",
324
#endif /* !__LP64__ */
326
"fileTranslation", "keyScript", "saveFileName");
328
if( strcmp(name, "version") == 0 )
329
return Py_BuildValue("h", self->itself.version);
330
if( strcmp(name, "validRecord") == 0 )
331
return Py_BuildValue("l", (long)self->itself.validRecord);
332
if( strcmp(name, "replacing") == 0 )
333
return Py_BuildValue("l", (long)self->itself.replacing);
334
if( strcmp(name, "isStationery") == 0 )
335
return Py_BuildValue("l", (long)self->itself.isStationery);
336
if( strcmp(name, "translationNeeded") == 0 )
337
return Py_BuildValue("l", (long)self->itself.translationNeeded);
339
if( strcmp(name, "selection") == 0 ) {
343
PyObject *rv, *rvitem;
346
if ((err=AECountItems(&self->itself.selection, &count))) {
347
PyErr_Mac(ErrorObject, err);
350
if ( (rv=PyList_New(count)) == NULL )
352
for(i=0; i<count; i++) {
353
desc.dataHandle = NULL;
354
if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc))) {
356
PyErr_Mac(ErrorObject, err);
359
if ((err=AEGetDescData(&desc, &fss, sizeof(FSSpec)))) {
361
PyErr_Mac(ErrorObject, err);
364
rvitem = PyMac_BuildFSSpec(&fss);
365
PyList_SetItem(rv, i, rvitem);
366
AEDisposeDesc(&desc);
370
#endif /* !__LP64__ */
371
if( strcmp(name, "selection_fsr") == 0 ) {
375
PyObject *rv, *rvitem;
378
if ((err=AECountItems(&self->itself.selection, &count))) {
379
PyErr_Mac(ErrorObject, err);
382
if ( (rv=PyList_New(count)) == NULL )
384
for(i=0; i<count; i++) {
385
desc.dataHandle = NULL;
386
if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSRef, NULL, &desc))) {
388
PyErr_Mac(ErrorObject, err);
391
if ((err=AEGetDescData(&desc, &fsr, sizeof(FSRef)))) {
393
PyErr_Mac(ErrorObject, err);
396
rvitem = PyMac_BuildFSRef(&fsr);
397
PyList_SetItem(rv, i, rvitem);
398
AEDisposeDesc(&desc);
403
if( strcmp(name, "fileTranslation") == 0 )
404
return ResObj_New((Handle)self->itself.fileTranslation);
406
if( strcmp(name, "keyScript") == 0 )
407
return Py_BuildValue("h", (short)self->itself.keyScript);
408
if( strcmp(name, "saveFileName") == 0 )
409
return Py_BuildValue("O&", CFStringRefObj_New, self->itself.saveFileName);
412
return Py_FindMethod(navrr_methods, (PyObject *)self, name);
416
navrr_setattr(navrrobject *self, char *name, PyObject *v)
418
/* Set attribute 'name' to value 'v'. v==NULL means delete */
420
/* XXXX Add your own setattr code here */
424
static char Navrrtype__doc__[] =
425
"Record containing result of a Nav file selection call. Use dir() for member names."
428
static PyTypeObject Navrrtype = {
429
PyObject_HEAD_INIT(&PyType_Type)
431
"Nav.NavReplyRecord", /*tp_name*/
432
sizeof(navrrobject), /*tp_basicsize*/
435
(destructor)navrr_dealloc, /*tp_dealloc*/
436
(printfunc)0, /*tp_print*/
437
(getattrfunc)navrr_getattr, /*tp_getattr*/
438
(setattrfunc)navrr_setattr, /*tp_setattr*/
439
(cmpfunc)0, /*tp_compare*/
440
(reprfunc)0, /*tp_repr*/
442
0, /*tp_as_sequence*/
444
(hashfunc)0, /*tp_hash*/
445
(ternaryfunc)0, /*tp_call*/
446
(reprfunc)0, /*tp_str*/
448
/* Space for future expansion */
450
Navrrtype__doc__ /* Documentation string */
453
/* End of code for NavReplyRecord objects */
455
/* ----------------------------------------------------- */
457
static char nav_NavGetFile__doc__[] =
458
"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
462
nav_NavGetFile(PyObject *self, PyObject *args, PyObject *kw)
465
AEDesc *defaultLocation = NULL;
466
NavReplyRecord reply;
467
NavDialogOptions dialogOptions;
468
NavEventUPP eventProc = NULL;
469
NavPreviewUPP previewProc = NULL;
470
NavObjectFilterUPP filterProc = NULL;
471
NavTypeListHandle typeList = NULL;
474
if ( kw && PyObject_IsTrue(kw) ) {
475
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
478
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
480
if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
482
err = NavGetFile(defaultLocation, &reply, &dialogOptions,
483
eventProc, previewProc, filterProc, typeList, (void *)dict);
484
PyMem_DEL(defaultLocation);
486
PyErr_Mac(ErrorObject, err);
489
return (PyObject *)newnavrrobject(&reply);
492
static char nav_NavPutFile__doc__[] =
493
"(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
497
nav_NavPutFile(PyObject *self, PyObject *args, PyObject *kw)
500
AEDesc *defaultLocation = NULL;
501
NavReplyRecord reply;
502
NavDialogOptions dialogOptions;
503
NavEventUPP eventProc = NULL;
508
if ( kw && PyObject_IsTrue(kw) ) {
509
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
512
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
514
if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
516
err = NavPutFile(defaultLocation, &reply, &dialogOptions,
517
eventProc, fileType, fileCreator, (void *)dict);
518
PyMem_DEL(defaultLocation);
520
PyErr_Mac(ErrorObject, err);
523
return (PyObject *)newnavrrobject(&reply);
526
static char nav_NavAskSaveChanges__doc__[] =
527
"(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
532
nav_NavAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
535
NavDialogOptions dialogOptions;
536
NavAskSaveChangesAction action;
537
NavAskSaveChangesResult reply;
538
NavEventUPP eventProc = NULL;
541
if ( kw && PyObject_IsTrue(kw) ) {
542
if (!PyArg_ParseTuple(args, "k", &action))
545
} else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
547
if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
549
err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
551
PyErr_Mac(ErrorObject, err);
554
return Py_BuildValue("l", (long)reply);
557
static char nav_NavCustomAskSaveChanges__doc__[] =
558
"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
562
nav_NavCustomAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
565
NavDialogOptions dialogOptions;
566
NavAskSaveChangesResult reply;
567
NavEventUPP eventProc = NULL;
570
if ( kw && PyObject_IsTrue(kw) ) {
571
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
574
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
576
if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
578
err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
580
PyErr_Mac(ErrorObject, err);
583
return Py_BuildValue("l", (long)reply);
586
static char nav_NavAskDiscardChanges__doc__[] =
587
"(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
591
nav_NavAskDiscardChanges(PyObject *self, PyObject *args, PyObject *kw)
594
NavDialogOptions dialogOptions;
595
NavAskSaveChangesResult reply;
596
NavEventUPP eventProc = NULL;
599
if ( kw && PyObject_IsTrue(kw) ) {
600
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
603
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
605
if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
607
err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
609
PyErr_Mac(ErrorObject, err);
612
return Py_BuildValue("l", (long)reply);
615
static char nav_NavChooseFile__doc__[] =
616
"(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
620
nav_NavChooseFile(PyObject *self, PyObject *args, PyObject *kw)
623
AEDesc *defaultLocation = NULL;
624
NavReplyRecord reply;
625
NavDialogOptions dialogOptions;
626
NavEventUPP eventProc = NULL;
627
NavPreviewUPP previewProc = NULL;
628
NavObjectFilterUPP filterProc = NULL;
629
NavTypeListHandle typeList = NULL;
632
if ( kw && PyObject_IsTrue(kw) ) {
633
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
636
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
638
if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
640
err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
641
eventProc, previewProc, filterProc, typeList, (void *)dict);
642
PyMem_DEL(defaultLocation);
644
PyErr_Mac(ErrorObject, err);
647
return (PyObject *)newnavrrobject(&reply);
650
static char nav_NavChooseFolder__doc__[] =
651
"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
655
nav_NavChooseFolder(PyObject *self, PyObject *args, PyObject *kw)
658
AEDesc *defaultLocation = NULL;
659
NavReplyRecord reply;
660
NavDialogOptions dialogOptions;
661
NavEventUPP eventProc = NULL;
662
NavObjectFilterUPP filterProc = NULL;
665
if ( kw && PyObject_IsTrue(kw) ) {
666
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
669
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
671
if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
673
err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
674
eventProc, filterProc, (void *)dict);
675
PyMem_DEL(defaultLocation);
677
PyErr_Mac(ErrorObject, err);
680
return (PyObject *)newnavrrobject(&reply);
683
static char nav_NavChooseVolume__doc__[] =
684
"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
688
nav_NavChooseVolume(PyObject *self, PyObject *args, PyObject *kw)
691
AEDesc *defaultLocation = NULL;
692
NavReplyRecord reply;
693
NavDialogOptions dialogOptions;
694
NavEventUPP eventProc = NULL;
695
NavObjectFilterUPP filterProc = NULL;
698
if ( kw && PyObject_IsTrue(kw) ) {
699
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
702
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
704
if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
706
err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
707
eventProc, filterProc, (void *)dict);
708
PyMem_DEL(defaultLocation);
710
PyErr_Mac(ErrorObject, err);
713
return (PyObject *)newnavrrobject(&reply);
716
static char nav_NavChooseObject__doc__[] =
717
"(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
721
nav_NavChooseObject(PyObject *self, PyObject *args, PyObject *kw)
724
AEDesc *defaultLocation = NULL;
725
NavReplyRecord reply;
726
NavDialogOptions dialogOptions;
727
NavEventUPP eventProc = NULL;
728
NavObjectFilterUPP filterProc = NULL;
731
if ( kw && PyObject_IsTrue(kw) ) {
732
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
735
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
737
if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
739
err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
740
eventProc, filterProc, (void *)dict);
741
PyMem_DEL(defaultLocation);
743
PyErr_Mac(ErrorObject, err);
746
return (PyObject *)newnavrrobject(&reply);
749
static char nav_NavNewFolder__doc__[] =
750
"(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
754
nav_NavNewFolder(PyObject *self, PyObject *args, PyObject *kw)
757
AEDesc *defaultLocation = NULL;
758
NavReplyRecord reply;
759
NavDialogOptions dialogOptions;
760
NavEventUPP eventProc = NULL;
763
if ( kw && PyObject_IsTrue(kw) ) {
764
if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
767
} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
769
if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
771
err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
772
PyMem_DEL(defaultLocation);
774
PyErr_Mac(ErrorObject, err);
777
return (PyObject *)newnavrrobject(&reply);
781
/* XXXX I don't know what to do with the void * argument */
782
static char nav_NavCustomControl__doc__[] =
788
nav_NavCustomControl(PyObject *self, PyObject *args)
791
if (!PyArg_ParseTuple(args, ""))
798
static char nav_NavServicesCanRun__doc__[] =
803
nav_NavServicesCanRun(PyObject *self, PyObject *args)
806
if (!PyArg_ParseTuple(args, ""))
808
rv = NavServicesCanRun();
809
return Py_BuildValue("l", (long)rv);
812
static char nav_NavServicesAvailable__doc__[] =
817
nav_NavServicesAvailable(PyObject *self, PyObject *args)
821
if (!PyArg_ParseTuple(args, ""))
823
rv = NavServicesAvailable();
824
return Py_BuildValue("l", (long)rv);
827
static char nav_NavLoad__doc__[] =
832
nav_NavLoad(PyObject *self, PyObject *args)
835
if (!PyArg_ParseTuple(args, ""))
842
static char nav_NavUnload__doc__[] =
847
nav_NavUnload(PyObject *self, PyObject *args)
850
if (!PyArg_ParseTuple(args, ""))
857
static char nav_NavLibraryVersion__doc__[] =
862
nav_NavLibraryVersion(PyObject *self, PyObject *args)
866
if (!PyArg_ParseTuple(args, ""))
868
rv = NavLibraryVersion();
869
return Py_BuildValue("l", (long)rv);
872
static char nav_NavGetDefaultDialogOptions__doc__[] =
873
"()->dict\nPass dict or keyword args with same names to other calls."
877
nav_NavGetDefaultDialogOptions(PyObject *self, PyObject *args)
879
NavDialogOptions dialogOptions;
882
err = NavGetDefaultDialogOptions(&dialogOptions);
884
PyErr_Mac(ErrorObject, err);
887
return Py_BuildValue(
889
"{s:h,s:l,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&}",
891
"{s:h,s:l,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&}",
892
#endif /* __LP64__ */
893
"version", dialogOptions.version,
894
"dialogOptionFlags", dialogOptions.dialogOptionFlags,
895
"location", PyMac_BuildPoint, dialogOptions.location,
896
"clientName", PyMac_BuildStr255, &dialogOptions.clientName,
897
"windowTitle", PyMac_BuildStr255, &dialogOptions.windowTitle,
898
"actionButtonLabel", PyMac_BuildStr255, &dialogOptions.actionButtonLabel,
899
"cancelButtonLabel", PyMac_BuildStr255, &dialogOptions.cancelButtonLabel,
900
"savedFileName", PyMac_BuildStr255, &dialogOptions.savedFileName,
901
"message", PyMac_BuildStr255, &dialogOptions.message,
902
"preferenceKey", PyMac_BuildOSType, dialogOptions.preferenceKey
904
,"popupExtension", OptResObj_New, dialogOptions.popupExtension
905
#endif /* __LP64__ */
909
/* List of methods defined in the module */
911
static struct PyMethodDef nav_methods[] = {
912
{"NavGetFile", (PyCFunction)nav_NavGetFile, METH_VARARGS|METH_KEYWORDS, nav_NavGetFile__doc__},
913
{"NavPutFile", (PyCFunction)nav_NavPutFile, METH_VARARGS|METH_KEYWORDS, nav_NavPutFile__doc__},
914
{"NavAskSaveChanges", (PyCFunction)nav_NavAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskSaveChanges__doc__},
915
{"NavCustomAskSaveChanges", (PyCFunction)nav_NavCustomAskSaveChanges, METH_VARARGS|METH_KEYWORDS, nav_NavCustomAskSaveChanges__doc__},
916
{"NavAskDiscardChanges", (PyCFunction)nav_NavAskDiscardChanges, METH_VARARGS|METH_KEYWORDS, nav_NavAskDiscardChanges__doc__},
917
{"NavChooseFile", (PyCFunction)nav_NavChooseFile, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFile__doc__},
918
{"NavChooseFolder", (PyCFunction)nav_NavChooseFolder, METH_VARARGS|METH_KEYWORDS, nav_NavChooseFolder__doc__},
919
{"NavChooseVolume", (PyCFunction)nav_NavChooseVolume, METH_VARARGS|METH_KEYWORDS, nav_NavChooseVolume__doc__},
920
{"NavChooseObject", (PyCFunction)nav_NavChooseObject, METH_VARARGS|METH_KEYWORDS, nav_NavChooseObject__doc__},
921
{"NavNewFolder", (PyCFunction)nav_NavNewFolder, METH_VARARGS|METH_KEYWORDS, nav_NavNewFolder__doc__},
923
{"NavCustomControl", (PyCFunction)nav_NavCustomControl, METH_VARARGS, nav_NavCustomControl__doc__},
925
{"NavServicesCanRun", (PyCFunction)nav_NavServicesCanRun, METH_VARARGS, nav_NavServicesCanRun__doc__},
926
{"NavServicesAvailable", (PyCFunction)nav_NavServicesAvailable, METH_VARARGS, nav_NavServicesAvailable__doc__},
927
{"NavLoad", (PyCFunction)nav_NavLoad, METH_VARARGS, nav_NavLoad__doc__},
928
{"NavUnload", (PyCFunction)nav_NavUnload, METH_VARARGS, nav_NavUnload__doc__},
929
{"NavLibraryVersion", (PyCFunction)nav_NavLibraryVersion, METH_VARARGS, nav_NavLibraryVersion__doc__},
930
{"NavGetDefaultDialogOptions", (PyCFunction)nav_NavGetDefaultDialogOptions, METH_VARARGS, nav_NavGetDefaultDialogOptions__doc__},
931
{NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
935
/* Initialization function for the module (*must* be called initNav) */
937
static char Nav_module_documentation[] =
938
"Interface to Navigation Services\n"
939
"Most calls accept a NavDialogOptions dictionary or keywords with the same names, pass {}\n"
940
"if you want the default options.\n"
941
"Use NavGetDefaultDialogOptions() to find out common option names.\n"
942
"See individual docstrings for additional keyword args/dictentries supported by each call.\n"
943
"Pass None as eventProc to get movable-modal dialogs that process updates through the standard Python mechanism."
951
if (PyErr_WarnPy3k("In 3.x, Nav is removed.", 1))
954
/* Test that we have NavServices */
955
if ( !NavServicesAvailable() ) {
956
PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
959
/* Create the module and add the functions */
960
m = Py_InitModule4("Nav", nav_methods,
961
Nav_module_documentation,
962
(PyObject*)NULL,PYTHON_API_VERSION);
964
/* Add some symbolic constants to the module */
965
d = PyModule_GetDict(m);
966
ErrorObject = PyString_FromString("Nav.error");
967
PyDict_SetItemString(d, "error", ErrorObject);
969
/* XXXX Add constants here */
972
my_eventProcUPP = NewNavEventUPP(my_eventProc);
973
my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
974
my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);