X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4d4d8bbfad1a07877877c69230e12306609d19eb..244d3b67caf13566cdcef6cccdd85163845c893e:/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 -#else - #include -#endif +#include -#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;