X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/903b61cc9dc02cc6cdbd7230159f7fb47315133f..405d8f465740a78d2d19a2b108ac8fd65ff1a5e2:/src/common/filename.cpp?ds=sidebyside diff --git a/src/common/filename.cpp b/src/common/filename.cpp index 330828e74a..ffffe53275 100644 --- a/src/common/filename.cpp +++ b/src/common/filename.cpp @@ -90,6 +90,10 @@ #include "wx/msw/winundef.h" #endif +#if defined(__WXMAC__) + #include "wx/mac/private.h" // includes mac headers +#endif + // utime() is POSIX so should normally be available on all Unices #ifdef __UNIX_LIKE__ #include @@ -537,11 +541,11 @@ wxFileName::CreateTempFileName(const wxString& prefix, wxFile *fileTemp) #else // !Windows, !OS/2 if ( dir.empty() ) { -#if defined( __WXMAC__ ) && !defined(__DARWIN__) - dir = wxMacFindFolder( (short) kOnSystemDisk, pTemporaryFolder, kCreateFolder ) ; -#else +#if defined(__WXMAC__) && !defined(__DARWIN__) + dir = wxMacFindFolder( (short) kOnSystemDisk, kTemporaryFolderType, kCreateFolder ) ; +#else // !Mac dir = wxGetenv(_T("TMP")); - if ( path.empty() ) + if ( dir.empty() ) { dir = wxGetenv(_T("TEMP")); } @@ -555,7 +559,7 @@ wxFileName::CreateTempFileName(const wxString& prefix, wxFile *fileTemp) dir = _T("/tmp"); #endif } -#endif +#endif // Mac/!Mac } path = dir; @@ -1668,3 +1672,104 @@ bool wxFileName::GetTimes(wxDateTime *dtAccess, return FALSE; } +#ifdef __WXMAC__ + +const short kMacExtensionMaxLength = 16 ; +typedef struct +{ + char m_ext[kMacExtensionMaxLength] ; + OSType m_type ; + OSType m_creator ; +} MacDefaultExtensionRecord ; + +#include "wx/dynarray.h" +WX_DECLARE_OBJARRAY(MacDefaultExtensionRecord, MacDefaultExtensionArray) ; +#include "wx/arrimpl.cpp" +WX_DEFINE_OBJARRAY(MacDefaultExtensionArray) ; + +MacDefaultExtensionArray gMacDefaultExtensions ; +bool gMacDefaultExtensionsInited = false ; + +static void MacEnsureDefaultExtensionsLoaded() +{ + if ( !gMacDefaultExtensionsInited ) + { + // load the default extensions + MacDefaultExtensionRecord defaults[] = + { + { "txt" , 'TEXT' , 'ttxt' } , + + } ; + // we could load the pc exchange prefs here too + + for ( int i = 0 ; i < WXSIZEOF( defaults ) ; ++i ) + { + gMacDefaultExtensions.Add( defaults[i] ) ; + } + gMacDefaultExtensionsInited = true ; + } +} +bool wxFileName::MacSetTypeAndCreator( wxUint32 type , wxUint32 creator ) +{ + FInfo fndrInfo ; + FSSpec spec ; + wxMacFilename2FSSpec(GetFullPath(),&spec) ; + OSErr err = FSpGetFInfo( &spec , &fndrInfo ) ; + wxCHECK( err == noErr , false ) ; + + fndrInfo.fdType = type ; + fndrInfo.fdCreator = creator ; + FSpSetFInfo( &spec , &fndrInfo ) ; + return true ; +} + +bool wxFileName::MacGetTypeAndCreator( wxUint32 *type , wxUint32 *creator ) +{ + FInfo fndrInfo ; + FSSpec spec ; + wxMacFilename2FSSpec(GetFullPath(),&spec) ; + OSErr err = FSpGetFInfo( &spec , &fndrInfo ) ; + wxCHECK( err == noErr , false ) ; + + *type = fndrInfo.fdType ; + *creator = fndrInfo.fdCreator ; + return true ; +} + +bool wxFileName::MacSetDefaultTypeAndCreator() +{ + wxUint32 type , creator ; + if ( wxFileName::MacFindDefaultTypeAndCreator(GetExt() , &type , + &creator ) ) + { + MacSetTypeAndCreator( type , creator ) ; + } +} + +bool wxFileName::MacFindDefaultTypeAndCreator( const wxString& ext , wxUint32 *type , wxUint32 *creator ) +{ + MacEnsureDefaultExtensionsLoaded() ; + wxString extl = ext.Lower() ; + for( int i = gMacDefaultExtensions.Count() - 1 ; i >= 0 ; --i ) + { + if ( gMacDefaultExtensions.Item(i).m_ext == extl ) + { + *type = gMacDefaultExtensions.Item(i).m_type ; + *creator = gMacDefaultExtensions.Item(i).m_creator ; + return true ; + } + } + return false ; +} + +void wxFileName::MacRegisterDefaultTypeAndCreator( const wxString& ext , wxUint32 type , wxUint32 creator ) +{ + MacEnsureDefaultExtensionsLoaded() ; + MacDefaultExtensionRecord rec ; + rec.m_type = type ; + rec.m_creator = creator ; + strncpy( rec.m_ext , ext.Lower().c_str() , kMacExtensionMaxLength ) ; + gMacDefaultExtensions.Add( rec ) ; +} +#endif +