]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/filedlg.cpp
fix for using wxDataObjectComposite with the clipboard
[wxWidgets.git] / src / mac / filedlg.cpp
index 1d6fd58d44d32371f335a4b7fa0157b46cd6daa9..6ca66d390fc4a8f7b6c44af9a88b55b1bc86120f 100644 (file)
@@ -19,6 +19,7 @@
 #include "wx/dialog.h"
 #include "wx/filedlg.h"
 #include "wx/intl.h"
 #include "wx/dialog.h"
 #include "wx/filedlg.h"
 #include "wx/intl.h"
+#include "wx/tokenzr.h"
 
 #ifndef __DARWIN__
   #include "PLStringFuncs.h"
 
 #ifndef __DARWIN__
   #include "PLStringFuncs.h"
@@ -30,17 +31,10 @@ IMPLEMENT_CLASS(wxFileDialog, wxDialog)
 
 // begin wxmac
 
 
 // begin wxmac
 
-#ifndef __DARWIN__
-  #include <Navigation.h>
-#endif
+#include <Navigation.h>
 
 
-#ifndef __DARWIN__
-  #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 ;
 
 
 extern bool gUseNavServices ;
 
@@ -99,7 +93,7 @@ NavEventProc(
        }
 }
 
        }
 }
 
-char * gfilters[] =
+const char * gfilters[] =
 {
        "*.TXT" ,
        "*.TIF" ,
 {
        "*.TXT" ,
        "*.TIF" ,
@@ -274,7 +268,7 @@ void MakeUserDataRec(OpenUserDataRec        *myData , const wxString& filter )
         current += filter2.GetChar(i) ;
        }
     }
         current += filter2.GetChar(i) ;
        }
     }
