]> git.saurik.com Git - wxWidgets.git/commitdiff
allow to optionally use vendor name component in standard paths (slightly modified...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 17 Nov 2007 14:59:13 +0000 (14:59 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 17 Nov 2007 14:59:13 +0000 (14:59 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50025 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/stdpaths.tex
include/wx/msw/stdpaths.h
include/wx/stdpaths.h
src/common/stdpbase.cpp
src/mac/corefoundation/stdpaths_cf.cpp
src/msw/stdpaths.cpp
src/os2/stdpaths.cpp
src/unix/stdpaths.cpp

index 6d5da635e88da2d427a1c9ff590a7d23e1b959fc..bd469503f29a9c9d240e91e3f128d2e7065b5f1d 100644 (file)
@@ -280,3 +280,24 @@ automatically, portable programs should call this function. Usually the prefix
 is set during program configuration if using GNU autotools and so it is enough
 to pass its value defined in \texttt{config.h} to this function.
 
+
+\membersection{wxStandardPaths::UseAppInfo}\label{wxstandardpathsuseappinfo}
+
+\func{void}{UseAppInfo}{\param{int }{info}}
+
+Controls what application information is used when constructing paths that
+should be unique to this program, such as the application data directory, the
+plugins directory on Unix, etc.
+
+Valid values for \arg{info} are \texttt{AppInfo\_None} and either one or
+combination of \texttt{AppInfo\_AppName} and \texttt{AppInfo\_VendorName}. The
+first one tells this class to not use neither application nor vendor name in
+the paths.
+
+By default, only the application name is used under Unix systems but both
+application and vendor names are used under Windows and Mac.
+
+\wxheading{See also}
+
+\helpref{wxApp::SetAppName}{wxappsetappname}, \helpref{wxApp::SetVendorName}{wxappsetvendorname}
+
index d8f15d43c99371999b011d68d39fe4bd680fc839..cb141af92c7572f270f66a726eb949c63439ca90 100644 (file)
 class WXDLLIMPEXP_BASE wxStandardPaths : public wxStandardPathsBase
 {
 public:
+    wxStandardPaths()
+    {
+        UseAppInfo(AppInfo_AppName | AppInfo_VendorName);
+    }
+
+    ~wxStandardPaths() { }
+
     // implement base class pure virtuals
     virtual wxString GetExecutablePath() const;
     virtual wxString GetConfigDir() const;
index 9f6c619f6367c3f3c0048ff1a26ac1474eb92933..999720d3ac0b26190b96a2bd0619392d215bca5e 100644 (file)
@@ -39,6 +39,15 @@ public:
         ResourceCat_Max
     };
 
+    // what should we use to construct paths unique to this application:
+    // (AppInfo_AppName and AppInfo_VendorName can be combined together)
+    enum
+    {
+        AppInfo_None       = 0,  // nothing
+        AppInfo_AppName    = 1,  // the application name
+        AppInfo_VendorName = 2   // the vendor name
+    };
+
 
     // return the global standard paths object
     static wxStandardPathsBase& Get();
@@ -126,13 +135,32 @@ public:
     virtual wxString GetTempDir() const;
 
 
+    // ctor for the base class
+    wxStandardPathsBase();
+
     // virtual dtor for the base class
     virtual ~wxStandardPathsBase();
 
+    // Information used by AppendAppInfo
+    void UseAppInfo(int info)
+    {
+        m_usedAppInfo = info;
+    }
+
+    bool UsesAppInfo(int info) const { return (m_usedAppInfo & info) != 0; }
+
+
 protected:
-    // append "/appname" suffix if the app name is set (doesn't append the
-    // slash if dir already ends with a slash or dot)
-    static wxString AppendAppName(const wxString& dir);
+    // append the path component, with a leading path seperator if a
+    // path seperator or dot (.) is not already at the end of dir
+    static wxString AppendPathComponent(const wxString& dir, const wxString& component);
+
+    // append application information determined by m_usedAppInfo to dir
+    wxString AppendAppInfo(const wxString& dir) const;
+
+
+    // combination of AppInfo_XXX flags used by AppendAppInfo()
+    int m_usedAppInfo;
 };
 
 #if wxUSE_STDPATHS
index 6d0609e118d33dd4eaa2786bd21c0c195ea76c68..04cebb8587d2f885be5ceab3e82daaa95fdea7ee 100644 (file)
@@ -77,6 +77,15 @@ wxStandardPathsBase& wxAppTraitsBase::GetStandardPaths()
     return gs_stdPaths;
 }
 
+wxStandardPathsBase::wxStandardPathsBase()
+{
+    // Set the default information that is used when
+    // forming some paths (by AppendAppInfo).
+    // Derived classes can call this in their constructors
+    // to set the platform-specific settings
+    UseAppInfo(AppInfo_AppName);
+}
+
 wxStandardPathsBase::~wxStandardPathsBase()
 {
     // nothing to do here
@@ -104,23 +113,41 @@ wxString wxStandardPathsBase::GetTempDir() const
 }
 
 /* static */
-wxString wxStandardPathsBase::AppendAppName(const wxString& dir)
+wxString wxStandardPathsBase::AppendPathComponent(const wxString& dir, const wxString& component)
 {
     wxString subdir(dir);
 
     // empty string indicates that an error has occurred, don't touch it then
     if ( !subdir.empty() )
     {
-        const wxString appname = wxTheApp->GetAppName();
-        if ( !appname.empty() )
+        if ( !component.empty() )
         {
             const wxChar ch = *(subdir.end() - 1);
             if ( !wxFileName::IsPathSeparator(ch) && ch != _T('.') )
                 subdir += wxFileName::GetPathSeparator();
 
-            subdir += appname;
+            subdir += component;
         }
     }
 
     return subdir;
 }
+
+
+wxString wxStandardPathsBase::AppendAppInfo(const wxString& dir) const
+{
+    wxString subdir(dir);
+
+    if ( UsesAppInfo(AppInfo_VendorName) )
+    {
+        subdir = AppendPathComponent(subdir, wxTheApp->GetVendorName());
+    }
+
+    if ( UsesAppInfo(AppInfo_AppName) )
+    {
+        subdir = AppendPathComponent(subdir, wxTheApp->GetAppName());
+    }
+
+    return subdir;
+}
+
index 0348da365fd321744ba301284d28a7dadd051928..eeaa7453e522496f095ffbce38827a150b6eabd2 100644 (file)
@@ -49,12 +49,14 @@ wxStandardPathsCF::wxStandardPathsCF()
                  : m_bundle(CFBundleGetMainBundle())
 {
     CFRetain(m_bundle);
+    UseAppInfo(AppInfo_AppName | AppInfo_VendorName);
 }
 
 wxStandardPathsCF::wxStandardPathsCF(wxCFBundleRef bundle)
                  : m_bundle(bundle)
 {
     CFRetain(m_bundle);
+    UseAppInfo(AppInfo_AppName | AppInfo_VendorName);
 }
 
 wxStandardPathsCF::~wxStandardPathsCF()
@@ -170,18 +172,18 @@ wxString wxStandardPathsCF::GetExecutablePath() const
 wxString wxStandardPathsCF::GetLocalDataDir() const
 {
 #ifdef __WXMAC__
-    return AppendAppName(wxMacFindFolder((short)kLocalDomain, kApplicationSupportFolderType, kCreateFolder));
+    return AppendAppInfo(wxMacFindFolder((short)kLocalDomain, kApplicationSupportFolderType, kCreateFolder));
 #else
-    return AppendAppName(wxT("/Library/Application Support"));
+    return AppendAppInfo(wxT("/Library/Application Support"));
 #endif
 }
 
 wxString wxStandardPathsCF::GetUserDataDir() const
 {
 #ifdef __WXMAC__
-    return AppendAppName(wxMacFindFolder((short)kUserDomain, kApplicationSupportFolderType, kCreateFolder));
+    return AppendAppInfo(wxMacFindFolder((short)kUserDomain, kApplicationSupportFolderType, kCreateFolder));
 #else
-    return AppendAppName(wxFileName::GetHomeDir() + _T("/Library/Application Support"));
+    return AppendAppInfo(wxFileName::GetHomeDir() + _T("/Library/Application Support"));
 #endif
 }
 
index 37c0c9748ad7a18ec9425947b49157718a56459c..1f21d6d5aefb944ac5c6a212a10cbc744a752bd5 100644 (file)
@@ -281,7 +281,7 @@ wxString wxStandardPaths::GetExecutablePath() const
 
 wxString wxStandardPaths::GetConfigDir() const
 {
-    return AppendAppName(DoGetDirectory(CSIDL_COMMON_APPDATA));
+    return AppendAppInfo(DoGetDirectory(CSIDL_COMMON_APPDATA));
 }
 
 wxString wxStandardPaths::GetUserConfigDir() const
@@ -298,12 +298,12 @@ wxString wxStandardPaths::GetDataDir() const
 
 wxString wxStandardPaths::GetUserDataDir() const
 {
-    return AppendAppName(GetUserConfigDir());
+    return AppendAppInfo(GetUserConfigDir());
 }
 
 wxString wxStandardPaths::GetUserLocalDataDir() const
 {
-    return AppendAppName(DoGetDirectory(CSIDL_LOCAL_APPDATA));
+    return AppendAppInfo(DoGetDirectory(CSIDL_LOCAL_APPDATA));
 }
 
 wxString wxStandardPaths::GetPluginsDir() const
index bd715391252651d5e497925781747b1af11474dc..98cf196f241f3a38be6c21fb88bd75aefe24cb92 100644 (file)
@@ -82,7 +82,7 @@ wxString wxStandardPaths::GetDataDir() const
 
 wxString wxStandardPaths::GetUserDataDir() const
 {
-    return AppendAppName(wxFileName::GetHomeDir() + _T("\\."));
+    return AppendAppInfo(wxFileName::GetHomeDir() + _T("\\."));
 }
 
 wxString wxStandardPaths::GetPluginsDir() const
index af3551bf068b51546d3f765c7d64491d0e6693a1..f445c2f3d2d8fce21bc217649ec9615ae7a39fa8 100644 (file)
@@ -75,12 +75,12 @@ wxString wxStandardPaths::GetConfigDir() const
 
 wxString wxStandardPaths::GetDataDir() const
 {
-   return AppendAppName(GetInstallPrefix() + _T("/sys$share"));
+   return AppendAppInfo(GetInstallPrefix() + _T("/sys$share"));
 }
 
 wxString wxStandardPaths::GetLocalDataDir() const
 {
-   return AppendAppName(_T("/sys$manager"));
+   return AppendAppInfo(_T("/sys$manager"));
 }
 
 wxString wxStandardPaths::GetUserDataDir() const
@@ -187,22 +187,22 @@ wxString wxStandardPaths::GetConfigDir() const
 
 wxString wxStandardPaths::GetDataDir() const
 {
-   return AppendAppName(GetInstallPrefix() + _T("/share"));
+   return AppendAppInfo(GetInstallPrefix() + _T("/share"));
 }
 
 wxString wxStandardPaths::GetLocalDataDir() const
 {
-   return AppendAppName(_T("/etc"));
+   return AppendAppInfo(_T("/etc"));
 }
 
 wxString wxStandardPaths::GetUserDataDir() const
 {
-   return AppendAppName(wxFileName::GetHomeDir() + _T("/."));
+   return AppendAppInfo(wxFileName::GetHomeDir() + _T("/."));
 }
 
 wxString wxStandardPaths::GetPluginsDir() const
 {
-    return AppendAppName(GetInstallPrefix() + _T("/lib"));
+    return AppendAppInfo(GetInstallPrefix() + _T("/lib"));
 }
 
 wxString