r1018: *** empty log message ***
[ctsim.git] / src / views.h
index 81cf6a7ccc1b214fa3fb3a7dfd42089107308ac4..40cc6fde0f03285f0da50b64420ef61fac7cd225 100644 (file)
@@ -7,9 +7,9 @@
 **   Date Started:  July 2000
 **
 **  This is part of the CTSim program
-**  Copyright (C) 1983-2000 Kevin Rosenberg
+**  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: views.h,v 1.33 2001/01/27 01:51:47 kevin Exp $
+**  $Id: views.h,v 1.56 2001/09/24 09:40:42 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
 #include "wx/wx.h"
 #include "docs.h"
 #include "imagefile.h"
+#include "threadrecon.h"
+
+#if wxUSE_GLCANVAS
+#include "graph3dview.h"
+#endif
 
 class ImageFileCanvas;
 class ImageFileView : public wxView
@@ -44,8 +49,9 @@ private:
     
   wxMemoryDC m_memoryDC;
   wxBitmap m_bitmap;
+  wxMenu* m_pMenuAnalyze;
   
-  ImageFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
+  ImageFileCanvas *CreateCanvas (wxFrame* parent);
 #if CTSIM_MDI
   wxDocMDIChildFrame* m_pFrame;
   wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
@@ -53,9 +59,10 @@ private:
   wxDocChildFrame* m_pFrame;
   wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
 #endif
-  wxMenu* m_pFileMenu;
   
-  ImageFileCanvas *m_canvas;
+  ImageFileCanvas *m_pCanvas;
+  wxMenu* m_pFileMenu;
+  wxMenu* m_pFilterMenu;
   bool m_bMinSpecified;
   bool m_bMaxSpecified;
   double m_dMinPixel;
@@ -66,7 +73,7 @@ private:
 
   wxWindow* getFrameForChild() 
 #if CTSIM_MDI
-  { return theApp->getMainFrame()->GetClientWindow(); }
+  { return theApp->getMainFrame(); }
 #else
   { return m_pFrame; }
 #endif
@@ -75,7 +82,7 @@ public:
   ImageFileView();
   virtual ~ImageFileView();
   void canvasClosed()
-  { m_canvas = NULL; m_pFrame = NULL; }
+  { m_pCanvas = NULL; m_pFrame = NULL; }
 
   wxMenu* getFileMenu()
   { return m_pFileMenu; }
@@ -85,12 +92,16 @@ public:
   void OnUpdate(wxView *sender, wxObject *hint = NULL);
   bool OnClose (bool deleteWindow = true);
   
-  void OnScaleSize (wxCommandEvent& event);
-  void OnExport (wxCommandEvent& event);
-  
+  void OnEditCopy (wxCommandEvent& event);
+  void OnEditCut (wxCommandEvent& event);
+  void OnEditPaste (wxCommandEvent& event);
+
+  void OnRevert (wxCommandEvent& event);
+  void OnExport (wxCommandEvent& event);  
   void OnProperties (wxCommandEvent& event);
-  void OnCompare (wxCommandEvent& event);
-  
+
+  void OnCompare (wxCommandEvent& event);  
+  void OnScaleSize (wxCommandEvent& event);
   void OnInvertValues (wxCommandEvent& event);
   void OnSquare (wxCommandEvent& event);
   void OnSquareRoot (wxCommandEvent& event);
@@ -104,7 +115,10 @@ public:
   void OnInverseFourier (wxCommandEvent& event);
   void OnShuffleNaturalToFourierOrder (wxCommandEvent& event);
   void OnShuffleFourierToNaturalOrder (wxCommandEvent& event);
-  
+#if wxUSE_GLCANVAS
+  void OnConvert3d (wxCommandEvent& event);
+#endif
+
 #ifdef HAVE_FFT
   void OnFFT (wxCommandEvent& event);
   void OnIFFT (wxCommandEvent& event);
@@ -116,6 +130,8 @@ public:
   
   void OnMagnitude (wxCommandEvent& event);
   void OnPhase (wxCommandEvent& event);
+  void OnReal (wxCommandEvent& event);
+  void OnImaginary (wxCommandEvent& event);
   
   void OnScaleAuto (wxCommandEvent& event);
   void OnScaleMinMax (wxCommandEvent& event);
@@ -130,9 +146,14 @@ public:
   void OnCompareRow (wxCommandEvent& event);
   void OnCompareCol (wxCommandEvent& event);
   
-  wxFrame* getFrame()
-  { return m_pFrame; }
-  
+#if CTSIM_MDI
+  wxDocMDIChildFrame* getFrame() { return m_pFrame; }
+#else
+  wxDocChildFrame* getFrame() { return m_pFrame; }
+#endif
+
+  wxMenu* getMenuAnalyze() { return m_pMenuAnalyze; }
+
   ImageFileDocument* GetDocument() 
   { return dynamic_cast<ImageFileDocument*>(wxView::GetDocument()); }
   