-    if ( filterIndex > 0 )
+//    if ( filterIndex > 0 )
     {
       wxASSERT_MSG( !isName , "incorrect format of format string" ) ;
       myData->extensions[filterIndex] = current.MakeUpper() ;
     {
       wxASSERT_MSG( !isName , "incorrect format of format string" ) ;
       myData->extensions[filterIndex] = current.MakeUpper() ;
@@ -305,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;
 void ExtendedOpenFile( ConstStr255Param message , ConstStr255Param path , const char *filter , FileFilterYDUPP fileFilter, StandardFileReply *theSFR )
 {
        Point                           thePt;
@@ -341,16 +337,16 @@ void ExtendedOpenFile( ConstStr255Param message , ConstStr255Param path , const
        ParamText( message , NULL , NULL , NULL ) ;
        
        CustomGetFile(  fileFilter, 
        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);
                                        
        DisposeRoutineDescriptor(dlgHookUPP);
        DisposeRoutineDescriptor(myModalFilterUPP);
@@ -366,7 +362,7 @@ void ExtendedOpenFile( ConstStr255Param message , ConstStr255Param path , const
                if (theSFR->sfFile.name[0] == '\0')
                {
                        err = FSMakeFSSpec(theSFR->sfFile.vRefNum, theSFR->sfFile.parID,
                if (theSFR->sfFile.name[0] == '\0')
                {
                        err = FSMakeFSSpec(theSFR->sfFile.vRefNum, theSFR->sfFile.parID,
-                                                               "\p", &tempSpec);
+                                          "\p", &tempSpec);
                        if (err == noErr)
                        {
                                theSFR->sfFile = tempSpec;
                        if (err == noErr)
                        {
                                theSFR->sfFile = tempSpec;
@@ -409,38 +405,49 @@ void ExtendedOpenFile( ConstStr255Param message , ConstStr255Param path , const
                }
        }
 }
                }
        }
 }
+#endif
 
 static Boolean CheckFile( ConstStr255Param name , OSType type , OpenUserDataRecPtr data)
 {
 
 static Boolean CheckFile( ConstStr255Param name , OSType type , OpenUserDataRecPtr data)
 {
-         Str255                        filename ;
-               PLstrcpy( filename , name ) ;
+    Str255                     filename ;
+    
+#if TARGET_CARBON
+    p2cstrcpy((char *)filename, name) ;
+#else
+    PLstrcpy( filename , name ) ;
     p2cstr( filename ) ;
     p2cstr( filename ) ;
+#endif
     wxString file(filename) ;
     file.MakeUpper() ;
     
     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 ;
-
-        wxString extension = data->extensions[i] ;
-        if ( extension.GetChar(0) == '*' )
-          extension = extension.Mid(1) ;
-
-                       if ( file.Len() >= extension.Len() && extension == file.Right(extension.Len() ) )
-                                       return true ;
-               }
-               return false ;
-       }
-       return true ;
+    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 ;
 static pascal Boolean CrossPlatformFileFilter(CInfoPBPtr myCInfoPBPtr, void *dataPtr)
 {      
        OpenUserDataRecPtr data = (OpenUserDataRecPtr) dataPtr ;
@@ -465,6 +472,7 @@ static pascal Boolean CrossPlatformFileFilter(CInfoPBPtr myCInfoPBPtr, void *dat
                
        return false ;
 }
                
        return false ;
 }
+#endif
 
 // end wxmac
 
 
 // end wxmac
 
@@ -560,11 +568,7 @@ pascal Boolean CrossPlatformFilterCallback (
                if (theItem->descriptorType == typeFSS && !theInfo->isFolder)
                {
                  FSSpec        spec;
                if (theItem->descriptorType == typeFSS && !theInfo->isFolder)
                {
                  FSSpec        spec;
-#if TARGET_CARBON
-                 ::AEGetDescData(theItem, &spec, sizeof(FSSpec) ) ;
-#else
-                 memcpy( &spec , (*theItem->dataHandle) , sizeof(FSSpec) ) ;
-#endif
+                 memcpy( &spec , *theItem->dataHandle , sizeof(FSSpec) ) ;
                  display = CheckFile( spec.name , theInfo->fileAndFolder.fileInfo.finderInfo.fdType , data ) ;
                }
        }
                  display = CheckFile( spec.name , theInfo->fileAndFolder.fileInfo.finderInfo.fdType , data ) ;
                }
        }
@@ -574,7 +578,7 @@ pascal Boolean CrossPlatformFilterCallback (
 
 int wxFileDialog::ShowModal()
 {
 
 int wxFileDialog::ShowModal()
 {
-       #if !TARGET_CARBON
+#if !TARGET_CARBON
        if ( !gUseNavServices )
        {
        if ( m_dialogStyle & wxSAVE )
        if ( !gUseNavServices )
        {
        if ( m_dialogStyle & wxSAVE )
@@ -583,25 +587,12 @@ int wxFileDialog::ShowModal()
                Str255                          prompt ;
                Str255                          filename ;
 
                Str255                          prompt ;
                Str255                          filename ;
 
-#if TARGET_CARBON
-               c2pstrcpy((StringPtr)prompt, m_message) ;
-#else
                strcpy((char *)prompt, m_message) ;
                c2pstr((char *)prompt ) ;
                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 ) ;
                strcpy((char *)filename, m_fileName) ;
                c2pstr((char *)filename ) ;
-#endif
 
 
-               #if !TARGET_CARBON
-               
                StandardPutFile( prompt , filename , &reply ) ;
                StandardPutFile( prompt , filename , &reply ) ;
-       
-               #else
-               #endif
                if ( reply.sfGood == false )
                {
                        m_path = "" ;
                if ( reply.sfGood == false )
                {
                        m_path = "" ;
@@ -619,18 +610,10 @@ int wxFileDialog::ShowModal()
                Str255                          prompt ;
                Str255                          path ;
 
                Str255                          prompt ;
                Str255                          path ;
 
-#if TARGET_CARBON
-               c2pstrcpy((StringPtr)prompt, m_message) ;
-#else
                strcpy((char *)prompt, m_message) ;
                c2pstr((char *)prompt ) ;
                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 ) ;
                strcpy((char *)path, m_dir ) ;
                c2pstr((char *)path ) ;
-#endif
 
                StandardFileReply       reply ;
                FileFilterYDUPP crossPlatformFileFilterUPP = 0 ;
 
                StandardFileReply       reply ;
                FileFilterYDUPP crossPlatformFileFilterUPP = 0 ;
@@ -650,7 +633,7 @@ int wxFileDialog::ShowModal()
                }
                else
                {
                }
                else
                {
-                       m_path = wxMacFSSpec2MacFilename( &reply.sfFile ) ;
+                       m_path = wxMacFSSpec2UnixFilename( &reply.sfFile ) ;
                        return wxID_OK ;
                }
        }
                        return wxID_OK ;
                }
        }
@@ -787,12 +770,13 @@ int wxFileDialog::ShowModal()
                
                        FSSpec  outFileSpec ;
                        AEDesc specDesc ;
                
                        FSSpec  outFileSpec ;
                        AEDesc specDesc ;
+                       AEKeyword keyWord ;
                        
                        long count ;
                        ::AECountItems( &mNavReply.selection , &count ) ;
                        for ( long i = 1 ; i <= count ; ++i )
                        {
                        
                        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 ;
                                if ( err != noErr ) {
                                        m_path = "" ;
                                        return wxID_CANCEL ;
@@ -812,7 +796,7 @@ int wxFileDialog::ShowModal()
                 m_path = m_paths[ 0 ] ;
                 m_fileName = wxFileNameFromPath(m_path);
                 m_dir = wxPathOnly(m_path);
                 m_path = m_paths[ 0 ] ;
                 m_fileName = wxFileNameFromPath(m_path);
                 m_dir = wxPathOnly(m_path);
-            
+       NavDisposeReply( &mNavReply ) ;
                        return wxID_OK ;
                }
                return wxID_CANCEL;
                        return wxID_OK ;
                }
                return wxID_CANCEL;