X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6cb5e50b0d2259de305f273d2be3d28d7e84dc6a..302c73511a6819c5a56269ba95cb18eb11e994f0:/src/common/stdpbase.cpp?ds=sidebyside diff --git a/src/common/stdpbase.cpp b/src/common/stdpbase.cpp index 4d477a2974..6eaaeb29ec 100644 --- a/src/common/stdpbase.cpp +++ b/src/common/stdpbase.cpp @@ -24,6 +24,12 @@ #pragma hdrstop #endif +#ifndef WX_PRECOMP + #include "wx/app.h" +#endif //WX_PRECOMP +#include "wx/apptrait.h" + +#include "wx/filename.h" #include "wx/stdpaths.h" // ---------------------------------------------------------------------------- @@ -37,11 +43,49 @@ static wxStandardPaths gs_stdPaths; // ============================================================================ /* static */ -wxStandardPaths& wxStandardPathsBase::Get() +wxStandardPathsBase& wxStandardPathsBase::Get() +{ + wxAppTraits * const traits = wxTheApp ? wxTheApp->GetTraits() : NULL; + wxCHECK_MSG( traits, gs_stdPaths, _T("create wxApp before calling this") ); + + return traits->GetStandardPaths(); +} + +wxString wxStandardPathsBase::GetExecutablePath() const +{ + if ( !wxTheApp || !wxTheApp->argv ) + return wxEmptyString; + + wxString argv0 = wxTheApp->argv[0]; + if (wxIsAbsolutePath(argv0)) + return argv0; + + // Search PATH.environment variable... + wxPathList pathlist; + pathlist.AddEnvList(wxT("PATH")); + wxString path = pathlist.FindAbsoluteValidPath(argv0); + if ( path.empty() ) + return argv0; // better than nothing + + wxFileName filename(path); + filename.Normalize(); + return filename.GetFullPath(); +} + +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 @@ -57,3 +101,63 @@ wxString wxStandardPathsBase::GetUserLocalDataDir() const return GetUserDataDir(); } +wxString wxStandardPathsBase::GetDocumentsDir() const +{ + return wxFileName::GetHomeDir(); +} + +wxString wxStandardPathsBase::GetAppDocumentsDir() const +{ + const wxString docsDir = GetDocumentsDir(); + wxString appDocsDir = AppendAppInfo(docsDir); + + return wxDirExists(appDocsDir) ? appDocsDir : docsDir; +} + +// return the temporary directory for the current user +wxString wxStandardPathsBase::GetTempDir() const +{ + return wxFileName::GetTempDir(); +} + +/* static */ +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() ) + { + if ( !component.empty() ) + { + const wxChar ch = *(subdir.end() - 1); + if ( !wxFileName::IsPathSeparator(ch) && ch != _T('.') ) + subdir += wxFileName::GetPathSeparator(); + + 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; +} +