X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4d4d8bbfad1a07877877c69230e12306609d19eb..4eb1fe9da6dbf2a82876547b6f69836e086f22e7:/src/mac/filedlg.cpp

diff --git a/src/mac/filedlg.cpp b/src/mac/filedlg.cpp
index b0884be347..6ca66d390f 100644
--- a/src/mac/filedlg.cpp
+++ b/src/mac/filedlg.cpp
@@ -19,8 +19,9 @@
 #include "wx/dialog.h"
 #include "wx/filedlg.h"
 #include "wx/intl.h"
+#include "wx/tokenzr.h"
 
-#if !defined(__UNIX__)
+#ifndef __DARWIN__
   #include "PLStringFuncs.h"
 #endif
 
@@ -30,19 +31,10 @@ IMPLEMENT_CLASS(wxFileDialog, wxDialog)
 
 // begin wxmac
 
-#if defined(__UNIX__)
-  #include <Carbon/Carbon.h>
-#else
-  #include <Navigation.h>
-#endif
+#include <Navigation.h>
 
-#ifndef __UNIX__
-  #include "morefile.h"
-  #include "moreextr.h"
-  #include "fullpath.h"
-  #include "fspcompa.h"
-  #include "PLStringFuncs.h"
-#endif
+#include "MoreFiles.h"
+#include "MoreFilesExtras.h"
 
 extern bool gUseNavServices ;
 
@@ -101,7 +93,7 @@ NavEventProc(
 	}
 }
 
-char * gfilters[] =
+const char * gfilters[] =
 {
 	"*.TXT" ,
 	"*.TIF" ,
@@ -276,7 +268,7 @@ void MakeUserDataRec(OpenUserDataRec	*myData , const wxString& filter )
         current += filter2.GetChar(i) ;
        }
     }
-    if ( filterIndex > 0 )
+//    if ( filterIndex > 0 )
     {
       wxASSERT_MSG( !isName , "incorrect format of format string" ) ;
       myData->extensions[filterIndex] = current.MakeUpper() ;
@@ -307,6 +299,8 @@ void MakeUserDataRec(OpenUserDataRec	*myData , const wxString& filter )
 	}
 
 }
