From: Vadim Zeitlin Date: Wed, 21 Jan 2009 14:01:30 +0000 (+0000) Subject: added wxStandardPaths::GetAppDocumentsDir() and use it by default for loading/saving... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/d8efd2198ff050ca5a5726bcad0f42692fe872df added wxStandardPaths::GetAppDocumentsDir() and use it by default for loading/saving documents in wxDocManager git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58259 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/changes.txt b/docs/changes.txt index f926ef3c5d..4b83dbb347 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -328,6 +328,7 @@ All: - Added wxSHUTDOWN_LOGOFF and wxSHUTDOWN_FORCE wxShutdown() flags (troelsk). - Added wxSocket::ShutdownOutput(). - Handle exceptions thrown from overridden wxView::OnCreate() gracefully. +- Added wxStandardPaths::GetAppDocumentsDir(). All (Unix): diff --git a/include/wx/docview.h b/include/wx/docview.h index 6568e7654a..9ab4bebf46 100644 --- a/include/wx/docview.h +++ b/include/wx/docview.h @@ -436,7 +436,7 @@ public: virtual void FileHistoryAddFilesToMenu(); virtual void FileHistoryAddFilesToMenu(wxMenu* menu); - wxString GetLastDirectory() const { return m_lastDirectory; } + wxString GetLastDirectory() const; void SetLastDirectory(const wxString& dir) { m_lastDirectory = dir; } // Get the current document manager diff --git a/include/wx/stdpaths.h b/include/wx/stdpaths.h index 813c50c5b8..517e7de31d 100644 --- a/include/wx/stdpaths.h +++ b/include/wx/stdpaths.h @@ -131,6 +131,11 @@ public: // $HOME under Unix and ~/Documents under Mac virtual wxString GetDocumentsDir() const; + // return the directory for the documents files used by this application: + // it's a subdirectory of GetDocumentsDir() constructed using the + // application name/vendor if it exists or just GetDocumentsDir() otherwise + virtual wxString GetAppDocumentsDir() const; + // return the temporary directory for the current user virtual wxString GetTempDir() const; @@ -151,8 +156,8 @@ public: protected: - // append the path component, with a leading path seperator if a - // path seperator or dot (.) is not already at the end of dir + // append the path component, with a leading path separator if a + // path separator 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 diff --git a/interface/wx/stdpaths.h b/interface/wx/stdpaths.h index b72c98bd52..af4dac1d29 100644 --- a/interface/wx/stdpaths.h +++ b/interface/wx/stdpaths.h @@ -53,6 +53,23 @@ public: */ static wxStandardPathsBase& Get(); + /** + Return the directory for the document files used by this application. + + If the application-specific directory doesn't exist, this function + returns GetDocumentsDir(). + + Example return values: + - Unix: @c ~/appname + - Windows: @c "C:\Documents and Settings\username\My Documents\appname" + - Mac: @c ~/Documents/appname + + @since 2.9.0 + + @see GetAppDocumentsDir() + */ + virtual wxString GetAppDocumentsDir() const; + /** Return the directory containing the system config files. Example return values: @@ -78,12 +95,15 @@ public: /** Return the directory containing the current user's documents. + Example return values: - Unix: @c ~ (the home directory) - Windows: @c "C:\Documents and Settings\username\My Documents" - Mac: @c ~/Documents @since 2.7.0 + + @see GetAppDocumentsDir() */ virtual wxString GetDocumentsDir() const; diff --git a/src/common/docview.cpp b/src/common/docview.cpp index ac7af5109a..851d5a4c31 100644 --- a/src/common/docview.cpp +++ b/src/common/docview.cpp @@ -56,6 +56,7 @@ #include "wx/cmdproc.h" #include "wx/tokenzr.h" #include "wx/filename.h" +#include "wx/stdpaths.h" #include "wx/vector.h" #include "wx/ptr_scpd.h" @@ -307,8 +308,12 @@ bool wxDocument::SaveAs() wxString filter = docTemplate->GetFileFilter() ; #endif wxString defaultDir = docTemplate->GetDirectory(); - if (defaultDir.IsEmpty()) + if ( defaultDir.empty() ) + { defaultDir = wxPathOnly(GetFilename()); + if ( defaultDir.empty() ) + defaultDir = GetDocumentManager()->GetLastDirectory(); + } wxString fileName = wxFileSelector(_("Save As"), defaultDir, @@ -938,6 +943,19 @@ bool wxDocManager::Initialize() return true; } +wxString wxDocManager::GetLastDirectory() const +{ + // use the system-dependent default location for the document files if + // we're being opened for the first time + if ( m_lastDirectory.empty() ) + { + wxDocManager * const self = const_cast(this); + self->m_lastDirectory = wxStandardPaths::Get().GetAppDocumentsDir(); + } + + return m_lastDirectory; +} + wxFileHistory *wxDocManager::OnCreateFileHistory() { return new wxFileHistory; @@ -1490,7 +1508,7 @@ wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates, wxWindow* parent = wxFindSuitableParent(); wxString pathTmp = wxFileSelectorEx(_("Open File"), - m_lastDirectory, + GetLastDirectory(), wxEmptyString, &FilterIndex, descrBuf, @@ -1514,7 +1532,8 @@ wxDocTemplate *wxDocManager::SelectDocumentPath(wxDocTemplate **templates, path = wxEmptyString; return NULL; } - m_lastDirectory = wxPathOnly(pathTmp); + + SetLastDirectory(wxPathOnly(pathTmp)); path = pathTmp; diff --git a/src/common/stdpbase.cpp b/src/common/stdpbase.cpp index 04cebb8587..6eaaeb29ec 100644 --- a/src/common/stdpbase.cpp +++ b/src/common/stdpbase.cpp @@ -106,6 +106,14 @@ 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 { @@ -113,7 +121,9 @@ wxString wxStandardPathsBase::GetTempDir() const } /* static */ -wxString wxStandardPathsBase::AppendPathComponent(const wxString& dir, const wxString& component) +wxString +wxStandardPathsBase::AppendPathComponent(const wxString& dir, + const wxString& component) { wxString subdir(dir);