]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxStandardPaths::GetResourcesDir() and GetLocalizedResourcesDir()
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 25 Mar 2006 17:00:40 +0000 (17:00 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 25 Mar 2006 17:00:40 +0000 (17:00 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38370 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/mac/corefoundation/stdpaths.h
include/wx/msw/stdpaths.h
include/wx/stdpaths.h
include/wx/unix/stdpaths.h
samples/console/console.cpp
src/mac/corefoundation/stdpaths_cf.cpp
src/msw/stdpaths.cpp
src/unix/stdpaths.cpp

index e00d2977363b83a26845193de6cc8d4415ba89c4..acb7fa8b341e0fca7c9423c0a95dba4bdf2c0e29 100644 (file)
@@ -25,6 +25,7 @@ Deprecated methods since 2.6.x and their replacements
 All:
 
 - wxLaunchDefaultBrowser() now supports wxBROWSER_NEW_WINDOW flag.
+- Added wxStandardPaths::GetResourcesDir() and GetLocalizedResourcesDir()
 - Added wxStringTokenizer::GetLastDelimiter(); improved documentation.
 - Speed improvements to wxRegEx when matching is done in a loop such as
   during a search and replace.
index 784222671a5ea68b4664cb21307d95a2a7fa5d48..00b1ffbdf714f3da4162ec5c8c6f3912d578ee0b 100644 (file)
 #define _WX_MAC_STDPATHS_H_
 
 struct __CFBundle;
+struct __CFURL;
+
+typedef const __CFURL * wxCFURLRef;
+typedef __CFBundle * wxCFBundleRef;
 
 // ----------------------------------------------------------------------------
 // wxStandardPaths
@@ -25,8 +29,8 @@ public:
     ~wxStandardPathsCF();
 
     // wxMac specific: allow user to specify a different bundle
-    wxStandardPathsCF(struct __CFBundle *bundle);
-    void SetBundle(struct __CFBundle *bundle);
+    wxStandardPathsCF(wxCFBundleRef bundle);
+    void SetBundle(wxCFBundleRef bundle);
 
     // implement base class pure virtuals
     virtual wxString GetConfigDir() const;
@@ -35,8 +39,16 @@ public:
     virtual wxString GetLocalDataDir() const;
     virtual wxString GetUserDataDir() const;
     virtual wxString GetPluginsDir() const;
+    virtual wxString GetResourcesDir() const;
+    virtual wxString GetLocalizedResourcesDir(const wxChar *lang,
+                                              ResourceCat category) const;
+
 protected:
-    struct __CFBundle *m_bundle;
+    // this function can be called with any of CFBundleCopyXXXURL function
+    // pointer as parameter
+    wxString GetFromFunc(wxCFURLRef (*func)(wxCFBundleRef)) const;
+
+    wxCFBundleRef m_bundle;
 };
 
 // If using UNIX (i.e. darwin) then use UNIX standard paths
index e89e80b22731934dff5b6bf6e78f2b87c2166837..c12729857e9dfd6a07defe498e2df9dbe2d81189 100644 (file)
@@ -26,6 +26,8 @@ public:
     virtual wxString GetUserDataDir() const;
     virtual wxString GetUserLocalDataDir() const;
     virtual wxString GetPluginsDir() const;
+    virtual wxString GetLocalizedResourcesDir(const wxChar *lang,
+                                              ResourceCat category) const;
 
 protected:
     // get the path corresponding to the given standard CSIDL_XXX constant
index c4b3cb2b7b061d767dae52c479720c6bafb766f4..233fc7f3a835c7d4d0acbe34ab9c699c7808526d 100644 (file)
 class WXDLLIMPEXP_BASE wxStandardPathsBase
 {
 public:
+    // possible resources categorires
+    enum ResourceCat
+    {
+        // no special category
+        ResourceCat_None,
+
+        // message catalog resources
+        ResourceCat_Messages,
+
+        // end of enum marker
+        ResourceCat_Max
+    };
+
+
     // return the global standard paths object
     static wxStandardPathsBase& Get();
 
@@ -74,6 +88,27 @@ public:
     // Contents/Plugins app bundle subdirectory under Mac
     virtual wxString GetPluginsDir() const = 0;
 
+    // get resources directory: resources are auxiliary files used by the
+    // application and include things like image and sound files
+    //
+    // same as GetDataDir() for all platforms except Mac where it returns
+    // Contents/Resources subdirectory of the app bundle
+    virtual wxString GetResourcesDir() const { return GetDataDir(); }
+
+    // get localized resources directory containing the resource files of the
+    // specified category for the given language
+    //
+    // in general this is just GetResourcesDir()/lang under Windows and Unix
+    // and GetResourcesDir()/lang.lproj under Mac but is something quite
+    // different under Unix for message catalog category (namely the standard
+    // prefix/share/locale/lang/LC_MESSAGES)
+    virtual wxString
+    GetLocalizedResourcesDir(const wxChar *lang,
+                             ResourceCat category = ResourceCat_None) const
+    {
+        return GetResourcesDir() + wxFILE_SEP_PATH + lang;
+    }
+
 
     // virtual dtor for the base class
     virtual ~wxStandardPathsBase();
index 5e5cb19cab3f72490ad5d94485dae003587d4adf..2c5575196503a70f8af6f71ec8e2ca2f5fd06f49 100644 (file)
@@ -41,6 +41,8 @@ public:
     virtual wxString GetLocalDataDir() const;
     virtual wxString GetUserDataDir() const;
     virtual wxString GetPluginsDir() const;
+    virtual wxString GetLocalizedResourcesDir(const wxChar *lang,
+                                              ResourceCat category) const;
 
 private:
     wxString m_prefix;
index 91876f7d424403def096a937e0d6f85f9b28772d..06662dde589dd8529a4f52c7b1008af934ca7922 100644 (file)
@@ -85,7 +85,7 @@
     #define TEST_WCHAR
     #define TEST_ZIP
 #else // #if TEST_ALL
-    #define TEST_DIR
+    #define TEST_STDPATHS
 #endif
 
 // some tests are interactive, define this to run them
@@ -2685,6 +2685,15 @@ static void TestStandardPaths()
     wxPrintf(_T("Data dir (user):\t%s\n"), stdp.GetUserDataDir().c_str());
     wxPrintf(_T("Data dir (user local):\t%s\n"), stdp.GetUserLocalDataDir().c_str());
     wxPrintf(_T("Plugins dir:\t\t%s\n"), stdp.GetPluginsDir().c_str());
+    wxPrintf(_T("Resources dir:\t\t%s\n"), stdp.GetResourcesDir().c_str());
+    wxPrintf(_T("Localized res. dir:\t%s\n"),
+             stdp.GetLocalizedResourcesDir(_T("fr")).c_str());
+    wxPrintf(_T("Message catalogs dir:\t%s\n"),
+             stdp.GetLocalizedResourcesDir
+                  (
+                    _T("fr"),
+                    wxStandardPaths::ResourceCat_Messages
+                  ).c_str());
 }
 
 #endif // TEST_STDPATHS
index 20f2c8cf3a6b3362ca5771dba2aa1c135bfaa556..62725328e3d8d0e55aa5f960b608a345ed41c10b 100644 (file)
@@ -9,6 +9,14 @@
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
 #include "wx/wxprec.h"
 
 #if wxUSE_STDPATHS
 #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,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?
@@ -82,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
@@ -102,12 +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
index 3b815eac7b257479aa8b269099546bf7ae08614a..2a7a046dd6300c51197f05157063474bf07d51d0 100644 (file)
@@ -278,7 +278,6 @@ wxString wxStandardPaths::GetPluginsDir() const
     return wxFileName(wxGetFullModuleName()).GetPath();
 }
 
