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 #include "wx/wxprec.h"
15 #endif //ndef WX_PRECOMP
17 #include "wx/stdpaths.h"
18 #include "wx/filename.h"
19 #include "wx/mac/corefoundation/cfstring.h"
21 #include <CoreFoundation/CFBundle.h>
22 #include <CoreFoundation/CFURL.h>
24 // See comment in include/wx/mac/corefoundation/stdpaths.h
25 #ifndef wxStandardPaths
26 #warning "wxStandardPaths should be defined to wxStandardPathsCF when compiling this file."
29 #if defined(__WXCOCOA__) || defined(__WXMAC_OSX__)
30 #define kDefaultPathStyle kCFURLPOSIXPathStyle
32 #define kDefaultPathStyle kCFURLHFSPathStyle
35 static wxString
BundleRelativeURLToPath(CFURLRef relativeURL
)
37 CFURLRef absoluteURL
= CFURLCopyAbsoluteURL(relativeURL
);
38 wxCHECK_MSG(absoluteURL
, wxEmptyString
, wxT("Failed to resolve relative URL to absolute URL"));
39 CFStringRef cfStrPath
= CFURLCopyFileSystemPath(absoluteURL
,kDefaultPathStyle
);
40 CFRelease(absoluteURL
);
41 return wxMacCFStringHolder(cfStrPath
).AsString(wxLocale::GetSystemEncoding());
45 static wxStandardPaths gs_stdPaths
;
46 /* static */ wxStandardPaths
& wxStandardPaths::Get()
51 wxStandardPaths::wxStandardPaths()
52 : m_bundle(CFBundleGetMainBundle())
57 wxStandardPaths::wxStandardPaths(struct __CFBundle
*bundle
)
63 wxStandardPaths::~wxStandardPaths()
68 void wxStandardPaths::SetBundle(struct __CFBundle
*bundle
)
75 wxString
wxStandardPaths::GetConfigDir() const
77 // TODO: What do we do for pure Carbon?
78 return wxT("/Library/Preferences");
81 wxString
wxStandardPaths::GetUserConfigDir() const
83 // TODO: What do we do for pure Carbon?
84 return wxFileName::GetHomeDir() + wxT("/Library/Preferences");
87 wxString
wxStandardPaths::GetDataDir() const
89 wxCHECK_MSG(m_bundle
, wxEmptyString
, wxT("wxStandardPaths for CoreFoundation only works with bundled apps"));
90 CFURLRef relativeURL
= CFBundleCopySharedSupportURL(m_bundle
);
91 wxCHECK_MSG(relativeURL
, wxEmptyString
, wxT("Couldn't get SharedSupport URL"));
92 wxString
ret(BundleRelativeURLToPath(relativeURL
));
93 CFRelease(relativeURL
);
97 wxString
wxStandardPaths::GetLocalDataDir() const
99 return AppendAppName(wxT("/Library/Application Support"));
102 wxString
wxStandardPaths::GetUserDataDir() const
104 return AppendAppName(wxFileName::GetHomeDir() + _T("/Library/Application Support"));
107 wxString
wxStandardPaths::GetPluginsDir() const
109 wxCHECK_MSG(m_bundle
, wxEmptyString
, wxT("wxStandardPaths for CoreFoundation only works with bundled apps"));
110 CFURLRef relativeURL
= CFBundleCopyBuiltInPlugInsURL(m_bundle
);
111 wxCHECK_MSG(relativeURL
, wxEmptyString
, wxT("Couldn't get BuiltInPlugIns URL"));
112 wxString
ret(BundleRelativeURLToPath(relativeURL
));
113 CFRelease(relativeURL
);