1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        samples/docview/view.h
3 // Purpose:     View classes
4 // Author:      Julian Smart
5 // Modified by: Vadim Zeitlin: merge with the MDI version and general cleanup
6 // Created:     04/01/98
7 // Copyright:   (c) 1998 Julian Smart
8 //              (c) 2008 Vadim Zeitlin
9 // Licence:     wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef _WX_SAMPLES_DOCVIEW_VIEW_H_
13 #define _WX_SAMPLES_DOCVIEW_VIEW_H_
14 
15 #include "wx/docview.h"
16 
17 // ----------------------------------------------------------------------------
18 // Drawing view classes
19 // ----------------------------------------------------------------------------
20 
21 // The window showing the drawing itself
22 class MyCanvas : public wxScrolledWindow
23 {
24 public:
25     // view may be NULL if we're not associated with one yet, but parent must
26     // be a valid pointer
27     MyCanvas(wxView *view, wxWindow *parent = NULL);
28     virtual ~MyCanvas();
29 
30     virtual void OnDraw(wxDC& dc);
31 
32     // in a normal multiple document application a canvas is associated with
33     // one view from the beginning until the end, but to support the single
34     // document mode in which all documents reuse the same MyApp::GetCanvas()
35     // we need to allow switching the canvas from one view to another one
36 
SetView(wxView * view)37     void SetView(wxView *view)
38     {
39         wxASSERT_MSG( !m_view, "shouldn't be already associated with a view" );
40 
41         m_view = view;
42     }
43 
ResetView()44     void ResetView()
45     {
46         wxASSERT_MSG( m_view, "should be associated with a view" );
47 
48         m_view = NULL;
49     }
50 
51 private:
52     void OnMouseEvent(wxMouseEvent& event);
53 
54     wxView *m_view;
55 
56     // the segment being currently drawn or NULL if none
57     DoodleSegment *m_currentSegment;
58 
59     // the last mouse press position
60     wxPoint m_lastMousePos;
61 
62     wxDECLARE_EVENT_TABLE();
63 };
64 
65 // The view using MyCanvas to show its contents
66 class DrawingView : public wxView
67 {
68 public:
DrawingView()69     DrawingView() : wxView(), m_canvas(NULL) {}
70 
71     virtual bool OnCreate(wxDocument *doc, long flags);
72     virtual void OnDraw(wxDC *dc);
73     virtual void OnUpdate(wxView *sender, wxObject *hint = NULL);
74     virtual bool OnClose(bool deleteWindow = true);
75 
76     DrawingDocument* GetDocument();
77 
78 private:
79     void OnCut(wxCommandEvent& event);
80 
81     MyCanvas *m_canvas;
82 
83     wxDECLARE_EVENT_TABLE();
84     wxDECLARE_DYNAMIC_CLASS(DrawingView);
85 };
86 
87 // ----------------------------------------------------------------------------
88 // Text view classes
89 // ----------------------------------------------------------------------------
90 
91 // The view using a standard wxTextCtrl to show its contents
92 class TextEditView : public wxView
93 {
94 public:
TextEditView()95     TextEditView() : wxView(), m_text(NULL) {}
96 
97     virtual bool OnCreate(wxDocument *doc, long flags);
98     virtual void OnDraw(wxDC *dc);
99     virtual bool OnClose(bool deleteWindow = true);
100 
GetText()101     wxTextCtrl *GetText() const { return m_text; }
102 
103 private:
OnCopy(wxCommandEvent & WXUNUSED (event))104     void OnCopy(wxCommandEvent& WXUNUSED(event)) { m_text->Copy(); }
OnPaste(wxCommandEvent & WXUNUSED (event))105     void OnPaste(wxCommandEvent& WXUNUSED(event)) { m_text->Paste(); }
OnSelectAll(wxCommandEvent & WXUNUSED (event))106     void OnSelectAll(wxCommandEvent& WXUNUSED(event)) { m_text->SelectAll(); }
107 
108     wxTextCtrl *m_text;
109 
110     wxDECLARE_EVENT_TABLE();
111     wxDECLARE_DYNAMIC_CLASS(TextEditView);
112 };
113 
114 // ----------------------------------------------------------------------------
115 // ImageCanvas
116 // ----------------------------------------------------------------------------
117 
118 class ImageCanvas : public wxScrolledWindow
119 {
120 public:
121     ImageCanvas(wxView*);
122 
123     virtual void OnDraw(wxDC& dc);
124 private:
125     wxView *m_view;
126 };
127 
128 // ----------------------------------------------------------------------------
129 // ImageView
130 // ----------------------------------------------------------------------------
131 
132 class ImageView : public wxView
133 {
134 public:
ImageView()135     ImageView() : wxView() {}
136 
137     virtual bool OnCreate(wxDocument*, long flags);
138     virtual void OnDraw(wxDC*);
139     virtual bool OnClose(bool deleteWindow = true);
140     virtual void OnUpdate(wxView *sender, wxObject *hint = NULL);
141 
142     ImageDocument* GetDocument();
143 
144 private:
145     ImageCanvas* m_canvas;
146 
147     wxDECLARE_DYNAMIC_CLASS(ImageView);
148 };
149 
150 // ----------------------------------------------------------------------------
151 // ImageDetailsView
152 // ----------------------------------------------------------------------------
153 
154 class ImageDetailsView : public wxView
155 {
156 public:
157     ImageDetailsView(ImageDetailsDocument *doc);
158 
159     virtual void OnDraw(wxDC *dc);
160     virtual bool OnClose(bool deleteWindow);
161 
162 private:
163     wxFrame *m_frame;
164 
165     wxDECLARE_NO_COPY_CLASS(ImageDetailsView);
166 };
167 
168 #endif // _WX_SAMPLES_DOCVIEW_VIEW_H_
169