-
 // ============================================================================
 // wxStandardPathsWin16 implementation
 // ============================================================================
index 543294e1476989af13174b6d1b8b2cfabbc478d1..cc425db3b43026bda55420a33f372d92164b6e80 100644 (file)
@@ -93,6 +93,13 @@ wxString wxStandardPaths::GetPluginsDir() const
     return wxString(); // TODO: this is wrong, it should return something
 }
 
+wxString
+wxStandardPaths::GetLocalizedResourcesDir(const wxChar *lang,
+                                          ResourceCat category) const
+{
+    return wxStandardPathsBase::GetLocalizedResourcesDir(lang, category);
+}
+
 #else // !__VMS
 
 // ============================================================================
@@ -161,6 +168,16 @@ wxString wxStandardPaths::GetPluginsDir() const
     return AppendAppName(GetInstallPrefix() + _T("/lib"));
 }
 
+wxString
+wxStandardPaths::GetLocalizedResourcesDir(const wxChar *lang,
+                                          ResourceCat category) const
+{
+    if ( category != ResourceCat_Messages )
+        return wxStandardPathsBase::GetLocalizedResourcesDir(lang, category);
+
+    return GetInstallPrefix() + _T("/share/locale/") + lang + _T("/LC_MESSAGES");
+}
+
 #endif // __VMS/!__VMS
 
 #endif // wxUSE_STDPATHS