X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/07158944d86fc3895c24a5a9848616405d3d91db..926395e16b8ee7a2988078e9cf6ea5c7e88500e0:/src/mac/corefoundation/stdpaths_cf.cpp?ds=sidebyside diff --git a/src/mac/corefoundation/stdpaths_cf.cpp b/src/mac/corefoundation/stdpaths_cf.cpp index 20f2c8cf3a..2b2cf9cba0 100644 --- a/src/mac/corefoundation/stdpaths_cf.cpp +++ b/src/mac/corefoundation/stdpaths_cf.cpp @@ -9,6 +9,14 @@ // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + #include "wx/wxprec.h" #if wxUSE_STDPATHS @@ -19,7 +27,11 @@ #include "wx/stdpaths.h" #include "wx/filename.h" +#ifdef __WXMAC__ +#include "wx/mac/private.h" +#endif #include "wx/mac/corefoundation/cfstring.h" +#include "wx/mac/private.h" #if defined(__DARWIN__) #include @@ -35,23 +47,22 @@ #define kDefaultPathStyle kCFURLHFSPathStyle #endif -static wxString BundleRelativeURLToPath(CFURLRef relativeURL) -{ - CFURLRef absoluteURL = CFURLCopyAbsoluteURL(relativeURL); - wxCHECK_MSG(absoluteURL, wxEmptyString, wxT("Failed to resolve relative URL to absolute URL")); - CFStringRef cfStrPath = CFURLCopyFileSystemPath(absoluteURL,kDefaultPathStyle); - CFRelease(absoluteURL); - return wxMacCFStringHolder(cfStrPath).AsString(wxLocale::GetSystemEncoding()); -} +// ============================================================================ +// implementation +// ============================================================================ + +// ---------------------------------------------------------------------------- +// wxStandardPathsCF ctors/dtor +// ---------------------------------------------------------------------------- wxStandardPathsCF::wxStandardPathsCF() -: m_bundle(CFBundleGetMainBundle()) + : m_bundle(CFBundleGetMainBundle()) { CFRetain(m_bundle); } -wxStandardPathsCF::wxStandardPathsCF(struct __CFBundle *bundle) -: m_bundle(bundle) +wxStandardPathsCF::wxStandardPathsCF(wxCFBundleRef bundle) + : m_bundle(bundle) { CFRetain(m_bundle); } @@ -61,53 +72,116 @@ wxStandardPathsCF::~wxStandardPathsCF() CFRelease(m_bundle); } -void wxStandardPathsCF::SetBundle(struct __CFBundle *bundle) +// ---------------------------------------------------------------------------- +// wxStandardPathsCF Mac-specific methods +// ---------------------------------------------------------------------------- + +void wxStandardPathsCF::SetBundle(wxCFBundleRef bundle) { CFRetain(bundle); CFRelease(m_bundle); m_bundle = bundle; } +// ---------------------------------------------------------------------------- +// generic functions in terms of which the other ones are implemented +// ---------------------------------------------------------------------------- + +static wxString BundleRelativeURLToPath(CFURLRef relativeURL) +{ + CFURLRef absoluteURL = CFURLCopyAbsoluteURL(relativeURL); + wxCHECK_MSG(absoluteURL, wxEmptyString, wxT("Failed to resolve relative URL to absolute URL")); + CFStringRef cfStrPath = CFURLCopyFileSystemPath(absoluteURL,kDefaultPathStyle); + CFRelease(absoluteURL); + return wxMacCFStringHolder(cfStrPath).AsString(wxLocale::GetSystemEncoding()); +} + +wxString wxStandardPathsCF::GetFromFunc(wxCFURLRef (*func)(wxCFBundleRef)) const +{ + wxCHECK_MSG(m_bundle, wxEmptyString, + wxT("wxStandardPaths for CoreFoundation only works with bundled apps")); + CFURLRef relativeURL = (*func)(m_bundle); + wxCHECK_MSG(relativeURL, wxEmptyString, wxT("Couldn't get URL")); + wxString ret(BundleRelativeURLToPath(relativeURL)); + CFRelease(relativeURL); + return ret; +} + +wxString wxStandardPathsCF::GetDocumentsDir() const +{ + return wxMacFindFolderNoSeparator + ( +#if TARGET_API_MAC_OSX + kUserDomain, +#else + kOnSystemDisk, +#endif + kDocumentsFolderType, + kCreateFolder + ); +} + +// ---------------------------------------------------------------------------- +// wxStandardPathsCF public API +// ---------------------------------------------------------------------------- + wxString wxStandardPathsCF::GetConfigDir() const { - // TODO: What do we do for pure Carbon? +#ifdef __WXMAC__ + return wxMacFindFolder((short)kLocalDomain, kPreferencesFolderType, kCreateFolder); +#else return wxT("/Library/Preferences"); +#endif } wxString wxStandardPathsCF::GetUserConfigDir() const { - // TODO: What do we do for pure Carbon? +#ifdef __WXMAC__ + return wxMacFindFolder((short)kUserDomain, kPreferencesFolderType, kCreateFolder); +#else return wxFileName::GetHomeDir() + wxT("/Library/Preferences"); +#endif } wxString wxStandardPathsCF::GetDataDir() const { - wxCHECK_MSG(m_bundle, wxEmptyString, wxT("wxStandardPaths for CoreFoundation only works with bundled apps")); - CFURLRef relativeURL = CFBundleCopySharedSupportURL(m_bundle); - wxCHECK_MSG(relativeURL, wxEmptyString, wxT("Couldn't get SharedSupport URL")); - wxString ret(BundleRelativeURLToPath(relativeURL)); - CFRelease(relativeURL); - return ret; + return GetFromFunc(CFBundleCopySharedSupportURL); } wxString wxStandardPathsCF::GetLocalDataDir() const { +#ifdef __WXMAC__ + return AppendAppName(wxMacFindFolder((short)kLocalDomain, kApplicationSupportFolderType, kCreateFolder)); +#else return AppendAppName(wxT("/Library/Application Support")); +#endif } wxString wxStandardPathsCF::GetUserDataDir() const { +#ifdef __WXMAC__ + return AppendAppName(wxMacFindFolder((short)kUserDomain, kApplicationSupportFolderType, kCreateFolder)); +#else return AppendAppName(wxFileName::GetHomeDir() + _T("/Library/Application Support")); +#endif } wxString wxStandardPathsCF::GetPluginsDir() const { - wxCHECK_MSG(m_bundle, wxEmptyString, wxT("wxStandardPaths for CoreFoundation only works with bundled apps")); - CFURLRef relativeURL = CFBundleCopyBuiltInPlugInsURL(m_bundle); - wxCHECK_MSG(relativeURL, wxEmptyString, wxT("Couldn't get BuiltInPlugIns URL")); - wxString ret(BundleRelativeURLToPath(relativeURL)); - CFRelease(relativeURL); - return ret; + return GetFromFunc(CFBundleCopyBuiltInPlugInsURL); +} + +wxString wxStandardPathsCF::GetResourcesDir() const +{ + return GetFromFunc(CFBundleCopyResourcesDirectoryURL); +} + +wxString +wxStandardPathsCF::GetLocalizedResourcesDir(const wxChar *lang, + ResourceCat category) const +{ + return wxStandardPathsBase:: + GetLocalizedResourcesDir(lang, category) + _T(".lproj"); } #endif // wxUSE_STDPATHS