/////////////////////////////////////////////////////////////////////////////
-// Name: docview.h
+// Name: samples/docview/docview.h
// Purpose: Document/view demo
// Author: Julian Smart
-// Modified by:
+// Modified by: Vadim Zeitlin: merge with the MDI version and general cleanup
// Created: 04/01/98
// RCS-ID: $Id$
-// Copyright: (c) Julian Smart
-// Licence: wxWindows license
+// Copyright: (c) 1998 Julian Smart
+// (c) 2008 Vadim Zeitlin
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-// #pragma interface "docview.h"
-#endif
-
-#ifndef __DOCVIEWSAMPLEH__
-#define __DOCVIEWSAMPLEH__
+#ifndef _WX_SAMPLES_DOCVIEW_DOCVIEW_H_
+#define _WX_SAMPLES_DOCVIEW_DOCVIEW_H_
#include "wx/docview.h"
-class wxDocManager;
+class MyFrame;
+class MyCanvas;
+class DrawingView;
// Define a new application
-class MyApp: public wxApp
+class MyApp : public wxApp
{
public:
- MyApp(void);
- bool OnInit(void);
- int OnExit(void);
-
- wxFrame *CreateChildFrame(wxDocument *doc, wxView *view, bool isCanvas);
-
-protected:
- wxDocManager* m_docManager;
-};
+ // this sample can be launched in several different ways:
+ enum Mode
+ {
+#if wxUSE_MDI_ARCHITECTURE
+ Mode_MDI, // MDI mode: multiple documents, single top level window
+#endif // wxUSE_MDI_ARCHITECTURE
+ Mode_SDI, // SDI mode: multiple documents, multiple top level windows
+ Mode_Single // single document mode (and hence single top level window)
+ };
-DECLARE_APP(MyApp)
+ MyApp();
-// Define a new frame
-class MyCanvas;
-class MyFrame: public wxDocParentFrame
-{
- DECLARE_CLASS(MyFrame)
-public:
- wxMenu *editMenu;
-
- // This pointer only needed if in single window mode
- MyCanvas *canvas;
-
- MyFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size,
- const long type);
-
+ // override some wxApp virtual methods
+ virtual bool OnInit();
+ virtual int OnExit();
+
+ virtual void OnInitCmdLine(wxCmdLineParser& parser);
+ virtual bool OnCmdLineParsed(wxCmdLineParser& parser);
+
+ // our specific methods
+ Mode GetMode() const { return m_mode; }
+ wxFrame *CreateChildFrame(wxView *view, bool isCanvas);
+
+ // these accessors should only be called in single document mode, otherwise
+ // the pointers are NULL and an assert is triggered
+ MyCanvas *GetMainWindowCanvas() const
+ { wxASSERT(m_canvas); return m_canvas; }
+ wxMenu *GetMainWindowEditMenu() const
+ { wxASSERT(m_menuEdit); return m_menuEdit; }
+
+private:
+ // append the standard document-oriented menu commands to this menu
+ void AppendDocumentFileCommands(wxMenu *menu, bool supportsPrinting);
+
+ // create the edit menu for drawing documents
+ wxMenu *CreateDrawingEditMenu();
+
+ // create and associate with the given frame the menu bar containing the
+ // given file and edit (possibly NULL) menus as well as the standard help
+ // one
+ void CreateMenuBarForFrame(wxFrame *frame, wxMenu *file, wxMenu *edit);
+
+
+ // show the about box: as we can have different frames it's more
+ // convenient, even if somewhat less usual, to handle this in the
+ // application object itself
void OnAbout(wxCommandEvent& event);
- MyCanvas *CreateCanvas(wxView *view, wxFrame *parent);
-
- DECLARE_EVENT_TABLE()
-};
-extern MyFrame *GetMainFrame(void);
-#define DOCVIEW_CUT 1
-#define DOCVIEW_ABOUT 2
+ // the currently used mode
+ Mode m_mode;
-extern bool singleWindowMode;
+ // only used if m_mode == Mode_Single
+ MyCanvas *m_canvas;
+ wxMenu *m_menuEdit;
+
+ DECLARE_EVENT_TABLE()
+ wxDECLARE_NO_COPY_CLASS(MyApp);
+};
+
+DECLARE_APP(MyApp)
-#endif
+#endif // _WX_SAMPLES_DOCVIEW_DOCVIEW_H_