Merge changes from Debian Med packaging of 5.2.0-4
[ctsim.git] / src / ctsim.h
1 /*****************************************************************************
2 ** FILE IDENTIFICATION
3 **
4 **   Name:          ctsim.h
5 **   Purpose:       Header file for CTSim
6 **   Programmer:    Kevin Rosenberg
7 **   Date Started:  July 2000
8 **
9 **  This is part of the CTSim program
10 **  Copyright (c) 1983-2009 Kevin Rosenberg
11 **
12 **  This program is free software; you can redistribute it and/or modify
13 **  it under the terms of the GNU General Public License (version 2) as
14 **  published by the Free Software Foundation.
15 **
16 **  This program is distributed in the hope that it will be useful,
17 **  but WITHOUT ANY WARRANTY; without even the implied warranty of
18 **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 **  GNU General Public License for more details.
20 **
21 **  You should have received a copy of the GNU General Public License
22 **  along with this program; if not, write to the Free Software
23 **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
24 ******************************************************************************/
25
26 #ifndef __CTSIMH__
27 #define __CTSIMH__
28
29 #ifdef HAVE_CONFIG_H
30 #include "config.h"
31 #endif
32 #ifdef HAVE_DMALLOC
33 #include <dmalloc.h>
34 #endif
35
36 #ifdef MSVC
37 #define HAVE_WXTHREADS 1
38 #endif
39
40 #ifndef WX_PRECOMP
41 #include "wx/wx.h"
42 #endif
43 #include "wx/config.h"
44 #ifdef __WXMSW__
45 #include "wx/msw/helpchm.h"
46 #endif
47
48 #ifdef MSVC
49 #define CTSIM_MDI 1
50 #endif
51
52 #if defined(CTSIM_MDI) && !wxUSE_MDI_ARCHITECTURE
53 #error You must set wxUSE_MDI_ARCHITECTURE to 1 in setup.h!
54 #endif
55 #ifdef CTSIM_MDI
56 #include "wx/docmdi.h"
57 #endif
58
59 class wxMenu;
60 class wxDocument;
61 class ImageFileDocument;
62 class ProjectionFileDocument;
63 class PhantomFileDocument;
64 class PlotFileDocument;
65 class TextFileDocument;
66 class BackgroundManager;
67
68 #if wxUSE_GLCANVAS
69 class Graph3dFileDocument;
70 #endif
71
72 #include <vector>
73 #include "wx/docview.h"
74 #include "wx/textctrl.h"
75 #include "wx/menu.h"
76 #include "wx/help.h"
77 #include "wx/html/helpctrl.h"
78 #include "dlgezplot.h"
79 #include "ctsim-map.h"
80
81
82 #if defined(__WXMSW__) || defined (MSVC)
83 // #define CTSIM_WINHELP   1
84 #endif
85
86 // Define a new frame for main window
87 #if CTSIM_MDI
88 class MainFrame: public wxDocMDIParentFrame
89 #else
90 class MainFrame: public wxDocParentFrame
91 #endif
92 {
93 private:
94   DECLARE_CLASS(MainFrame)
95   DECLARE_EVENT_TABLE()
96
97 #ifndef CTSIM_MDI
98   wxMenu* m_pWindowMenu;
99 #endif
100
101   enum { MAX_WINDOW_MENUITEMS = 20 };
102   wxMenuItem* m_apWindowMenuItems[MAX_WINDOW_MENUITEMS];
103   wxDocument* m_apWindowMenuData[MAX_WINDOW_MENUITEMS];
104
105   int m_iDefaultImportFormat;
106   int m_iDefaultPhantomID;
107   int m_iDefaultFilterID;
108   int m_iDefaultFilterDomainID;
109   unsigned int m_iDefaultFilterXSize;
110   unsigned int m_iDefaultFilterYSize;
111   double m_dDefaultFilterParam;
112   double m_dDefaultFilterBandwidth;
113   double m_dDefaultFilterInputScale;
114   double m_dDefaultFilterOutputScale;
115
116   bool m_bShuttingDown;
117
118 #if CTSIM_WINHELP
119   wxCHMHelpController      m_winHelp;
120 #endif
121   wxHtmlHelpController     m_htmlHelp;
122
123 public:
124   MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long type);
125   virtual ~MainFrame();
126
127 #if wxCHECK_VERSION(2,9,0)
128   // Needed for wx3.0
129   void OnMRUFile(wxCommandEvent& event) {
130       if (m_docManager) m_docManager->OnMRUFile(event);
131   }
132 #endif
133
134   void OnSize (wxSizeEvent& event);
135
136 #if CTSIM_WINHELP
137   wxCHMHelpController&   getWinHelpController()
138   {return m_winHelp; }
139 #endif
140   wxHtmlHelpController&  getHtmlHelpController()
141   { return m_htmlHelp; }
142
143   void showHelp (int commandID);
144
145   void OnAbout (wxCommandEvent& event);
146   void OnHelpContents (wxCommandEvent& event);
147   void OnHelpTips (wxCommandEvent& event);
148   void OnCreatePhantom (wxCommandEvent& event);
149   void OnPreferences (wxCommandEvent& event);
150   void OnLogEvent (wxCommandEvent& event);  // used by thread children
151   void OnNewImageFile (wxCommandEvent& event);
152   void OnNewProjectionFile (wxCommandEvent& event);
153
154   void OnHelpButton (wxCommandEvent& event);
155   void OnImport (wxCommandEvent& event);
156
157 #if defined(CTSIM_WINHELP) && (defined(DEBUG) || defined(_DEBUG))
158   void OnHelpSecondary (wxCommandEvent& event);
159 #endif
160
161   void OnCreateFilter (wxCommandEvent& event);
162   void OnExit (wxCommandEvent& event);
163
164   void OnUpdateUI (wxUpdateUIEvent& event);
165
166   void OnWindowMenu0 (wxCommandEvent& event);
167   void OnWindowMenu1 (wxCommandEvent& event);
168   void OnWindowMenu2 (wxCommandEvent& event);
169   void OnWindowMenu3 (wxCommandEvent& event);
170   void OnWindowMenu4 (wxCommandEvent& event);
171   void OnWindowMenu5 (wxCommandEvent& event);
172   void OnWindowMenu6 (wxCommandEvent& event);
173   void OnWindowMenu7 (wxCommandEvent& event);
174   void OnWindowMenu8 (wxCommandEvent& event);
175   void OnWindowMenu9 (wxCommandEvent& event);
176   void OnWindowMenu10 (wxCommandEvent& event);
177   void OnWindowMenu11 (wxCommandEvent& event);
178   void OnWindowMenu12 (wxCommandEvent& event);
179   void OnWindowMenu13 (wxCommandEvent& event);
180   void OnWindowMenu14 (wxCommandEvent& event);
181   void OnWindowMenu15 (wxCommandEvent& event);
182   void OnWindowMenu16 (wxCommandEvent& event);
183   void OnWindowMenu17 (wxCommandEvent& event);
184   void OnWindowMenu18 (wxCommandEvent& event);
185   void OnWindowMenu19 (wxCommandEvent& event);
186
187   void DoWindowMenu (int iMenuPosition, wxCommandEvent& event);
188
189   bool getShuttingDown() const { return m_bShuttingDown; }
190 };
191
192
193 class wxDocManager;
194 class CTSimApp: public wxApp
195 {
196 private:
197   enum { O_HELP, O_PRINT, O_VERSION };
198   static struct option ctsimOptions[];
199
200   bool m_bAdvancedOptions;
201   bool m_bSetModifyNewDocs;
202   bool m_bVerboseLogging;
203   bool m_bShowStartupTips;
204   long m_iCurrentTip;
205   bool m_bUseBackgroundTasks;
206
207   wxDocManager* m_docManager;
208   MainFrame* m_pFrame;
209   wxConfig* m_pConfig;
210   wxTextCtrl* m_pLog;
211   TextFileDocument* m_pLogDoc;
212   wxDocTemplate* m_pDocTemplImage;
213   wxDocTemplate* m_pDocTemplProjection;
214   wxDocTemplate* m_pDocTemplPhantom;
215   wxDocTemplate* m_pDocTemplPlot;
216   wxDocTemplate* m_pDocTemplText;
217 #if wxUSE_GLCANVAS
218   wxDocTemplate* m_pDocTemplGraph3d;
219 #endif
220
221   void usage (const char* program);
222   void openConfig();
223   void closeConfig();
224   BackgroundManager*  m_pBackgroundMgr;
225   bool m_bPrintCmdLineImages;
226   bool m_bCmdLineVerboseFlag;
227
228   wxDocument* newDocumentHelper (wxDocTemplate* tmpl);
229
230 public:
231   CTSimApp();
232   void OnInitCmdLine(wxCmdLineParser& parser);
233   bool OnCmdLineParsed(wxCmdLineParser& parser);
234   bool OnInit();
235   int OnExit();
236   MainFrame* getMainFrame() const
237   { return m_pFrame; }
238
239   wxTextCtrl* getLog()
240   { return m_pLog; }
241
242   wxDocManager* getDocManager()
243   { return m_docManager; }
244
245   int getNumberCPU() const { return wxThread::GetCPUCount(); }
246
247   EZPlotDialog* makeEZPlotDialog()
248   { return new EZPlotDialog (m_pFrame); }
249
250   void getCompatibleImages (const ImageFileDocument* pIFDoc, std::vector<ImageFileDocument*>& vecIF);
251   bool getAdvancedOptions() const { return m_bAdvancedOptions; }
252   void setAdvancedOptions (bool bAdv) { m_bAdvancedOptions = bAdv; }
253   bool getVerboseLogging() const { return m_bVerboseLogging || m_bCmdLineVerboseFlag; }
254   void setVerboseLogging (bool bVerbose) { m_bVerboseLogging = bVerbose; }
255   bool getStartupTips() const { return m_bShowStartupTips; }
256   void setStartupTips(bool bTips) { m_bShowStartupTips = bTips; }
257   bool getUseBackgroundTasks() const { return m_bUseBackgroundTasks; }
258   void setUseBackgroundTasks(bool bBkgd) { m_bUseBackgroundTasks = bBkgd; }
259
260   BackgroundManager* getBackgroundManager() {return m_pBackgroundMgr;}
261
262   void ShowTips();
263
264   void setIconForFrame (wxFrame* pFrame);
265   wxConfig* getConfig()
266   { return m_pConfig; }
267   bool getAskDeleteNewDocs() const { return m_bSetModifyNewDocs; }
268   void setAskDeleteNewDocs(bool bAsk) { m_bSetModifyNewDocs = bAsk; }
269
270   wxDocTemplate* getDocTemplImage() { return m_pDocTemplImage; }
271   wxDocTemplate* getDocTemplProjection() { return m_pDocTemplProjection; }
272   wxDocTemplate* getDocTemplPhantom() { return m_pDocTemplPhantom; }
273   wxDocTemplate* getDocTemplPlot() { return m_pDocTemplPlot; }
274   wxDocTemplate* getDocTemplText() { return m_pDocTemplText; }
275 #if wxUSE_GLCANVAS
276   wxDocTemplate* getDocTemplGraph3d() { return m_pDocTemplGraph3d; }
277 #endif
278   TextFileDocument* getLogDoc() { return m_pLogDoc; }
279
280   ProjectionFileDocument* newProjectionDoc();
281   ImageFileDocument* newImageDoc();
282   PhantomFileDocument* newPhantomDoc();
283   PlotFileDocument* newPlotDoc();
284   TextFileDocument* newTextDoc();
285 #if wxUSE_GLCANVAS
286   Graph3dFileDocument* newGraph3dDoc();
287 #endif
288 };
289
290 DECLARE_APP(CTSimApp)
291 extern class CTSimApp* theApp;
292
293 enum {
294     MAINMENU_WINDOW_BASE = 500,
295     MAINMENU_HELP_ABOUT = 600,
296     MAINMENU_HELP_CONTENTS,
297     MAINMENU_HELP_TIPS,
298 #if defined(CTSIM_WINHELP) && (defined(DEBUG) || defined(_DEBUG))
299     MAINMENU_HELP_SECONDARY,
300 #endif
301     MAINMENU_FILE_CREATE_PHANTOM,
302     MAINMENU_FILE_CREATE_FILTER,
303     MAINMENU_FILE_EXIT,
304     MAINMENU_FILE_PREFERENCES,
305     MAINMENU_LOG_EVENT,
306     MAINMENU_IMPORT,
307
308     PJMENU_FILE_PROPERTIES,
309     PJMENU_RECONSTRUCT_FBP,
310     PJMENU_RECONSTRUCT_FBP_REBIN,
311     PJMENU_RECONSTRUCT_FOURIER,
312     PJMENU_CONVERT_RECTANGULAR,
313     PJMENU_CONVERT_POLAR,
314     PJMENU_CONVERT_FFT_POLAR,
315     PJMENU_CONVERT_PARALLEL,
316     PJMENU_PLOT_TTHETA_SAMPLING,
317     PJMENU_PLOT_HISTOGRAM,
318     PJMENU_ARTIFACT_REDUCTION,
319
320     IFMENU_FILE_EXPORT,
321     IFMENU_FILE_PROPERTIES,
322
323     IFMENU_EDIT_COPY,
324     IFMENU_EDIT_CUT,
325     IFMENU_EDIT_PASTE,
326
327     IFMENU_PLOT_ROW,
328     IFMENU_PLOT_COL,
329     IFMENU_PLOT_FFT_ROW,
330     IFMENU_PLOT_FFT_COL,
331     IFMENU_PLOT_HISTOGRAM,
332
333     IFMENU_VIEW_SCALE_AUTO,
334     IFMENU_VIEW_SCALE_MINMAX,
335     IFMENU_VIEW_SCALE_FULL,
336
337     IFMENU_COMPARE_IMAGES,
338     IFMENU_COMPARE_ROW,
339     IFMENU_COMPARE_COL,
340     IFMENU_IMAGE_SCALESIZE,
341     IFMENU_IMAGE_ADD,
342     IFMENU_IMAGE_SUBTRACT,
343     IFMENU_IMAGE_MULTIPLY,
344     IFMENU_IMAGE_DIVIDE,
345 #ifdef wxUSE_GLCANVAS
346     IFMENU_IMAGE_CONVERT3D,
347 #endif
348
349     IFMENU_FILTER_INVERTVALUES,
350     IFMENU_FILTER_SQRT,
351     IFMENU_FILTER_SQUARE,
352     IFMENU_FILTER_LOG,
353     IFMENU_FILTER_EXP,
354     IFMENU_FILTER_FOURIER,
355     IFMENU_FILTER_INVERSE_FOURIER,
356     IFMENU_FILTER_FFT,
357     IFMENU_FILTER_IFFT,
358     IFMENU_FILTER_FFT_ROWS,
359     IFMENU_FILTER_FFT_COLS,
360     IFMENU_FILTER_IFFT_ROWS,
361     IFMENU_FILTER_IFFT_COLS,
362     IFMENU_FILTER_MAGNITUDE,
363     IFMENU_FILTER_PHASE,
364     IFMENU_FILTER_REAL,
365     IFMENU_FILTER_IMAGINARY,
366     IFMENU_FILTER_SHUFFLENATURALTOFOURIERORDER,
367     IFMENU_FILTER_SHUFFLEFOURIERTONATURALORDER,
368
369     PHMMENU_FILE_PROPERTIES,
370     PHMMENU_PROCESS_RASTERIZE,
371     PHMMENU_PROCESS_PROJECTIONS,
372
373     PLOTMENU_FILE_PROPERTIES,
374     PLOTMENU_VIEW_SCALE_MINMAX,
375     PLOTMENU_VIEW_SCALE_AUTO,
376     PLOTMENU_VIEW_SCALE_FULL,
377
378     GRAPH3D_VIEW_WIREFRAME,
379     GRAPH3D_VIEW_COLOR,
380     GRAPH3D_VIEW_LIGHTING,
381     GRAPH3D_VIEW_SMOOTH,
382     GRAPH3D_VIEW_SCALE_AUTO,
383     GRAPH3D_VIEW_SCALE_MINMAX,
384     GRAPH3D_VIEW_SCALE_FULL,
385
386     RECONSTRUCTION_THREAD_EVENT,
387     NEW_IMAGEFILE_EVENT,
388     NEW_PROJECTIONFILE_EVENT,
389 };
390
391 #endif