mirror of
https://github.com/wxWidgets/wxWidgets.git
synced 2026-08-17 17:02:51 +08:00
Telling the program where to find its data/resource files can be useful under Windows too, so return the value of this variable if it is defined there too instead of always return the directory where the executable is located. See ##26383.
188 lines
5.0 KiB
C++
188 lines
5.0 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: src/common/stdpbase.cpp
|
|
// Purpose: wxStandardPathsBase methods common to all ports
|
|
// Author: Vadim Zeitlin
|
|
// Created: 2004-10-19
|
|
// Copyright: (c) 2004 Vadim Zeitlin <vadim@wxwidgets.org>
|
|
// Licence: wxWindows licence
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ============================================================================
|
|
// declarations
|
|
// ============================================================================
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// headers
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// for compilers that support precompilation, includes "wx.h".
|
|
#include "wx/wxprec.h"
|
|
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/app.h"
|
|
#endif //WX_PRECOMP
|
|
#include "wx/apptrait.h"
|
|
|
|
#include "wx/filename.h"
|
|
#include "wx/stdpaths.h"
|
|
#include "wx/utils.h"
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// module globals
|
|
// ----------------------------------------------------------------------------
|
|
|
|
namespace
|
|
{
|
|
|
|
// Derive a class just to be able to create it: wxStandardPaths ctor is
|
|
// protected to prevent its misuse, but it also means we can't create an object
|
|
// of this class directly.
|
|
class wxStandardPathsDefault : public wxStandardPaths
|
|
{
|
|
public:
|
|
wxStandardPathsDefault() { }
|
|
};
|
|
|
|
static wxStandardPathsDefault gs_stdPaths;
|
|
|
|
} // anonymous namespace
|
|
|
|
// ============================================================================
|
|
// implementation
|
|
// ============================================================================
|
|
|
|
/* static */
|
|
wxStandardPaths& wxStandardPathsBase::Get()
|
|
{
|
|
return wxApp::GetValidTraits().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
|
|
|
|
return wxFileName(path).GetAbsolutePath();
|
|
}
|
|
|
|
wxStandardPaths& 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);
|
|
|
|
// Default for compatibility with the existing config files.
|
|
SetFileLayout(FileLayout_Classic);
|
|
}
|
|
|
|
wxStandardPathsBase::~wxStandardPathsBase()
|
|
{
|
|
// nothing to do here
|
|
}
|
|
|
|
wxString wxStandardPathsBase::GetDataDir() const
|
|
{
|
|
// allow to override the location of the data directory by setting
|
|
// WX_APPNAME_DATA_DIR environment variable: this is very useful in
|
|
// practice for running well-written (and so using wxStandardPaths to find
|
|
// their files) wx applications without installing them
|
|
wxString envOverride;
|
|
wxGetEnv("WX_" + wxTheApp->GetAppName().Upper() + "_DATA_DIR", &envOverride);
|
|
|
|
return envOverride;
|
|
}
|
|
|
|
wxString wxStandardPathsBase::GetLocalDataDir() const
|
|
{
|
|
return GetDataDir();
|
|
}
|
|
|
|
wxString wxStandardPathsBase::GetUserLocalDataDir() const
|
|
{
|
|
return GetUserDataDir();
|
|
}
|
|
|
|
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();
|
|
}
|
|
|
|
wxString wxStandardPathsBase::GetUserDir(Dir WXUNUSED(userDir)) const
|
|
{
|
|
return wxFileName::GetHomeDir();
|
|
}
|
|
|
|
/* 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 wxUniChar ch = *(subdir.end() - 1);
|
|
if ( !wxFileName::IsPathSeparator(ch) && ch != wxT('.') )
|
|
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;
|
|
}
|
|
|
|
wxString wxStandardPathsBase::GetSharedLibrariesDir() const
|
|
{
|
|
return {};
|
|
}
|