r571: no message
[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-2001 Kevin Rosenberg
11 **
12 **  $Id: views.h,v 1.46 2001/02/22 11:05:38 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 #include "threadrecon.h"
39
40 #if wxUSE_GLCANVAS
41 #include "graph3dview.h"
42 #endif
43
44 class ImageFileCanvas;
45 class ImageFileView : public wxView
46 {
47 private:
48   DECLARE_DYNAMIC_CLASS(ImageFileView)
49     
50   wxMemoryDC m_memoryDC;
51   wxBitmap m_bitmap;
52   wxMenu* m_pMenuAnalyze;
53   
54   ImageFileCanvas *CreateCanvas (wxFrame* parent);
55 #if CTSIM_MDI
56   wxDocMDIChildFrame* m_pFrame;
57   wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
58 #else
59   wxDocChildFrame* m_pFrame;
60   wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
61 #endif
62   
63   ImageFileCanvas *m_pCanvas;
64   wxMenu* m_pFileMenu;
65   bool m_bMinSpecified;
66   bool m_bMaxSpecified;
67   double m_dMinPixel;
68   double m_dMaxPixel;
69   double m_dAutoScaleFactor;
70   
71   int m_iDefaultExportFormatID;
72
73   wxWindow* getFrameForChild() 
74 #if CTSIM_MDI
75   { return theApp->getMainFrame(); }
76 #else
77   { return m_pFrame; }
78 #endif
79
80 public:
81   ImageFileView();
82   virtual ~ImageFileView();
83   void canvasClosed()
84   { m_pCanvas = NULL; m_pFrame = NULL; }
85
86   wxMenu* getFileMenu()
87   { return m_pFileMenu; }
88
89   bool OnCreate(wxDocument *doc, long flags);
90   void OnDraw(wxDC* dc);
91   void OnUpdate(wxView *sender, wxObject *hint = NULL);
92   bool OnClose (bool deleteWindow = true);
93   
94   void OnRevert (wxCommandEvent& event);
95   void OnExport (wxCommandEvent& event);  
96   void OnProperties (wxCommandEvent& event);
97
98   void OnCompare (wxCommandEvent& event);  
99   void OnScaleSize (wxCommandEvent& event);
100   void OnInvertValues (wxCommandEvent& event);
101   void OnSquare (wxCommandEvent& event);
102   void OnSquareRoot (wxCommandEvent& event);
103   void OnLog (wxCommandEvent& event);
104   void OnExp (wxCommandEvent& event);
105   void OnAdd (wxCommandEvent& event);
106   void OnSubtract (wxCommandEvent& event);
107   void OnMultiply (wxCommandEvent& event);
108   void OnDivide (wxCommandEvent& event);
109   void OnFourier (wxCommandEvent& event);
110   void OnInverseFourier (wxCommandEvent& event);
111   void OnShuffleNaturalToFourierOrder (wxCommandEvent& event);
112   void OnShuffleFourierToNaturalOrder (wxCommandEvent& event);
113 #if wxUSE_GLCANVAS
114   void OnConvert3d (wxCommandEvent& event);
115 #endif
116
117 #ifdef HAVE_FFT
118   void OnFFT (wxCommandEvent& event);
119   void OnIFFT (wxCommandEvent& event);
120   void OnFFTRows (wxCommandEvent& event);
121   void OnIFFTRows (wxCommandEvent& event);
122   void OnFFTCols (wxCommandEvent& event);
123   void OnIFFTCols (wxCommandEvent& event);
124 #endif
125   
126   void OnMagnitude (wxCommandEvent& event);
127   void OnPhase (wxCommandEvent& event);
128   
129   void OnScaleAuto (wxCommandEvent& event);
130   void OnScaleMinMax (wxCommandEvent& event);
131   void OnScaleFull (wxCommandEvent& event);
132   void OnPlotRow (wxCommandEvent& event);
133   void OnPlotCol (wxCommandEvent& event);
134 #if HAVE_FFT
135   void OnPlotFFTRow (wxCommandEvent& event);
136   void OnPlotFFTCol (wxCommandEvent& event);
137 #endif
138   void OnPlotHistogram (wxCommandEvent& event);
139   void OnCompareRow (wxCommandEvent& event);
140   void OnCompareCol (wxCommandEvent& event);
141   
142 #if CTSIM_MDI
143   wxDocMDIChildFrame* getFrame() { return m_pFrame; }
144 #else
145   wxDocChildFrame* getFrame() { return m_pFrame; }
146 #endif
147
148   wxMenu* getMenuAnalyze() { return m_pMenuAnalyze; }
149
150   ImageFileDocument* GetDocument() 
151   { return dynamic_cast<ImageFileDocument*>(wxView::GetDocument()); }
152   
153   DECLARE_EVENT_TABLE()
154 };
155
156 class ImageFileCanvas: public wxScrolledWindow
157 {
158 private:
159   ImageFileView* m_pView;
160
161   int m_xCursor;
162   int m_yCursor;
163   
164 public:
165   ImageFileCanvas (ImageFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
166   virtual ~ImageFileCanvas();
167
168   virtual void OnDraw(wxDC& dc);
169   void OnChar(wxKeyEvent& event);
170   void OnMouseEvent(wxMouseEvent& event);
171   void DrawRubberBandCursor (wxDC& dc, int x, int y);
172   bool GetCurrentCursor (int& x, int& y);
173
174   virtual wxSize GetBestSize() const;
175   void setView(ImageFileView* pView)
176   { m_pView = pView; }
177
178
179   DECLARE_EVENT_TABLE()
180 };
181
182
183 class ProjectionFileCanvas;
184 class ProjectionFileView : public wxView
185 {
186 private:
187   DECLARE_DYNAMIC_CLASS(ProjectionFileView)
188     
189   wxMemoryDC m_memoryDC;
190   wxBitmap m_bitmap;
191   
192   ProjectionFileCanvas *CreateCanvas (wxFrame* parent);
193 #if CTSIM_MDI
194   wxDocMDIChildFrame* m_pFrame;
195   wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
196 #else
197   wxDocChildFrame* m_pFrame;
198   wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
199 #endif
200   
201   ProjectionFileCanvas *m_pCanvas;
202   wxMenu* m_pFileMenu;
203
204   int m_iDefaultNX;
205   int m_iDefaultNY;
206   int m_iDefaultFilter;
207   int m_iDefaultFilterMethod;
208   double m_dDefaultFilterParam;
209   int m_iDefaultFilterGeneration;
210   int m_iDefaultZeropad;
211   int m_iDefaultInterpolation;
212   int m_iDefaultInterpParam;
213   int m_iDefaultBackprojector;
214   int m_iDefaultTrace;
215   
216   int m_iDefaultPolarNX;
217   int m_iDefaultPolarNY;
218   int m_iDefaultPolarInterpolation;
219   int m_iDefaultPolarZeropad;
220
221   wxWindow* getFrameForChild() 
222 #if CTSIM_MDI
223   { return theApp->getMainFrame(); }
224 #else
225   { return m_pFrame; }
226 #endif
227
228 public:
229   ProjectionFileView();
230   virtual ~ProjectionFileView();
231   void canvasClosed()
232   { m_pCanvas = NULL; m_pFrame = NULL; }
233   
234   bool OnCreate(wxDocument *doc, long flags);
235   void OnDraw(wxDC* dc);
236   void OnUpdate(wxView *sender, wxObject *hint = NULL);
237   bool OnClose (bool deleteWindow = true);
238   void OnProperties (wxCommandEvent& event);
239   void OnReconstructFBP (wxCommandEvent& event);
240   void OnReconstructFourier (wxCommandEvent& event);
241   void OnConvertPolar (wxCommandEvent& event);
242   void OnConvertFFTPolar (wxCommandEvent& event);
243   
244 #if CTSIM_MDI
245   wxDocMDIChildFrame* getFrame() { return m_pFrame; }
246 #else
247   wxDocChildFrame* getFrame() { return m_pFrame; }
248 #endif
249   ProjectionFileCanvas* getCanvas() { return m_pCanvas; }
250
251   wxMenu* getFileMenu()  { return m_pFileMenu; }
252
253   ProjectionFileDocument* GetDocument() 
254   { return dynamic_cast<ProjectionFileDocument*>(wxView::GetDocument()); }
255   DECLARE_EVENT_TABLE()
256 };
257
258 class ProjectionFileCanvas: public wxScrolledWindow
259 {
260 private:
261   ProjectionFileView* m_pView;
262
263 public:  
264   ProjectionFileCanvas (ProjectionFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
265   virtual ~ProjectionFileCanvas() ;
266
267   virtual wxSize GetBestSize() const;
268   virtual void OnDraw(wxDC& dc);
269   void setView(ProjectionFileView* pView)
270   { m_pView = pView; }
271 };
272
273
274 class PhantomCanvas;
275 class PhantomFileView : public wxView
276 {
277 private:
278   DECLARE_DYNAMIC_CLASS(PhantomFileView)
279   DECLARE_EVENT_TABLE()
280     
281   PhantomCanvas *CreateCanvas (wxFrame* parent);
282 #if CTSIM_MDI
283   wxDocMDIChildFrame* m_pFrame;
284   wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
285 #else
286   wxDocChildFrame* m_pFrame;
287   wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
288 #endif
289   
290   PhantomCanvas *m_pCanvas;
291   wxMenu* m_pFileMenu;
292   
293   int m_iDefaultNDet;
294   int m_iDefaultNView;
295   int m_iDefaultNSample;
296   int m_iDefaultGeometry;
297   int m_iDefaultTrace;
298   double m_dDefaultRotation;
299   double m_dDefaultFocalLength;
300   double m_dDefaultViewRatio;
301   double m_dDefaultScanRatio;
302   
303   int m_iDefaultRasterNX;
304   int m_iDefaultRasterNY;
305   int m_iDefaultRasterNSamples;
306   double m_dDefaultRasterViewRatio;
307
308   wxWindow* getFrameForChild() 
309 #if CTSIM_MDI
310   { return theApp->getMainFrame(); }
311 #else
312   { return m_pFrame; }
313 #endif
314
315 public:
316   PhantomFileView();
317   virtual ~PhantomFileView();
318   void canvasClosed()
319   { m_pCanvas = NULL; m_pFrame = NULL; }
320   
321   bool OnCreate(wxDocument *doc, long flags);
322   void OnUpdate(wxView *sender, wxObject *hint = NULL);
323   bool OnClose (bool deleteWindow = true);
324   void OnDraw(wxDC* dc);
325   void OnProperties (wxCommandEvent& event);
326   void OnRasterize (wxCommandEvent& event);
327   void OnProjections (wxCommandEvent& event);
328   
329   PhantomFileDocument* GetDocument() 
330   { return dynamic_cast<PhantomFileDocument*>(wxView::GetDocument()); }
331   
332   wxMenu* getFileMenu() { return m_pFileMenu; }
333 #if CTSIM_MDI
334   wxDocMDIChildFrame* getFrame() { return m_pFrame; }
335 #else
336   wxDocChildFrame* getFrame() { return m_pFrame; }
337 #endif
338 };
339
340 class PhantomCanvas: public wxScrolledWindow
341 {
342 private:
343   PhantomFileView* m_pView;
344
345 public:  
346   PhantomCanvas (PhantomFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
347   virtual ~PhantomCanvas();
348
349   virtual wxSize GetBestSize() const;
350   void setView(PhantomFileView* pView)
351   { m_pView = pView; }
352   virtual void OnDraw(wxDC& dc);
353 };
354
355 class PlotFileCanvas;
356 class PlotFileView : public wxView
357 {
358   DECLARE_DYNAMIC_CLASS(PlotFileView)
359     
360 private:
361 #if CTSIM_MDI
362   wxDocMDIChildFrame* m_pFrame;
363   wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
364 #else
365   wxDocChildFrame* m_pFrame;
366   wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
367 #endif
368   
369   PlotFileCanvas *m_pCanvas;
370   EZPlot* m_pEZPlot;
371   wxMenu* m_pFileMenu;
372   
373   bool m_bMinSpecified;
374   bool m_bMaxSpecified;
375   double m_dMinPixel;
376   double m_dMaxPixel;
377   double m_dAutoScaleFactor;
378   
379   PlotFileCanvas *CreateCanvas (wxFrame* parent);
380   wxWindow* getFrameForChild() 
381 #if CTSIM_MDI
382   { return theApp->getMainFrame(); }
383 #else
384   { return m_pFrame; }
385 #endif
386
387 public:
388   PlotFileView();
389   virtual ~PlotFileView();
390   void canvasClosed()
391   { m_pCanvas = NULL; m_pFrame = NULL; }
392   
393   bool OnCreate(wxDocument *doc, long flags);
394   void OnDraw(wxDC* dc);
395   void OnUpdate(wxView *sender, wxObject *hint = NULL);
396   bool OnClose (bool deleteWindow = true);
397
398   void OnProperties (wxCommandEvent& event);
399   void OnScaleMinMax (wxCommandEvent& event);
400   void OnScaleAuto (wxCommandEvent& event);
401   void OnScaleFull (wxCommandEvent& event);
402   
403 #if CTSIM_MDI
404   wxDocMDIChildFrame* getFrame() { return m_pFrame; }
405 #else
406   wxDocChildFrame* getFrame() { return m_pFrame; }
407 #endif
408   
409   wxMenu* getFileMenu() { return m_pFileMenu; }
410   PlotFileDocument* GetDocument() 
411   { return dynamic_cast<PlotFileDocument*>(wxView::GetDocument()); }
412   
413   DECLARE_EVENT_TABLE()
414 };
415
416 class PlotFileCanvas: public wxScrolledWindow
417 {
418 private:
419   PlotFileView* m_pView;
420   
421 public:
422   PlotFileCanvas (PlotFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
423   virtual ~PlotFileCanvas();
424  
425   virtual void OnDraw(wxDC& dc);
426
427   void setView (PlotFileView* pView)
428   { m_pView = pView; }
429 };
430
431
432 class TextFileCanvas;
433 class TextFileView: public wxView
434 {
435 private:
436   DECLARE_DYNAMIC_CLASS(TextFileView)
437
438 #if CTSIM_MDI
439   wxDocMDIChildFrame* m_pFrame;
440   wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
441 #else
442   wxDocChildFrame* m_pFrame;
443   wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
444 #endif
445     wxMenu* m_pFileMenu;
446     TextFileCanvas *m_pCanvas;
447   
448 public:
449     TextFileView() 
450       : wxView() , m_pFrame(0), m_pCanvas(0)
451     {}
452     ~TextFileView();
453     void canvasClosed()
454     { m_pFrame = NULL; }
455
456     bool OnCreate (wxDocument *doc, long flags);
457     void OnDraw (wxDC *dc);
458     void OnUpdate (wxView *sender, wxObject *hint = (wxObject *) NULL);
459     bool OnClose (bool deleteWindow = TRUE);
460
461     TextFileDocument* GetDocument() 
462     { return dynamic_cast<TextFileDocument*>(wxView::GetDocument()); }
463   
464     TextFileCanvas* getTextCtrl() { return m_pCanvas; }
465     wxMenu* getFileMenu() { return m_pFileMenu; }
466 #if CTSIM_MDI
467   wxDocMDIChildFrame* getFrame() { return m_pFrame; }
468 #else
469   wxDocChildFrame* getFrame() { return m_pFrame; }
470 #endif
471 };
472
473 class TextFileCanvas: public wxTextCtrl
474 {
475     TextFileView *m_pView;
476
477 public:    
478     TextFileCanvas (TextFileView *v, wxFrame *frame, const wxPoint& pos, const wxSize& size, long style);
479     ~TextFileCanvas ();
480 };
481
482
483 #endif
484