** Date Started: July 2000
**
** This is part of the CTSim program
-** Copyright (C) 1983-2000 Kevin Rosenberg
-**
-** $Id: views.h,v 1.9 2000/09/02 05:10:39 kevin Exp $
+** Copyright (c) 1983-2009 Kevin Rosenberg
**
** 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
{
- DECLARE_DYNAMIC_CLASS(ImageFileView)
-
- wxMemoryDC m_memoryDC;
- wxBitmap m_bitmap;
-
private:
- ImageFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
- wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
+ DECLARE_DYNAMIC_CLASS(ImageFileView)
+
+ wxMemoryDC m_memoryDC;
+ wxBitmap* m_pBitmap;
+ wxMenu* m_pMenuAnalyze;
+
+ ImageFileCanvas *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
- ImageFileCanvas *m_canvas;
- wxFrame *m_frame;
- bool m_bMinSpecified;
- bool m_bMaxSpecified;
- double m_dMinPixel;
- double m_dMaxPixel;
- double m_dAutoScaleFactor;
+ ImageFileCanvas *m_pCanvas;
+ wxMenu* m_pFileMenu;
+ wxMenu* m_pFilterMenu;
+ bool m_bMinSpecified;
+ bool m_bMaxSpecified;
+ double m_dMinPixel;
+ double m_dMaxPixel;
+ double m_dAutoScaleFactor;
+
+ int m_iDefaultExportFormatID;
+
+ wxFrame* getFrameForChild()
+#if CTSIM_MDI
+ { return theApp->getMainFrame(); }
+#else
+ { return m_pFrame; }
+#endif
public:
- ImageFileView(void);
- virtual ~ImageFileView(void);
+ ImageFileView();
+ virtual ~ImageFileView();
+ void canvasClosed()
+ { m_pCanvas = NULL; m_pFrame = NULL; }
+
+ wxMenu* getFileMenu()
+ { return m_pFileMenu; }
+
+ bool OnCreate(wxDocument *doc, long flags);
+ void OnDraw(wxDC* dc);
+ 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);
+
+ void OnCompare (wxCommandEvent& event);
+ void OnScaleSize (wxCommandEvent& event);
+ void OnInvertValues (wxCommandEvent& event);
+ void OnSquare (wxCommandEvent& event);
+ void OnSquareRoot (wxCommandEvent& event);
+ void OnLog (wxCommandEvent& event);
+ void OnExp (wxCommandEvent& event);
+ void OnAdd (wxCommandEvent& event);
+ void OnSubtract (wxCommandEvent& event);
+ void OnMultiply (wxCommandEvent& event);
+ void OnDivide (wxCommandEvent& event);
+ void OnFourier (wxCommandEvent& event);
+ 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);
+ void OnFFTRows (wxCommandEvent& event);
+ void OnIFFTRows (wxCommandEvent& event);
+ void OnFFTCols (wxCommandEvent& event);
+ void OnIFFTCols (wxCommandEvent& event);
+#endif
+
+ void OnMagnitude (wxCommandEvent& event);
+ void OnPhase (wxCommandEvent& event);
+ void OnReal (wxCommandEvent& event);
+ void OnImaginary (wxCommandEvent& event);
+
+ void OnScaleAuto (wxCommandEvent& event);
+ void OnScaleMinMax (wxCommandEvent& event);
+ void OnScaleFull (wxCommandEvent& event);
+ void OnPlotRow (wxCommandEvent& event);
+ void OnPlotCol (wxCommandEvent& event);
+#if HAVE_FFT
+ void OnPlotFFTRow (wxCommandEvent& event);
+ void OnPlotFFTCol (wxCommandEvent& event);
+#endif
+ void OnPlotHistogram (wxCommandEvent& event);
+ void OnCompareRow (wxCommandEvent& event);
+ void OnCompareCol (wxCommandEvent& event);
+
+#if CTSIM_MDI
+ wxDocMDIChildFrame* getFrame() { return m_pFrame; }
+#else
+ wxDocChildFrame* getFrame() { return m_pFrame; }
+#endif
+ void setInitialClientSize();
- 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 OnScaleAuto (wxCommandEvent& event);
- void OnScaleMinMax (wxCommandEvent& event);
+ wxMenu* getMenuAnalyze() { return m_pMenuAnalyze; }
- ImageFileDocument* GetDocument(void)
- { return dynamic_cast<ImageFileDocument*>(wxView::GetDocument()); }
+ ImageFileDocument* GetDocument()
+ { return dynamic_cast<ImageFileDocument*>(wxView::GetDocument()); }
- DECLARE_EVENT_TABLE()
+ DECLARE_EVENT_TABLE()
};
class ImageFileCanvas: public wxScrolledWindow
{
+private:
+ ImageFileView* m_pView;
+
+ int m_xCursor;
+ int m_yCursor;
+
public:
- ImageFileView* m_pView;
-
- ImageFileCanvas (ImageFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
- virtual void OnDraw(wxDC& dc);
- void OnMouseEvent(wxMouseEvent& event);
+ ImageFileCanvas (ImageFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
+ 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);
+
+ virtual wxSize GetBestSize() const;
+ void setView(ImageFileView* pView)
+ { m_pView = pView; }
- DECLARE_EVENT_TABLE()
+
+ DECLARE_EVENT_TABLE()
};
class ProjectionFileCanvas;
class ProjectionFileView : public wxView
{
- DECLARE_DYNAMIC_CLASS(ProjectionFileView)
-
- wxMemoryDC m_memoryDC;
- wxBitmap m_bitmap;
-
private:
- ProjectionFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
- wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
+ 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_canvas;
- wxFrame *m_frame;
+ 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(void);
- virtual ~ProjectionFileView(void);
-
- 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 OnReconstruct (wxCommandEvent& event);
-
- ProjectionFileDocument* GetDocument(void)
- { return dynamic_cast<ProjectionFileDocument*>(wxView::GetDocument()); }
- DECLARE_EVENT_TABLE()
+ 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
{
+private:
+ ProjectionFileView* m_pView;
+
public:
- ProjectionFileView* m_pView;
-
- ProjectionFileCanvas (ProjectionFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
- virtual void OnDraw(wxDC& dc);
+ ProjectionFileCanvas (ProjectionFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
+ virtual ~ProjectionFileCanvas() ;
+
+ virtual wxSize GetBestSize() const;
+ virtual void OnDraw(wxDC& dc);
+ void setView(ProjectionFileView* pView)
+ { m_pView = pView; }
};
class PhantomCanvas;
-class PhantomView : public wxView
+class PhantomFileView : public wxView
{
- DECLARE_DYNAMIC_CLASS(PhantomView)
+private:
+ DECLARE_DYNAMIC_CLASS(PhantomFileView)
+ DECLARE_EVENT_TABLE()
+
+ PhantomCanvas *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
+ 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_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(); }
+#else
+ { return m_pFrame; }
+#endif
+
+public:
+ PhantomFileView();
+ virtual ~PhantomFileView();
+ void canvasClosed()
+ { m_pCanvas = NULL; m_pFrame = NULL; }
+
+ bool OnCreate(wxDocument *doc, long flags);
+ void OnUpdate(wxView *sender, wxObject *hint = NULL);
+ bool OnClose (bool deleteWindow = true);
+ void OnDraw(wxDC* dc);
+ void OnProperties (wxCommandEvent& event);
+ void OnRasterize (wxCommandEvent& event);
+ void OnProjections (wxCommandEvent& event);
+
+ PhantomFileDocument* GetDocument()
+ { return dynamic_cast<PhantomFileDocument*>(wxView::GetDocument()); }
+
+ wxMenu* getFileMenu() { return m_pFileMenu; }
+#if CTSIM_MDI
+ wxDocMDIChildFrame* getFrame() { return m_pFrame; }
+#else
+ wxDocChildFrame* getFrame() { return m_pFrame; }
+#endif
+};
+
+class PhantomCanvas: public wxScrolledWindow
+{
private:
- PhantomCanvas *CreateCanvas(wxView *view, wxFrame *parent);
- wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
+ PhantomFileView* m_pView;
- PhantomCanvas *m_canvas;
- wxFrame *m_frame;
+public:
+ PhantomCanvas (PhantomFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
+ virtual ~PhantomCanvas();
- int m_iDefaultNDet;
- int m_iDefaultNView;
- int m_iDefaultNSample;
- int m_iDefaultGeometry;
- int m_iDefaultTrace;
- double m_dDefaultRotation;
- double m_dDefaultFocalLength;
- double m_dDefaultFieldOfView;
+ virtual wxSize GetBestSize() const;
+ void setView(PhantomFileView* pView)
+ { m_pView = pView; }
+ virtual void OnDraw(wxDC& dc);
+};
+
+class PlotFileCanvas;
+class PlotFileView : public wxView
+{
+ DECLARE_DYNAMIC_CLASS(PlotFileView)
+
+private:
+#if CTSIM_MDI
+ wxDocMDIChildFrame* m_pFrame;
+ wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#else
+ wxDocChildFrame* m_pFrame;
+ wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#endif
+
+ PlotFileCanvas *m_pCanvas;
+ EZPlot* m_pEZPlot;
+ wxMenu* m_pFileMenu;
+
+ bool m_bMinSpecified;
+ bool m_bMaxSpecified;
+ double m_dMinPixel;
+ double m_dMaxPixel;
+ double m_dAutoScaleFactor;
+
+ PlotFileCanvas *CreateCanvas (wxFrame* parent);
+ wxWindow* getFrameForChild()
+#if CTSIM_MDI
+ { return theApp->getMainFrame(); }
+#else
+ { return m_pFrame; }
+#endif
public:
- PhantomView(void);
- virtual ~PhantomView(void);
+ PlotFileView();
+ virtual ~PlotFileView();
+ 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 OnScaleMinMax (wxCommandEvent& event);
+ void OnScaleAuto (wxCommandEvent& event);
+ void OnScaleFull (wxCommandEvent& event);
+
+#if CTSIM_MDI
+ wxDocMDIChildFrame* getFrame() { return m_pFrame; }
+#else
+ wxDocChildFrame* getFrame() { return m_pFrame; }
+#endif
- bool OnCreate(wxDocument *doc, long flags);
- void OnUpdate(wxView *sender, wxObject *hint = NULL);
- bool OnClose (bool deleteWindow = true);
- void OnDraw(wxDC* dc);
- void OnProperties (wxCommandEvent& event);
- void OnRasterize (wxCommandEvent& event);
- void OnProjections (wxCommandEvent& event);
+ void setInitialClientSize();
+ wxMenu* getFileMenu() { return m_pFileMenu; }
+ PlotFileDocument* GetDocument()
+ { return dynamic_cast<PlotFileDocument*>(wxView::GetDocument()); }
- PhantomDocument* GetDocument(void)
- { return dynamic_cast<PhantomDocument*>(wxView::GetDocument()); }
+ DECLARE_EVENT_TABLE()
+};
+
+class PlotFileCanvas: public wxScrolledWindow
+{
+private:
+ PlotFileView* m_pView;
- DECLARE_EVENT_TABLE()
+public:
+ PlotFileCanvas (PlotFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
+ virtual ~PlotFileCanvas();
+
+ virtual void OnDraw(wxDC& dc);
+ virtual wxSize GetBestSize() const;
+
+ void setView (PlotFileView* pView)
+ { m_pView = pView; }
};
-class PhantomCanvas: public wxScrolledWindow
+
+class TextFileCanvas;
+class TextFileView: public wxView
{
+private:
+ DECLARE_DYNAMIC_CLASS(TextFileView)
+
+#if CTSIM_MDI
+ wxDocMDIChildFrame* m_pFrame;
+ wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#else
+ wxDocChildFrame* m_pFrame;
+ wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#endif
+ wxMenu* m_pFileMenu;
+ TextFileCanvas *m_pCanvas;
+
public:
- PhantomView* m_pView;
-
- PhantomCanvas (PhantomView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
+ TextFileView()
+ : wxView() , m_pFrame(0), m_pCanvas(0)
+ {}
+ ~TextFileView();
+ void canvasClosed()
+ { m_pFrame = NULL; }
+
+ bool OnCreate (wxDocument *doc, long flags);
+ void OnDraw (wxDC *dc);
+ 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; }
+ wxMenu* getFileMenu() { return m_pFileMenu; }
+#if CTSIM_MDI
+ wxDocMDIChildFrame* getFrame() { return m_pFrame; }
+#else
+ wxDocChildFrame* getFrame() { return m_pFrame; }
+#endif
+};
- virtual void OnDraw(wxDC& dc);
+class TextFileCanvas: public wxTextCtrl
+{
+ TextFileView *m_pView;
+public:
+ TextFileCanvas (TextFileView *v, wxFrame *frame, const wxPoint& pos, const wxSize& size, long style);
+ ~TextFileCanvas ();
+ virtual wxSize GetBestSize() const;
};