]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxStandardPaths::GetAppDocumentsDir() and use it by default for loading/saving...
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 21 Jan 2009 14:01:30 +0000 (14:01 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 21 Jan 2009 14:01:30 +0000 (14:01 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58259 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/docview.h
include/wx/stdpaths.h
interface/wx/stdpaths.h
src/common/docview.cpp
src/common/stdpbase.cpp

index f926ef3c5dacefa658efdf0aa63da8a552310202..4b83dbb347594e0054ddc414072fb5a56da296aa 100644 (file)
@@ -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):
 
index 6568e7654a34860ed96f68c2a7a4ac7dfe9f1b5f..9ab4bebf467b41e19b2070d932edeae0144cfc96 100644 (file)
@@ -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
index 813c50c5b863fa56977e82657bb2e61926913ff7..517e7de31d7a79d091ef1e2e48ae1c69eb88ffaf 100644 (file)
@@ -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
index b72c98bd520ef522945d5f509ba587cba5916620..af4dac1d2900045c87b09d15b47db1095f8f0e55 100644 (file)
@@ -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;
 
index ac7af5109a16d62ab28b6fd2570d8d97b75143a9..851d5a4c319c46dd4e2729e4be8c68cfed2defe6 100644 (file)
@@ -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<wxDocManager *>(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;
 
index 04cebb8587d2f885be5ceab3e82daaa95fdea7ee..6eaaeb29ec3fb54c7bace71c82814729e15301b8 100644 (file)
@@ -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);