]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/corefoundation/stdpaths_cf.cpp
Make the Connect that also takes a local bind port non-virtual. This silences some...
[wxWidgets.git] / src / mac / corefoundation / stdpaths_cf.cpp
index 07bfaaa1110aaedfcc6e6db0142c557193d2e9e7..62725328e3d8d0e55aa5f960b608a345ed41c10b 100644 (file)
@@ -9,7 +9,18 @@
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
 #include "wx/wxprec.h"
+
+#if wxUSE_STDPATHS
+
 #ifndef WX_PRECOMP
     #include "wx/intl.h"
 #endif //ndef WX_PRECOMP
 #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);
 }
@@ -58,13 +68,45 @@ 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;
+}
+
+// ----------------------------------------------------------------------------
+// wxStandardPathsCF public API
+// ----------------------------------------------------------------------------
+
 wxString wxStandardPathsCF::GetConfigDir() const
 {
     // TODO: What do we do for pure Carbon?
@@ -79,12 +121,7 @@ wxString wxStandardPathsCF::GetUserConfigDir() const
 
 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
@@ -99,11 +136,20 @@ wxString wxStandardPathsCF::GetUserDataDir() const
 
 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