r626: 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.48 2001/03/10 23:14:16 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   void OnPlotTThetaSampling (wxCommandEvent& event);
244   
245 #if CTSIM_MDI
246   wxDocMDIChildFrame* getFrame() { return m_pFrame; }
247 #else
248   wxDocChildFrame* getFrame() { return m_pFrame; }
249 #endif
250   ProjectionFileCanvas* getCanvas() { return m_pCanvas; }
251
252   wxMenu* getFileMenu()  { return m_pFileMenu; }
253
254   ProjectionFileDocument* GetDocument() 
255   { return dynamic_cast<ProjectionFileDocument*>(wxView::GetDocument()); }
256   DECLARE_EVENT_TABLE()
257 };
258
259 class ProjectionFileCanvas: public wxScrolledWindow
260 {
261 private:
262   ProjectionFileView* m_pView;
263
264 public:  
265   ProjectionFileCanvas (ProjectionFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
266   virtual ~ProjectionFileCanvas() ;
267
268   virtual wxSize GetBestSize() const;
269   virtual void OnDraw(wxDC& dc);
270   void setView(ProjectionFileView* pView)
271   { m_pView = pView; }
272 };
273
274
275 class PhantomCanvas;
276 class PhantomFileView : public wxView
277 {
278 private:
279   DECLARE_DYNAMIC_CLASS(PhantomFileView)
280   DECLARE_EVENT_TABLE()
281     
282   PhantomCanvas *CreateCanvas (wxFrame* parent);
283 #if CTSIM_MDI
284   wxDocMDIChildFrame* m_pFrame;
285   wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
286 #else
287   wxDocChildFrame* m_pFrame;
288   wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
289 #endif
290   
291   PhantomCanvas *m_pCanvas;
292   wxMenu* m_pFileMenu;
293   
294   int m_iDefaultNDet;
295   int m_iDefaultNView;
296   int m_iDefaultNSample;
297   int m_iDefaultGeometry;
298   int m_iDefaultTrace;
299   double m_dDefaultRotation;
300   double m_dDefaultFocalLength;
301   double m_dDefaultCenterDetectorLength;
302   double m_dDefaultViewRatio;
303   double m_dDefaultScanRatio;
304   
305   int m_iDefaultRasterNX;
306   int m_iDefaultRasterNY;
307   int m_iDefaultRasterNSamples;
308   double m_dDefaultRasterViewRatio;
309
310   wxWindow* getFrameForChild() 
311 #if CTSIM_MDI
312   { return theApp->getMainFrame(); }
313 #else
314   { return m_pFrame; }
315 #endif
316
317 public:
318   PhantomFileView();
319   virtual ~PhantomFileView();
320   void canvasClosed()
321   { m_pCanvas = NULL; m_pFrame = NULL; }
322   
323   bool OnCreate(wxDocument *doc, long flags);
324   void OnUpdate(wxView *sender, wxObject *hint = NULL);
325   bool OnClose (bool deleteWindow = true);
326   void OnDraw(wxDC* dc);
327   void OnProperties (wxCommandEvent& event);
328   void OnRasterize (wxCommandEvent& event);
329   void OnProjections (wxCommandEvent& event);
330   
331   PhantomFileDocument* GetDocument() 
332   { return dynamic_cast<PhantomFileDocument*>(wxView::GetDocument()); }
333   
334   wxMenu* getFileMenu() { return m_pFileMenu; }
335 #if CTSIM_MDI
336   wxDocMDIChildFrame* getFrame() { return m_pFrame; }
337 #else
338   wxDocChildFrame* getFrame() { return m_pFrame; }
339 #endif
340 };
341
342 class PhantomCanvas: public wxScrolledWindow
343 {
344 private:
345   PhantomFileView* m_pView;
346
347 public:  
348   PhantomCanvas (PhantomFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
349   virtual ~PhantomCanvas();
350
351   virtual wxSize GetBestSize() const;
352   void setView(PhantomFileView* pView)
353   { m_pView = pView; }
354   virtual void OnDraw(wxDC& dc);
355 };
356
357 class PlotFileCanvas;
358 class PlotFileView : public wxView
359 {
360   DECLARE_DYNAMIC_CLASS(PlotFileView)
361     
362 private:
363 #if CTSIM_MDI
364   wxDocMDIChildFrame* m_pFrame;
365   wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
366 #else
367   wxDocChildFrame* m_pFrame;
368   wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
369 #endif
370   
371   PlotFileCanvas *m_pCanvas;
372   EZPlot* m_pEZPlot;
373   wxMenu* m_pFileMenu;
374   
375   bool m_bMinSpecified;
376   bool m_bMaxSpecified;
377   double m_dMinPixel;
378   double m_dMaxPixel;
379   double m_dAutoScaleFactor;
380   
381   PlotFileCanvas *CreateCanvas (wxFrame* parent);
382   wxWindow* getFrameForChild() 
383 #if CTSIM_MDI
384   { return theApp->getMainFrame(); }
385 #else
386   { return m_pFrame; }
387 #endif
388
389 public:
390   PlotFileView();
391   virtual ~PlotFileView();
392   void canvasClosed()
393   { m_pCanvas = NULL; m_pFrame = NULL; }
394   
395   bool OnCreate(wxDocument *doc, long flags);
396   void OnDraw(wxDC* dc);
397   void OnUpdate(wxView *sender, wxObject *hint = NULL);
398   bool OnClose (bool deleteWindow = true);
399
400   void OnProperties (wxCommandEvent& event);
401   void OnScaleMinMax (wxCommandEvent& event);
402   void OnScaleAuto (wxCommandEvent& event);
403   void OnScaleFull (wxCommandEvent& event);
404   
405 #if CTSIM_MDI
406   wxDocMDIChildFrame* getFrame() { return m_pFrame; }
407 #else
408   wxDocChildFrame* getFrame() { return m_pFrame; }
409 #endif
410   
411   wxMenu* getFileMenu() { return m_pFileMenu; }
412   PlotFileDocument* GetDocument() 
413   { return dynamic_cast<PlotFileDocument*>(wxView::GetDocument()); }
414   
415   DECLARE_EVENT_TABLE()
416 };
417
418 class PlotFileCanvas: public wxScrolledWindow
419 {
420 private:
421   PlotFileView* m_pView;
422   
423 public:
424   PlotFileCanvas (PlotFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
425   virtual ~PlotFileCanvas();
426  
427   virtual void OnDraw(wxDC& dc);
428
429   void setView (PlotFileView* pView)
430   { m_pView = pView; }
431 };
432
433
434 class TextFileCanvas;
435 class TextFileView: public wxView
436 {
437 private:
438   DECLARE_DYNAMIC_CLASS(TextFileView)
439
440 #if CTSIM_MDI
441   wxDocMDIChildFrame* m_pFrame;
442   wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
443 #else
444   wxDocChildFrame* m_pFrame;
445   wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
446 #endif
447     wxMenu* m_pFileMenu;
448     TextFileCanvas *m_pCanvas;
449   
450 public:
451     TextFileView() 
452       : wxView() , m_pFrame(0), m_pCanvas(0)
453     {}
454     ~TextFileView();
455     void canvasClosed()
456     { m_pFrame = NULL; }
457
458     bool OnCreate (wxDocument *doc, long flags);
459     void OnDraw (wxDC *dc);
460     void OnUpdate (wxView *sender, wxObject *hint = (wxObject *) NULL);
461     bool OnClose (bool deleteWindow = TRUE);
462
463     TextFileDocument* GetDocument() 
464     { return dynamic_cast<TextFileDocument*>(wxView::GetDocument()); }
465   
466     TextFileCanvas* getTextCtrl() { return m_pCanvas; }
467     wxMenu* getFileMenu() { return m_pFileMenu; }
468 #if CTSIM_MDI
469   wxDocMDIChildFrame* getFrame() { return m_pFrame; }
470 #else
471   wxDocChildFrame* getFrame() { return m_pFrame; }
472 #endif
473 };
474
475 class TextFileCanvas: public wxTextCtrl
476 {
477     TextFileView *m_pView;
478
479 public:    
480     TextFileCanvas (TextFileView *v, wxFrame *frame, const wxPoint& pos, const wxSize& size, long style);
481     ~TextFileCanvas ();
482 };
483
484
485 #endif
486