- if ( m_dialogStyle & wxSAVE )
- {
-
- mNavOptions.dialogOptionFlags |= kNavNoTypePopup ;
- mNavOptions.dialogOptionFlags |= kNavDontAutoTranslate ;
- mNavOptions.dialogOptionFlags |= kNavDontAddTranslateItems ;
-
- err = ::NavPutFile(
- &mDefaultLocation,
- &mNavReply,
- &mNavOptions,
- sStandardNavEventFilter ,
- 'TEXT',
- 'TEXT',
- 0L); // User Data
- }
- else
- {
- OpenUserDataRec myData;
- MakeUserDataRec( &myData , m_wildCard ) ;
- NavTypeListHandle typelist = NULL ;
-
- if ( myData.numfilters > 0 )
- {
- mNavOptions.popupExtension = (NavMenuItemSpecArrayHandle) NewHandle( sizeof( NavMenuItemSpec ) * myData.numfilters ) ;
- for ( int i = 0 ; i < myData.numfilters ; ++i ) {
- (*mNavOptions.popupExtension)[i].version = kNavMenuItemSpecVersion ;
- (*mNavOptions.popupExtension)[i].menuCreator = 'WXNG' ;
- (*mNavOptions.popupExtension)[i].menuType = i ;
- #if TARGET_CARBON
- c2pstrcpy((StringPtr)(*mNavOptions.popupExtension)[i].menuItemName, myData.name[i]) ;
- #else
- strcpy((char *)(*mNavOptions.popupExtension)[i].menuItemName, myData.name[i]) ;
- c2pstr((char *)(*mNavOptions.popupExtension)[i].menuItemName ) ;
- #endif
- }
- }
-
- mNavFilterUPP = NewNavObjectFilterUPP( CrossPlatformFilterCallback ) ;
- if ( m_dialogStyle & wxMULTIPLE )
- mNavOptions.dialogOptionFlags |= kNavAllowMultipleFiles ;
- else
- mNavOptions.dialogOptionFlags &= ~kNavAllowMultipleFiles ;
-
- err = ::NavGetFile(
- &mDefaultLocation,
- &mNavReply,
- &mNavOptions,
- sStandardNavEventFilter ,
- mNavPreviewUPP,
- mNavFilterUPP,
- typelist /*inFileTypes.TypeListHandle() */,
- &myData); // User Data
- if ( typelist )
- DisposeHandle( (Handle) typelist ) ;
- }
-
- DisposeNavObjectFilterUPP(mNavFilterUPP);
- if ( mDefaultLocation.dataHandle != nil )
- {
- ::AEDisposeDesc(&mDefaultLocation);
- }
-
- if ( (err != noErr) && (err != userCanceledErr) ) {
- m_path = "" ;
- return wxID_CANCEL ;
- }
-
- if (mNavReply.validRecord) {
-
- FSSpec outFileSpec ;
- AEDesc specDesc ;
- AEKeyword keyWord ;
-
- long count ;
- ::AECountItems( &mNavReply.selection , &count ) ;
- for ( long i = 1 ; i <= count ; ++i )
- {
- OSErr err = ::AEGetNthDesc( &mNavReply.selection , i , typeFSS, &keyWord , &specDesc);
- if ( err != noErr ) {
- m_path = "" ;
- return wxID_CANCEL ;
- }
- outFileSpec = **(FSSpec**) specDesc.dataHandle;
- if (specDesc.dataHandle != nil) {
- ::AEDisposeDesc(&specDesc);
- }
-
-
- // outFolderDirID = thePB.dirInfo.ioDrDirID;
- m_path = wxMacFSSpec2MacFilename( &outFileSpec ) ;
- m_paths.Add( m_path ) ;
- m_fileNames.Add(m_fileName);
- }
- // set these to the first hit
- m_path = m_paths[ 0 ] ;
- m_fileName = wxFileNameFromPath(m_path);
- m_dir = wxPathOnly(m_path);
- NavDisposeReply( &mNavReply ) ;
- return wxID_OK ;
- }
- return wxID_CANCEL;
- }
-}
-
-// Generic file load/save dialog
-static wxString
-wxDefaultFileSelector(bool load, const char *what, const char *extension, const char *default_name, wxWindow *parent)
-{
- char *ext = (char *)extension;
-
- char prompt[50];
- wxString str;
- if (load)
- str = "Load %s file";
- else
- str = "Save %s file";
- sprintf(prompt, wxGetTranslation(str), what);
-
- if (*ext == '.') ext++;
- char wild[60];
- sprintf(wild, "*.%s", ext);
-
- return wxFileSelector (prompt, NULL, default_name, ext, wild, 0, parent);
-}
-
-// Generic file load dialog
-wxString
-wxLoadFileSelector(const char *what, const char *extension, const char *default_name, wxWindow *parent)
-{
- return wxDefaultFileSelector(TRUE, what, extension, default_name, parent);
-}
+ memset( &mNavReply , 0 , sizeof( mNavReply ) ) ;
+ mNavReply.validRecord = false;
+ mNavReply.replacing = false;
+ mNavReply.isStationery = false;
+ mNavReply.translationNeeded = false;
+ mNavReply.selection.descriptorType = typeNull;
+ mNavReply.selection.dataHandle = nil;
+ mNavReply.keyScript = smSystemScript;
+ mNavReply.fileTranslation = nil;
+ mNavReply.version = kNavReplyRecordVersion ;
+
+ // zero all data
+
+ m_path = wxEmptyString ;
+ m_fileName = wxEmptyString ;
+ m_paths.Empty();
+ m_fileNames.Empty();
+
+ OpenUserDataRec myData;
+ MakeUserDataRec( &myData , m_wildCard ) ;
+ myData.currentfilter = m_filterIndex ;
+ if ( myData.extensions.GetCount() > 0 )
+ {
+#if TARGET_CARBON
+ CFMutableArrayRef popup = CFArrayCreateMutable( kCFAllocatorDefault ,
+ myData.extensions.GetCount() , &kCFTypeArrayCallBacks ) ;
+ mNavOptions.popupExtension = popup ;
+ myData.menuitems = mNavOptions.popupExtension ;
+ for ( size_t i = 0 ; i < myData.extensions.GetCount() ; ++i )
+ {
+ CFArrayAppendValue( popup , (CFStringRef) wxMacCFStringHolder( myData.name[i] ) ) ;
+ }
+#else
+ mNavOptions.popupExtension = (NavMenuItemSpecArrayHandle) NewHandle( sizeof( NavMenuItemSpec ) * myData.extensions.GetCount() ) ;
+ myData.menuitems = mNavOptions.popupExtension ;
+ for ( size_t i = 0 ; i < myData.extensions.GetCount() ; ++i )
+ {
+ (*mNavOptions.popupExtension)[i].version = kNavMenuItemSpecVersion ;
+ (*mNavOptions.popupExtension)[i].menuCreator = 'WXNG' ;
+ // TODO : according to the new docs -1 to 10 are reserved for the OS
+ (*mNavOptions.popupExtension)[i].menuType = i ;
+ wxMacStringToPascal( myData.name[i] , (StringPtr)(*mNavOptions.popupExtension)[i].menuItemName ) ;
+ }
+#endif
+ }
+ if ( m_dialogStyle & wxSAVE )
+ {
+ myData.saveMode = true ;