+class ProjectionFileCanvas;
+class ProjectionFileView : public wxView
+{
+private:
+ DECLARE_DYNAMIC_CLASS(ProjectionFileView)
+
+ wxMemoryDC m_memoryDC;
+ wxBitmap* m_pBitmap;
+
+ ProjectionFileCanvas *CreateCanvas (wxFrame* parent);
+#if CTSIM_MDI
+ wxDocMDIChildFrame* m_pFrame;
+ wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#else
+ wxDocChildFrame* m_pFrame;
+ wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#endif
+
+ ProjectionFileCanvas *m_pCanvas;
+ wxMenu* m_pFileMenu;
+ wxMenu* m_pReconstructMenu;
+ wxMenu* m_pConvertMenu;
+
+ int m_iDefaultNX;
+ int m_iDefaultNY;
+ int m_iDefaultFilter;
+ int m_iDefaultFilterMethod;
+ double m_dDefaultFilterParam;
+ int m_iDefaultFilterGeneration;
+ int m_iDefaultZeropad;
+ int m_iDefaultInterpolation;
+ int m_iDefaultInterpParam;
+ int m_iDefaultBackprojector;
+ int m_iDefaultTrace;
+
+ int m_iDefaultPolarNX;
+ int m_iDefaultPolarNY;
+ int m_iDefaultPolarInterpolation;
+ int m_iDefaultPolarZeropad;
+
+ wxWindow* getFrameForChild()
+#if CTSIM_MDI
+ { return theApp->getMainFrame(); }
+#else
+ { return m_pFrame; }
+#endif
+
+public:
+ ProjectionFileView();
+ virtual ~ProjectionFileView();
+ void canvasClosed()
+ { m_pCanvas = NULL; m_pFrame = NULL; }
+
+ bool OnCreate(wxDocument *doc, long flags);
+ void OnDraw(wxDC* dc);
+ void OnUpdate(wxView *sender, wxObject *hint = NULL);
+ 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()); }
+ DECLARE_EVENT_TABLE()
+};
+
+class ProjectionFileCanvas: public wxScrolledWindow