From 217b71400f0ee74b2f472ef724172dc7f1459e4e Mon Sep 17 00:00:00 2001
From: Julian Smart <julian@anthemion.co.uk>
Date: Thu, 3 Jun 2004 14:19:39 +0000
Subject: [PATCH] Separated creation and initialisation of a document via its
 doc template.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27600 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 docs/latex/wx/doctempl.tex | 10 ++++++++++
 include/wx/docview.h       |  4 ++++
 src/common/docview.cpp     | 17 +++++++++++++++--
 3 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/docs/latex/wx/doctempl.tex b/docs/latex/wx/doctempl.tex
index ebae77f6ef..afaaea357e 100644
--- a/docs/latex/wx/doctempl.tex
+++ b/docs/latex/wx/doctempl.tex
@@ -154,6 +154,9 @@ Creates a new instance of the associated document class. If you have not supplie
 a wxClassInfo parameter to the template constructor, you will need to override this
 function to return an appropriate document instance.
 
+This function calls wxDocTemplate::InitDocument which in turns
+calls wxDocument::OnCreate.
+
 \membersection{wxDocTemplate::CreateView}
 
 \func{wxView *}{CreateView}{\param{wxDocument *}{doc}, \param{long}{ flags = 0}}
@@ -210,6 +213,13 @@ Returns the flags, as passed to the document template constructor.
 
 Returns the view type name, as passed to the document template constructor.
 
+\membersection{wxDocTemplate::InitDocument}
+
+\func{bool}{InitDocument}{\param{wxDocument* }{doc}, \param{const wxString\& }{path}, \param{long}{ flags = 0}}
+
+Initialises the document, calling wxDocument::OnCreate. This is called from
+wxDocTemplate::CreateDocument.
+
 \membersection{wxDocTemplate::IsVisible}
 
 \func{bool}{IsVisible}{\void}
diff --git a/include/wx/docview.h b/include/wx/docview.h
index ef574fd486..08a9a3ce44 100644
--- a/include/wx/docview.h
+++ b/include/wx/docview.h
@@ -254,6 +254,10 @@ public:
     virtual wxDocument *CreateDocument(const wxString& path, long flags = 0);
     virtual wxView *CreateView(wxDocument *doc, long flags = 0);
 
+    // Helper method for CreateDocument; also allows you to do your own document
+    // creation
+    virtual bool InitDocument(wxDocument* doc, const wxString& path, long flags = 0);
+
     wxString GetDefaultExtension() const { return m_defaultExt; };
     wxString GetDescription() const { return m_description; }
     wxString GetDirectory() const { return m_directory; };
diff --git a/src/common/docview.cpp b/src/common/docview.cpp
index a9687e0327..f77b00cdbd 100644
--- a/src/common/docview.cpp
+++ b/src/common/docview.cpp
@@ -691,18 +691,31 @@ wxDocument *wxDocTemplate::CreateDocument(const wxString& path, long flags)
     if (!m_docClassInfo)
         return (wxDocument *) NULL;
     wxDocument *doc = (wxDocument *)m_docClassInfo->CreateObject();
+    
+    if (InitDocument(doc, path, flags))
+    {
+        return doc;
+    }
+    else
+    {
+        return (wxDocument *) NULL;
+    }
+}
+
+bool wxDocTemplate::InitDocument(wxDocument* doc, const wxString& path, long flags)
+{
     doc->SetFilename(path);
     doc->SetDocumentTemplate(this);
     GetDocumentManager()->AddDocument(doc);
     doc->SetCommandProcessor(doc->OnCreateCommandProcessor());
 
     if (doc->OnCreate(path, flags))
-        return doc;
+        return true;
     else
     {
         if (GetDocumentManager()->GetDocuments().Member(doc))
             doc->DeleteAllViews();
-        return (wxDocument *) NULL;
+        return false;
     }
 }
 
-- 
2.45.2