#include "wx/filedlg.h"
#include "wx/intl.h"
#include "wx/tokenzr.h"
+#include "wx/filename.h"
#ifndef __DARWIN__
#include "PLStringFuncs.h"
}
}
-const wxChar * gfilters[] =
-{
- wxT("*.TXT") ,
- wxT("*.TIF") ,
- wxT("*.JPG") ,
-
- NULL
-} ;
-
-OSType gfiltersmac[] =
-{
- 'TEXT' ,
- 'TIFF' ,
- 'JPEG' ,
-
- '****'
-} ;
-
void MakeUserDataRec(OpenUserDataRec *myData , const wxString& filter )
{
const size_t extCount = myData->extensions.GetCount();
for ( size_t i = 0 ; i < extCount; i++ )
{
- int j ;
- for ( j = 0 ; gfilters[j] ; j++ )
+ wxUint32 fileType;
+ wxUint32 creator;
+ wxString extension = myData->extensions[i];
+
+ if (extension.GetChar(0) == '*')
+ extension = extension.Mid(1); // Remove leading *
+
+ if (extension.GetChar(0) == '.')
{
- if ( myData->extensions[i] == gfilters[j] )
- {
- myData->filtermactypes.Add( gfiltersmac[j] ) ;
- break ;
- }
+ extension = extension.Mid(1); // Remove leading .
}
- if( gfilters[j] == NULL )
+
+ if (wxFileName::MacFindDefaultTypeAndCreator( extension, &fileType, &creator ))
{
- myData->filtermactypes.Add( '****' ) ;
+ myData->filtermactypes.Add( (OSType)fileType );
}
+ else
+ {
+ myData->filtermactypes.Add( '****' ) ; // We'll fail safe if it's not recognized
+ }
}
}
}
if (err != noErr)
break;
+ CFURLRef fullURLRef;
if (m_dialogStyle & wxSAVE)
{
CFURLRef parentURLRef = ::CFURLCreateFromFSRef(NULL, &theFSRef);
if (parentURLRef)
{
- CFURLRef fullURLRef =
+ fullURLRef =
::CFURLCreateCopyAppendingPathComponent(NULL,
parentURLRef,
navReply.saveFileName,
false);
::CFRelease(parentURLRef);
- if (fullURLRef)
- {
- CFStringRef cfString = ::CFURLCopyPath(fullURLRef);
- ::CFRelease(fullURLRef);
-
- if (cfString)
- {
- // unescape the URL for
- // "file name" instead of "file%20name"
- CFStringRef cfStringUnescaped =
- ::CFURLCreateStringByReplacingPercentEscapes(NULL,
- cfString,
- CFSTR(""));
- ::CFRelease(cfString);
-
- if (cfStringUnescaped)
- {
- Size len = CFStringGetLength( cfStringUnescaped ) ;
- wxChar* buf = thePath.GetWriteBuf( len ) ;
- //buf[0] = '\0';
-#if wxUSE_UNICODE
- CFStringGetCharacters(cfStringUnescaped , CFRangeMake( 0 , len ) , (UniChar*) buf ) ;
-#else
- CFStringGetCString( cfStringUnescaped , buf , len+1 , CFStringGetSystemEncoding() ) ;
-#endif
- buf[len] = 0 ;
- wxMacConvertNewlines10To13( buf ) ;
- thePath.UngetWriteBuf() ;
- ::CFRelease(cfStringUnescaped);
- }
- }
- }
- }
- if (!thePath)
- {
- ::NavDisposeReply(&navReply);
- return wxID_CANCEL;
}
}
else
{
- const short maxpath = 1024 ;
- ::FSRefMakePath( &theFSRef , (UInt8*) thePath.GetWriteBuf(maxpath+1),maxpath) ;
- thePath.UngetWriteBuf() ;
- if (err != noErr)
- break;
+ fullURLRef = ::CFURLCreateFromFSRef(NULL, &theFSRef);
+ }
+#ifdef __UNIX__
+ CFURLPathStyle pathstyle = kCFURLPOSIXPathStyle;
+#else
+ CFURLPathStyle pathstyle = kCFURLHFSPathStyle;
+#endif
+ CFStringRef cfString = CFURLCopyFileSystemPath(fullURLRef, pathstyle);
+ thePath = wxMacCFStringHolder(cfString).AsString();
+ if (!thePath)
+ {
+ ::NavDisposeReply(&navReply);
+ return wxID_CANCEL;
}
m_path = thePath;
m_paths.Add(m_path);