symbian-qemu-0.9.1-12/python-2.6.1/Mac/Modules/Nav.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 /***********************************************************
       
     2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
       
     3 The Netherlands.
       
     4 
       
     5                         All Rights Reserved
       
     6 
       
     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
       
    15 permission.
       
    16 
       
    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.
       
    20 
       
    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.
       
    29 
       
    30 ******************************************************************/
       
    31 
       
    32 #include "Python.h"
       
    33 #include "pymactoolbox.h"
       
    34 #include <Carbon/Carbon.h>
       
    35 
       
    36 static PyObject *ErrorObject;
       
    37 
       
    38 static NavEventUPP my_eventProcUPP;
       
    39 static NavPreviewUPP my_previewProcUPP;
       
    40 static NavObjectFilterUPP my_filterProcUPP;
       
    41 
       
    42 /* Callback functions */
       
    43 static pascal void
       
    44 my_eventProc(NavEventCallbackMessage callBackSelector,
       
    45 			 NavCBRecPtr callBackParms,
       
    46 			 NavCallBackUserData callbackUD)
       
    47 {
       
    48 	PyObject *dict = (PyObject *)callbackUD;
       
    49 	PyObject *pyfunc;
       
    50 	PyObject *rv;
       
    51 	
       
    52 	if (!dict) return;
       
    53 	if ( (pyfunc = PyDict_GetItemString(dict, "eventProc")) == NULL ) {
       
    54 		PyErr_Print();
       
    55 		return;
       
    56 	}
       
    57 	if ( pyfunc == Py_None ) {
       
    58 		return;
       
    59 	}
       
    60 	rv = PyObject_CallFunction(pyfunc, "ls#", (long)callBackSelector,
       
    61 			(void *)callBackParms, sizeof(NavCBRec));
       
    62 	if ( rv )
       
    63 		Py_DECREF(rv);
       
    64 	else {
       
    65 		PySys_WriteStderr("Nav: exception in eventProc callback\n");
       
    66 		PyErr_Print();
       
    67 	}
       
    68 }
       
    69 
       
    70 static pascal Boolean
       
    71 my_previewProc(NavCBRecPtr callBackParms,
       
    72 			   NavCallBackUserData callbackUD)
       
    73 {
       
    74 	PyObject *dict = (PyObject *)callbackUD;
       
    75 	PyObject *pyfunc;
       
    76 	PyObject *rv;
       
    77 	Boolean c_rv = false;
       
    78 	
       
    79 	if (!dict) return false;
       
    80 	if ( (pyfunc = PyDict_GetItemString(dict, "previewProc")) == NULL ) {
       
    81 		PyErr_Print();
       
    82 		return false;
       
    83 	}
       
    84 	rv = PyObject_CallFunction(pyfunc, "s#", (void *)callBackParms, sizeof(NavCBRec));
       
    85 	if ( rv ) {
       
    86 		c_rv = PyObject_IsTrue(rv);
       
    87 		Py_DECREF(rv);
       
    88 	} else {
       
    89 		PySys_WriteStderr("Nav: exception in previewProc callback\n");
       
    90 		PyErr_Print();
       
    91 	}
       
    92 	return c_rv;
       
    93 }
       
    94 
       
    95 static pascal Boolean
       
    96 my_filterProc(AEDesc *theItem, void *info,
       
    97 			  NavCallBackUserData callbackUD,
       
    98 			  NavFilterModes filterMode)
       
    99 {
       
   100 	PyObject *dict = (PyObject *)callbackUD;
       
   101 	PyObject *pyfunc;
       
   102 	PyObject *rv;
       
   103 	Boolean c_rv = false;
       
   104 	
       
   105 	if (!dict) return false;
       
   106 	if ( (pyfunc = PyDict_GetItemString(dict, "filterProc")) == NULL ) {
       
   107 		PyErr_Print();
       
   108 		return false;
       
   109 	}
       
   110 	rv = PyObject_CallFunction(pyfunc, "O&s#h",
       
   111 		AEDesc_NewBorrowed, theItem, info, sizeof(NavFileOrFolderInfo), (short)filterMode);
       
   112 	if ( rv ) {
       
   113 		c_rv = PyObject_IsTrue(rv);
       
   114 		Py_DECREF(rv);
       
   115 	} else {
       
   116 		PySys_WriteStderr("Nav: exception in filterProc callback\n");
       
   117 		PyErr_Print();
       
   118 	}
       
   119 	return c_rv;
       
   120 }
       
   121 
       
   122 /* ----------------------------------------------------- */
       
   123 static int
       
   124 filldialogoptions(PyObject *d,
       
   125 		AEDesc **defaultLocationP,
       
   126 		NavDialogOptions *opt,
       
   127 		NavEventUPP *eventProcP,
       
   128 		NavPreviewUPP *previewProcP,
       
   129 		NavObjectFilterUPP *filterProcP,
       
   130 		NavTypeListHandle *typeListP,
       
   131 		OSType *fileTypeP,
       
   132 		OSType *fileCreatorP)
       
   133 {
       
   134 	Py_ssize_t pos = 0;
       
   135 	PyObject *key, *value;
       
   136 	char *keystr;
       
   137 	AEDesc *defaultLocation_storage;
       
   138 	
       
   139 	NavGetDefaultDialogOptions(opt);
       
   140 
       
   141 	while ( PyDict_Next(d, &pos, &key, &value) ) {
       
   142 		if ( !key || !value || !PyString_Check(key) ) {
       
   143 			PyErr_SetString(ErrorObject, "DialogOption has non-string key");
       
   144 			return 0;
       
   145 		}
       
   146 		keystr = PyString_AsString(key);
       
   147 		if( strcmp(keystr, "defaultLocation") == 0 ) {
       
   148 			if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
       
   149 				PyErr_NoMemory();
       
   150 				return 0;
       
   151 			}
       
   152 			if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
       
   153 				PyMem_DEL(defaultLocation_storage);
       
   154 				return 0;
       
   155 			}
       
   156 			*defaultLocationP = defaultLocation_storage;
       
   157 		} else if( strcmp(keystr, "version") == 0 ) {
       
   158 			if ( !PyArg_Parse(value, "H", &opt->version) )
       
   159 				return 0;
       
   160 		} else if( strcmp(keystr, "dialogOptionFlags") == 0 ) {
       
   161 			if ( !PyArg_Parse(value, "k", &opt->dialogOptionFlags) )
       
   162 				return 0;
       
   163 		} else if( strcmp(keystr, "location") == 0 ) {
       
   164 			if ( !PyArg_Parse(value, "O&", PyMac_GetPoint, &opt->location) )
       
   165 				return 0;
       
   166 		} else if( strcmp(keystr, "clientName") == 0 ) {
       
   167 			if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->clientName) )
       
   168 				return 0;
       
   169 		} else if( strcmp(keystr, "windowTitle") == 0 ) {
       
   170 			if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->windowTitle) )
       
   171 				return 0;
       
   172 		} else if( strcmp(keystr, "actionButtonLabel") == 0 ) {
       
   173 			if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->actionButtonLabel) )
       
   174 				return 0;
       
   175 		} else if( strcmp(keystr, "cancelButtonLabel") == 0 ) {
       
   176 			if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->cancelButtonLabel) )
       
   177 				return 0;
       
   178 		} else if( strcmp(keystr, "savedFileName") == 0 ) {
       
   179 			if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->savedFileName) )
       
   180 				return 0;
       
   181 		} else if( strcmp(keystr, "message") == 0 ) {
       
   182 			if ( !PyArg_Parse(value, "O&", PyMac_GetStr255, &opt->message) )
       
   183 				return 0;
       
   184 		} else if( strcmp(keystr, "preferenceKey") == 0 ) {
       
   185 			if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, &opt->preferenceKey) )
       
   186 				return 0;
       
   187 #ifndef __LP64__
       
   188 		} else if( strcmp(keystr, "popupExtension") == 0 ) {
       
   189 			if ( !PyArg_Parse(value, "O&", ResObj_Convert, &opt->popupExtension) )
       
   190 				return 0;
       
   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;
       
   198 #ifndef __LP64__
       
   199 		} else if( typeListP && strcmp(keystr, "typeList") == 0 ) {
       
   200 			if ( !PyArg_Parse(value, "O&", ResObj_Convert, typeListP) )
       
   201 				return 0;
       
   202 #endif /* !__LP64__ */
       
   203 		} else if( fileTypeP && strcmp(keystr, "fileType") == 0 ) {
       
   204 			if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileTypeP) )
       
   205 				return 0;
       
   206 		} else if( fileCreatorP && strcmp(keystr, "fileCreator") == 0 ) {
       
   207 			if ( !PyArg_Parse(value, "O&", PyMac_GetOSType, fileCreatorP) )
       
   208 				return 0;
       
   209 		} else {
       
   210 			PyErr_Format(ErrorObject, "Unknown DialogOption key: %s", keystr);
       
   211 			return 0;
       
   212 		}
       
   213 	}
       
   214 	return 1;
       
   215 }
       
   216 
       
   217 /* ----------------------------------------------------- */
       
   218 
       
   219 /* Declarations for objects of type NavReplyRecord */
       
   220 
       
   221 typedef struct {
       
   222 	PyObject_HEAD
       
   223 	NavReplyRecord itself;
       
   224 } navrrobject;
       
   225 
       
   226 static PyTypeObject Navrrtype;
       
   227 
       
   228 
       
   229 
       
   230 /* ---------------------------------------------------------------- */
       
   231 
       
   232 static char nav_NavTranslateFile__doc__[] =
       
   233 "(NavTranslationOptions)->None"
       
   234 ;
       
   235 
       
   236 static PyObject *
       
   237 nav_NavTranslateFile(navrrobject *self, PyObject *args)
       
   238 {
       
   239 	NavTranslationOptions howToTranslate;
       
   240 	OSErr err;
       
   241 
       
   242 	if (!PyArg_ParseTuple(args, "k", &howToTranslate))
       
   243 		return NULL;
       
   244 	err = NavTranslateFile(&self->itself, howToTranslate);
       
   245 	if ( err ) {
       
   246 		PyErr_Mac(ErrorObject, err);
       
   247 		return NULL;
       
   248 	}
       
   249 	Py_INCREF(Py_None);
       
   250 	return Py_None;
       
   251 }
       
   252 
       
   253 static char nav_NavCompleteSave__doc__[] =
       
   254 "(NavTranslationOptions)->None"
       
   255 ;
       
   256 
       
   257 static PyObject *
       
   258 nav_NavCompleteSave(navrrobject *self, PyObject *args)
       
   259 {
       
   260 	NavTranslationOptions howToTranslate;
       
   261 	OSErr err;
       
   262 
       
   263 	if (!PyArg_ParseTuple(args, "k", &howToTranslate))
       
   264 		return NULL;
       
   265 	err = NavCompleteSave(&self->itself, howToTranslate);
       
   266 	if ( err ) {
       
   267 		PyErr_Mac(ErrorObject, err);
       
   268 		return NULL;
       
   269 	}
       
   270 	Py_INCREF(Py_None);
       
   271 	return Py_None;
       
   272 }
       
   273 
       
   274 
       
   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__},
       
   278 	
       
   279 	{NULL,		NULL}		/* sentinel */
       
   280 };
       
   281 
       
   282 /* ---------- */
       
   283 
       
   284 
       
   285 static navrrobject *
       
   286 newnavrrobject(NavReplyRecord *itself)
       
   287 {
       
   288 	navrrobject *self;
       
   289 	
       
   290 	self = PyObject_NEW(navrrobject, &Navrrtype);
       
   291 	if (self == NULL)
       
   292 		return NULL;
       
   293 	self->itself = *itself;
       
   294 	return self;
       
   295 }
       
   296 
       
   297 
       
   298 static void
       
   299 navrr_dealloc(navrrobject *self)
       
   300 {
       
   301 	NavDisposeReply(&self->itself);
       
   302 	PyObject_DEL(self);
       
   303 }
       
   304 
       
   305 static PyObject *
       
   306 navrr_getattr(navrrobject *self, char *name)
       
   307 {
       
   308 	FSRef fsr;
       
   309 #ifndef __LP64__
       
   310 	FSSpec fss;
       
   311 #endif /* !__LP64__ */
       
   312 	
       
   313 	if( strcmp(name, "__members__") == 0 )
       
   314 		return Py_BuildValue(
       
   315 #ifndef __LP64__
       
   316 				"ssssssssss", 
       
   317 #else /* __LP64__ */
       
   318 				"ssssssssss", 
       
   319 #endif /* __LP64__ */
       
   320 				"version", "validRecord", "replacing",
       
   321 			"isStationery", "translationNeeded", 
       
   322 #ifndef __LP64__
       
   323 			"selection", 
       
   324 #endif /* !__LP64__ */
       
   325 			"selection_fsr",
       
   326 			"fileTranslation", "keyScript", "saveFileName");
       
   327 
       
   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);
       
   338 #ifndef __LP64__
       
   339 	if( strcmp(name, "selection") == 0 ) {
       
   340 		SInt32 i;
       
   341 		long count;
       
   342 		OSErr err;
       
   343 		PyObject *rv, *rvitem;
       
   344 		AEDesc desc;
       
   345 		
       
   346 		if ((err=AECountItems(&self->itself.selection, &count))) {
       
   347 			PyErr_Mac(ErrorObject, err);
       
   348 			return NULL;
       
   349 		}
       
   350 		if ( (rv=PyList_New(count)) == NULL )
       
   351 			return NULL;
       
   352 		for(i=0; i<count; i++) {
       
   353 			desc.dataHandle = NULL;
       
   354 			if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSS, NULL, &desc))) {
       
   355 				Py_DECREF(rv);
       
   356 				PyErr_Mac(ErrorObject, err);
       
   357 				return NULL;
       
   358 			}
       
   359 			if ((err=AEGetDescData(&desc, &fss, sizeof(FSSpec)))) {
       
   360 				Py_DECREF(rv);
       
   361 				PyErr_Mac(ErrorObject, err);
       
   362 				return NULL;
       
   363 			}
       
   364 			rvitem = PyMac_BuildFSSpec(&fss);
       
   365 			PyList_SetItem(rv, i, rvitem);
       
   366 			AEDisposeDesc(&desc);
       
   367 		}
       
   368 		return rv;
       
   369 	}
       
   370 #endif /* !__LP64__ */
       
   371 	if( strcmp(name, "selection_fsr") == 0 ) {
       
   372 		SInt32 i;
       
   373 		long count;
       
   374 		OSErr err;
       
   375 		PyObject *rv, *rvitem;
       
   376 		AEDesc desc;
       
   377 		
       
   378 		if ((err=AECountItems(&self->itself.selection, &count))) {
       
   379 			PyErr_Mac(ErrorObject, err);
       
   380 			return NULL;
       
   381 		}
       
   382 		if ( (rv=PyList_New(count)) == NULL )
       
   383 			return NULL;
       
   384 		for(i=0; i<count; i++) {
       
   385 			desc.dataHandle = NULL;
       
   386 			if ((err=AEGetNthDesc(&self->itself.selection, i+1, typeFSRef, NULL, &desc))) {
       
   387 				Py_DECREF(rv);
       
   388 				PyErr_Mac(ErrorObject, err);
       
   389 				return NULL;
       
   390 			}
       
   391 			if ((err=AEGetDescData(&desc, &fsr, sizeof(FSRef)))) {
       
   392 				Py_DECREF(rv);
       
   393 				PyErr_Mac(ErrorObject, err);
       
   394 				return NULL;
       
   395 			}
       
   396 			rvitem = PyMac_BuildFSRef(&fsr);
       
   397 			PyList_SetItem(rv, i, rvitem);
       
   398 			AEDisposeDesc(&desc);
       
   399 		}
       
   400 		return rv;
       
   401 	}
       
   402 #ifndef __LP64__
       
   403 	if( strcmp(name, "fileTranslation") == 0 )
       
   404 		return ResObj_New((Handle)self->itself.fileTranslation);
       
   405 #endif
       
   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);
       
   410 
       
   411 
       
   412 	return Py_FindMethod(navrr_methods, (PyObject *)self, name);
       
   413 }
       
   414 
       
   415 static int
       
   416 navrr_setattr(navrrobject *self, char *name, PyObject *v)
       
   417 {
       
   418 	/* Set attribute 'name' to value 'v'. v==NULL means delete */
       
   419 	
       
   420 	/* XXXX Add your own setattr code here */
       
   421 	return -1;
       
   422 }
       
   423 
       
   424 static char Navrrtype__doc__[] = 
       
   425 "Record containing result of a Nav file selection call. Use dir() for member names."
       
   426 ;
       
   427 
       
   428 static PyTypeObject Navrrtype = {
       
   429 	PyObject_HEAD_INIT(&PyType_Type)
       
   430 	0,				/*ob_size*/
       
   431 	"Nav.NavReplyRecord",			/*tp_name*/
       
   432 	sizeof(navrrobject),		/*tp_basicsize*/
       
   433 	0,				/*tp_itemsize*/
       
   434 	/* methods */
       
   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*/
       
   441 	0,			/*tp_as_number*/
       
   442 	0,		/*tp_as_sequence*/
       
   443 	0,		/*tp_as_mapping*/
       
   444 	(hashfunc)0,		/*tp_hash*/
       
   445 	(ternaryfunc)0,		/*tp_call*/
       
   446 	(reprfunc)0,		/*tp_str*/
       
   447 
       
   448 	/* Space for future expansion */
       
   449 	0L,0L,0L,0L,
       
   450 	Navrrtype__doc__ /* Documentation string */
       
   451 };
       
   452 
       
   453 /* End of code for NavReplyRecord objects */
       
   454 		
       
   455 /* ----------------------------------------------------- */
       
   456 
       
   457 static char nav_NavGetFile__doc__[] =
       
   458 "(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
       
   459 ;
       
   460 
       
   461 static PyObject *
       
   462 nav_NavGetFile(PyObject *self, PyObject *args, PyObject *kw)
       
   463 {
       
   464 	PyObject *dict;
       
   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;
       
   472 	OSErr err;
       
   473 
       
   474 	if ( kw && PyObject_IsTrue(kw) ) {
       
   475 		if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
       
   476 			return NULL;
       
   477 		dict = kw;
       
   478 	} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
       
   479 		return NULL;
       
   480 	if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
       
   481 		return NULL;
       
   482 	err = NavGetFile(defaultLocation, &reply, &dialogOptions,
       
   483 			eventProc, previewProc, filterProc, typeList, (void *)dict);
       
   484 	PyMem_DEL(defaultLocation);
       
   485 	if ( err ) {
       
   486 		PyErr_Mac(ErrorObject, err);
       
   487 		return NULL;
       
   488 	}
       
   489 	return (PyObject *)newnavrrobject(&reply);
       
   490 }
       
   491 
       
   492 static char nav_NavPutFile__doc__[] =
       
   493 "(DialogOptions dict or kwargs+defaultLocation,eventProc,fileCreator,fileType) -> NavReplyRecord"
       
   494 ;
       
   495 
       
   496 static PyObject *
       
   497 nav_NavPutFile(PyObject *self, PyObject *args, PyObject *kw)
       
   498 {
       
   499 	PyObject *dict;
       
   500 	AEDesc	*defaultLocation = NULL;
       
   501 	NavReplyRecord reply;
       
   502 	NavDialogOptions dialogOptions;
       
   503 	NavEventUPP eventProc = NULL;
       
   504 	OSType fileType;
       
   505 	OSType fileCreator;
       
   506 	OSErr err;
       
   507 
       
   508 	if ( kw && PyObject_IsTrue(kw) ) {
       
   509 		if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
       
   510 			return NULL;
       
   511 		dict = kw;
       
   512 	} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
       
   513 		return NULL;
       
   514 	if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, &fileType, &fileCreator))
       
   515 		return NULL;
       
   516 	err = NavPutFile(defaultLocation, &reply, &dialogOptions,
       
   517 			eventProc, fileType, fileCreator, (void *)dict);
       
   518 	PyMem_DEL(defaultLocation);
       
   519 	if ( err ) {
       
   520 		PyErr_Mac(ErrorObject, err);
       
   521 		return NULL;
       
   522 	}
       
   523 	return (PyObject *)newnavrrobject(&reply);
       
   524 }
       
   525 
       
   526 static char nav_NavAskSaveChanges__doc__[] =
       
   527 "(NavAskSaveChangesAction, DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
       
   528 
       
   529 ;
       
   530 
       
   531 static PyObject *
       
   532 nav_NavAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
       
   533 {
       
   534 	PyObject *dict;
       
   535 	NavDialogOptions dialogOptions;
       
   536 	NavAskSaveChangesAction action;
       
   537 	NavAskSaveChangesResult reply;
       
   538 	NavEventUPP eventProc = NULL;
       
   539 	OSErr err;
       
   540 
       
   541 	if ( kw && PyObject_IsTrue(kw) ) {
       
   542 		if (!PyArg_ParseTuple(args, "k", &action))
       
   543 			return NULL;
       
   544 		dict = kw;
       
   545 	} else if (!PyArg_ParseTuple(args, "lO!", &action, &PyDict_Type, &dict))
       
   546 		return NULL;
       
   547 	if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
       
   548 		return NULL;
       
   549 	err = NavAskSaveChanges(&dialogOptions, action, &reply, eventProc, (void *)dict);
       
   550 	if ( err ) {
       
   551 		PyErr_Mac(ErrorObject, err);
       
   552 		return NULL;
       
   553 	}
       
   554 	return Py_BuildValue("l", (long)reply);
       
   555 }
       
   556 
       
   557 static char nav_NavCustomAskSaveChanges__doc__[] =
       
   558 "(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
       
   559 ;
       
   560 
       
   561 static PyObject *
       
   562 nav_NavCustomAskSaveChanges(PyObject *self, PyObject *args, PyObject *kw)
       
   563 {
       
   564 	PyObject *dict;
       
   565 	NavDialogOptions dialogOptions;
       
   566 	NavAskSaveChangesResult reply;
       
   567 	NavEventUPP eventProc = NULL;
       
   568 	OSErr err;
       
   569 
       
   570 	if ( kw && PyObject_IsTrue(kw) ) {
       
   571 		if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
       
   572 			return NULL;
       
   573 		dict = kw;
       
   574 	} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
       
   575 		return NULL;
       
   576 	if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
       
   577 		return NULL;
       
   578 	err = NavCustomAskSaveChanges(&dialogOptions, &reply, eventProc, (void *)dict);
       
   579 	if ( err ) {
       
   580 		PyErr_Mac(ErrorObject, err);
       
   581 		return NULL;
       
   582 	}
       
   583 	return Py_BuildValue("l", (long)reply);
       
   584 }
       
   585 
       
   586 static char nav_NavAskDiscardChanges__doc__[] =
       
   587 "(DialogOptions dict or kwargs+eventProc) -> NavAskSaveChangesResult"
       
   588 ;
       
   589 
       
   590 static PyObject *
       
   591 nav_NavAskDiscardChanges(PyObject *self, PyObject *args, PyObject *kw)
       
   592 {
       
   593 	PyObject *dict;
       
   594 	NavDialogOptions dialogOptions;
       
   595 	NavAskSaveChangesResult reply;
       
   596 	NavEventUPP eventProc = NULL;
       
   597 	OSErr err;
       
   598 
       
   599 	if ( kw && PyObject_IsTrue(kw) ) {
       
   600 		if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
       
   601 			return NULL;
       
   602 		dict = kw;
       
   603 	} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
       
   604 		return NULL;
       
   605 	if (!filldialogoptions(dict, NULL, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
       
   606 		return NULL;
       
   607 	err = NavAskDiscardChanges(&dialogOptions, &reply, eventProc, (void *)dict);
       
   608 	if ( err ) {
       
   609 		PyErr_Mac(ErrorObject, err);
       
   610 		return NULL;
       
   611 	}
       
   612 	return Py_BuildValue("l", (long)reply);
       
   613 }
       
   614 
       
   615 static char nav_NavChooseFile__doc__[] =
       
   616 "(DialogOptions dict or kwargs+defaultLocation,eventProc,previewProc,filterProc,typeList) -> NavReplyRecord"
       
   617 ;
       
   618 
       
   619 static PyObject *
       
   620 nav_NavChooseFile(PyObject *self, PyObject *args, PyObject *kw)
       
   621 {
       
   622 	PyObject *dict;
       
   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;
       
   630 	OSErr err;
       
   631 
       
   632 	if ( kw && PyObject_IsTrue(kw) ) {
       
   633 		if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
       
   634 			return NULL;
       
   635 		dict = kw;
       
   636 	} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
       
   637 		return NULL;
       
   638 	if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, &previewProc, &filterProc, &typeList, NULL, NULL))
       
   639 		return NULL;
       
   640 	err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
       
   641 			eventProc, previewProc, filterProc, typeList, (void *)dict);
       
   642 	PyMem_DEL(defaultLocation);
       
   643 	if ( err ) {
       
   644 		PyErr_Mac(ErrorObject, err);
       
   645 		return NULL;
       
   646 	}
       
   647 	return (PyObject *)newnavrrobject(&reply);
       
   648 }
       
   649 
       
   650 static char nav_NavChooseFolder__doc__[] =
       
   651 "(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
       
   652 ;
       
   653 
       
   654 static PyObject *
       
   655 nav_NavChooseFolder(PyObject *self, PyObject *args, PyObject *kw)
       
   656 {
       
   657 	PyObject *dict;
       
   658 	AEDesc	*defaultLocation = NULL;
       
   659 	NavReplyRecord reply;
       
   660 	NavDialogOptions dialogOptions;
       
   661 	NavEventUPP eventProc = NULL;
       
   662 	NavObjectFilterUPP filterProc = NULL;
       
   663 	OSErr err;
       
   664 
       
   665 	if ( kw && PyObject_IsTrue(kw) ) {
       
   666 		if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
       
   667 			return NULL;
       
   668 		dict = kw;
       
   669 	} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
       
   670 		return NULL;
       
   671 	if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
       
   672 		return NULL;
       
   673 	err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
       
   674 			eventProc, filterProc, (void *)dict);
       
   675 	PyMem_DEL(defaultLocation);
       
   676 	if ( err ) {
       
   677 		PyErr_Mac(ErrorObject, err);
       
   678 		return NULL;
       
   679 	}
       
   680 	return (PyObject *)newnavrrobject(&reply);
       
   681 }
       
   682 
       
   683 static char nav_NavChooseVolume__doc__[] =
       
   684 "(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
       
   685 ;
       
   686 
       
   687 static PyObject *
       
   688 nav_NavChooseVolume(PyObject *self, PyObject *args, PyObject *kw)
       
   689 {
       
   690 	PyObject *dict;
       
   691 	AEDesc	*defaultLocation = NULL;
       
   692 	NavReplyRecord reply;
       
   693 	NavDialogOptions dialogOptions;
       
   694 	NavEventUPP eventProc = NULL;
       
   695 	NavObjectFilterUPP filterProc = NULL;
       
   696 	OSErr err;
       
   697 
       
   698 	if ( kw && PyObject_IsTrue(kw) ) {
       
   699 		if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
       
   700 			return NULL;
       
   701 		dict = kw;
       
   702 	} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
       
   703 		return NULL;
       
   704 	if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
       
   705 		return NULL;
       
   706 	err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
       
   707 			eventProc, filterProc, (void *)dict);
       
   708 	PyMem_DEL(defaultLocation);
       
   709 	if ( err ) {
       
   710 		PyErr_Mac(ErrorObject, err);
       
   711 		return NULL;
       
   712 	}
       
   713 	return (PyObject *)newnavrrobject(&reply);
       
   714 }
       
   715 
       
   716 static char nav_NavChooseObject__doc__[] =
       
   717 "(DialogOptions dict or kwargs+defaultLocation,eventProc,filterProc) -> NavReplyRecord"
       
   718 ;
       
   719 
       
   720 static PyObject *
       
   721 nav_NavChooseObject(PyObject *self, PyObject *args, PyObject *kw)
       
   722 {
       
   723 	PyObject *dict;
       
   724 	AEDesc	*defaultLocation = NULL;
       
   725 	NavReplyRecord reply;
       
   726 	NavDialogOptions dialogOptions;
       
   727 	NavEventUPP eventProc = NULL;
       
   728 	NavObjectFilterUPP filterProc = NULL;
       
   729 	OSErr err;
       
   730 
       
   731 	if ( kw && PyObject_IsTrue(kw) ) {
       
   732 		if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
       
   733 			return NULL;
       
   734 		dict = kw;
       
   735 	} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
       
   736 		return NULL;
       
   737 	if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, &filterProc, NULL, NULL, NULL))
       
   738 		return NULL;
       
   739 	err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
       
   740 			eventProc, filterProc, (void *)dict);
       
   741 	PyMem_DEL(defaultLocation);
       
   742 	if ( err ) {
       
   743 		PyErr_Mac(ErrorObject, err);
       
   744 		return NULL;
       
   745 	}
       
   746 	return (PyObject *)newnavrrobject(&reply);
       
   747 }
       
   748 
       
   749 static char nav_NavNewFolder__doc__[] =
       
   750 "(DialogOptions dict or kwargs+defaultLocation,eventProc) -> NavReplyRecord"
       
   751 ;
       
   752 
       
   753 static PyObject *
       
   754 nav_NavNewFolder(PyObject *self, PyObject *args, PyObject *kw)
       
   755 {
       
   756 	PyObject *dict;
       
   757 	AEDesc	*defaultLocation = NULL;
       
   758 	NavReplyRecord reply;
       
   759 	NavDialogOptions dialogOptions;
       
   760 	NavEventUPP eventProc = NULL;
       
   761 	OSErr err;
       
   762 
       
   763 	if ( kw && PyObject_IsTrue(kw) ) {
       
   764 		if (!PyArg_ParseTuple(args, ";either keyword arguments or dictionary expected"))
       
   765 			return NULL;
       
   766 		dict = kw;
       
   767 	} else if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &dict))
       
   768 		return NULL;
       
   769 	if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
       
   770 		return NULL;
       
   771 	err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
       
   772 	PyMem_DEL(defaultLocation);
       
   773 	if ( err ) {
       
   774 		PyErr_Mac(ErrorObject, err);
       
   775 		return NULL;
       
   776 	}
       
   777 	return (PyObject *)newnavrrobject(&reply);
       
   778 }
       
   779 
       
   780 #if 0
       
   781 /* XXXX I don't know what to do with the void * argument */
       
   782 static char nav_NavCustomControl__doc__[] =
       
   783 ""
       
   784 ;
       
   785 
       
   786 
       
   787 static PyObject *
       
   788 nav_NavCustomControl(PyObject *self, PyObject *args)
       
   789 {
       
   790 
       
   791 	if (!PyArg_ParseTuple(args, ""))
       
   792 		return NULL;
       
   793 	Py_INCREF(Py_None);
       
   794 	return Py_None;
       
   795 }
       
   796 #endif
       
   797 
       
   798 static char nav_NavServicesCanRun__doc__[] =
       
   799 "()->int"
       
   800 ;
       
   801 
       
   802 static PyObject *
       
   803 nav_NavServicesCanRun(PyObject *self, PyObject *args)
       
   804 {
       
   805 	Boolean rv;
       
   806 	if (!PyArg_ParseTuple(args, ""))
       
   807 		return NULL;
       
   808 	rv = NavServicesCanRun();
       
   809 	return Py_BuildValue("l", (long)rv);
       
   810 }
       
   811 
       
   812 static char nav_NavServicesAvailable__doc__[] =
       
   813 "()->int"
       
   814 ;
       
   815 
       
   816 static PyObject *
       
   817 nav_NavServicesAvailable(PyObject *self, PyObject *args)
       
   818 {
       
   819 	Boolean rv;
       
   820 	
       
   821 	if (!PyArg_ParseTuple(args, ""))
       
   822 		return NULL;
       
   823 	rv = NavServicesAvailable();
       
   824 	return Py_BuildValue("l", (long)rv);
       
   825 }
       
   826 /* XX */
       
   827 static char nav_NavLoad__doc__[] =
       
   828 "()->None"
       
   829 ;
       
   830 
       
   831 static PyObject *
       
   832 nav_NavLoad(PyObject *self, PyObject *args)
       
   833 {
       
   834 
       
   835 	if (!PyArg_ParseTuple(args, ""))
       
   836 		return NULL;
       
   837 	NavLoad();
       
   838 	Py_INCREF(Py_None);
       
   839 	return Py_None;
       
   840 }
       
   841 
       
   842 static char nav_NavUnload__doc__[] =
       
   843 "()->None"
       
   844 ;
       
   845 
       
   846 static PyObject *
       
   847 nav_NavUnload(PyObject *self, PyObject *args)
       
   848 {
       
   849 
       
   850 	if (!PyArg_ParseTuple(args, ""))
       
   851 		return NULL;
       
   852 	NavUnload();
       
   853 	Py_INCREF(Py_None);
       
   854 	return Py_None;
       
   855 }
       
   856 
       
   857 static char nav_NavLibraryVersion__doc__[] =
       
   858 "()->int"
       
   859 ;
       
   860 
       
   861 static PyObject *
       
   862 nav_NavLibraryVersion(PyObject *self, PyObject *args)
       
   863 {
       
   864 	UInt32 rv;
       
   865 	
       
   866 	if (!PyArg_ParseTuple(args, ""))
       
   867 		return NULL;
       
   868 	rv = NavLibraryVersion();
       
   869 	return Py_BuildValue("l", (long)rv);
       
   870 }
       
   871 
       
   872 static char nav_NavGetDefaultDialogOptions__doc__[] =
       
   873 "()->dict\nPass dict or keyword args with same names to other calls."
       
   874 ;
       
   875 
       
   876 static PyObject *
       
   877 nav_NavGetDefaultDialogOptions(PyObject *self, PyObject *args)
       
   878 {
       
   879 	NavDialogOptions dialogOptions;
       
   880 	OSErr err;
       
   881 	
       
   882 	err = NavGetDefaultDialogOptions(&dialogOptions);
       
   883 	if ( err ) {
       
   884 		PyErr_Mac(ErrorObject, err);
       
   885 		return NULL;
       
   886 	}
       
   887 	return Py_BuildValue(
       
   888 #ifndef __LP64__
       
   889 			"{s:h,s:l,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&,s:O&}",
       
   890 #else /* __LP64__ */
       
   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
       
   903 #ifndef __LP64__
       
   904 		,"popupExtension", OptResObj_New, dialogOptions.popupExtension
       
   905 #endif /* __LP64__ */
       
   906 		);
       
   907 }
       
   908 
       
   909 /* List of methods defined in the module */
       
   910 
       
   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__},
       
   922 #if 0
       
   923  {"NavCustomControl",	(PyCFunction)nav_NavCustomControl,	METH_VARARGS,	nav_NavCustomControl__doc__},
       
   924 #endif
       
   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 */
       
   932 };
       
   933 
       
   934 
       
   935 /* Initialization function for the module (*must* be called initNav) */
       
   936 
       
   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."
       
   944 ;
       
   945 
       
   946 void
       
   947 initNav(void)
       
   948 {
       
   949 	PyObject *m, *d;
       
   950 	
       
   951 	if (PyErr_WarnPy3k("In 3.x, Nav is removed.", 1))
       
   952 		return;
       
   953 
       
   954 	/* Test that we have NavServices */
       
   955 	if ( !NavServicesAvailable() ) {
       
   956 		PyErr_SetString(PyExc_ImportError, "Navigation Services not available");
       
   957 		return;
       
   958 	}
       
   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);
       
   963 
       
   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);
       
   968 
       
   969 	/* XXXX Add constants here */
       
   970 	
       
   971 	/* Set UPPs */
       
   972 	my_eventProcUPP = NewNavEventUPP(my_eventProc);
       
   973 	my_previewProcUPP = NewNavPreviewUPP(my_previewProc);
       
   974 	my_filterProcUPP = NewNavObjectFilterUPP(my_filterProc);
       
   975 	
       
   976 }
       
   977