/////////////////////////////////////////////////////////////////////////////
-// Name: view.h
+// Name: samples/docview/view.h
// Purpose: View classes
// 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
/////////////////////////////////////////////////////////////////////////////
-#ifndef __VIEW_H__
-#define __VIEW_H__
+#ifndef _WX_SAMPLES_DOCVIEW_VIEW_H_
+#define _WX_SAMPLES_DOCVIEW_VIEW_H_
#include "wx/docview.h"
-class DrawingView;
+// ----------------------------------------------------------------------------
+// Drawing view classes
+// ----------------------------------------------------------------------------
+
+// The window showing the drawing itself
class MyCanvas : public wxScrolledWindow
{
public:
- DrawingView* m_view;
+ // view may be NULL if we're not associated with one yet, but parent must
+ // be a valid pointer
+ MyCanvas(wxView *view, wxWindow *parent = NULL);
+ virtual ~MyCanvas();
- MyCanvas(DrawingView*, wxFrame*, const wxPoint& pos, const wxSize& size, const long style);
virtual void OnDraw(wxDC& dc);
-protected:
+ // in a normal multiple document application a canvas is associated with
+ // one view from the beginning until the end, but to support the single
+ // document mode in which all documents reuse the same MyApp::GetCanvas()
+ // we need to allow switching the canvas from one view to another one
+
+ void SetView(wxView *view)
+ {
+ wxASSERT_MSG( !m_view, "shouldn't be already associated with a view" );
+
+ m_view = view;
+ }
+
+ void ResetView()
+ {
+ wxASSERT_MSG( m_view, "should be associated with a view" );
+
+ m_view = NULL;
+ }
+
+private:
void OnMouseEvent(wxMouseEvent& event);
- DECLARE_EVENT_TABLE()
-};
-class MyTextWindow: public wxTextCtrl
-{
-public:
- wxView* m_view;
+ wxView *m_view;
- MyTextWindow(wxView *v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
+ // the segment being currently drawn or NULL if none
+ DoodleSegment *m_currentSegment;
+
+ // the last mouse press position
+ wxPoint m_lastMousePos;
+
+ DECLARE_EVENT_TABLE()
};
+// The view using MyCanvas to show its contents
class DrawingView : public wxView
{
public:
- wxFrame* m_frame;
- MyCanvas* m_canvas;
-
- DrawingView() { m_canvas = NULL; m_frame = NULL; };
- virtual ~DrawingView() {};
+ DrawingView() : wxView(), m_canvas(NULL) {}
virtual bool OnCreate(wxDocument *doc, long flags);
virtual void OnDraw(wxDC *dc);
DrawingDocument* GetDocument();
-protected:
+private:
void OnCut(wxCommandEvent& event);
-private:
+ MyCanvas *m_canvas;
+
DECLARE_EVENT_TABLE()
DECLARE_DYNAMIC_CLASS(DrawingView)
};
+// ----------------------------------------------------------------------------
+// Text view classes
+// ----------------------------------------------------------------------------
+
+// The view using a standard wxTextCtrl to show its contents
class TextEditView : public wxView
{
public:
- wxFrame* m_frame;
- MyTextWindow* m_textsw;
-
- TextEditView(): wxView() { m_frame = NULL; m_textsw = NULL; }
- virtual ~TextEditView() {}
+ TextEditView() : wxView(), m_text(NULL) {}
virtual bool OnCreate(wxDocument *doc, long flags);
virtual void OnDraw(wxDC *dc);
- virtual void OnUpdate(wxView *sender, wxObject *hint = NULL);
virtual bool OnClose(bool deleteWindow = true);
+ wxTextCtrl *GetText() const { return m_text; }
+
private:
- void OnCopy(wxCommandEvent& WXUNUSED(event)) { m_textsw->Copy(); }
- void OnPaste(wxCommandEvent& WXUNUSED(event)) { m_textsw->Paste(); }
- void OnSelectAll(wxCommandEvent& WXUNUSED(event)) { m_textsw->SelectAll(); }
+ void OnCopy(wxCommandEvent& WXUNUSED(event)) { m_text->Copy(); }
+ void OnPaste(wxCommandEvent& WXUNUSED(event)) { m_text->Paste(); }
+ void OnSelectAll(wxCommandEvent& WXUNUSED(event)) { m_text->SelectAll(); }
+
+ wxTextCtrl *m_text;
DECLARE_EVENT_TABLE()
DECLARE_DYNAMIC_CLASS(TextEditView)
};
-#endif
+// ----------------------------------------------------------------------------
+// ImageCanvas
+// ----------------------------------------------------------------------------
+
+class ImageCanvas : public wxScrolledWindow
+{
+public:
+ ImageCanvas(wxView*);
+
+ virtual void OnDraw(wxDC& dc);
+private:
+ wxView *m_view;
+};
+
+// ----------------------------------------------------------------------------
+// ImageView
+// ----------------------------------------------------------------------------
+
+class ImageView : public wxView
+{
+public:
+ ImageView() : wxView() {}
+
+ virtual bool OnCreate(wxDocument*, long flags);
+ virtual void OnDraw(wxDC*);
+ virtual bool OnClose(bool deleteWindow = true);
+ virtual void OnUpdate(wxView *sender, wxObject *hint = NULL);
+
+ ImageDocument* GetDocument();
+
+private:
+ ImageCanvas* m_canvas;
+
+ DECLARE_DYNAMIC_CLASS(ImageView)
+};
+
+// ----------------------------------------------------------------------------
+// ImageDetailsView
+// ----------------------------------------------------------------------------
+
+class ImageDetailsView : public wxView
+{
+public:
+ ImageDetailsView(ImageDetailsDocument *doc);
+
+ virtual void OnDraw(wxDC *dc);
+ virtual bool OnClose(bool deleteWindow);
+
+private:
+ wxFrame *m_frame;
+
+ wxDECLARE_NO_COPY_CLASS(ImageDetailsView);
+};
+
+#endif // _WX_SAMPLES_DOCVIEW_VIEW_H_