@@ -143,6 +164,7 @@ class ImageFileCanvas: public wxScrolledWindow
 {
 private:
   ImageFileView* m_pView;
+
   int m_xCursor;
   int m_yCursor;
   
@@ -151,6 +173,7 @@ public:
   virtual ~ImageFileCanvas();
 
   virtual void OnDraw(wxDC& dc);
+  void OnChar(wxKeyEvent& event);
   void OnMouseEvent(wxMouseEvent& event);
   void DrawRubberBandCursor (wxDC& dc, int x, int y);
   bool GetCurrentCursor (int& x, int& y);
@@ -167,13 +190,13 @@ public:
 class ProjectionFileCanvas;
 class ProjectionFileView : public wxView
 {
+private:
   DECLARE_DYNAMIC_CLASS(ProjectionFileView)
     
-    wxMemoryDC m_memoryDC;
+  wxMemoryDC m_memoryDC;
   wxBitmap m_bitmap;
   
-private:
-  ProjectionFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
+  ProjectionFileCanvas *CreateCanvas (wxFrame* parent);
 #if CTSIM_MDI
   wxDocMDIChildFrame* m_pFrame;
   wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
@@ -182,9 +205,9 @@ private:
   wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
 #endif
   
-  ProjectionFileCanvas *m_canvas;
+  ProjectionFileCanvas *m_pCanvas;
   wxMenu* m_pFileMenu;
-  
+
   int m_iDefaultNX;
   int m_iDefaultNY;
   int m_iDefaultFilter;
@@ -204,7 +227,7 @@ private:
 
   wxWindow* getFrameForChild() 
 #if CTSIM_MDI
-  { return theApp->getMainFrame()->GetClientWindow(); }
+  { return theApp->getMainFrame(); }
 #else
   { return m_pFrame; }
 #endif
@@ -213,7 +236,7 @@ public:
   ProjectionFileView();
   virtual ~ProjectionFileView();
   void canvasClosed()
-  { m_canvas = NULL; m_pFrame = NULL; }
+  { m_pCanvas = NULL; m_pFrame = NULL; }
   
   bool OnCreate(wxDocument *doc, long flags);
   void OnDraw(wxDC* dc);
@@ -221,12 +244,25 @@ public:
   bool OnClose (bool deleteWindow = true);
   void OnProperties (wxCommandEvent& event);
   void OnReconstructFBP (wxCommandEvent& event);
+  void OnReconstructFBPRebin (wxCommandEvent& event);
   void OnReconstructFourier (wxCommandEvent& event);
+  void OnConvertRectangular (wxCommandEvent& event);
   void OnConvertPolar (wxCommandEvent& event);
   void OnConvertFFTPolar (wxCommandEvent& event);
-  
-  wxFrame* getFrame ()   { return m_pFrame; }
-  
+  void OnPlotTThetaSampling (wxCommandEvent& event);
+  void OnPlotHistogram (wxCommandEvent& event);
+  void OnConvertParallel (wxCommandEvent& event);
+  void OnArtifactReduction (wxCommandEvent& event);
+
+  void doReconstructFBP (const Projections& rProj, bool bRebinToParallel);
+
+#if CTSIM_MDI
+  wxDocMDIChildFrame* getFrame() { return m_pFrame; }
+#else
+  wxDocChildFrame* getFrame() { return m_pFrame; }
+#endif
+  ProjectionFileCanvas* getCanvas() { return m_pCanvas; }
+
   wxMenu* getFileMenu()  { return m_pFileMenu; }
 
   ProjectionFileDocument* GetDocument() 
@@ -257,7 +293,7 @@ private:
   DECLARE_DYNAMIC_CLASS(PhantomFileView)
   DECLARE_EVENT_TABLE()
     
-  PhantomCanvas *CreateCanvas(wxView *view, wxFrame *parent);
+  PhantomCanvas *CreateCanvas (wxFrame* parent);
 #if CTSIM_MDI
   wxDocMDIChildFrame* m_pFrame;
   wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
@@ -266,25 +302,29 @@ private:
   wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
 #endif
   
-  PhantomCanvas *m_canvas;
+  PhantomCanvas *m_pCanvas;
   wxMenu* m_pFileMenu;
   
   int m_iDefaultNDet;
   int m_iDefaultNView;
+  int m_iDefaultOffsetView;
   int m_iDefaultNSample;
   int m_iDefaultGeometry;
   int m_iDefaultTrace;
   double m_dDefaultRotation;
   double m_dDefaultFocalLength;
-  double m_dDefaultFieldOfView;
+  double m_dDefaultCenterDetectorLength;
+  double m_dDefaultViewRatio;
+  double m_dDefaultScanRatio;
   
   int m_iDefaultRasterNX;
   int m_iDefaultRasterNY;
   int m_iDefaultRasterNSamples;
+  double m_dDefaultRasterViewRatio;
 
   wxWindow* getFrameForChild() 
 #if CTSIM_MDI
-  { return theApp->getMainFrame()->GetClientWindow(); }
+  { return theApp->getMainFrame(); }
 #else
   { return m_pFrame; }
 #endif
@@ -293,7 +333,7 @@ public:
   PhantomFileView();
   virtual ~PhantomFileView();
   void canvasClosed()
-  { m_canvas = NULL; m_pFrame = NULL; }
+  { m_pCanvas = NULL; m_pFrame = NULL; }
   
   bool OnCreate(wxDocument *doc, long flags);
   void OnUpdate(wxView *sender, wxObject *hint = NULL);
@@ -307,7 +347,11 @@ public:
   { return dynamic_cast<PhantomFileDocument*>(wxView::GetDocument()); }
   
   wxMenu* getFileMenu() { return m_pFileMenu; }
-  wxFrame* getFrame() { return m_pFrame; }
+#if CTSIM_MDI
+  wxDocMDIChildFrame* getFrame() { return m_pFrame; }
+#else
+  wxDocChildFrame* getFrame() { return m_pFrame; }
+#endif
 };
 
 class PhantomCanvas: public wxScrolledWindow
@@ -319,6 +363,7 @@ public:
   PhantomCanvas (PhantomFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
   virtual ~PhantomCanvas();
 
+  virtual wxSize GetBestSize() const;
   void setView(PhantomFileView* pView)
   { m_pView = pView; }
   virtual void OnDraw(wxDC& dc);
@@ -330,7 +375,6 @@ class PlotFileView : public wxView
   DECLARE_DYNAMIC_CLASS(PlotFileView)
     
 private:
-  PlotFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
 #if CTSIM_MDI
   wxDocMDIChildFrame* m_pFrame;
   wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
@@ -339,9 +383,9 @@ private:
   wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
 #endif
   
-  PlotFileCanvas *m_canvas;
-  wxMenu* m_pFileMenu;
+  PlotFileCanvas *m_pCanvas;
   EZPlot* m_pEZPlot;
+  wxMenu* m_pFileMenu;
   
   bool m_bMinSpecified;
   bool m_bMaxSpecified;
@@ -349,9 +393,10 @@ private:
   double m_dMaxPixel;
   double m_dAutoScaleFactor;
   
+  PlotFileCanvas *CreateCanvas (wxFrame* parent);
   wxWindow* getFrameForChild() 
 #if CTSIM_MDI
-  { return theApp->getMainFrame()->GetClientWindow(); }
+  { return theApp->getMainFrame(); }
 #else
   { return m_pFrame; }
 #endif
@@ -360,7 +405,7 @@ public:
   PlotFileView();
   virtual ~PlotFileView();
   void canvasClosed()
-  { m_canvas = NULL; m_pFrame = NULL; }
+  { m_pCanvas = NULL; m_pFrame = NULL; }
   
   bool OnCreate(wxDocument *doc, long flags);
   void OnDraw(wxDC* dc);
@@ -372,8 +417,11 @@ public:
   void OnScaleAuto (wxCommandEvent& event);
   void OnScaleFull (wxCommandEvent& event);
   
-  wxFrame* getFrame ()
-  { return m_pFrame; }
+#if CTSIM_MDI
+  wxDocMDIChildFrame* getFrame() { return m_pFrame; }
+#else
+  wxDocChildFrame* getFrame() { return m_pFrame; }
+#endif
   
   wxMenu* getFileMenu() { return m_pFileMenu; }
   PlotFileDocument* GetDocument() 
@@ -427,9 +475,16 @@ public:
     void OnUpdate (wxView *sender, wxObject *hint = (wxObject *) NULL);
     bool OnClose (bool deleteWindow = TRUE);
 
+    TextFileDocument* GetDocument() 
+    { return dynamic_cast<TextFileDocument*>(wxView::GetDocument()); }
+  
     TextFileCanvas* getTextCtrl() { return m_pCanvas; }
-    wxFrame* getFrame() { return m_pFrame; }
     wxMenu* getFileMenu() { return m_pFileMenu; }
+#if CTSIM_MDI
+  wxDocMDIChildFrame* getFrame() { return m_pFrame; }
+#else
+  wxDocChildFrame* getFrame() { return m_pFrame; }
+#endif
 };
 
 class TextFileCanvas: public wxTextCtrl