+
+#ifndef __DARWIN__
 void ExtendedOpenFile( ConstStr255Param message , ConstStr255Param path , const char *filter , FileFilterYDUPP fileFilter, StandardFileReply *theSFR )
 {
 	Point 				thePt;
@@ -343,16 +337,16 @@ void ExtendedOpenFile( ConstStr255Param message , ConstStr255Param path , const
 	ParamText( message , NULL , NULL , NULL ) ;
 	
 	CustomGetFile(	fileFilter, 
-					-1,					// show all types
-					NULL,
-					theSFR,
-					kSFGetFileDlgID,
-					thePt,				// top left point
-					dlgHookUPP,
-					myModalFilterUPP,
-					nil,				// activate list
-					nil,				// activate proc
-					&myData);
+			-1,		       		// show all types
+			NULL,
+			theSFR,
+			kSFGetFileDlgID,
+			thePt,				// top left point
+			dlgHookUPP,
+			myModalFilterUPP,
+			nil,				// activate list
+			nil,				// activate proc
+			&myData);
 					
 	DisposeRoutineDescriptor(dlgHookUPP);
 	DisposeRoutineDescriptor(myModalFilterUPP);
@@ -368,7 +362,7 @@ void ExtendedOpenFile( ConstStr255Param message , ConstStr255Param path , const
 		if (theSFR->sfFile.name[0] == '\0')
 		{
 			err = FSMakeFSSpec(theSFR->sfFile.vRefNum, theSFR->sfFile.parID,
-								"\p", &tempSpec);
+					   "\p", &tempSpec);
 			if (err == noErr)
 			{
 				theSFR->sfFile = tempSpec;
@@ -411,39 +405,49 @@ void ExtendedOpenFile( ConstStr255Param message , ConstStr255Param path , const
 		}
 	}
 }
+#endif
 
 static Boolean CheckFile( ConstStr255Param name , OSType type , OpenUserDataRecPtr data)
 {
-	  Str255 			filename ;
-		PLstrcpy( filename , name ) ;
-
-		if ( data->numfilters > 0 )
-		{
-  		for( int j = 1 ; j <= filename[0] ; j++ )
-  		{
-  			filename[j] = toupper( filename[j] ) ;
-  		}
-  		//for ( int i = 0 ; i < data->numfilters ; ++i )
-  		int i = data->currentfilter ;
-  		if ( data->extensions[i].Right(2) == ".*" )
-  		  return true ;
-  		  
-  		{
-  			if ( type == data->filtermactypes[i] )
-  				return true ;
-
-        wxString extension = data->extensions[i] ;
-        if ( extension.GetChar(0) == '*' )
-          extension = extension.Mid(1) ;
-
-  			if ( filename[0] >= extension.Len() && extension == (char*) filename + 1 + filename[0] - extension.Len() )
-  					return true ;
-  		}
-  		return false ;
-  	}
-  	return true ;
+    Str255 			filename ;
+    
+#if TARGET_CARBON
+    p2cstrcpy((char *)filename, name) ;
+#else
+    PLstrcpy( filename , name ) ;
+    p2cstr( filename ) ;
+#endif
+    wxString file(filename) ;
+    file.MakeUpper() ;
+    
+    if ( data->numfilters > 0 )
+    {
+	//for ( int i = 0 ; i < data->numfilters ; ++i )
+	    int i = data->currentfilter ;
+	    if ( data->extensions[i].Right(2) == ".*" )
+	      return true ;
+	
+	    {
+	      if ( type == data->filtermactypes[i] )
+		      return true ;
+	    
+	      wxStringTokenizer tokenizer( data->extensions[i] , ";" ) ;
+	      while( tokenizer.HasMoreTokens() )
+	      {
+	        wxString extension = tokenizer.GetNextToken() ;
+  	      if ( extension.GetChar(0) == '*' )
+  		      extension = extension.Mid(1) ;
+  	    
+  	      if ( file.Len() >= extension.Len() && extension == file.Right(extension.Len() ) )
+  		      return true ;
+		    }
+	    }
+	    return false ;
+    }
+    return true ;
 }
 
+#ifndef __DARWIN__
 static pascal Boolean CrossPlatformFileFilter(CInfoPBPtr myCInfoPBPtr, void *dataPtr)
 {	
 	OpenUserDataRecPtr data = (OpenUserDataRecPtr) dataPtr ;
@@ -468,6 +472,7 @@ static pascal Boolean CrossPlatformFileFilter(CInfoPBPtr myCInfoPBPtr, void *dat
 		
 	return false ;
 }
+#endif
 
 // end wxmac
 
@@ -547,7 +552,7 @@ wxFileDialog::wxFileDialog(wxWindow *parent, const wxString& message,
 }
 
 
-Boolean CrossPlatformFilterCallback (
+pascal Boolean CrossPlatformFilterCallback (
     AEDesc *theItem, 
     void *info, 
     void *callBackUD, 
@@ -573,7 +578,7 @@ Boolean CrossPlatformFilterCallback (
 
 int wxFileDialog::ShowModal()
 {
-	#if !TARGET_CARBON
+#if !TARGET_CARBON
 	if ( !gUseNavServices )
 	{
 	if ( m_dialogStyle & wxSAVE )
@@ -582,25 +587,12 @@ int wxFileDialog::ShowModal()
 		Str255				prompt ;
 		Str255				filename ;
 
-#if TARGET_CARBON
-		c2pstrcpy((StringPtr)prompt, m_message) ;
-#else
 		strcpy((char *)prompt, m_message) ;
 		c2pstr((char *)prompt ) ;
-#endif
-#if TARGET_CARBON
-		c2pstrcpy((StringPtr)filename, m_fileName) ;
-#else
 		strcpy((char *)filename, m_fileName) ;
 		c2pstr((char *)filename ) ;
-#endif
 
-		#if !TARGET_CARBON
-		
 		StandardPutFile( prompt , filename , &reply ) ;
-	
-		#else
-		#endif
 		if ( reply.sfGood == false )
 		{
 			m_path = "" ;
@@ -618,18 +610,10 @@ int wxFileDialog::ShowModal()
 		Str255				prompt ;
 		Str255				path ;
 
-#if TARGET_CARBON
-		c2pstrcpy((StringPtr)prompt, m_message) ;
-#else
 		strcpy((char *)prompt, m_message) ;
 		c2pstr((char *)prompt ) ;
-#endif
-#if TARGET_CARBON
-		c2pstrcpy((StringPtr)path, m_dir ) ;
-#else
 		strcpy((char *)path, m_dir ) ;
 		c2pstr((char *)path ) ;
-#endif
 
 		StandardFileReply	reply ;
 		FileFilterYDUPP crossPlatformFileFilterUPP = 0 ;
@@ -649,7 +633,7 @@ int wxFileDialog::ShowModal()
 		}
 		else
 		{
-			m_path = wxMacFSSpec2MacFilename( &reply.sfFile ) ;
+			m_path = wxMacFSSpec2UnixFilename( &reply.sfFile ) ;
 			return wxID_OK ;
 		}
 	}
@@ -752,7 +736,7 @@ int wxFileDialog::ShowModal()
 	  	  }
 	  	}
 
-      mNavFilterUPP = NewNavObjectFilterProc( CrossPlatformFilterCallback ) ;
+      mNavFilterUPP = NewNavObjectFilterUPP( CrossPlatformFilterCallback ) ;
 			if ( m_dialogStyle & wxMULTIPLE )
 				mNavOptions.dialogOptionFlags |= kNavAllowMultipleFiles ;
 			else
@@ -786,12 +770,13 @@ int wxFileDialog::ShowModal()
 		
 			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, NULL , &specDesc);
+				OSErr err = ::AEGetNthDesc( &mNavReply.selection , i , typeFSS, &keyWord , &specDesc);
 				if ( err != noErr ) {
 					m_path = "" ;
 					return wxID_CANCEL ;
@@ -811,7 +796,7 @@ int wxFileDialog::ShowModal()
 	         m_path = m_paths[ 0 ] ;
 	         m_fileName = wxFileNameFromPath(m_path);
 	         m_dir = wxPathOnly(m_path);
-            
+       NavDisposeReply( &mNavReply ) ;
 			return wxID_OK ;
 		}
 		return wxID_CANCEL;