#if wxUSE_STDPATHS
+#include "wx/stdpaths.h"
+
#ifndef WX_PRECOMP
- #include "wx/app.h"
+ #include "wx/utils.h"
#endif //WX_PRECOMP
#include "wx/dynlib.h"
#include "wx/filename.h"
-#include "wx/stdpaths.h"
-
#include "wx/msw/private.h"
#include "wx/msw/wrapshl.h"
// ----------------------------------------------------------------------------
// used in our wxLogTrace messages
-static const wxChar *TRACE_MASK = _T("stdpaths");
+#define TRACE_MASK _T("stdpaths")
#ifndef CSIDL_APPDATA
#define CSIDL_APPDATA 0x001a
#define CSIDL_PROGRAM_FILES 0x0026
#endif
+#ifndef CSIDL_PERSONAL
+ #define CSIDL_PERSONAL 0x0005
+#endif
+
#ifndef SHGFP_TYPE_CURRENT
#define SHGFP_TYPE_CURRENT 0
#endif
#ifndef SHGFP_TYPE_DEFAULT
#define SHGFP_TYPE_DEFAULT 1
#endif
-
// ----------------------------------------------------------------------------
// module globals
// ----------------------------------------------------------------------------
static void ResolveShellFunctions()
{
+#if wxUSE_DYNLIB_CLASS
+
// start with the newest functions, fall back to the oldest ones
#ifdef __WXWINCE__
wxString shellDllName(_T("coredll"));
wxDynamicLibrary dllShellFunctions( shellDllName );
if ( !dllShellFunctions.IsLoaded() )
{
- wxString traceMessage = wxString::Format( _T("Failed to load %s.dll"), shellDllName );
- wxLogTrace(TRACE_MASK, traceMessage );
+ wxLogTrace(TRACE_MASK, _T("Failed to load %s.dll"), shellDllName.c_str() );
}
// don't give errors if the functions are unavailable, we're ready to deal
// because we also link to it statically, so it's ok
gs_shellFuncs.initialized = true;
+#endif
}
// ============================================================================
return dir;
}
+/* static */
+wxString wxStandardPaths::GetAppDir()
+{
+ wxFileName fn(wxGetFullModuleName());
+
+ // allow running the apps directly from build directory in debug builds
+#ifdef __WXDEBUG__
+ wxString lastdir;
+ if ( fn.GetDirCount() )
+ {
+ lastdir = fn.GetDirs().Last();
+ lastdir.MakeLower();
+ if ( lastdir.Matches(_T("debug*")) || lastdir.Matches(_T("vc_msw*")) )
+ fn.RemoveLastDir();
+ }
+#endif // __WXDEBUG__
+
+ return fn.GetPath();
+}
+
+wxString wxStandardPaths::GetDocumentsDir() const
+{
+ return DoGetDirectory(CSIDL_PERSONAL);
+}
+
// ----------------------------------------------------------------------------
// public functions
// ----------------------------------------------------------------------------
+wxString wxStandardPaths::GetExecutablePath() const
+{
+ return wxGetFullModuleName();
+}
+
wxString wxStandardPaths::GetConfigDir() const
{
- return AppendAppName(DoGetDirectory(CSIDL_COMMON_APPDATA));
+ return AppendAppInfo(DoGetDirectory(CSIDL_COMMON_APPDATA));
}
wxString wxStandardPaths::GetUserConfigDir() const
{
// under Windows each program is usually installed in its own directory and
// so its datafiles are in the same directory as its main executable
- return wxFileName(wxGetFullModuleName()).GetPath();
+ return GetAppDir();
}
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
{
- return wxFileName(wxGetFullModuleName()).GetPath();
+ // there is no standard location for plugins, suppose they're in the same
+ // directory as the .exe
+ return GetAppDir();
}
-
// ============================================================================
// wxStandardPathsWin16 implementation
// ============================================================================