Refactor wxDocParentFrame and wxDocMDIParentFrame to share common base class.

Use the same approach as for the child frames: add a base template class which
allows wxDocParentFrame to inherit from wxFrame and wxDocMDIParentFrame from
wxMDIParentFrame while still allowing to reuse the common code.

This reduces code duplication and should make implementing parent AUI document
frame easier as well, see #8945.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64295 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-05-12 14:34:18 +00:00
parent 8329f1d1d6
commit c48bdb0c28
4 changed files with 176 additions and 199 deletions

View File

@@ -1,11 +1,11 @@
/////////////////////////////////////////////////////////////////////////////
// Name: docmdi.h
// Name: wx/docmdi.h
// Purpose: Frame classes for MDI document/view applications
// Author: Julian Smart
// Modified by:
// Created: 01/02/97
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Copyright: (c) 1997 Julian Smart
// (c) 2010 Vadim Zeitlin
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
@@ -19,61 +19,60 @@
#include "wx/docview.h"
#include "wx/mdi.h"
/*
* Use this instead of wxMDIParentFrame
*/
#ifdef __VISUALC6__
// "non dll-interface class 'wxDocXXXFrameAny<>' used as base interface for
// dll-interface class 'wxDocMDIXXXFrame'" -- this is bogus as the template
// will be DLL-exported but only once it is used as base class here!
#pragma warning (push)
#pragma warning (disable:4275)
#endif
class WXDLLIMPEXP_CORE wxDocMDIParentFrame: public wxMDIParentFrame
// Define MDI versions of the doc-view frame classes. Note that we need to
// define them as classes for wxRTTI, otherwise we could simply define them as
// typedefs.
// ----------------------------------------------------------------------------
// An MDI document parent frame
// ----------------------------------------------------------------------------
typedef
wxDocParentFrameAny<wxMDIParentFrame> wxDocMDIParentFrameBase;
class WXDLLIMPEXP_CORE wxDocMDIParentFrame : public wxDocMDIParentFrameBase
{
public:
wxDocMDIParentFrame();
wxDocMDIParentFrame(wxDocManager *manager, wxFrame *parent, wxWindowID id,
const wxString& title, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE, const wxString& name = wxFrameNameStr);
wxDocMDIParentFrame() : wxDocMDIParentFrameBase() { }
bool Create(wxDocManager *manager, wxFrame *parent, wxWindowID id,
const wxString& title, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE, const wxString& name = wxFrameNameStr);
wxDocManager *GetDocumentManager(void) const { return m_docManager; }
void OnExit(wxCommandEvent& event);
void OnMRUFile(wxCommandEvent& event);
void OnCloseWindow(wxCloseEvent& event);
protected:
void Init();
virtual bool TryBefore(wxEvent& event);
wxDocManager *m_docManager;
wxDocMDIParentFrame(wxDocManager *manager,
wxFrame *parent,
wxWindowID id,
const wxString& title,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME_STYLE,
const wxString& name = wxFrameNameStr)
: wxDocMDIParentFrameBase(manager,
parent, id, title, pos, size, style, name)
{
}
private:
DECLARE_CLASS(wxDocMDIParentFrame)
DECLARE_EVENT_TABLE()
wxDECLARE_NO_COPY_CLASS(wxDocMDIParentFrame);
};
// ----------------------------------------------------------------------------
// An MDI document child frame: we need to define it as a class just for wxRTTI,
// otherwise we could simply typedef it
// An MDI document child frame
// ----------------------------------------------------------------------------
#ifdef __VISUALC6__
// "non dll-interface class 'wxDocChildFrameAny<>' used as base interface
// for dll-interface class 'wxDocMDIChildFrame'" -- this is bogus as the
// template will be DLL-exported but only once it is used as base class
// here!
#pragma warning (push)
#pragma warning (disable:4275)
#endif
typedef
wxDocChildFrameAny<wxMDIChildFrame, wxMDIParentFrame> wxDocMDIChildFrameBase;
class WXDLLIMPEXP_CORE wxDocMDIChildFrame : public wxDocMDIChildFrameBase
{
public:
wxDocMDIChildFrame() { }
wxDocMDIChildFrame(wxDocument *doc,
wxView *view,
wxMDIParentFrame *parent,