Ticket #15126: finddoc.patch

File finddoc.patch, 2.8 KB (added by troelsk, 5 years ago)

Trunk

  • include/wx/docview.h

     
    446446    // Find template from document class info, may return NULL.
    447447    wxDocTemplate* FindTemplate(const wxClassInfo* documentClassInfo);
    448448
     449    // Find document from file name, may return NULL.
     450    wxDocument* FindDocumentByFileName(const wxString& path) const;
     451
    449452    wxDocument *GetCurrentDocument() const;
    450453
    451454    void SetMaxDocsOpen(int n) { m_maxDocsOpen = n; }
  • interface/wx/docview.h

     
    414414     */
    415415    wxDocTemplate* FindTemplate(const wxClassInfo* classinfo);
    416416
     417
    417418    /**
     419        Search for a particular document.
     420
     421        @param path
     422            Document file path.
     423        @return
     424            Pointer to a wxDocument, or @NULL if none found.
     425
     426        @since 2.9.5
     427     */
     428    wxDocument* FindDocumentByFileName(const wxString& path) const;
     429
     430    /**
    418431        Closes the specified document.
    419432
    420433        If @a force is @true, the document is closed even if it has unsaved
  • src/common/docview.cpp

     
    14181418        win->Raise();
    14191419}
    14201420
     1421wxDocument* wxDocManager::FindDocumentByFileName(const wxString& path) const
     1422{
     1423    const wxFileName fileName(path);
     1424    for ( wxList::const_iterator i = m_docs.begin(); i != m_docs.end(); ++i )
     1425    {
     1426        wxDocument * const doc = wxStaticCast(*i, wxDocument);
     1427
     1428        if ( fileName == wxFileName(doc->GetFilename()) )
     1429            return doc;
     1430    }
     1431    return NULL;
     1432}
     1433
    14211434wxDocument *wxDocManager::CreateDocument(const wxString& pathOrig, long flags)
    14221435{
    14231436    // this ought to be const but SelectDocumentType/Path() are not
     
    14641477    // check whether the document with this path is already opened
    14651478    if ( !path.empty() )
    14661479    {
    1467         const wxFileName fn(path);
    1468         for ( wxList::const_iterator i = m_docs.begin(); i != m_docs.end(); ++i )
     1480        wxDocument * const doc = FindDocumentByFileName(path);
     1481        if (doc)
    14691482        {
    1470             wxDocument * const doc = (wxDocument*)*i;
    1471 
    1472             if ( fn == doc->GetFilename() )
    1473             {
    1474                 // file already open, just activate it and return
    1475                 doc->Activate();
    1476                 return doc;
    1477             }
     1483            // file already open, just activate it and return
     1484            doc->Activate();
     1485            return doc;
    14781486        }
    14791487    }
    14801488
    1481 
    14821489    // no, we need to create a new document
    14831490
    14841491