r7061: initial property settings
[ctsim.git] / src / views.h
index 88f0e2145bbea15a4f231883d2565fcee329a041..541287fc2eace4bf83b5ce0b1a76594397ecb151 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: views.h,v 1.43 2001/01/30 10:58:14 kevin Exp $
+**  $Id$
 **
 **  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
 **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 ******************************************************************************/
 
-#ifdef __GNUG__
-// #pragma interface
-#endif
-
 #ifndef __VIEWSH__
 #define __VIEWSH__
 
 #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,7 +44,7 @@ private:
   DECLARE_DYNAMIC_CLASS(ImageFileView)
     
   wxMemoryDC m_memoryDC;
-  wxBitmap m_bitmap;
+  wxBitmap* m_pBitmap;
   wxMenu* m_pMenuAnalyze;
   
   ImageFileCanvas *CreateCanvas (wxFrame* parent);
@@ -58,6 +58,7 @@ private:
   
   ImageFileCanvas *m_pCanvas;
   wxMenu* m_pFileMenu;
+  wxMenu* m_pFilterMenu;
   bool m_bMinSpecified;
   bool m_bMaxSpecified;
   double m_dMinPixel;
@@ -87,6 +88,10 @@ public:
   void OnUpdate(wxView *sender, wxObject *hint = NULL);
   bool OnClose (bool deleteWindow = true);
   
+  void OnEditCopy (wxCommandEvent& event);
+  void OnEditCut (wxCommandEvent& event);
+  void OnEditPaste (wxCommandEvent& event);
+
   void OnRevert (wxCommandEvent& event);
   void OnExport (wxCommandEvent& event);  
   void OnProperties (wxCommandEvent& event);
@@ -106,8 +111,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);
@@ -119,6 +126,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);
@@ -138,6 +147,7 @@ public:
 #else
   wxDocChildFrame* getFrame() { return m_pFrame; }
 #endif
+  void setInitialClientSize();
 
   wxMenu* getMenuAnalyze() { return m_pMenuAnalyze; }
 
@@ -177,12 +187,12 @@ public:
 class ProjectionFileCanvas;
 class ProjectionFileView : public wxView
 {
+private:
   DECLARE_DYNAMIC_CLASS(ProjectionFileView)
     
-    wxMemoryDC m_memoryDC;
-  wxBitmap m_bitmap;
+  wxMemoryDC m_memoryDC;
+  wxBitmap* m_pBitmap;
   
-private:
   ProjectionFileCanvas *CreateCanvas (wxFrame* parent);
 #if CTSIM_MDI
   wxDocMDIChildFrame* m_pFrame;
@@ -194,7 +204,9 @@ private:
   
   ProjectionFileCanvas *m_pCanvas;
   wxMenu* m_pFileMenu;
-  
+  wxMenu* m_pReconstructMenu;
+  wxMenu* m_pConvertMenu;
+
   int m_iDefaultNX;
   int m_iDefaultNY;
   int m_iDefaultFilter;
@@ -231,18 +243,28 @@ 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);
-  
+  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; }
+  void setInitialClientSize();
 
   wxMenu* getFileMenu()  { return m_pFileMenu; }
+  wxMenu* getReconstructMenu()  { return m_pReconstructMenu; }
 
   ProjectionFileDocument* GetDocument() 
   { return dynamic_cast<ProjectionFileDocument*>(wxView::GetDocument()); }
@@ -286,16 +308,20 @@ private:
   
   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
@@ -338,6 +364,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);
@@ -397,6 +424,7 @@ public:
   wxDocChildFrame* getFrame() { return m_pFrame; }
 #endif
   
+  void setInitialClientSize();
   wxMenu* getFileMenu() { return m_pFileMenu; }
   PlotFileDocument* GetDocument() 
   { return dynamic_cast<PlotFileDocument*>(wxView::GetDocument()); }
@@ -414,6 +442,7 @@ public:
   virtual ~PlotFileCanvas();
  
   virtual void OnDraw(wxDC& dc);
+  virtual wxSize GetBestSize() const;
 
   void setView (PlotFileView* pView)
   { m_pView = pView; }
@@ -468,6 +497,7 @@ class TextFileCanvas: public wxTextCtrl
 public:    
     TextFileCanvas (TextFileView *v, wxFrame *frame, const wxPoint& pos, const wxSize& size, long style);
     ~TextFileCanvas ();
+    virtual wxSize GetBestSize() const;
 };