4490689db182153e14bc131f75897a76852ceaab
[ctsim.git] / src / views.h
1 /*****************************************************************************
2 ** FILE IDENTIFICATION
3 **
4 **   Name:          view.h
5 **   Purpose:       Header file for View & Canvas routines of CTSim program
6 **   Programmer:    Kevin Rosenberg
7 **   Date Started:  July 2000
8 **
9 **  This is part of the CTSim program
10 **  Copyright (C) 1983-2000 Kevin Rosenberg
11 **
12 **  $Id: views.h,v 1.22 2001/01/02 13:16:43 kevin Exp $
13 **
14 **  This program is free software; you can redistribute it and/or modify
15 **  it under the terms of the GNU General Public License (version 2) as
16 **  published by the Free Software Foundation.
17 **
18 **  This program is distributed in the hope that it will be useful,
19 **  but WITHOUT ANY WARRANTY; without even the implied warranty of
20 **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 **  GNU General Public License for more details.
22 **
23 **  You should have received a copy of the GNU General Public License
24 **  along with this program; if not, write to the Free Software
25 **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
26 ******************************************************************************/
27
28 #ifdef __GNUG__
29 // #pragma interface
30 #endif
31
32 #ifndef __VIEWSH__
33 #define __VIEWSH__
34
35 #include "wx/wx.h"
36 #include "docs.h"
37 #include "imagefile.h"
38
39 class ImageFileCanvas;
40 class ImageFileView : public wxView
41 {
42     DECLARE_DYNAMIC_CLASS(ImageFileView)
43
44     wxMemoryDC m_memoryDC;
45     wxBitmap m_bitmap;
46
47 private:
48     ImageFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
49     wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
50
51     ImageFileCanvas *m_canvas;
52     wxFrame *m_frame;
53     bool m_bMinSpecified;
54     bool m_bMaxSpecified;
55     double m_dMinPixel;
56     double m_dMaxPixel;
57     double m_dAutoScaleFactor;
58
59     int m_iDefaultExportFormatID;
60
61 public:
62     ImageFileView(void);
63     virtual ~ImageFileView(void);
64
65     bool OnCreate(wxDocument *doc, long flags);
66     void OnDraw(wxDC* dc);
67     void OnUpdate(wxView *sender, wxObject *hint = NULL);
68     bool OnClose (bool deleteWindow = true);
69
70     void OnScaleSize (wxCommandEvent& event);
71     void OnExport (wxCommandEvent& event);
72
73     void OnProperties (wxCommandEvent& event);
74     void OnCompare (wxCommandEvent& event);
75
76     void OnInvertValues (wxCommandEvent& event);
77     void OnSquare (wxCommandEvent& event);
78     void OnSquareRoot (wxCommandEvent& event);
79     void OnLog (wxCommandEvent& event);
80     void OnExp (wxCommandEvent& event);
81     void OnAdd (wxCommandEvent& event);
82     void OnSubtract (wxCommandEvent& event);
83     void OnMultiply (wxCommandEvent& event);
84     void OnDivide (wxCommandEvent& event);
85     void OnFourier (wxCommandEvent& event);
86     void OnInverseFourier (wxCommandEvent& event);
87     void OnShuffleNaturalToFourierOrder (wxCommandEvent& event);
88     void OnShuffleFourierToNaturalOrder (wxCommandEvent& event);
89
90 #ifdef HAVE_FFTW
91     void OnFFT (wxCommandEvent& event);
92     void OnIFFT (wxCommandEvent& event);
93 #endif
94
95     void OnMagnitude (wxCommandEvent& event);
96     void OnPhase (wxCommandEvent& event);
97
98     void OnScaleAuto (wxCommandEvent& event);
99     void OnScaleMinMax (wxCommandEvent& event);
100           void OnPlotRow (wxCommandEvent& event);
101           void OnPlotCol (wxCommandEvent& event);
102     void OnHistogram (wxCommandEvent& event);
103     void OnCompareRow (wxCommandEvent& event);
104     void OnCompareCol (wxCommandEvent& event);
105
106         wxFrame* getFrame()
107         { return m_frame; }
108
109     ImageFileDocument* GetDocument(void) 
110         { return dynamic_cast<ImageFileDocument*>(wxView::GetDocument()); }
111
112     DECLARE_EVENT_TABLE()
113 };
114
115 class ImageFileCanvas: public wxScrolledWindow
116 {
117 private:
118
119         int m_xCursor;
120         int m_yCursor;
121
122 public:
123     ImageFileView* m_pView;
124     
125     ImageFileCanvas (ImageFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
126     virtual void OnDraw(wxDC& dc);
127     void OnMouseEvent(wxMouseEvent& event);
128         void DrawRubberBandCursor (wxDC& dc, int x, int y);
129         bool GetCurrentCursor (int& x, int& y);
130
131     DECLARE_EVENT_TABLE()
132 };
133
134
135 class ProjectionFileCanvas;
136 class ProjectionFileView : public wxView
137 {
138     DECLARE_DYNAMIC_CLASS(ProjectionFileView)
139
140     wxMemoryDC m_memoryDC;
141     wxBitmap m_bitmap;
142
143 private:
144     ProjectionFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
145     wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
146
147     ProjectionFileCanvas *m_canvas;
148     wxFrame *m_frame;
149
150     int m_iDefaultNX;
151     int m_iDefaultNY;
152     int m_iDefaultFilter;
153     int m_iDefaultFilterMethod;
154     double m_dDefaultFilterParam;
155     int m_iDefaultFilterGeneration;
156     int m_iDefaultZeropad;
157     int m_iDefaultInterpolation;
158     int m_iDefaultInterpParam;
159     int m_iDefaultBackprojector;
160     int m_iDefaultTrace;
161
162 public:
163     ProjectionFileView(void);
164     virtual ~ProjectionFileView(void);
165
166     bool OnCreate(wxDocument *doc, long flags);
167     void OnDraw(wxDC* dc);
168     void OnUpdate(wxView *sender, wxObject *hint = NULL);
169     bool OnClose (bool deleteWindow = true);
170     void OnProperties (wxCommandEvent& event);
171     void OnReconstruct (wxCommandEvent& event);
172
173         wxFrame* getFrame ()
174         { return m_frame; }
175
176     ProjectionFileDocument* GetDocument(void) 
177         { return dynamic_cast<ProjectionFileDocument*>(wxView::GetDocument()); }
178     DECLARE_EVENT_TABLE()
179 };
180
181 class ProjectionFileCanvas: public wxScrolledWindow
182 {
183 public:
184     ProjectionFileView* m_pView;
185     
186     ProjectionFileCanvas (ProjectionFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
187     virtual void OnDraw(wxDC& dc);
188 };
189
190
191 class PhantomCanvas;
192 class PhantomView : public wxView
193 {
194     DECLARE_DYNAMIC_CLASS(PhantomView)
195
196 private:
197     PhantomCanvas *CreateCanvas(wxView *view, wxFrame *parent);
198     wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
199
200     PhantomCanvas *m_canvas;
201     wxFrame *m_frame;
202
203     int m_iDefaultNDet;
204     int m_iDefaultNView;
205     int m_iDefaultNSample;
206     int m_iDefaultGeometry;
207     int m_iDefaultTrace;
208     double m_dDefaultRotation;
209     double m_dDefaultFocalLength;
210     double m_dDefaultFieldOfView;
211
212 public:
213     PhantomView(void);
214     virtual ~PhantomView(void);
215
216     bool OnCreate(wxDocument *doc, long flags);
217     void OnUpdate(wxView *sender, wxObject *hint = NULL);
218     bool OnClose (bool deleteWindow = true);
219     void OnDraw(wxDC* dc);
220     void OnProperties (wxCommandEvent& event);
221     void OnRasterize (wxCommandEvent& event);
222     void OnProjections (wxCommandEvent& event);
223
224     PhantomDocument* GetDocument(void) 
225         { return dynamic_cast<PhantomDocument*>(wxView::GetDocument()); }
226
227     DECLARE_EVENT_TABLE()
228 };
229
230 class PhantomCanvas: public wxScrolledWindow
231 {
232 public:
233     PhantomView* m_pView;
234     
235     PhantomCanvas (PhantomView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
236     virtual void OnDraw(wxDC& dc);
237 };
238
239 class PlotFileCanvas;
240 class PlotFileView : public wxView
241 {
242     DECLARE_DYNAMIC_CLASS(PlotFileView)
243
244 private:
245     PlotFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
246     wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
247
248     PlotFileCanvas *m_canvas;
249     wxFrame *m_frame;
250     EZPlot* m_pEZPlot;
251
252     bool m_bMinSpecified;
253     bool m_bMaxSpecified;
254     double m_dMinPixel;
255     double m_dMaxPixel;
256     double m_dAutoScaleFactor;
257
258 public:
259     PlotFileView(void);
260     virtual ~PlotFileView(void);
261
262     bool OnCreate(wxDocument *doc, long flags);
263     void OnDraw(wxDC* dc);
264     void OnUpdate(wxView *sender, wxObject *hint = NULL);
265     bool OnClose (bool deleteWindow = true);
266     void OnProperties (wxCommandEvent& event);
267     void OnScaleAuto (wxCommandEvent& event);
268     void OnScaleMinMax (wxCommandEvent& event);
269
270         wxFrame* getFrame ()
271         { return m_frame; }
272
273     PlotFileDocument* GetDocument(void) 
274         { return dynamic_cast<PlotFileDocument*>(wxView::GetDocument()); }
275
276     DECLARE_EVENT_TABLE()
277 };
278
279 class PlotFileCanvas: public wxScrolledWindow
280 {
281 public:
282     PlotFileView* m_pView;
283     
284     PlotFileCanvas (PlotFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
285     virtual void OnDraw(wxDC& dc);
286 };
287
288
289 #endif
290