aa349c1154b5da187eb0ec5492a4297d41b2e156
[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.17 2001/01/02 05:34:57 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;\r
40 class ImageFileDocument;\r
41 #include <vector>\r
42
43 #include "wx/docview.h"\r
44
45 // Define a new frame for main window
46 class MainFrame: public wxDocParentFrame
47 {
48     DECLARE_CLASS(MainFrame)
49 private:
50     wxTextCtrl* m_pLog;
51     wxMenu* m_pWindowMenu;
52
53     enum { MAX_WINDOW_MENUITEMS = 20 };
54     wxMenuItem* m_apWindowMenuItems[MAX_WINDOW_MENUITEMS];
55     wxDocument* m_apWindowMenuData[MAX_WINDOW_MENUITEMS];
56 \r
57     int m_iDefaultPhantomID;\r
58     int m_iDefaultFilterID;\r
59     int m_iDefaultFilterDomainID;\r
60     unsigned int m_iDefaultFilterXSize;    \r
61     unsigned int m_iDefaultFilterYSize;\r
62     double m_dDefaultFilterParam;\r
63     double m_dDefaultFilterBandwidth;\r
64     double m_dDefaultFilterInputScale;\r
65     double m_dDefaultFilterOutputScale;\r
66
67 public:
68     MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long type);
69     
70     void OnAbout (wxCommandEvent& event);
71     void OnHelpContents (wxCommandEvent& event);
72     void OnCreatePhantom (wxCommandEvent& event);\r
73     void OnCreateFilter (wxCommandEvent& event);
74     void OnExit (wxCommandEvent& event);
75
76     void OnUpdateUI (wxUpdateUIEvent& event);
77
78     wxTextCtrl* getLog() 
79         { return m_pLog; }
80
81     void OnWindowMenu0 (wxCommandEvent& event);
82     void OnWindowMenu1 (wxCommandEvent& event);
83     void OnWindowMenu2 (wxCommandEvent& event);
84     void OnWindowMenu3 (wxCommandEvent& event);
85     void OnWindowMenu4 (wxCommandEvent& event);
86     void OnWindowMenu5 (wxCommandEvent& event);
87     void OnWindowMenu6 (wxCommandEvent& event);
88     void OnWindowMenu7 (wxCommandEvent& event);
89     void OnWindowMenu8 (wxCommandEvent& event);
90     void OnWindowMenu9 (wxCommandEvent& event);
91     void OnWindowMenu10 (wxCommandEvent& event);
92     void OnWindowMenu11 (wxCommandEvent& event);
93     void OnWindowMenu12 (wxCommandEvent& event);
94     void OnWindowMenu13 (wxCommandEvent& event);
95     void OnWindowMenu14 (wxCommandEvent& event);
96     void OnWindowMenu15 (wxCommandEvent& event);
97     void OnWindowMenu16 (wxCommandEvent& event);
98     void OnWindowMenu17 (wxCommandEvent& event);
99     void OnWindowMenu18 (wxCommandEvent& event);
100     void OnWindowMenu19 (wxCommandEvent& event);
101
102     void DoWindowMenu (int iMenuPosition, wxCommandEvent& event);
103
104     DECLARE_EVENT_TABLE()
105 };
106
107
108 class wxDocManager;
109 class CTSimApp: public wxApp
110 {
111 public:
112     CTSimApp();
113     bool OnInit();
114     int OnExit();
115     MainFrame* getMainFrame() const
116       { return m_pFrame; }
117     wxTextCtrl* getLog()
118       { return m_pFrame->getLog(); }
119     wxDocManager* getDocManager() 
120         { return m_docManager; }
121
122     wxString getUntitledFilename();
123 \r
124     void getCompatibleImages (const ImageFileDocument* pIFDoc, std::vector<ImageFileDocument*>& vecIF);\r
125 \r
126     bool getSetModifyNewDocs() const\r
127     { return false; }\r
128
129 private:
130     wxDocManager* m_docManager;
131     MainFrame* m_pFrame;
132
133     void usage (const char* program);
134
135     static struct option ctsimOptions[];
136
137     enum { O_HELP, O_VERSION };
138 };
139
140 DECLARE_APP(CTSimApp)
141
142 extern class CTSimApp* theApp;
143
144
145 enum {
146     MAINMENU_HELP_ABOUT = 500,
147     MAINMENU_HELP_CONTENTS,
148     MAINMENU_FILE_CREATE_PHANTOM,\r
149     MAINMENU_FILE_CREATE_FILTER,
150     MAINMENU_FILE_EXIT,\r
151     IFMENU_FILE_PROPERTIES,
152     PJMENU_FILE_PROPERTIES,
153     PHMMENU_FILE_PROPERTIES,
154     PJMENU_PROCESS_RECONSTRUCT,\r
155     IFMENU_FILE_EXPORT,\r
156         IFMENU_PLOT_ROW,\r
157         IFMENU_PLOT_COL,
158     IFMENU_VIEW_SCALE_AUTO,
159     IFMENU_VIEW_SCALE_MINMAX,\r
160         IFMENU_COMPARE_IMAGES,\r
161         IFMENU_COMPARE_ROW,\r
162         IFMENU_COMPARE_COL,\r
163   IFMENU_PROCESS_INVERTVALUES,\r
164   IFMENU_PROCESS_SQRT,\r
165   IFMENU_PROCESS_SQUARE,\r
166   IFMENU_PROCESS_LOG,\r
167   IFMENU_PROCESS_EXP,\r
168   IFMENU_PROCESS_MULTIPLY,\r
169   IFMENU_PROCESS_SUBTRACT,\r
170   IFMENU_PROCESS_SCALESIZE,\r
171   IFMENU_PROCESS_DIVIDE,\r
172   IFMENU_PROCESS_ADD,\r
173   IFMENU_PROCESS_FOURIER,\r
174   IFMENU_PROCESS_INVERSE_FOURIER,\r
175   IFMENU_PROCESS_FFT,\r
176   IFMENU_PROCESS_IFFT,\r
177   IFMENU_PROCESS_MAGNITUDE,\r
178   IFMENU_PROCESS_PHASE,\r
179   IFMENU_PROCESS_SHUFFLENATURALTOFOURIERORDER,\r
180   IFMENU_PROCESS_SHUFFLEFOURIERTONATURALORDER,\r
181     PHMMENU_PROCESS_RASTERIZE,
182     PHMMENU_PROCESS_PROJECTIONS,\r
183         PLOTMENU_VIEW_SCALE_MINMAX,\r
184         PLOTMENU_VIEW_SCALE_AUTO,
185     MAINMENU_WINDOW_BASE,
186 };
187
188 #endif