1 /*****************************************************************************
5 ** Purpose: Dialog routines for CTSim program
6 ** Programmer: Kevin Rosenberg
7 ** Date Started: July 2000
9 ** This is part of the CTSim program
10 ** Copyright (c) 1983-2009 Kevin Rosenberg
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.
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.
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 ******************************************************************************/
26 #include "wx/wxprec.h"
32 #if !wxUSE_DOC_VIEW_ARCHITECTURE
33 #error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h!
36 #include "wx/statline.h"
43 #include "imagefile.h"
44 #include "projections.h"
46 #if defined(MSVC) || HAVE_SSTREAM
49 #include <sstream_subst>
53 ///////////////////////////////////////////////////////////////////////
54 // CLASS IMPLEMENTATION
55 // StringValueAndTitleListBox
56 ///////////////////////////////////////////////////////////////////////
59 StringValueAndTitleListBox::StringValueAndTitleListBox (wxDialog* pParent, int nChoices,
60 wxChar const* const* asTitle,
61 char const* const* aszValue)
64 wxString* psTitle = new wxString [nChoices];
65 for (int i = 0; i < nChoices; i++)
66 psTitle[i] = asTitle[i];
68 Create (pParent, -1, wxDefaultPosition, wxSize(-1,-1), nChoices, psTitle, wxLB_SINGLE | wxLB_NEEDED_SB);
70 m_ppszValues = aszValue;
76 StringValueAndTitleListBox::getSelectionStringValue () const
78 return m_ppszValues[GetSelection()];
81 StringValueAndTitleRadioBox::StringValueAndTitleRadioBox (wxDialog* pParent,
82 wxChar const* strTitle,
84 char const* const* aszTitle,
85 char const* const* aszValue)
88 wxString* psTitle = new wxString [nChoices];
89 for (int i = 0; i < nChoices; i++)
90 psTitle[i] = wxConvUTF8.cMB2WX(aszTitle[i]);
92 Create (pParent, -1, strTitle, wxDefaultPosition, wxDefaultSize, nChoices, psTitle, 1, wxRA_SPECIFY_COLS);
94 m_ppszValues = aszValue;
101 StringValueAndTitleRadioBox::getSelectionStringValue () const
103 return m_ppszValues[GetSelection()];
106 ///////////////////////////////////////////////////////////////////////
107 // CLASS IMPLEMENTATION
109 ///////////////////////////////////////////////////////////////////////
111 DialogGetPhantom::DialogGetPhantom (wxWindow* pParent, int iDefaultPhantom)
112 : wxDialog (pParent, -1, _T("Select Phantom"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
114 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
116 pTopSizer->Add (new wxStaticText (this, -1, _T("Select Phantom")), 0, wxCENTER | wxALL, 5);
118 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
120 m_pRadioBoxPhantom = new StringValueAndTitleRadioBox (this, _T("Phantom"), Phantom::getPhantomCount(), Phantom::getPhantomTitleArray(), Phantom::getPhantomNameArray());
121 m_pRadioBoxPhantom->SetSelection (iDefaultPhantom);
122 pTopSizer->Add (m_pRadioBoxPhantom, 0, wxALL | wxALIGN_CENTER);
124 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
126 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
127 wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
128 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
129 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
130 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
131 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_PHANTOM);
132 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
134 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
135 pButtonOk->SetDefault();
137 SetAutoLayout (true);
138 SetSizer (pTopSizer);
139 pTopSizer->Fit (this);
140 pTopSizer->SetSizeHints (this);
144 DialogGetPhantom::getPhantom()
146 return m_pRadioBoxPhantom->getSelectionStringValue();
150 ///////////////////////////////////////////////////////////////////////
151 // CLASS IMPLEMENTATION
152 // DialogGetThetaRange
153 ///////////////////////////////////////////////////////////////////////
155 DialogGetThetaRange::DialogGetThetaRange (wxWindow* pParent, int iDefaultThetaRange)
156 : wxDialog (pParent, -1, _T("Select Phantom"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
158 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
160 pTopSizer->Add (new wxStaticText (this, -1, _T("Select Theta Range")), 0, wxCENTER | wxALL, 5);
162 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
164 wxString asTitle[] = {_T("Unconstrained"), _T("Normalized to 2pi"), _T("Fold to pi")};
166 m_pRadioBoxThetaRange = new wxRadioBox (this, -1, _T("Theta Range"), wxDefaultPosition, wxDefaultSize, 3, asTitle, 1, wxRA_SPECIFY_COLS);
167 if (iDefaultThetaRange == ParallelRaysums::THETA_RANGE_UNCONSTRAINED)
168 m_pRadioBoxThetaRange->SetSelection (0);
169 else if (iDefaultThetaRange == ParallelRaysums::THETA_RANGE_NORMALIZE_TO_TWOPI)
170 m_pRadioBoxThetaRange->SetSelection (1);
171 else if (iDefaultThetaRange == ParallelRaysums::THETA_RANGE_FOLD_TO_PI)
172 m_pRadioBoxThetaRange->SetSelection (2);
174 pTopSizer->Add (m_pRadioBoxThetaRange, 0, wxALL | wxALIGN_CENTER);
176 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
178 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
179 wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
180 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
181 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
182 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
183 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_THETA_RANGE);
184 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
186 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
187 pButtonOk->SetDefault();
189 SetAutoLayout (true);
190 SetSizer (pTopSizer);
191 pTopSizer->Fit (this);
192 pTopSizer->SetSizeHints (this);
196 DialogGetThetaRange::getThetaRange()
198 int iSelection = m_pRadioBoxThetaRange->GetSelection();
200 return ParallelRaysums::THETA_RANGE_UNCONSTRAINED;
201 else if (iSelection == 1)
202 return ParallelRaysums::THETA_RANGE_NORMALIZE_TO_TWOPI;
204 return ParallelRaysums::THETA_RANGE_FOLD_TO_PI;
208 ///////////////////////////////////////////////////////////////////////
209 // CLASS IMPLEMENTATION
210 // DialogGetComparisonImage
211 ///////////////////////////////////////////////////////////////////////
213 DialogGetComparisonImage::DialogGetComparisonImage (wxWindow* pParent, wxChar const* pwszTitle,
214 const std::vector<ImageFileDocument*>& rVecIF, bool bShowMakeDifference)
215 : wxDialog (pParent, -1, pwszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION), m_rVecIF(rVecIF)
217 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
219 pTopSizer->Add (new wxStaticText (this, -1, pwszTitle), 0, wxALIGN_CENTER | wxALL, 5);
221 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5);
223 int iNImages = m_rVecIF.size();
224 wxString* pstrImages = new wxString [iNImages];
225 for (int i = 0; i < iNImages; i++) {
226 ImageFileView* pView = dynamic_cast<ImageFileView*>(m_rVecIF[i]->GetFirstView());
228 pstrImages[i] = pView->getFrame()->GetTitle();
231 m_pListBoxImageChoices = new wxListBox (this, -1, wxDefaultPosition, wxDefaultSize, iNImages, pstrImages, wxLB_SINGLE);
232 delete [] pstrImages;
234 m_pListBoxImageChoices->SetSelection (0);
235 pTopSizer->Add (m_pListBoxImageChoices, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
237 if (bShowMakeDifference) {
238 m_pMakeDifferenceImage = new wxCheckBox (this, -1, _T("Make Difference Image"));
239 m_pMakeDifferenceImage->SetValue (FALSE);
240 pTopSizer->Add (m_pMakeDifferenceImage, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
242 m_pMakeDifferenceImage = NULL;
244 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
246 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
247 wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
248 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
249 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
250 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
251 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_COMPARISON);
252 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
254 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
255 pButtonOk->SetDefault();
257 SetAutoLayout (true);
258 SetSizer (pTopSizer);
259 pTopSizer->Fit (this);
260 pTopSizer->SetSizeHints (this);
264 DialogGetComparisonImage::getImageFileDocument()
266 return m_rVecIF[ m_pListBoxImageChoices->GetSelection() ];
270 DialogGetComparisonImage::getMakeDifferenceImage()
272 if (m_pMakeDifferenceImage)
273 return m_pMakeDifferenceImage->GetValue();
279 /////////////////////////////////////////////////////////////////////
280 // CLASS DiaglogPreferences Implementation
281 /////////////////////////////////////////////////////////////////////
283 DialogPreferences::DialogPreferences (wxWindow* pParent, wxChar const* pwszTitle,
284 bool bAdvancedOptions, bool bAskDeleteNewDocs, bool bVerboseLogging, bool bStartupTips,
285 bool bUseBackgroundTasks)
286 : wxDialog (pParent, -1, pwszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
288 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
290 pTopSizer->Add (new wxStaticText (this, -1, pwszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
292 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
294 m_pCBAdvancedOptions = new wxCheckBox (this, -1, _T("Advanced Options"), wxDefaultPosition, wxSize(250, 25), 0);
295 m_pCBAdvancedOptions->SetValue (bAdvancedOptions);
296 pTopSizer->Add (m_pCBAdvancedOptions, 0, wxALIGN_CENTER_VERTICAL);
298 m_pCBAskDeleteNewDocs = new wxCheckBox (this, -1, _T("Ask \"Save New Documents\" Before Closing"), wxDefaultPosition, wxSize(250, 25), 0);
299 m_pCBAskDeleteNewDocs->SetValue (bAskDeleteNewDocs);
300 pTopSizer->Add (m_pCBAskDeleteNewDocs, 0, wxALIGN_CENTER_VERTICAL);
302 m_pCBVerboseLogging = new wxCheckBox (this, -1, _T("Verbose Logging"), wxDefaultPosition, wxSize(250, 25), 0);
303 m_pCBVerboseLogging->SetValue (bVerboseLogging);
304 pTopSizer->Add (m_pCBVerboseLogging, 0, wxALIGN_CENTER_VERTICAL);
306 m_pCBStartupTips = new wxCheckBox (this, -1, _T("Show Tips at Start"), wxDefaultPosition, wxSize(250, 25), 0);
307 m_pCBStartupTips->SetValue (bStartupTips);
308 pTopSizer->Add (m_pCBStartupTips, 0, wxALIGN_CENTER_VERTICAL);
310 #if HAVE_WXTHREADS && MSVC
311 m_pCBUseBackgroundTasks = new wxCheckBox (this, -1, _T("Put Tasks in Background"), wxDefaultPosition, wxSize(250, 25), 0);
312 m_pCBUseBackgroundTasks->SetValue (bUseBackgroundTasks);
313 pTopSizer->Add (m_pCBUseBackgroundTasks, 0, wxALIGN_CENTER_VERTICAL);
316 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
318 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
319 wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
320 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
321 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
322 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
323 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_PREFERENCES);
324 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
326 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
327 pButtonOk->SetDefault();
329 SetAutoLayout (true);
330 SetSizer (pTopSizer);
331 pTopSizer->Fit (this);
332 pTopSizer->SetSizeHints (this);
335 DialogPreferences::~DialogPreferences ()
340 DialogPreferences::getAdvancedOptions ()
342 return static_cast<bool>(m_pCBAdvancedOptions->GetValue());
346 DialogPreferences::getAskDeleteNewDocs ()
348 return static_cast<bool>(m_pCBAskDeleteNewDocs->GetValue());
352 DialogPreferences::getVerboseLogging ()
354 return static_cast<bool>(m_pCBVerboseLogging->GetValue());
358 DialogPreferences::getStartupTips ()
360 return static_cast<bool>(m_pCBStartupTips->GetValue());
364 DialogPreferences::getUseBackgroundTasks ()
366 #if HAVE_WXTHREADS && MSVC
367 return static_cast<bool>(m_pCBUseBackgroundTasks->GetValue());
374 /////////////////////////////////////////////////////////////////////
375 // CLASS DiaglogGetMinMax Implementation
376 /////////////////////////////////////////////////////////////////////
378 DialogGetMinMax::DialogGetMinMax (wxWindow* pParent, wxChar const* pwszTitle, double dDefaultMin, double dDefaultMax)
379 : wxDialog (pParent, -1, pwszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
381 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
383 pTopSizer->Add (new wxStaticText (this, -1, pwszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
385 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
389 m_pTextCtrlMin = new wxTextCtrl (this, -1, sMin, wxDefaultPosition, wxSize(100, 25), 0);
392 m_pTextCtrlMax = new wxTextCtrl (this, -1, sMax, wxDefaultPosition, wxSize(100, 25), 0);
394 wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
395 pGridSizer->Add (new wxStaticText (this, -1, _T("Minimum")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
396 pGridSizer->Add (m_pTextCtrlMin, 0, wxALIGN_CENTER_VERTICAL);
397 pGridSizer->Add (new wxStaticText (this, -1, _T("Maximum")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
398 pGridSizer->Add (m_pTextCtrlMax, 0, wxALIGN_CENTER_VERTICAL);
399 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
401 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
403 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
404 wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
405 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
406 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
407 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
408 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_MINMAX);
409 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
411 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
412 pButtonOk->SetDefault();
414 SetAutoLayout (true);
415 SetSizer (pTopSizer);
416 pTopSizer->Fit (this);
417 pTopSizer->SetSizeHints (this);
420 DialogGetMinMax::~DialogGetMinMax ()
425 DialogGetMinMax::getMinimum ()
427 wxString strCtrl = m_pTextCtrlMin->GetValue();
429 if (strCtrl.ToDouble (&dValue))
432 return (m_dDefaultMin);
436 DialogGetMinMax::getMaximum ()
438 wxString strCtrl = m_pTextCtrlMax->GetValue();
440 if (strCtrl.ToDouble (&dValue))
443 return (m_dDefaultMax);
447 /////////////////////////////////////////////////////////////////////
448 // CLASS DialogAutoScaleParameters IMPLEMENTATION
449 /////////////////////////////////////////////////////////////////////
451 DialogAutoScaleParameters::DialogAutoScaleParameters (wxWindow *pParent, double mean, double mode, double median, double stddev, double dDefaultScaleFactor)
452 : wxDialog (pParent, -1, _T("Auto Scale Parameters"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION), m_dMean(mean), m_dMode(mode), m_dMedian(median), m_dStdDev(stddev)
454 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
456 pTopSizer->Add (new wxStaticText (this, -1, _T("Auto Scale Parameters")), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
458 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
460 wxString asTitle[] = {_T("Mode"), _T("Median"), _T("Mean")};
462 m_pRadioBoxCenter = new wxRadioBox (this, -1, _T("Center"), wxDefaultPosition, wxDefaultSize, 3, asTitle, 1, wxRA_SPECIFY_COLS);
463 m_pRadioBoxCenter->SetSelection (0);
464 pTopSizer->Add (m_pRadioBoxCenter, 0, wxALL | wxALIGN_CENTER);
466 wxGridSizer *pGridSizer = new wxGridSizer (2);
467 pGridSizer->Add (new wxStaticText (this, -1, _T("Standard Deviation Factor")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
468 wxString sDefaultFactor;
469 sDefaultFactor << dDefaultScaleFactor;
470 m_pTextCtrlStdDevFactor = new wxTextCtrl (this, -1, sDefaultFactor, wxDefaultPosition, wxSize(100, 25), 0);
471 pGridSizer->Add (m_pTextCtrlStdDevFactor, 0, wxALIGN_CENTER_VERTICAL);
472 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
474 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
476 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
477 wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
478 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
479 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
480 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
481 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_AUTOSCALE);
482 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
484 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
485 pButtonOk->SetDefault();
487 SetAutoLayout (true);
488 SetSizer (pTopSizer);
489 pTopSizer->Fit (this);
490 pTopSizer->SetSizeHints (this);
494 DialogAutoScaleParameters::getMinMax (double* pMin, double* pMax)
496 int iCenter = m_pRadioBoxCenter->GetSelection();
497 double dCenter = m_dMode;
500 else if (iCenter == 2)
503 wxString sStddevFactor = m_pTextCtrlStdDevFactor->GetValue();
505 if (! sStddevFactor.ToDouble (&dValue)) {
506 *theApp->getLog() << _T("Error: Non-numeric Standard Deviation Factor of ") << sStddevFactor << _T("\n");
509 double dHalfWidth = dValue * m_dStdDev / 2;
510 *pMin = dCenter - dHalfWidth;
511 *pMax = dCenter + dHalfWidth;
512 *theApp->getLog() << _T("Setting minimum to ") << *pMin << _T(" and maximum to ") << *pMax << _T("\n");
518 DialogAutoScaleParameters::getAutoScaleFactor ()
520 wxString sStddevFactor = m_pTextCtrlStdDevFactor->GetValue();
522 if (! sStddevFactor.ToDouble (&dValue)) {
523 *theApp->getLog() << _T("Error: Non-numeric Standard Deviation Factor of ") << sStddevFactor << _T("\n");
531 /////////////////////////////////////////////////////////////////////
532 // CLASS IDENTIFICATION
534 // DialogGetRasterParameters
535 /////////////////////////////////////////////////////////////////////
537 DialogGetRasterParameters::DialogGetRasterParameters
538 (wxWindow* pParent, int iDefaultXSize, int iDefaultYSize, int iDefaultNSamples, double dDefaultViewRatio)
539 : wxDialog (pParent, -1, _T("Rasterization Parameters"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
541 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
543 pTopSizer->Add (new wxStaticText (this, -1, _T("Rasterization Parameters")), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
545 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
547 wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
549 sXSize << iDefaultXSize;
550 m_pTextCtrlXSize = new wxTextCtrl (this, -1, sXSize, wxDefaultPosition, wxSize(100, 25), 0);
551 pGridSizer->Add (new wxStaticText (this, -1, _T("X Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
552 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_CENTER_VERTICAL);
554 sYSize << iDefaultYSize;
555 m_pTextCtrlYSize = new wxTextCtrl (this, -1, sYSize, wxDefaultPosition, wxSize(100, 25), 0);
556 pGridSizer->Add (new wxStaticText (this, -1, _T("Y Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
557 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_CENTER_VERTICAL);
559 sViewRatio << dDefaultViewRatio;
560 m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, sViewRatio, wxDefaultPosition, wxSize(100, 25), 0);
561 pGridSizer->Add (new wxStaticText (this, -1, _T("View Ratio")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
562 pGridSizer->Add (m_pTextCtrlViewRatio, 0, wxALIGN_CENTER_VERTICAL);
564 sNSamples << iDefaultNSamples;
565 m_pTextCtrlNSamples = new wxTextCtrl (this, -1, sNSamples, wxDefaultPosition, wxSize(100, 25), 0);
566 pGridSizer->Add (new wxStaticText (this, -1, _T("Samples per Pixel")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
567 pGridSizer->Add (m_pTextCtrlNSamples, 0, wxALIGN_CENTER_VERTICAL);
569 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
571 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
573 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
574 wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
575 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
576 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
577 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
578 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_RASTERIZE);
579 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
581 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
582 pButtonOk->SetDefault();
584 SetAutoLayout (true);
585 SetSizer (pTopSizer);
586 pTopSizer->Fit (this);
587 pTopSizer->SetSizeHints (this);
590 DialogGetRasterParameters::~DialogGetRasterParameters ()
596 DialogGetRasterParameters::getXSize ()
598 wxString strCtrl = m_pTextCtrlXSize->GetValue();
599 unsigned long lValue;
600 if (strCtrl.ToULong (&lValue))
603 return (m_iDefaultXSize);
607 DialogGetRasterParameters::getYSize ()
609 wxString strCtrl = m_pTextCtrlYSize->GetValue();
610 unsigned long lValue;
611 if (strCtrl.ToULong (&lValue))
614 return (m_iDefaultYSize);
618 DialogGetRasterParameters::getNSamples ()
620 wxString strCtrl = m_pTextCtrlNSamples->GetValue();
621 unsigned long lValue;
622 if (strCtrl.ToULong (&lValue))
625 return (m_iDefaultNSamples);
629 DialogGetRasterParameters::getViewRatio ()
631 wxString strCtrl = m_pTextCtrlViewRatio->GetValue();
633 if (strCtrl.ToDouble (&dValue))
636 return (m_dDefaultViewRatio);
640 /////////////////////////////////////////////////////////////////////
641 // CLASS IDENTIFICATION
643 // DialogGetProjectionParameters
644 /////////////////////////////////////////////////////////////////////
647 DialogGetProjectionParameters::DialogGetProjectionParameters
648 (wxWindow* pParent, int iDefaultNDet, int iDefaultNView, int iDefaultOffsetView, int iDefaultNSamples,
649 double dDefaultRotAngle, double dDefaultFocalLength, double dDefaultCenterDetectorLength,
650 double dDefaultViewRatio, double dDefaultScanRatio, int iDefaultGeometry, int iDefaultTrace)
651 : wxDialog (pParent, -1, _T("Projection Parameters"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
653 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
655 m_dDefaultRotAngle = dDefaultRotAngle;
656 m_dDefaultFocalLength = dDefaultFocalLength;
657 m_dDefaultCenterDetectorLength = dDefaultCenterDetectorLength;
658 m_dDefaultViewRatio = dDefaultViewRatio;
659 m_dDefaultScanRatio = dDefaultScanRatio;
660 m_iDefaultNSamples = iDefaultNSamples;
661 m_iDefaultNView = iDefaultNView;
662 m_iDefaultNDet = iDefaultNDet;
663 m_iDefaultTrace = iDefaultTrace;
664 m_iDefaultGeometry = iDefaultGeometry;
666 pTopSizer->Add (new wxStaticText (this, -1, _T("Projection Parameters")), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
668 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
670 wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (2);
671 m_pRadioBoxGeometry = new StringValueAndTitleRadioBox (this, _T("Geometry"), Scanner::getGeometryCount(), Scanner::getGeometryTitleArray(), Scanner::getGeometryNameArray());
672 m_pRadioBoxGeometry->SetSelection (iDefaultGeometry);
674 pGridSizer->Add (m_pRadioBoxGeometry, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
676 m_pRadioBoxTrace = new StringValueAndTitleRadioBox (this, _T("Trace Level"), Trace::getTraceCount(), Trace::getTraceTitleArray(), Trace::getTraceNameArray());
677 m_pRadioBoxTrace->SetSelection (iDefaultTrace);
678 pGridSizer->Add (m_pRadioBoxTrace, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
680 wxFlexGridSizer* pText1Sizer = new wxFlexGridSizer(2);
682 sNDet << iDefaultNDet;
683 m_pTextCtrlNDet = new wxTextCtrl (this, -1, sNDet, wxDefaultPosition, wxSize(100, 25), 0);
684 pText1Sizer->Add (new wxStaticText (this, -1, _T("Detectors")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
685 pText1Sizer->Add (m_pTextCtrlNDet, 0, wxALIGN_CENTER_VERTICAL);
687 sNView << iDefaultNView;
688 m_pTextCtrlNView = new wxTextCtrl (this, -1, sNView, wxDefaultPosition, wxSize(100, 25), 0);
689 pText1Sizer->Add (new wxStaticText (this, -1, _T("Views")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
690 pText1Sizer->Add (m_pTextCtrlNView, 0, wxALIGN_CENTER_VERTICAL);
692 sNSamples << iDefaultNSamples;
693 m_pTextCtrlNSamples = new wxTextCtrl (this, -1, sNSamples, wxDefaultPosition, wxSize(100, 25), 0);
694 pText1Sizer->Add (new wxStaticText (this, -1, _T("Samples per Detector")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
695 pText1Sizer->Add (m_pTextCtrlNSamples, 0, wxALIGN_CENTER_VERTICAL);
697 pGridSizer->Add (pText1Sizer);
699 wxFlexGridSizer* pText2Sizer = new wxFlexGridSizer(2);
701 sViewRatio << dDefaultViewRatio;
702 m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, sViewRatio, wxDefaultPosition, wxSize(100, 25), 0);
703 pText2Sizer->Add (new wxStaticText (this, -1, _T("View Ratio")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
704 pText2Sizer->Add (m_pTextCtrlViewRatio, 0, wxALIGN_CENTER_VERTICAL);
706 sScanRatio << dDefaultScanRatio;
707 m_pTextCtrlScanRatio = new wxTextCtrl (this, -1, sScanRatio, wxDefaultPosition, wxSize(100, 25), 0);
708 pText2Sizer->Add (new wxStaticText (this, -1, _T("Scan Ratio")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
709 pText2Sizer->Add (m_pTextCtrlScanRatio, 0, wxALIGN_CENTER_VERTICAL);
710 wxString sFocalLength;
711 sFocalLength << dDefaultFocalLength;
712 m_pTextCtrlFocalLength = new wxTextCtrl (this, -1, sFocalLength, wxDefaultPosition, wxSize(100, 25), 0);
713 pText2Sizer->Add (new wxStaticText (this, -1, _T("Focal Length Ratio")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
714 pText2Sizer->Add (m_pTextCtrlFocalLength, 0, wxALIGN_CENTER_VERTICAL);
716 if (theApp->getAdvancedOptions()) {
717 wxString sCenterDetectorLength;
718 sCenterDetectorLength << dDefaultCenterDetectorLength;
719 m_pTextCtrlCenterDetectorLength = new wxTextCtrl (this, -1, sCenterDetectorLength, wxDefaultPosition, wxSize(100, 25), 0);
720 pText2Sizer->Add (new wxStaticText (this, -1, _T("Center-Detector Length Ratio")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
721 pText2Sizer->Add (m_pTextCtrlCenterDetectorLength, 0, wxALIGN_CENTER_VERTICAL);
724 sRotAngle << dDefaultRotAngle;
725 m_pTextCtrlRotAngle = new wxTextCtrl (this, -1, sRotAngle, wxDefaultPosition, wxSize(100, 25), 0);
726 pText2Sizer->Add (new wxStaticText (this, -1, _T("Rotation Angle (Fraction of circle)")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
727 pText2Sizer->Add (m_pTextCtrlRotAngle, 0, wxALIGN_CENTER_VERTICAL);
729 wxString sOffsetView;
730 sOffsetView << iDefaultOffsetView;
731 m_pTextCtrlOffsetView = new wxTextCtrl (this, -1, sOffsetView, wxDefaultPosition, wxSize(100, 25), 0);
732 pText2Sizer->Add (new wxStaticText (this, -1, _T("Gantry offset in units of 'views' ")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
733 pText2Sizer->Add (m_pTextCtrlOffsetView, 0, wxALIGN_CENTER_VERTICAL);
736 pGridSizer->Add (pText2Sizer);
738 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
740 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
742 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
743 wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
744 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
745 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
746 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
747 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_PROJECTIONS);
748 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
750 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
751 pButtonOk->SetDefault();
753 SetAutoLayout (true);
754 SetSizer (pTopSizer);
755 pTopSizer->Fit (this);
756 pTopSizer->SetSizeHints (this);
758 m_pRadioBoxGeometry->SetFocus();
761 DialogGetProjectionParameters::~DialogGetProjectionParameters ()
767 DialogGetProjectionParameters::getNDet ()
769 wxString strCtrl = m_pTextCtrlNDet->GetValue();
770 unsigned long lValue;
771 if (strCtrl.ToULong (&lValue))
774 return (m_iDefaultNDet);
778 DialogGetProjectionParameters::getNView ()
780 wxString strCtrl = m_pTextCtrlNView->GetValue();
781 unsigned long lValue;
782 if (strCtrl.ToULong (&lValue))
785 return (m_iDefaultNView);
789 DialogGetProjectionParameters::getOffsetView ()
791 if (theApp->getAdvancedOptions()) {
792 wxString strCtrl = m_pTextCtrlOffsetView->GetValue();
793 unsigned long lValue;
794 if (strCtrl.ToULong (&lValue))
797 return (m_iDefaultOffsetView);
804 DialogGetProjectionParameters::getNSamples ()
806 wxString strCtrl = m_pTextCtrlNSamples->GetValue();
807 unsigned long lValue;
808 if (strCtrl.ToULong (&lValue))
811 return (m_iDefaultNSamples);
815 DialogGetProjectionParameters::getRotAngle ()
817 if (theApp->getAdvancedOptions()) {
818 wxString strCtrl = m_pTextCtrlRotAngle->GetValue();
820 if (strCtrl.ToDouble (&dValue))
821 return (dValue * TWOPI);
823 return (m_dDefaultRotAngle);
825 if (Scanner::convertGeometryNameToID (m_pRadioBoxGeometry->getSelectionStringValue()) ==
826 Scanner::GEOMETRY_PARALLEL)
834 DialogGetProjectionParameters::getFocalLengthRatio ()
836 wxString strCtrl = m_pTextCtrlFocalLength->GetValue();
838 if (strCtrl.ToDouble (&dValue))
841 return (m_dDefaultFocalLength);
845 DialogGetProjectionParameters::getCenterDetectorLengthRatio ()
847 if (theApp->getAdvancedOptions()) {
848 wxString strCtrl = m_pTextCtrlCenterDetectorLength->GetValue();
850 if (strCtrl.ToDouble (&dValue))
853 return (m_dDefaultCenterDetectorLength);
855 return getFocalLengthRatio(); // default is to set equal to focal-length
859 DialogGetProjectionParameters::getViewRatio ()
861 wxString strCtrl = m_pTextCtrlViewRatio->GetValue();
863 if (strCtrl.ToDouble (&dValue))
866 return (m_dDefaultViewRatio);
870 DialogGetProjectionParameters::getScanRatio ()
872 wxString strCtrl = m_pTextCtrlScanRatio->GetValue();
874 if (strCtrl.ToDouble (&dValue))
877 return (m_dDefaultScanRatio);
881 DialogGetProjectionParameters::getGeometry ()
883 return m_pRadioBoxGeometry->getSelectionStringValue();
887 DialogGetProjectionParameters::getTrace ()
889 return Trace::convertTraceNameToID(m_pRadioBoxTrace->getSelectionStringValue());
894 /////////////////////////////////////////////////////////////////////
895 // CLASS IDENTIFICATION
897 // DialogGetReconstructionParameters
898 /////////////////////////////////////////////////////////////////////
901 DialogGetReconstructionParameters::DialogGetReconstructionParameters (wxWindow* pParent, int iDefaultXSize,
902 int iDefaultYSize, int iDefaultFilterID, double dDefaultHammingParam,
903 int iDefaultFilterMethodID, int iDefaultFilterGenerationID, int iDefaultZeropad,
904 int iDefaultInterpID, int iDefaultInterpParam, int iDefaultBackprojectID, int iTrace,
905 ReconstructionROI* pDefaultROI)
906 : wxDialog (pParent, -1, _T("Reconstruction Parameters"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
908 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
910 m_iDefaultXSize = iDefaultXSize;
911 m_iDefaultYSize = iDefaultYSize;
912 m_dDefaultFilterParam = dDefaultHammingParam;
913 m_iDefaultZeropad = iDefaultZeropad;
914 m_iDefaultInterpParam = iDefaultInterpParam;
915 m_dDefaultRoiXMin = pDefaultROI->m_dXMin;
916 m_dDefaultRoiXMax = pDefaultROI->m_dXMax;
917 m_dDefaultRoiYMin = pDefaultROI->m_dYMin;
918 m_dDefaultRoiYMax = pDefaultROI->m_dYMax;
920 pTopSizer->Add (new wxStaticText (this, -1, _T("Filtered Backprojection Parameters")), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
921 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
923 wxFlexGridSizer* pGridSizer = NULL;
924 if (theApp->getAdvancedOptions())
925 pGridSizer = new wxFlexGridSizer (4);
927 pGridSizer = new wxFlexGridSizer (3);
929 if (theApp->getAdvancedOptions())
930 m_pRadioBoxFilter = new StringValueAndTitleRadioBox (this, _T("Filter"), SignalFilter::getFilterCount(), SignalFilter::getFilterTitleArray(), SignalFilter::getFilterNameArray());
932 m_pRadioBoxFilter = new StringValueAndTitleRadioBox (this, _T("Filter"), SignalFilter::getReconstructFilterCount(), SignalFilter::getFilterTitleArray(), SignalFilter::getFilterNameArray());
933 m_pRadioBoxFilter->SetSelection (iDefaultFilterID);
934 pGridSizer->Add (m_pRadioBoxFilter, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
936 if (theApp->getAdvancedOptions()) {
937 m_pRadioBoxFilterMethod = new StringValueAndTitleRadioBox (this, _T("Filter Method"), ProcessSignal::getFilterMethodCount(), ProcessSignal::getFilterMethodTitleArray(), ProcessSignal::getFilterMethodNameArray());
938 m_pRadioBoxFilterMethod->SetSelection (iDefaultFilterMethodID);
939 pGridSizer->Add (m_pRadioBoxFilterMethod, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
942 static const char* aszFilterMethodTitle[] = {"Convolution", "FFT"};
943 static const char* aszFilterMethodName[] = {"convolution", "rfftw"};
945 static const char* aszFilterMethodTitle[] = {"Convolution", "Fourier"};
946 static const char* aszFilterMethodName[] = {"convolution", "fourier-table"};
948 m_pRadioBoxFilterMethod = new StringValueAndTitleRadioBox (this, _T("Filter Method"), 2, aszFilterMethodTitle, aszFilterMethodName);
950 m_pRadioBoxFilterMethod->SetSelection (1);
952 m_pRadioBoxFilterMethod->SetSelection (0);
954 pGridSizer->Add (m_pRadioBoxFilterMethod, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
957 if (theApp->getAdvancedOptions()) {
958 m_pRadioBoxFilterGeneration = new StringValueAndTitleRadioBox (this, _T("Filter Generation"), ProcessSignal::getFilterGenerationCount(), ProcessSignal::getFilterGenerationTitleArray(), ProcessSignal::getFilterGenerationNameArray());
959 m_pRadioBoxFilterGeneration->SetSelection (iDefaultFilterGenerationID);
960 pGridSizer->Add (m_pRadioBoxFilterGeneration, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
962 m_pRadioBoxBackproject = new StringValueAndTitleRadioBox (this, _T("Backprojection"), Backprojector::getBackprojectCount(), Backprojector::getBackprojectTitleArray(), Backprojector::getBackprojectNameArray());
963 m_pRadioBoxBackproject->SetSelection (iDefaultBackprojectID);
964 pGridSizer->Add (m_pRadioBoxBackproject, 0, wxALL | wxALIGN_RIGHT | wxEXPAND);
967 m_pRadioBoxInterp = new StringValueAndTitleRadioBox (this, _T("Interpolation"), Backprojector::getInterpCount(), Backprojector::getInterpTitleArray(), Backprojector::getInterpNameArray());
968 m_pRadioBoxInterp->SetSelection (iDefaultInterpID);
969 pGridSizer->Add (m_pRadioBoxInterp, 0, wxALL | wxALIGN_RIGHT | wxEXPAND);
971 static const char* aszTraceTitle[] = {"None", "Full"};
972 static const char* aszTraceName[] = {"none", "full"};
973 m_pRadioBoxTrace = new StringValueAndTitleRadioBox (this, _T("Trace Level"), 2, aszTraceTitle, aszTraceName);
974 iTrace = clamp(iTrace, 0, 1);
975 m_pRadioBoxTrace->SetSelection (iTrace);
976 pGridSizer->Add (m_pRadioBoxTrace);
978 wxFlexGridSizer* pTextGridSizer = new wxFlexGridSizer (2);
980 sXSize << iDefaultXSize;
981 m_pTextCtrlXSize = new wxTextCtrl (this, -1, sXSize, wxDefaultPosition, wxSize(100, 25), 0);
982 pTextGridSizer->Add (new wxStaticText (this, -1, _T("X Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
983 pTextGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
985 sYSize << iDefaultYSize;
986 m_pTextCtrlYSize = new wxTextCtrl (this, -1, sYSize, wxDefaultPosition, wxSize(100, 25), 0);
987 pTextGridSizer->Add (new wxStaticText (this, -1, _T("Y Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
988 pTextGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
990 wxString sHammingParam;
991 sHammingParam << dDefaultHammingParam;
992 m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, sHammingParam, wxDefaultPosition, wxSize(100, 25), 0);
993 pTextGridSizer->Add (new wxStaticText (this, -1, _T("Hamming Parameter")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
994 pTextGridSizer->Add (m_pTextCtrlFilterParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
996 if (theApp->getAdvancedOptions()) {
998 sZeropad << iDefaultZeropad;
999 m_pTextCtrlZeropad = new wxTextCtrl (this, -1, sZeropad, wxDefaultPosition, wxSize(100, 25), 0);
1000 pTextGridSizer->Add (new wxStaticText (this, -1, _T("Zeropad")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1001 pTextGridSizer->Add (m_pTextCtrlZeropad, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1003 pGridSizer->Add (pTextGridSizer);
1005 #if HAVE_FREQ_PREINTERP
1006 wxString sInterpParam;
1007 sInterpParam << iDefaultInterpParam;
1008 m_pTextCtrlInterpParam = new wxTextCtrl (this, -1, sInterpParam, wxDefaultPosition, wxSize(100, 25), 0);
1009 pGridSizer->Add (new wxStaticText (this, -1, _T("Interpolation Parameter")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1010 pGridSizer->Add (m_pTextCtrlInterpParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1013 if (theApp->getAdvancedOptions()) {
1014 wxFlexGridSizer* pROIGridSizer = new wxFlexGridSizer (2);
1016 sRoiXMin << m_dDefaultRoiXMin;
1017 m_pTextCtrlRoiXMin = new wxTextCtrl (this, -1, sRoiXMin, wxDefaultPosition, wxSize(100, 25), 0);
1018 pROIGridSizer->Add (new wxStaticText (this, -1, _T("ROI XMin")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1019 pROIGridSizer->Add (m_pTextCtrlRoiXMin, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1021 sRoiXMax << m_dDefaultRoiXMax;
1022 m_pTextCtrlRoiXMax = new wxTextCtrl (this, -1, sRoiXMax, wxDefaultPosition, wxSize(100, 25), 0);
1023 pROIGridSizer->Add (new wxStaticText (this, -1, _T("ROI XMax")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1024 pROIGridSizer->Add (m_pTextCtrlRoiXMax, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1026 sRoiYMin << m_dDefaultRoiYMin;
1027 m_pTextCtrlRoiYMin = new wxTextCtrl (this, -1, sRoiYMin, wxDefaultPosition, wxSize(100, 25), 0);
1028 pROIGridSizer->Add (new wxStaticText (this, -1, _T("ROI YMin")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1029 pROIGridSizer->Add (m_pTextCtrlRoiYMin, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1031 sRoiYMax << m_dDefaultRoiYMax;
1032 m_pTextCtrlRoiYMax = new wxTextCtrl (this, -1, sRoiYMax, wxDefaultPosition, wxSize(100, 25), 0);
1033 pROIGridSizer->Add (new wxStaticText (this, -1, _T("ROI YMax")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1034 pROIGridSizer->Add (m_pTextCtrlRoiYMax, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1036 pGridSizer->Add (pROIGridSizer);
1039 pTopSizer->Add (pGridSizer, 1, wxALL, 3);
1041 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1043 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1044 wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
1045 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1046 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
1047 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1048 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_RECONSTRUCTION);
1049 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
1051 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1052 pButtonOk->SetDefault();
1054 SetAutoLayout (true);
1055 SetSizer (pTopSizer);
1056 pTopSizer->Layout();
1057 pTopSizer->Fit (this);
1058 pTopSizer->SetSizeHints (this);
1061 DialogGetReconstructionParameters::~DialogGetReconstructionParameters ()
1067 DialogGetReconstructionParameters::getXSize ()
1069 wxString strCtrl = m_pTextCtrlXSize->GetValue();
1070 unsigned long lValue;
1071 if (strCtrl.ToULong (&lValue))
1074 return (m_iDefaultXSize);
1078 DialogGetReconstructionParameters::getYSize ()
1080 wxString strCtrl = m_pTextCtrlYSize->GetValue();
1081 unsigned long lValue;
1082 if (strCtrl.ToULong (&lValue))
1085 return (m_iDefaultYSize);
1089 DialogGetReconstructionParameters::getZeropad ()
1091 if (theApp->getAdvancedOptions()) {
1092 wxString strCtrl = m_pTextCtrlZeropad->GetValue();
1093 unsigned long lValue;
1094 if (strCtrl.ToULong (&lValue))
1097 return (m_iDefaultZeropad);
1104 DialogGetReconstructionParameters::getInterpParam ()
1106 #if HAVE_FREQ_PREINTERP
1107 wxString strCtrl = m_pTextCtrlInterpParam->GetValue();
1108 unsigned long lValue;
1109 if (strCtrl.ToULong (&lValue))
1112 return (m_iDefaultInterpParam);
1119 DialogGetReconstructionParameters::getFilterParam ()
1121 wxString strCtrl = m_pTextCtrlFilterParam->GetValue();
1123 if (strCtrl.ToDouble (&dValue))
1126 return (m_dDefaultFilterParam);
1130 DialogGetReconstructionParameters::getFilterName ()
1132 return m_pRadioBoxFilter->getSelectionStringValue();
1136 DialogGetReconstructionParameters::getFilterMethodName ()
1138 return m_pRadioBoxFilterMethod->getSelectionStringValue();
1142 DialogGetReconstructionParameters::getInterpName ()
1144 return m_pRadioBoxInterp->getSelectionStringValue();
1148 DialogGetReconstructionParameters::getTrace ()
1151 if (strcmp("full", m_pRadioBoxTrace->getSelectionStringValue()) == 0)
1152 iTrace = Trace::TRACE_PLOT;
1157 DialogGetReconstructionParameters::getBackprojectName ()
1159 if (theApp->getAdvancedOptions()) {
1160 return m_pRadioBoxBackproject->getSelectionStringValue();
1166 DialogGetReconstructionParameters::getFilterGenerationName ()
1168 if (theApp->getAdvancedOptions()) {
1169 return m_pRadioBoxFilterGeneration->getSelectionStringValue();
1171 if (ProcessSignal::convertFilterMethodNameToID(m_pRadioBoxFilterMethod->getSelectionStringValue())
1172 == ProcessSignal::FILTER_METHOD_CONVOLUTION)
1175 return "inverse-fourier";
1180 DialogGetReconstructionParameters::getROI (ReconstructionROI* pROI)
1182 if (theApp->getAdvancedOptions()) {
1184 if (m_pTextCtrlRoiXMin->GetValue().ToDouble (&dValue))
1185 pROI->m_dXMin = dValue;
1187 pROI->m_dXMin = m_dDefaultRoiXMin;
1189 if (m_pTextCtrlRoiXMax->GetValue().ToDouble (&dValue))
1190 pROI->m_dXMax = dValue;
1192 pROI->m_dXMax = m_dDefaultRoiXMax;
1194 if (m_pTextCtrlRoiYMin->GetValue().ToDouble (&dValue))
1195 pROI->m_dYMin = dValue;
1197 pROI->m_dYMin = m_dDefaultRoiYMin;
1199 if (m_pTextCtrlRoiYMax->GetValue().ToDouble (&dValue))
1200 pROI->m_dYMax = dValue;
1202 pROI->m_dYMax = m_dDefaultRoiYMax;
1204 pROI->m_dXMin = m_dDefaultRoiXMin;
1205 pROI->m_dXMax = m_dDefaultRoiXMax;
1206 pROI->m_dYMin = m_dDefaultRoiYMin;
1207 pROI->m_dYMax = m_dDefaultRoiYMax;
1211 /////////////////////////////////////////////////////////////////////
1212 // CLASS IDENTIFICATION
1214 // DialogGetFilterParameters
1215 /////////////////////////////////////////////////////////////////////
1219 DialogGetFilterParameters::DialogGetFilterParameters (wxWindow* pParent, int iDefaultXSize, int iDefaultYSize, int iDefaultFilterID, double dDefaultFilterParam, double dDefaultBandwidth, int iDefaultDomainID, double dDefaultInputScale, double dDefaultOutputScale)
1220 : wxDialog (pParent, -1, _T("Filter Parameters"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1222 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1224 pTopSizer->Add (new wxStaticText (this, -1, _T("Filter Parameters")), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
1225 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1227 wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (2);
1229 m_pRadioBoxFilter = new StringValueAndTitleRadioBox (this, _T("Filter"), SignalFilter::getFilterCount(), SignalFilter::getFilterTitleArray(), SignalFilter::getFilterNameArray());
1230 m_pRadioBoxFilter->SetSelection (iDefaultFilterID);
1231 pGridSizer->Add (m_pRadioBoxFilter, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
1233 m_pRadioBoxDomain = new StringValueAndTitleRadioBox (this, _T("Domain"), SignalFilter::getDomainCount(), SignalFilter::getDomainTitleArray(), SignalFilter::getDomainNameArray());
1234 m_pRadioBoxDomain->SetSelection (iDefaultDomainID);
1235 pGridSizer->Add (m_pRadioBoxDomain, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
1238 sXSize << iDefaultXSize;
1239 m_pTextCtrlXSize = new wxTextCtrl (this, -1, sXSize, wxDefaultPosition, wxSize(100, 25), 0);
1240 pGridSizer->Add (new wxStaticText (this, -1, _T("X Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1241 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1244 sYSize << iDefaultYSize;
1245 m_pTextCtrlYSize = new wxTextCtrl (this, -1, sYSize, wxDefaultPosition, wxSize(100, 25), 0);
1246 pGridSizer->Add (new wxStaticText (this, -1, _T("Y Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1247 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1249 wxString sFilterParam;
1250 sFilterParam << dDefaultFilterParam;
1251 m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, sFilterParam, wxDefaultPosition, wxSize(100, 25), 0);
1252 pGridSizer->Add (new wxStaticText (this, -1, _T("Filter Parameter")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1253 pGridSizer->Add (m_pTextCtrlFilterParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1255 wxString sBandwidth;
1256 sBandwidth << dDefaultBandwidth;
1257 m_pTextCtrlBandwidth = new wxTextCtrl (this, -1, sBandwidth, wxDefaultPosition, wxSize(100, 25), 0);
1258 pGridSizer->Add (new wxStaticText (this, -1, _T("Bandwidth")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1259 pGridSizer->Add (m_pTextCtrlBandwidth, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1261 wxString sInputScale;
1262 sInputScale << dDefaultInputScale;
1263 m_pTextCtrlInputScale = new wxTextCtrl (this, -1, sInputScale, wxDefaultPosition, wxSize(100, 25), 0);
1264 pGridSizer->Add (new wxStaticText (this, -1, _T("Axis (input) Scale")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1265 pGridSizer->Add (m_pTextCtrlInputScale, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1267 wxString sOutputScale;
1268 sOutputScale << dDefaultOutputScale;
1269 m_pTextCtrlOutputScale = new wxTextCtrl (this, -1, sOutputScale, wxDefaultPosition, wxSize(100, 25), 0);
1270 pGridSizer->Add (new wxStaticText (this, -1, _T("Filter Output Scale")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1271 pGridSizer->Add (m_pTextCtrlOutputScale, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1273 pTopSizer->Add (pGridSizer, 1, wxALL, 3);
1275 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1277 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1278 wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
1279 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1280 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
1281 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1282 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_FILTER);
1283 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
1285 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1286 pButtonOk->SetDefault();
1288 SetAutoLayout (true);
1289 SetSizer (pTopSizer);
1290 pTopSizer->Layout();
1291 pTopSizer->Fit (this);
1292 pTopSizer->SetSizeHints (this);
1295 DialogGetFilterParameters::~DialogGetFilterParameters ()
1301 DialogGetFilterParameters::getXSize ()
1303 wxString strCtrl = m_pTextCtrlXSize->GetValue();
1304 unsigned long lValue;
1305 if (strCtrl.ToULong (&lValue))
1308 return (m_iDefaultXSize);
1312 DialogGetFilterParameters::getYSize ()
1314 wxString strCtrl = m_pTextCtrlYSize->GetValue();
1315 unsigned long lValue;
1316 if (strCtrl.ToULong (&lValue))
1319 return (m_iDefaultYSize);
1323 DialogGetFilterParameters::getBandwidth ()
1325 wxString strCtrl = m_pTextCtrlBandwidth->GetValue();
1327 if (strCtrl.ToDouble (&dValue))
1330 return (m_dDefaultBandwidth);
1334 DialogGetFilterParameters::getFilterParam ()
1336 wxString strCtrl = m_pTextCtrlFilterParam->GetValue();
1338 if (strCtrl.ToDouble (&dValue))
1341 return (m_dDefaultFilterParam);
1345 DialogGetFilterParameters::getInputScale ()
1347 wxString strCtrl = m_pTextCtrlInputScale->GetValue();
1349 if (strCtrl.ToDouble (&dValue))
1352 return (m_dDefaultInputScale);
1356 DialogGetFilterParameters::getOutputScale ()
1358 wxString strCtrl = m_pTextCtrlOutputScale->GetValue();
1360 if (strCtrl.ToDouble (&dValue))
1363 return (m_dDefaultOutputScale);
1367 DialogGetFilterParameters::getFilterName ()
1369 return m_pRadioBoxFilter->getSelectionStringValue();
1373 DialogGetFilterParameters::getDomainName ()
1375 return m_pRadioBoxDomain->getSelectionStringValue();
1379 ///////////////////////////////////////////////////////////////////////
1380 // CLASS IMPLEMENTATION
1381 // DialogExportParameters
1382 ///////////////////////////////////////////////////////////////////////
1384 DialogExportParameters::DialogExportParameters (wxWindow* pParent, int iDefaultFormatID)
1385 : wxDialog (pParent, -1, _T("Select ExportParameters"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1387 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1389 pTopSizer->Add (new wxStaticText (this, -1, _T("Select Export Format")), 0, wxALIGN_CENTER | wxALL, 5);
1391 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5);
1393 m_pRadioBoxFormat = new StringValueAndTitleRadioBox (this, _T("File Type"),
1394 ImageFile::getExportFormatCount(), ImageFile::getExportFormatTitleArray(), ImageFile::getExportFormatNameArray());
1395 m_pRadioBoxFormat->SetSelection (iDefaultFormatID);
1396 pTopSizer->Add (m_pRadioBoxFormat, 0, wxALL | wxALIGN_CENTER);
1398 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1400 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1401 wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
1402 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1403 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
1404 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1405 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_EXPORT);
1406 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
1408 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1409 pButtonOk->SetDefault();
1411 SetAutoLayout (true);
1412 SetSizer (pTopSizer);
1413 pTopSizer->Fit (this);
1414 pTopSizer->SetSizeHints (this);
1418 DialogExportParameters::getFormatName()
1420 return m_pRadioBoxFormat->getSelectionStringValue();
1424 ///////////////////////////////////////////////////////////////////////
1425 // CLASS IMPLEMENTATION
1426 // DialogImportParameters
1427 ///////////////////////////////////////////////////////////////////////
1429 DialogImportParameters::DialogImportParameters (wxWindow* pParent, int iDefaultFormatID)
1430 : wxDialog (pParent, -1, _T("Select Import Parameters"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1432 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1434 pTopSizer->Add (new wxStaticText (this, -1, _T("Select Import Format")), 0, wxALIGN_CENTER | wxALL, 5);
1436 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5);
1438 m_pRadioBoxFormat = new StringValueAndTitleRadioBox (this, _T("File Type"),
1439 ImageFile::getImportFormatCount(), ImageFile::getImportFormatTitleArray(), ImageFile::getImportFormatNameArray());
1440 m_pRadioBoxFormat->SetSelection (iDefaultFormatID);
1441 pTopSizer->Add (m_pRadioBoxFormat, 0, wxALL | wxALIGN_CENTER);
1443 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1445 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1446 wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
1447 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1448 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
1449 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1450 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_IMPORT);
1451 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
1453 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1454 pButtonOk->SetDefault();
1456 SetAutoLayout (true);
1457 SetSizer (pTopSizer);
1458 pTopSizer->Fit (this);
1459 pTopSizer->SetSizeHints (this);
1463 DialogImportParameters::getFormatName()
1465 return m_pRadioBoxFormat->getSelectionStringValue();
1469 /////////////////////////////////////////////////////////////////////
1470 // CLASS DiaglogGetXYSize Implementation
1471 /////////////////////////////////////////////////////////////////////
1473 DialogGetXYSize::DialogGetXYSize (wxWindow* pParent, wxChar const * pwszTitle, int iDefaultXSize, int iDefaultYSize)
1474 : wxDialog (pParent, -1, pwszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1476 m_iDefaultXSize = iDefaultXSize;
1477 m_iDefaultYSize = iDefaultYSize;
1479 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1481 pTopSizer->Add (new wxStaticText (this, -1, pwszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
1483 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1486 sXSize << iDefaultXSize;
1487 m_pTextCtrlXSize = new wxTextCtrl (this, -1, sXSize, wxDefaultPosition, wxSize(100, 25), 0);
1489 sYSize << iDefaultYSize;
1490 m_pTextCtrlYSize = new wxTextCtrl (this, -1, sYSize, wxDefaultPosition, wxSize(100, 25), 0);
1492 wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
1493 pGridSizer->Add (new wxStaticText (this, -1, _T("X Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1494 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_CENTER_VERTICAL);
1495 pGridSizer->Add (new wxStaticText (this, -1, _T("Y Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1496 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_CENTER_VERTICAL);
1497 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
1499 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1501 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1502 wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
1503 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1504 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
1505 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1507 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1508 pButtonOk->SetDefault();
1510 SetAutoLayout (true);
1511 SetSizer (pTopSizer);
1512 pTopSizer->Fit (this);
1513 pTopSizer->SetSizeHints (this);
1516 DialogGetXYSize::~DialogGetXYSize ()
1521 DialogGetXYSize::getXSize ()
1523 wxString strCtrl = m_pTextCtrlXSize->GetValue();
1525 if (strCtrl.ToLong (&lValue))
1528 return (m_iDefaultXSize);
1532 DialogGetXYSize::getYSize ()
1534 wxString strCtrl = m_pTextCtrlYSize->GetValue();
1536 if (strCtrl.ToLong (&lValue))
1539 return (m_iDefaultYSize);
1544 /////////////////////////////////////////////////////////////////////
1545 // CLASS IDENTIFICATION
1547 // DialogGetConvertPolarParameters
1548 /////////////////////////////////////////////////////////////////////
1550 DialogGetConvertPolarParameters::DialogGetConvertPolarParameters (wxWindow* pParent, wxChar const * pwszTitle,
1551 int iDefaultXSize, int iDefaultYSize, int iDefaultInterpolationID, int iDefaultZeropad, int iHelpID)
1552 : wxDialog (pParent, -1, pwszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1554 m_iDefaultXSize = iDefaultXSize;
1555 m_iDefaultYSize = iDefaultYSize;
1556 m_iDefaultZeropad = iDefaultZeropad;
1558 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1560 pTopSizer->Add (new wxStaticText (this, -1, pwszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
1561 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1563 wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (1);
1565 m_pRadioBoxInterpolation = new StringValueAndTitleRadioBox (this, _T("Interpolation"), Projections::getInterpCount(), Projections::getInterpTitleArray(), Projections::getInterpNameArray());
1566 m_pRadioBoxInterpolation->SetSelection (iDefaultInterpolationID);
1567 pGridSizer->Add (m_pRadioBoxInterpolation, 0, wxALL | wxALIGN_CENTER);
1569 wxFlexGridSizer* pTextGridSizer = new wxFlexGridSizer (2);
1571 sXSize << iDefaultXSize;
1572 m_pTextCtrlXSize = new wxTextCtrl (this, -1, sXSize, wxDefaultPosition, wxSize(100, 25), 0);
1573 pTextGridSizer->Add (new wxStaticText (this, -1, _T("X Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1574 pTextGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1576 sYSize << iDefaultYSize;
1577 m_pTextCtrlYSize = new wxTextCtrl (this, -1, sYSize, wxDefaultPosition, wxSize(100, 25), 0);
1578 pTextGridSizer->Add (new wxStaticText (this, -1, _T("Y Size")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1579 pTextGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1580 if (m_iDefaultZeropad >= 0) {
1582 sZeropad << iDefaultZeropad;
1583 m_pTextCtrlZeropad = new wxTextCtrl (this, -1, sZeropad, wxDefaultPosition, wxSize(100, 25), 0);
1584 pTextGridSizer->Add (new wxStaticText (this, -1, _T("Zeropad")), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1585 pTextGridSizer->Add (m_pTextCtrlZeropad, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1588 pGridSizer->Add (pTextGridSizer, 0, wxALIGN_CENTER | wxALL);
1590 pTopSizer->Add (pGridSizer, 1, wxALL | wxALIGN_CENTER, 3);
1592 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1594 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1595 wxButton* pButtonOk = new wxButton (this, wxID_OK, _T("Okay"));
1596 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1597 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, _T("Cancel"));
1598 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1599 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, iHelpID);
1600 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
1602 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1603 pButtonOk->SetDefault();
1604 SetAutoLayout (true);
1605 SetSizer (pTopSizer);
1606 pTopSizer->Layout();
1607 pTopSizer->Fit (this);
1608 pTopSizer->SetSizeHints (this);
1612 DialogGetConvertPolarParameters::~DialogGetConvertPolarParameters ()
1618 DialogGetConvertPolarParameters::getXSize ()
1620 wxString strCtrl = m_pTextCtrlXSize->GetValue();
1621 unsigned long lValue;
1622 if (strCtrl.ToULong (&lValue))
1625 return (m_iDefaultXSize);
1629 DialogGetConvertPolarParameters::getYSize ()
1631 wxString strCtrl = m_pTextCtrlYSize->GetValue();
1632 unsigned long lValue;
1633 if (strCtrl.ToULong (&lValue))
1636 return (m_iDefaultYSize);
1640 DialogGetConvertPolarParameters::getZeropad ()
1642 if (m_iDefaultZeropad >= 0) {
1643 wxString strCtrl = m_pTextCtrlZeropad->GetValue();
1644 unsigned long lValue;
1645 if (strCtrl.ToULong (&lValue))
1648 return (m_iDefaultZeropad);
1654 DialogGetConvertPolarParameters::getInterpolationName ()
1656 return m_pRadioBoxInterpolation->getSelectionStringValue();