r354: Added Projection Polar conversions
[ctsim.git] / src / ctsim.h
1 /*****************************************************************************
2 ** FILE IDENTIFICATION
3 **
4 **   Name:          ctsim.cpp
5 **   Purpose:       Top-level routines for CTSim program
6 **   Programmer:    Kevin Rosenberg
7 **   Date Started:  July 2000
8 **
9 **  This is part of the CTSim program
10 **  Copyright (C) 1983-2000 Kevin Rosenberg
11 **
12 **  $Id: ctsim.h,v 1.21 2001/01/04 21:28:41 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 #ifndef __CTSIMH__
29 #define __CTSIMH__
30
31 #ifdef HAVE_CONFIG_H
32 #include "config.h"
33 #endif
34 #ifdef HAVE_DMALLOC
35 #include <dmalloc.h>
36 #endif
37
38 class wxMenu;
39 class wxDocument;
40
41 class ImageFileDocument;
42
43 #include <vector>
44
45
46 #include "wx/docview.h"
47
48
49 // Define a new frame for main window
50 class MainFrame: public wxDocParentFrame
51 {
52     DECLARE_CLASS(MainFrame)
53 private:
54     wxTextCtrl* m_pLog;
55     wxMenu* m_pWindowMenu;
56
57     enum { MAX_WINDOW_MENUITEMS = 20 };
58     wxMenuItem* m_apWindowMenuItems[MAX_WINDOW_MENUITEMS];
59     wxDocument* m_apWindowMenuData[MAX_WINDOW_MENUITEMS];
60
61
62     int m_iDefaultPhantomID;
63     int m_iDefaultFilterID;
64     int m_iDefaultFilterDomainID;
65     unsigned int m_iDefaultFilterXSize;    
66     unsigned int m_iDefaultFilterYSize;
67     double m_dDefaultFilterParam;
68     double m_dDefaultFilterBandwidth;
69     double m_dDefaultFilterInputScale;
70     double m_dDefaultFilterOutputScale;
71
72
73 public:
74     MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long type);
75     
76     void OnAbout (wxCommandEvent& event);
77     void OnHelpContents (wxCommandEvent& event);
78     void OnCreatePhantom (wxCommandEvent& event);
79
80     void OnCreateFilter (wxCommandEvent& event);
81     void OnExit (wxCommandEvent& event);
82
83     void OnUpdateUI (wxUpdateUIEvent& event);
84
85     wxTextCtrl* getLog() 
86         { return m_pLog; }
87
88     void OnWindowMenu0 (wxCommandEvent& event);
89     void OnWindowMenu1 (wxCommandEvent& event);
90     void OnWindowMenu2 (wxCommandEvent& event);
91     void OnWindowMenu3 (wxCommandEvent& event);
92     void OnWindowMenu4 (wxCommandEvent& event);
93     void OnWindowMenu5 (wxCommandEvent& event);
94     void OnWindowMenu6 (wxCommandEvent& event);
95     void OnWindowMenu7 (wxCommandEvent& event);
96     void OnWindowMenu8 (wxCommandEvent& event);
97     void OnWindowMenu9 (wxCommandEvent& event);
98     void OnWindowMenu10 (wxCommandEvent& event);
99     void OnWindowMenu11 (wxCommandEvent& event);
100     void OnWindowMenu12 (wxCommandEvent& event);
101     void OnWindowMenu13 (wxCommandEvent& event);
102     void OnWindowMenu14 (wxCommandEvent& event);
103     void OnWindowMenu15 (wxCommandEvent& event);
104     void OnWindowMenu16 (wxCommandEvent& event);
105     void OnWindowMenu17 (wxCommandEvent& event);
106     void OnWindowMenu18 (wxCommandEvent& event);
107     void OnWindowMenu19 (wxCommandEvent& event);
108
109     void DoWindowMenu (int iMenuPosition, wxCommandEvent& event);
110
111     DECLARE_EVENT_TABLE()
112 };
113
114
115 class wxDocManager;
116 class CTSimApp: public wxApp
117 {
118 public:
119     CTSimApp();
120     bool OnInit();
121     int OnExit();
122     MainFrame* getMainFrame() const
123       { return m_pFrame; }
124     wxTextCtrl* getLog()
125       { return m_pFrame->getLog(); }
126     wxDocManager* getDocManager() 
127         { return m_docManager; }
128
129     wxString getUntitledFilename();
130
131
132     void getCompatibleImages (const ImageFileDocument* pIFDoc, std::vector<ImageFileDocument*>& vecIF);
133
134
135
136     bool getSetModifyNewDocs() const
137
138     { return true; }
139
140
141 private:
142     wxDocManager* m_docManager;
143     MainFrame* m_pFrame;
144
145     void usage (const char* program);
146
147     static struct option ctsimOptions[];
148
149     enum { O_HELP, O_VERSION };
150 };
151
152 DECLARE_APP(CTSimApp)
153
154 extern class CTSimApp* theApp;
155
156
157 enum {
158   MAINMENU_HELP_ABOUT = 500,
159   MAINMENU_HELP_CONTENTS,
160   MAINMENU_FILE_CREATE_PHANTOM,
161
162   MAINMENU_FILE_CREATE_FILTER,
163   MAINMENU_FILE_EXIT,
164
165   IFMENU_FILE_PROPERTIES,
166
167   PJMENU_FILE_PROPERTIES,
168   PJMENU_RECONSTRUCT_FBP,
169   PJMENU_RECONSTRUCT_FOURIER,
170   PJMENU_CONVERT_POLAR,
171   PJMENU_CONVERT_FFT_POLAR,
172
173   IFMENU_FILE_EXPORT,
174
175         IFMENU_PLOT_ROW,
176         IFMENU_PLOT_COL,
177   IFMENU_PLOT_HISTOGRAM,
178
179   IFMENU_VIEW_SCALE_AUTO,
180   IFMENU_VIEW_SCALE_MINMAX,
181   IFMENU_VIEW_SCALE_FULL,
182
183         IFMENU_COMPARE_IMAGES,
184         IFMENU_COMPARE_ROW,
185         IFMENU_COMPARE_COL,
186   IFMENU_IMAGE_SCALESIZE,
187   IFMENU_IMAGE_ADD,
188   IFMENU_IMAGE_SUBTRACT,
189   IFMENU_IMAGE_MULTIPLY,
190   IFMENU_IMAGE_DIVIDE,
191
192   IFMENU_FILTER_INVERTVALUES,
193   IFMENU_FILTER_SQRT,
194   IFMENU_FILTER_SQUARE,
195   IFMENU_FILTER_LOG,
196   IFMENU_FILTER_EXP,
197   IFMENU_FILTER_FOURIER,
198   IFMENU_FILTER_INVERSE_FOURIER,
199   IFMENU_FILTER_FFT,
200   IFMENU_FILTER_IFFT,
201   IFMENU_FILTER_MAGNITUDE,
202   IFMENU_FILTER_PHASE,
203   IFMENU_FILTER_SHUFFLENATURALTOFOURIERORDER,
204   IFMENU_FILTER_SHUFFLEFOURIERTONATURALORDER,
205
206   PHMMENU_FILE_PROPERTIES,
207   PHMMENU_PROCESS_RASTERIZE,
208   PHMMENU_PROCESS_PROJECTIONS,
209
210         PLOTMENU_VIEW_SCALE_MINMAX,
211         PLOTMENU_VIEW_SCALE_AUTO,
212         PLOTMENU_VIEW_SCALE_FULL,
213   MAINMENU_WINDOW_BASE,
214 };
215
216 #endif