]> git.saurik.com Git - wxWidgets.git/commitdiff
Add wxDocManager::FindDocumentByPath() helper.
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 27 Mar 2013 23:10:20 +0000 (23:10 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 27 Mar 2013 23:10:20 +0000 (23:10 +0000)
Simply refactor the code which already existed inside wxDocManager in a new
public method.

Closes #15126.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73730 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

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

index 5ece48ffc888d04ce4e9d76303d4b37b9e7daec4..27117857dafc5050f076f6a6bd7b44a797dcef23 100644 (file)
@@ -625,6 +625,7 @@ All (GUI):
 - Make wxGenericDataViewCtrl::SetFont() really work (Laurent Poujoulat).
 - Remove wxLogWindow::OnFrameCreate(), it was never called anyhow.
 - Added wxDocument::Activate() (troelsk).
+- Added wxDocManager::FindDocumentByPath() (troelsk).
 
 wxGTK:
 
index d9c34e64a615f0ee1051f621047a5ea67d4c3597..3b06cb0826db0af8a401ec916343f1a6eb23340d 100644 (file)
@@ -446,6 +446,9 @@ public:
     // Find template from document class info, may return NULL.
     wxDocTemplate* FindTemplate(const wxClassInfo* documentClassInfo);
 
+    // Find document from file name, may return NULL.
+    wxDocument* FindDocumentByPath(const wxString& path) const;
+
     wxDocument *GetCurrentDocument() const;
 
     void SetMaxDocsOpen(int n) { m_maxDocsOpen = n; }
index 279556757b159bffc065886789b57dea251058a5..7f5a5ee99e274f5de8b2555f0edd7ac3b38d69d3 100644 (file)
@@ -414,6 +414,19 @@ public:
      */
     wxDocTemplate* FindTemplate(const wxClassInfo* classinfo);
 
+
+    /**
+        Search for the document corresponding to the given file.
+
+        @param path
+            Document file path.
+        @return
+            Pointer to a wxDocument, or @NULL if none found.
+
+        @since 2.9.5
+     */
+    wxDocument* FindDocumentByPath(const wxString& path) const;
+
     /**
         Closes the specified document.
 
index 234c5c2b85e9819d7d131179ec31299fc6168175..4b1d2a0affece98aa03e069ac1ea97b380460f98 100644 (file)
@@ -1418,6 +1418,19 @@ void wxDocument::Activate()
         win->Raise();
 }
 
+wxDocument* wxDocManager::FindDocumentByPath(const wxString& path) const
+{
+    const wxFileName fileName(path);
+    for ( wxList::const_iterator i = m_docs.begin(); i != m_docs.end(); ++i )
+    {
+        wxDocument * const doc = wxStaticCast(*i, wxDocument);
+
+        if ( fileName == wxFileName(doc->GetFilename()) )
+            return doc;
+    }
+    return NULL;
+}
+
 wxDocument *wxDocManager::CreateDocument(const wxString& pathOrig, long flags)
 {
     // this ought to be const but SelectDocumentType/Path() are not
@@ -1464,21 +1477,15 @@ wxDocument *wxDocManager::CreateDocument(const wxString& pathOrig, long flags)
     // check whether the document with this path is already opened
     if ( !path.empty() )
     {
-        const wxFileName fn(path);
-        for ( wxList::const_iterator i = m_docs.begin(); i != m_docs.end(); ++i )
+        wxDocument * const doc = FindDocumentByPath(path);
+        if (doc)
         {
-            wxDocument * const doc = (wxDocument*)*i;
-
-            if ( fn == doc->GetFilename() )
-            {
-                // file already open, just activate it and return
-                doc->Activate();
-                return doc;
-            }
+            // file already open, just activate it and return
+            doc->Activate();
+            return doc;
         }
     }
 
-
     // no, we need to create a new document