X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/263a72f381ff6625de508cedd8e8ee6e02947c06..0fe5e8fea017ecb73f8aaa8ceb745feb269b3f79:/src/common/filename.cpp diff --git a/src/common/filename.cpp b/src/common/filename.cpp index c59c401843..99832bf995 100644 --- a/src/common/filename.cpp +++ b/src/common/filename.cpp @@ -359,7 +359,7 @@ void wxFileName::Assign(const wxString& fullpathOrig, _T("the path shouldn't contain file name nor extension") ); #else // !__WXDEBUG__ - SplitPath(fullname, NULL /* no path */, &name, &ext, format); + SplitPath(fullname, NULL /* no path */, &name, &ext, format); SplitPath(fullpath, &volume, &path, NULL, NULL, format); #endif // __WXDEBUG__/!__WXDEBUG__ @@ -732,7 +732,7 @@ bool wxFileName::Rmdir( const wxString &dir ) // path normalization // ---------------------------------------------------------------------------- -bool wxFileName::Normalize(wxPathNormalize flags, +bool wxFileName::Normalize(int flags, const wxString& cwd, wxPathFormat format) { @@ -1043,8 +1043,10 @@ wxString wxFileName::GetFullName() const return fullname; } -wxString wxFileName::GetPath( bool add_separator, wxPathFormat format ) const +wxString wxFileName::GetPath( bool, wxPathFormat format ) const { + // Should add_seperator parameter be used? + format = GetFormat( format ); wxString fullpath; @@ -1484,7 +1486,10 @@ void wxFileName::SplitPath(const wxString& fullpathWithVolume, // the path equal to something like '/', not empty, for the files // immediately under root directory size_t len = posLastSlash; - if ( !len ) + + // this rule does not apply to mac since we do not start with colons (sep) + // except for relative paths + if ( !len && format != wxPATH_MAC) len++; *pstrPath = fullpath.Left(len); @@ -1672,3 +1677,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 ) ) + { + return MacSetTypeAndCreator( type , creator ) ; + } + return false; +} + +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