From: Vadim Zeitlin Date: Fri, 22 May 2009 14:02:07 +0000 (+0000) Subject: allow 2 step creation of wxDocChildFrameAnyBase and derived classes X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/c65c67bebaac058737b3eda114e7c3dc1f022423 allow 2 step creation of wxDocChildFrameAnyBase and derived classes git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60713 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/docview.h b/include/wx/docview.h index 55fa2c7920..d3e109eb60 100644 --- a/include/wx/docview.h +++ b/include/wx/docview.h @@ -520,16 +520,33 @@ inline size_t wxDocManager::GetNoHistoryFiles() const class WXDLLIMPEXP_CORE wxDocChildFrameAnyBase { public: + // default ctor, use Create() after it + wxDocChildFrameAnyBase() { m_win = NULL; } + + // full ctor equivalent to using the default one and Create(0 wxDocChildFrameAnyBase(wxDocument *doc, wxView *view, wxWindow *win) - : m_win(win) + { + Create(doc, view, win); + } + + // method which must be called for an object created using the default ctor + // + // note that it returns bool just for consistency with Create() methods in + // other classes, we never return false from here + bool Create(wxDocument *doc, wxView *view, wxWindow *win) { m_childDocument = doc; m_childView = view; + m_win = win; if ( view ) view->SetDocChildFrame(this); + + return true; } + // dtor doesn't need to be virtual, an object should never be destroyed via + // a pointer to this class ~wxDocChildFrameAnyBase() { // prevent the view from deleting us if we're being deleted directly @@ -564,7 +581,7 @@ protected: // the associated window: having it here is not terribly elegant but it // allows us to avoid having any virtual functions in this class - wxWindow * const m_win; + wxWindow* m_win; wxDECLARE_NO_COPY_CLASS(wxDocChildFrameAnyBase); @@ -587,6 +604,9 @@ class WXDLLIMPEXP_CORE wxDocChildFrameAny : public ChildFrame, public: typedef ChildFrame BaseClass; + // default ctor, use Create after it + wxDocChildFrameAny() { } + // ctor for a frame showing the given view of the specified document wxDocChildFrameAny(wxDocument *doc, wxView *view, @@ -597,13 +617,32 @@ public: const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE, const wxString& name = wxFrameNameStr) - : BaseClass(parent, id, title, pos, size, style, name), - wxDocChildFrameAnyBase(doc, view, this) { + Create(doc, view, parent, id, title, pos, size, style, name); + } + + bool Create(wxDocument *doc, + wxView *view, + ParentFrame *parent, + wxWindowID id, + const wxString& title, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxDEFAULT_FRAME_STYLE, + const wxString& name = wxFrameNameStr) + { + if ( !BaseClass::Create(parent, id, title, pos, size, style, name) ) + return false; + + if ( !wxDocChildFrameAnyBase::Create(doc, view, this) ) + return false; + this->Connect(wxEVT_ACTIVATE, wxActivateEventHandler(wxDocChildFrameAny::OnActivate)); this->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(wxDocChildFrameAny::OnCloseWindow)); + + return true; } virtual bool Destroy() @@ -659,6 +698,10 @@ typedef wxDocChildFrameAny wxDocChildFrameBase; class WXDLLIMPEXP_CORE wxDocChildFrame : public wxDocChildFrameBase { public: + wxDocChildFrame() + { + } + wxDocChildFrame(wxDocument *doc, wxView *view, wxFrame *parent, @@ -673,6 +716,23 @@ public: { } + bool Create(wxDocument *doc, + wxView *view, + wxFrame *parent, + wxWindowID id, + const wxString& title, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxDEFAULT_FRAME_STYLE, + const wxString& name = wxFrameNameStr) + { + return wxDocChildFrameBase::Create + ( + doc, view, + parent, id, title, pos, size, style, name + ); + } + private: DECLARE_CLASS(wxDocChildFrame) wxDECLARE_NO_COPY_CLASS(wxDocChildFrame);