1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: mac/corefoundation/stdpaths.cpp
3 // Purpose: wxStandardPaths implementation for CoreFoundation systems
4 // Author: David Elliott
8 // Copyright: (c) 2004 David Elliott <dfe@cox.net>
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 #include "wx/wxprec.h"
26 #endif //ndef WX_PRECOMP
28 #include "wx/stdpaths.h"
29 #include "wx/filename.h"
31 #include "wx/mac/private.h"
33 #include "wx/mac/corefoundation/cfstring.h"
34 #include "wx/mac/private.h"
36 #if defined(__DARWIN__)
37 #include <CoreFoundation/CFBundle.h>
38 #include <CoreFoundation/CFURL.h>
44 #if defined(__WXCOCOA__) || defined(__WXMAC_OSX__)
45 #define kDefaultPathStyle kCFURLPOSIXPathStyle
47 #define kDefaultPathStyle kCFURLHFSPathStyle
50 // ============================================================================
52 // ============================================================================
54 // ----------------------------------------------------------------------------
55 // wxStandardPathsCF ctors/dtor
56 // ----------------------------------------------------------------------------
58 wxStandardPathsCF::wxStandardPathsCF()
59 : m_bundle(CFBundleGetMainBundle())
64 wxStandardPathsCF::wxStandardPathsCF(wxCFBundleRef bundle
)
70 wxStandardPathsCF::~wxStandardPathsCF()
75 // ----------------------------------------------------------------------------
76 // wxStandardPathsCF Mac-specific methods
77 // ----------------------------------------------------------------------------
79 void wxStandardPathsCF::SetBundle(wxCFBundleRef bundle
)
86 // ----------------------------------------------------------------------------
87 // generic functions in terms of which the other ones are implemented
88 // ----------------------------------------------------------------------------
90 static wxString
BundleRelativeURLToPath(CFURLRef relativeURL
)
92 CFURLRef absoluteURL
= CFURLCopyAbsoluteURL(relativeURL
);
93 wxCHECK_MSG(absoluteURL
, wxEmptyString
, wxT("Failed to resolve relative URL to absolute URL"));
94 CFStringRef cfStrPath
= CFURLCopyFileSystemPath(absoluteURL
,kDefaultPathStyle
);
95 CFRelease(absoluteURL
);
96 return wxMacCFStringHolder(cfStrPath
).AsString(wxLocale::GetSystemEncoding());
99 wxString
wxStandardPathsCF::GetFromFunc(wxCFURLRef (*func
)(wxCFBundleRef
)) const
101 wxCHECK_MSG(m_bundle
, wxEmptyString
,
102 wxT("wxStandardPaths for CoreFoundation only works with bundled apps"));
103 CFURLRef relativeURL
= (*func
)(m_bundle
);
104 wxCHECK_MSG(relativeURL
, wxEmptyString
, wxT("Couldn't get URL"));
105 wxString
ret(BundleRelativeURLToPath(relativeURL
));
106 CFRelease(relativeURL
);
110 wxString
wxStandardPathsCF::GetDocumentsDir() const
113 return wxMacFindFolderNoSeparator
115 #if TARGET_API_MAC_OSX
120 kDocumentsFolderType
,
124 return wxFileName::GetHomeDir() + wxT("/Documents");
128 // ----------------------------------------------------------------------------
129 // wxStandardPathsCF public API
130 // ----------------------------------------------------------------------------
132 wxString
wxStandardPathsCF::GetConfigDir() const
135 return wxMacFindFolder((short)kLocalDomain
, kPreferencesFolderType
, kCreateFolder
);
137 return wxT("/Library/Preferences");
141 wxString
wxStandardPathsCF::GetUserConfigDir() const
144 return wxMacFindFolder((short)kUserDomain
, kPreferencesFolderType
, kCreateFolder
);
146 return wxFileName::GetHomeDir() + wxT("/Library/Preferences");
150 wxString
wxStandardPathsCF::GetDataDir() const
152 return GetFromFunc(CFBundleCopySharedSupportURL
);
155 wxString
wxStandardPathsCF::GetLocalDataDir() const
158 return AppendAppName(wxMacFindFolder((short)kLocalDomain
, kApplicationSupportFolderType
, kCreateFolder
));
160 return AppendAppName(wxT("/Library/Application Support"));
164 wxString
wxStandardPathsCF::GetUserDataDir() const
167 return AppendAppName(wxMacFindFolder((short)kUserDomain
, kApplicationSupportFolderType
, kCreateFolder
));
169 return AppendAppName(wxFileName::GetHomeDir() + _T("/Library/Application Support"));
173 wxString
wxStandardPathsCF::GetPluginsDir() const
175 return GetFromFunc(CFBundleCopyBuiltInPlugInsURL
);
178 wxString
wxStandardPathsCF::GetResourcesDir() const
180 return GetFromFunc(CFBundleCopyResourcesDirectoryURL
);
184 wxStandardPathsCF::GetLocalizedResourcesDir(const wxChar
*lang
,
185 ResourceCat category
) const
187 return wxStandardPathsBase::
188 GetLocalizedResourcesDir(lang
, category
) + _T(".lproj");
191 #endif // wxUSE_STDPATHS