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-2001 Kevin Rosenberg
12 ** $Id: dialogs.cpp,v 1.58 2003/01/23 23:35:58 kevin Exp $
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.
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.
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 ******************************************************************************/
28 #include "wx/wxprec.h"
34 #if !wxUSE_DOC_VIEW_ARCHITECTURE
35 #error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h!
38 #include "wx/statline.h"
45 #include "imagefile.h"
46 #include "projections.h"
48 #if defined(MSVC) || HAVE_SSTREAM
51 #include <sstream_subst>
55 ///////////////////////////////////////////////////////////////////////
56 // CLASS IMPLEMENTATION
57 // StringValueAndTitleListBox
58 ///////////////////////////////////////////////////////////////////////
60 StringValueAndTitleListBox::StringValueAndTitleListBox (wxDialog* pParent, int nChoices, const char* const aszTitle[], const char* const aszValue[])
63 wxString* psTitle = new wxString [nChoices];
64 for (int i = 0; i < nChoices; i++)
65 psTitle[i] = aszTitle[i];
67 Create (pParent, -1, wxDefaultPosition, wxSize(-1,-1), nChoices, psTitle, wxLB_SINGLE | wxLB_NEEDED_SB);
69 m_ppszValues = aszValue;
74 StringValueAndTitleListBox::getSelectionStringValue () const
76 return m_ppszValues[GetSelection()];
79 StringValueAndTitleRadioBox::StringValueAndTitleRadioBox (wxDialog* pParent, const wxString& strTitle, int nChoices, const char* const aszTitle[], const char* const aszValue[])
82 wxString* psTitle = new wxString [nChoices];
83 for (int i = 0; i < nChoices; i++)
84 psTitle[i] = aszTitle[i];
86 Create (pParent, -1, strTitle, wxDefaultPosition, wxDefaultSize, nChoices, psTitle, 1, wxRA_SPECIFY_COLS);
88 m_ppszValues = aszValue;
93 StringValueAndTitleRadioBox::getSelectionStringValue () const
95 return m_ppszValues[GetSelection()];
98 ///////////////////////////////////////////////////////////////////////
99 // CLASS IMPLEMENTATION
101 ///////////////////////////////////////////////////////////////////////
103 DialogGetPhantom::DialogGetPhantom (wxWindow* pParent, int iDefaultPhantom)
104 : wxDialog (pParent, -1, _T("Select Phantom"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
106 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
108 pTopSizer->Add (new wxStaticText (this, -1, "Select Phantom"), 0, wxCENTER | wxALL, 5);
110 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
112 m_pRadioBoxPhantom = new StringValueAndTitleRadioBox (this, _T("Phantom"), Phantom::getPhantomCount(), Phantom::getPhantomTitleArray(), Phantom::getPhantomNameArray());
113 m_pRadioBoxPhantom->SetSelection (iDefaultPhantom);
114 pTopSizer->Add (m_pRadioBoxPhantom, 0, wxALL | wxALIGN_CENTER);
116 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
118 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
119 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
120 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
121 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
122 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
123 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_PHANTOM);
124 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
126 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
127 pButtonOk->SetDefault();
129 SetAutoLayout (true);
130 SetSizer (pTopSizer);
131 pTopSizer->Fit (this);
132 pTopSizer->SetSizeHints (this);
136 DialogGetPhantom::getPhantom()
138 return m_pRadioBoxPhantom->getSelectionStringValue();
142 ///////////////////////////////////////////////////////////////////////
143 // CLASS IMPLEMENTATION
144 // DialogGetThetaRange
145 ///////////////////////////////////////////////////////////////////////
147 DialogGetThetaRange::DialogGetThetaRange (wxWindow* pParent, int iDefaultThetaRange)
148 : wxDialog (pParent, -1, _T("Select Phantom"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
150 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
152 pTopSizer->Add (new wxStaticText (this, -1, "Select Theta Range"), 0, wxCENTER | wxALL, 5);
154 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
156 wxString asTitle[] = {"Unconstrained", "Normalized to 2pi", "Fold to pi"};
158 m_pRadioBoxThetaRange = new wxRadioBox (this, -1, _T("Theta Range"), wxDefaultPosition, wxDefaultSize, 3, asTitle, 1, wxRA_SPECIFY_COLS);
159 if (iDefaultThetaRange == ParallelRaysums::THETA_RANGE_UNCONSTRAINED)
160 m_pRadioBoxThetaRange->SetSelection (0);
161 else if (iDefaultThetaRange == ParallelRaysums::THETA_RANGE_NORMALIZE_TO_TWOPI)
162 m_pRadioBoxThetaRange->SetSelection (1);
163 else if (iDefaultThetaRange == ParallelRaysums::THETA_RANGE_FOLD_TO_PI)
164 m_pRadioBoxThetaRange->SetSelection (2);
166 pTopSizer->Add (m_pRadioBoxThetaRange, 0, wxALL | wxALIGN_CENTER);
168 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
170 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
171 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
172 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
173 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
174 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
175 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_THETA_RANGE);
176 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
178 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
179 pButtonOk->SetDefault();
181 SetAutoLayout (true);
182 SetSizer (pTopSizer);
183 pTopSizer->Fit (this);
184 pTopSizer->SetSizeHints (this);
188 DialogGetThetaRange::getThetaRange()
190 int iSelection = m_pRadioBoxThetaRange->GetSelection();
192 return ParallelRaysums::THETA_RANGE_UNCONSTRAINED;
193 else if (iSelection == 1)
194 return ParallelRaysums::THETA_RANGE_NORMALIZE_TO_TWOPI;
196 return ParallelRaysums::THETA_RANGE_FOLD_TO_PI;
200 ///////////////////////////////////////////////////////////////////////
201 // CLASS IMPLEMENTATION
202 // DialogGetComparisonImage
203 ///////////////////////////////////////////////////////////////////////
205 DialogGetComparisonImage::DialogGetComparisonImage (wxWindow* pParent, const char* const pszTitle, const std::vector<ImageFileDocument*>& rVecIF, bool bShowMakeDifference)
206 : wxDialog (pParent, -1, pszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION), m_rVecIF(rVecIF)
208 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
210 pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxALL, 5);
212 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5);
214 int iNImages = m_rVecIF.size();
215 wxString* pstrImages = new wxString [iNImages];
216 for (int i = 0; i < iNImages; i++) {
217 ImageFileView* pView = dynamic_cast<ImageFileView*>(m_rVecIF[i]->GetFirstView());
219 pstrImages[i] = pView->getFrame()->GetTitle();
222 m_pListBoxImageChoices = new wxListBox (this, -1, wxDefaultPosition, wxDefaultSize, iNImages, pstrImages, wxLB_SINGLE);
223 delete [] pstrImages;
225 m_pListBoxImageChoices->SetSelection (0);
226 pTopSizer->Add (m_pListBoxImageChoices, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
228 if (bShowMakeDifference) {
229 m_pMakeDifferenceImage = new wxCheckBox (this, -1, "Make Difference Image");
230 m_pMakeDifferenceImage->SetValue (FALSE);
231 pTopSizer->Add (m_pMakeDifferenceImage, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
233 m_pMakeDifferenceImage = NULL;
235 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
237 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
238 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
239 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
240 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
241 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
242 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_COMPARISON);
243 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
245 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
246 pButtonOk->SetDefault();
248 SetAutoLayout (true);
249 SetSizer (pTopSizer);
250 pTopSizer->Fit (this);
251 pTopSizer->SetSizeHints (this);
255 DialogGetComparisonImage::getImageFileDocument()
257 return m_rVecIF[ m_pListBoxImageChoices->GetSelection() ];
261 DialogGetComparisonImage::getMakeDifferenceImage()
263 if (m_pMakeDifferenceImage)
264 return m_pMakeDifferenceImage->GetValue();
270 /////////////////////////////////////////////////////////////////////
271 // CLASS DiaglogPreferences Implementation
272 /////////////////////////////////////////////////////////////////////
274 DialogPreferences::DialogPreferences (wxWindow* pParent, const char* const pszTitle,
275 bool bAdvancedOptions, bool bAskDeleteNewDocs, bool bVerboseLogging, bool bStartupTips, bool bUseBackgroundTasks)
276 : wxDialog (pParent, -1, _T(pszTitle), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
278 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
280 pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
282 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
284 m_pCBAdvancedOptions = new wxCheckBox (this, -1, "Advanced Options", wxDefaultPosition, wxSize(250, 25), 0);
285 m_pCBAdvancedOptions->SetValue (bAdvancedOptions);
286 pTopSizer->Add (m_pCBAdvancedOptions, 0, wxALIGN_CENTER_VERTICAL);
288 m_pCBAskDeleteNewDocs = new wxCheckBox (this, -1, "Ask \"Save New Documents\" Before Closing", wxDefaultPosition, wxSize(250, 25), 0);
289 m_pCBAskDeleteNewDocs->SetValue (bAskDeleteNewDocs);
290 pTopSizer->Add (m_pCBAskDeleteNewDocs, 0, wxALIGN_CENTER_VERTICAL);
292 m_pCBVerboseLogging = new wxCheckBox (this, -1, "Verbose Logging", wxDefaultPosition, wxSize(250, 25), 0);
293 m_pCBVerboseLogging->SetValue (bVerboseLogging);
294 pTopSizer->Add (m_pCBVerboseLogging, 0, wxALIGN_CENTER_VERTICAL);
296 m_pCBStartupTips = new wxCheckBox (this, -1, "Show Tips at Start", wxDefaultPosition, wxSize(250, 25), 0);
297 m_pCBStartupTips->SetValue (bStartupTips);
298 pTopSizer->Add (m_pCBStartupTips, 0, wxALIGN_CENTER_VERTICAL);
300 #if HAVE_WXTHREADS && MSVC
301 m_pCBUseBackgroundTasks = new wxCheckBox (this, -1, "Put Tasks in Background", wxDefaultPosition, wxSize(250, 25), 0);
302 m_pCBUseBackgroundTasks->SetValue (bUseBackgroundTasks);
303 pTopSizer->Add (m_pCBUseBackgroundTasks, 0, wxALIGN_CENTER_VERTICAL);
306 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
308 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
309 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
310 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
311 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
312 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
313 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_PREFERENCES);
314 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
316 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
317 pButtonOk->SetDefault();
319 SetAutoLayout (true);
320 SetSizer (pTopSizer);
321 pTopSizer->Fit (this);
322 pTopSizer->SetSizeHints (this);
325 DialogPreferences::~DialogPreferences ()
330 DialogPreferences::getAdvancedOptions ()
332 return static_cast<bool>(m_pCBAdvancedOptions->GetValue());
336 DialogPreferences::getAskDeleteNewDocs ()
338 return static_cast<bool>(m_pCBAskDeleteNewDocs->GetValue());
342 DialogPreferences::getVerboseLogging ()
344 return static_cast<bool>(m_pCBVerboseLogging->GetValue());
348 DialogPreferences::getStartupTips ()
350 return static_cast<bool>(m_pCBStartupTips->GetValue());
354 DialogPreferences::getUseBackgroundTasks ()
356 #if HAVE_WXTHREADS && MSVC
357 return static_cast<bool>(m_pCBUseBackgroundTasks->GetValue());
364 /////////////////////////////////////////////////////////////////////
365 // CLASS DiaglogGetMinMax Implementation
366 /////////////////////////////////////////////////////////////////////
368 DialogGetMinMax::DialogGetMinMax (wxWindow* pParent, const char* const pszTitle, double dDefaultMin, double dDefaultMax)
369 : wxDialog (pParent, -1, _T(pszTitle), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
371 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
373 pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
375 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
377 std::ostringstream os;
379 m_pTextCtrlMin = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
380 std::ostringstream osMax;
381 osMax << dDefaultMax;
382 m_pTextCtrlMax = new wxTextCtrl (this, -1, osMax.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
384 wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
385 pGridSizer->Add (new wxStaticText (this, -1, "Minimum"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
386 pGridSizer->Add (m_pTextCtrlMin, 0, wxALIGN_CENTER_VERTICAL);
387 pGridSizer->Add (new wxStaticText (this, -1, "Maximum"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
388 pGridSizer->Add (m_pTextCtrlMax, 0, wxALIGN_CENTER_VERTICAL);
389 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
391 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
393 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
394 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
395 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
396 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
397 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
398 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_MINMAX);
399 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
401 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
402 pButtonOk->SetDefault();
404 SetAutoLayout (true);
405 SetSizer (pTopSizer);
406 pTopSizer->Fit (this);
407 pTopSizer->SetSizeHints (this);
410 DialogGetMinMax::~DialogGetMinMax ()
415 DialogGetMinMax::getMinimum ()
417 wxString strCtrl = m_pTextCtrlMin->GetValue();
419 if (strCtrl.ToDouble (&dValue))
422 return (m_dDefaultMin);
426 DialogGetMinMax::getMaximum ()
428 wxString strCtrl = m_pTextCtrlMax->GetValue();
430 if (strCtrl.ToDouble (&dValue))
433 return (m_dDefaultMax);
437 /////////////////////////////////////////////////////////////////////
438 // CLASS DialogAutoScaleParameters IMPLEMENTATION
439 /////////////////////////////////////////////////////////////////////
441 DialogAutoScaleParameters::DialogAutoScaleParameters (wxWindow *pParent, double mean, double mode, double median, double stddev, double dDefaultScaleFactor)
442 : 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)
444 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
446 pTopSizer->Add (new wxStaticText (this, -1, "Auto Scale Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
448 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
450 wxString asTitle[] = {"Mode", "Median", "Mean"};
452 m_pRadioBoxCenter = new wxRadioBox (this, -1, _T("Center"), wxDefaultPosition, wxDefaultSize, 3, asTitle, 1, wxRA_SPECIFY_COLS);
453 m_pRadioBoxCenter->SetSelection (0);
454 pTopSizer->Add (m_pRadioBoxCenter, 0, wxALL | wxALIGN_CENTER);
456 wxGridSizer *pGridSizer = new wxGridSizer (2);
457 pGridSizer->Add (new wxStaticText (this, -1, "Standard Deviation Factor"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
458 std::ostringstream osDefaultFactor;
459 osDefaultFactor << dDefaultScaleFactor;
460 m_pTextCtrlStdDevFactor = new wxTextCtrl (this, -1, osDefaultFactor.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
461 pGridSizer->Add (m_pTextCtrlStdDevFactor, 0, wxALIGN_CENTER_VERTICAL);
462 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
464 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
466 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
467 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
468 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
469 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
470 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
471 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_AUTOSCALE);
472 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
474 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
475 pButtonOk->SetDefault();
477 SetAutoLayout (true);
478 SetSizer (pTopSizer);
479 pTopSizer->Fit (this);
480 pTopSizer->SetSizeHints (this);
484 DialogAutoScaleParameters::getMinMax (double* pMin, double* pMax)
486 int iCenter = m_pRadioBoxCenter->GetSelection();
487 double dCenter = m_dMode;
490 else if (iCenter == 2)
493 wxString sStddevFactor = m_pTextCtrlStdDevFactor->GetValue();
495 if (! sStddevFactor.ToDouble (&dValue)) {
496 *theApp->getLog() << "Error: Non-numeric Standard Deviation Factor of " << sStddevFactor << "\n";
499 double dHalfWidth = dValue * m_dStdDev / 2;
500 *pMin = dCenter - dHalfWidth;
501 *pMax = dCenter + dHalfWidth;
502 *theApp->getLog() << "Setting minimum to " << *pMin << " and maximum to " << *pMax << "\n";
508 DialogAutoScaleParameters::getAutoScaleFactor ()
510 wxString sStddevFactor = m_pTextCtrlStdDevFactor->GetValue();
512 if (! sStddevFactor.ToDouble (&dValue)) {
513 *theApp->getLog() << "Error: Non-numeric Standard Deviation Factor of " << sStddevFactor << "\n";
521 /////////////////////////////////////////////////////////////////////
522 // CLASS IDENTIFICATION
524 // DialogGetRasterParameters
525 /////////////////////////////////////////////////////////////////////
527 DialogGetRasterParameters::DialogGetRasterParameters
528 (wxWindow* pParent, int iDefaultXSize, int iDefaultYSize, int iDefaultNSamples, double dDefaultViewRatio)
529 : wxDialog (pParent, -1, _T("Rasterization Parameters"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
531 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
533 pTopSizer->Add (new wxStaticText (this, -1, "Rasterization Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
535 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
537 wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
538 std::ostringstream os;
540 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
541 pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
542 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_CENTER_VERTICAL);
543 std::ostringstream osYSize;
544 osYSize << iDefaultYSize;
545 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
546 pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
547 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_CENTER_VERTICAL);
548 std::ostringstream osViewRatio;
549 osViewRatio << dDefaultViewRatio;
550 m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, osViewRatio.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
551 pGridSizer->Add (new wxStaticText (this, -1, "View Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
552 pGridSizer->Add (m_pTextCtrlViewRatio, 0, wxALIGN_CENTER_VERTICAL);
553 std::ostringstream osNSamples;
554 osNSamples << iDefaultNSamples;
555 m_pTextCtrlNSamples = new wxTextCtrl (this, -1, osNSamples.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
556 pGridSizer->Add (new wxStaticText (this, -1, "Samples per Pixel"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
557 pGridSizer->Add (m_pTextCtrlNSamples, 0, wxALIGN_CENTER_VERTICAL);
559 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
561 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
563 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
564 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
565 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
566 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
567 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
568 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_RASTERIZE);
569 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
571 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
572 pButtonOk->SetDefault();
574 SetAutoLayout (true);
575 SetSizer (pTopSizer);
576 pTopSizer->Fit (this);
577 pTopSizer->SetSizeHints (this);
580 DialogGetRasterParameters::~DialogGetRasterParameters ()
586 DialogGetRasterParameters::getXSize ()
588 wxString strCtrl = m_pTextCtrlXSize->GetValue();
589 unsigned long lValue;
590 if (strCtrl.ToULong (&lValue))
593 return (m_iDefaultXSize);
597 DialogGetRasterParameters::getYSize ()
599 wxString strCtrl = m_pTextCtrlYSize->GetValue();
600 unsigned long lValue;
601 if (strCtrl.ToULong (&lValue))
604 return (m_iDefaultYSize);
608 DialogGetRasterParameters::getNSamples ()
610 wxString strCtrl = m_pTextCtrlNSamples->GetValue();
611 unsigned long lValue;
612 if (strCtrl.ToULong (&lValue))
615 return (m_iDefaultNSamples);
619 DialogGetRasterParameters::getViewRatio ()
621 wxString strCtrl = m_pTextCtrlViewRatio->GetValue();
623 if (strCtrl.ToDouble (&dValue))
626 return (m_dDefaultViewRatio);
630 /////////////////////////////////////////////////////////////////////
631 // CLASS IDENTIFICATION
633 // DialogGetProjectionParameters
634 /////////////////////////////////////////////////////////////////////
637 DialogGetProjectionParameters::DialogGetProjectionParameters
638 (wxWindow* pParent, int iDefaultNDet, int iDefaultNView, int iDefaultOffsetView, int iDefaultNSamples,
639 double dDefaultRotAngle, double dDefaultFocalLength, double dDefaultCenterDetectorLength,
640 double dDefaultViewRatio, double dDefaultScanRatio, int iDefaultGeometry, int iDefaultTrace)
641 : wxDialog (pParent, -1, _T("Projection Parameters"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
643 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
645 m_dDefaultRotAngle = dDefaultRotAngle;
646 m_dDefaultFocalLength = dDefaultFocalLength;
647 m_dDefaultCenterDetectorLength = dDefaultCenterDetectorLength;
648 m_dDefaultViewRatio = dDefaultViewRatio;
649 m_dDefaultScanRatio = dDefaultScanRatio;
650 m_iDefaultNSamples = iDefaultNSamples;
651 m_iDefaultNView = iDefaultNView;
652 m_iDefaultNDet = iDefaultNDet;
653 m_iDefaultTrace = iDefaultTrace;
654 m_iDefaultGeometry = iDefaultGeometry;
656 pTopSizer->Add (new wxStaticText (this, -1, "Projection Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
658 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
660 wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (2);
661 m_pRadioBoxGeometry = new StringValueAndTitleRadioBox (this, _T("Geometry"), Scanner::getGeometryCount(), Scanner::getGeometryTitleArray(), Scanner::getGeometryNameArray());
662 m_pRadioBoxGeometry->SetSelection (iDefaultGeometry);
664 pGridSizer->Add (m_pRadioBoxGeometry, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
666 m_pRadioBoxTrace = new StringValueAndTitleRadioBox (this, _T("Trace Level"), Trace::getTraceCount(), Trace::getTraceTitleArray(), Trace::getTraceNameArray());
667 m_pRadioBoxTrace->SetSelection (iDefaultTrace);
668 pGridSizer->Add (m_pRadioBoxTrace, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
670 wxFlexGridSizer* pText1Sizer = new wxFlexGridSizer(2);
671 std::ostringstream os;
673 m_pTextCtrlNDet = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
674 pText1Sizer->Add (new wxStaticText (this, -1, "Detectors"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
675 pText1Sizer->Add (m_pTextCtrlNDet, 0, wxALIGN_CENTER_VERTICAL);
676 std::ostringstream osNView;
677 osNView << iDefaultNView;
678 m_pTextCtrlNView = new wxTextCtrl (this, -1, osNView.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
679 pText1Sizer->Add (new wxStaticText (this, -1, "Views"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
680 pText1Sizer->Add (m_pTextCtrlNView, 0, wxALIGN_CENTER_VERTICAL);
681 std::ostringstream osNSamples;
682 osNSamples << iDefaultNSamples;
683 m_pTextCtrlNSamples = new wxTextCtrl (this, -1, osNSamples.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
684 pText1Sizer->Add (new wxStaticText (this, -1, "Samples per Detector"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
685 pText1Sizer->Add (m_pTextCtrlNSamples, 0, wxALIGN_CENTER_VERTICAL);
687 pGridSizer->Add (pText1Sizer);
689 wxFlexGridSizer* pText2Sizer = new wxFlexGridSizer(2);
690 std::ostringstream osViewRatio;
691 osViewRatio << dDefaultViewRatio;
692 m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, osViewRatio.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
693 pText2Sizer->Add (new wxStaticText (this, -1, "View Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
694 pText2Sizer->Add (m_pTextCtrlViewRatio, 0, wxALIGN_CENTER_VERTICAL);
695 std::ostringstream osScanRatio;
696 osScanRatio << dDefaultScanRatio;
697 m_pTextCtrlScanRatio = new wxTextCtrl (this, -1, osScanRatio.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
698 pText2Sizer->Add (new wxStaticText (this, -1, "Scan Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
699 pText2Sizer->Add (m_pTextCtrlScanRatio, 0, wxALIGN_CENTER_VERTICAL);
700 std::ostringstream osFocalLength;
701 osFocalLength << dDefaultFocalLength;
702 m_pTextCtrlFocalLength = new wxTextCtrl (this, -1, osFocalLength.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
703 pText2Sizer->Add (new wxStaticText (this, -1, "Focal Length Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
704 pText2Sizer->Add (m_pTextCtrlFocalLength, 0, wxALIGN_CENTER_VERTICAL);
706 if (theApp->getAdvancedOptions()) {
707 std::ostringstream osCenterDetectorLength;
708 osCenterDetectorLength << dDefaultCenterDetectorLength;
709 m_pTextCtrlCenterDetectorLength = new wxTextCtrl (this, -1, osCenterDetectorLength.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
710 pText2Sizer->Add (new wxStaticText (this, -1, "Center-Detector Length Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
711 pText2Sizer->Add (m_pTextCtrlCenterDetectorLength, 0, wxALIGN_CENTER_VERTICAL);
713 std::ostringstream osRotAngle;
714 osRotAngle << dDefaultRotAngle;
715 m_pTextCtrlRotAngle = new wxTextCtrl (this, -1, osRotAngle.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
716 pText2Sizer->Add (new wxStaticText (this, -1, "Rotation Angle (Fraction of circle)"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
717 pText2Sizer->Add (m_pTextCtrlRotAngle, 0, wxALIGN_CENTER_VERTICAL);
719 std::ostringstream osOffsetView;
720 osOffsetView << iDefaultOffsetView;
721 m_pTextCtrlOffsetView = new wxTextCtrl (this, -1, osOffsetView.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
722 pText2Sizer->Add (new wxStaticText (this, -1, "Gantry offset in units of 'views' "), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
723 pText2Sizer->Add (m_pTextCtrlOffsetView, 0, wxALIGN_CENTER_VERTICAL);
726 pGridSizer->Add (pText2Sizer);
728 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
730 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
732 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
733 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
734 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
735 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
736 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
737 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_PROJECTIONS);
738 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
740 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
741 pButtonOk->SetDefault();
743 SetAutoLayout (true);
744 SetSizer (pTopSizer);
745 pTopSizer->Fit (this);
746 pTopSizer->SetSizeHints (this);
748 m_pRadioBoxGeometry->SetFocus();
751 DialogGetProjectionParameters::~DialogGetProjectionParameters ()
757 DialogGetProjectionParameters::getNDet ()
759 wxString strCtrl = m_pTextCtrlNDet->GetValue();
760 unsigned long lValue;
761 if (strCtrl.ToULong (&lValue))
764 return (m_iDefaultNDet);
768 DialogGetProjectionParameters::getNView ()
770 wxString strCtrl = m_pTextCtrlNView->GetValue();
771 unsigned long lValue;
772 if (strCtrl.ToULong (&lValue))
775 return (m_iDefaultNView);
779 DialogGetProjectionParameters::getOffsetView ()
781 if (theApp->getAdvancedOptions()) {
782 wxString strCtrl = m_pTextCtrlOffsetView->GetValue();
783 unsigned long lValue;
784 if (strCtrl.ToULong (&lValue))
787 return (m_iDefaultOffsetView);
794 DialogGetProjectionParameters::getNSamples ()
796 wxString strCtrl = m_pTextCtrlNSamples->GetValue();
797 unsigned long lValue;
798 if (strCtrl.ToULong (&lValue))
801 return (m_iDefaultNSamples);
805 DialogGetProjectionParameters::getRotAngle ()
807 if (theApp->getAdvancedOptions()) {
808 wxString strCtrl = m_pTextCtrlRotAngle->GetValue();
810 if (strCtrl.ToDouble (&dValue))
811 return (dValue * TWOPI);
813 return (m_dDefaultRotAngle);
815 if (Scanner::convertGeometryNameToID (m_pRadioBoxGeometry->getSelectionStringValue()) ==
816 Scanner::GEOMETRY_PARALLEL)
824 DialogGetProjectionParameters::getFocalLengthRatio ()
826 wxString strCtrl = m_pTextCtrlFocalLength->GetValue();
828 if (strCtrl.ToDouble (&dValue))
831 return (m_dDefaultFocalLength);
835 DialogGetProjectionParameters::getCenterDetectorLengthRatio ()
837 if (theApp->getAdvancedOptions()) {
838 wxString strCtrl = m_pTextCtrlCenterDetectorLength->GetValue();
840 if (strCtrl.ToDouble (&dValue))
843 return (m_dDefaultCenterDetectorLength);
845 return getFocalLengthRatio(); // default is to set equal to focal-length
849 DialogGetProjectionParameters::getViewRatio ()
851 wxString strCtrl = m_pTextCtrlViewRatio->GetValue();
853 if (strCtrl.ToDouble (&dValue))
856 return (m_dDefaultViewRatio);
860 DialogGetProjectionParameters::getScanRatio ()
862 wxString strCtrl = m_pTextCtrlScanRatio->GetValue();
864 if (strCtrl.ToDouble (&dValue))
867 return (m_dDefaultScanRatio);
871 DialogGetProjectionParameters::getGeometry ()
873 return m_pRadioBoxGeometry->getSelectionStringValue();
877 DialogGetProjectionParameters::getTrace ()
879 return Trace::convertTraceNameToID(m_pRadioBoxTrace->getSelectionStringValue());
884 /////////////////////////////////////////////////////////////////////
885 // CLASS IDENTIFICATION
887 // DialogGetReconstructionParameters
888 /////////////////////////////////////////////////////////////////////
891 DialogGetReconstructionParameters::DialogGetReconstructionParameters (wxWindow* pParent, int iDefaultXSize,
892 int iDefaultYSize, int iDefaultFilterID, double dDefaultHammingParam,
893 int iDefaultFilterMethodID, int iDefaultFilterGenerationID, int iDefaultZeropad,
894 int iDefaultInterpID, int iDefaultInterpParam, int iDefaultBackprojectID, int iTrace,
895 ReconstructionROI* pDefaultROI)
896 : wxDialog (pParent, -1, _T("Reconstruction Parameters"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
898 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
900 m_iDefaultXSize = iDefaultXSize;
901 m_iDefaultYSize = iDefaultYSize;
902 m_dDefaultFilterParam = dDefaultHammingParam;
903 m_iDefaultZeropad = iDefaultZeropad;
904 m_iDefaultInterpParam = iDefaultInterpParam;
905 m_dDefaultRoiXMin = pDefaultROI->m_dXMin;
906 m_dDefaultRoiXMax = pDefaultROI->m_dXMax;
907 m_dDefaultRoiYMin = pDefaultROI->m_dYMin;
908 m_dDefaultRoiYMax = pDefaultROI->m_dYMax;
910 pTopSizer->Add (new wxStaticText (this, -1, "Filtered Backprojection Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
911 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
913 wxFlexGridSizer* pGridSizer = NULL;
914 if (theApp->getAdvancedOptions())
915 pGridSizer = new wxFlexGridSizer (4);
917 pGridSizer = new wxFlexGridSizer (3);
919 if (theApp->getAdvancedOptions())
920 m_pRadioBoxFilter = new StringValueAndTitleRadioBox (this, _T("Filter"), SignalFilter::getFilterCount(), SignalFilter::getFilterTitleArray(), SignalFilter::getFilterNameArray());
922 m_pRadioBoxFilter = new StringValueAndTitleRadioBox (this, _T("Filter"), SignalFilter::getReconstructFilterCount(), SignalFilter::getFilterTitleArray(), SignalFilter::getFilterNameArray());
923 m_pRadioBoxFilter->SetSelection (iDefaultFilterID);
924 pGridSizer->Add (m_pRadioBoxFilter, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
926 if (theApp->getAdvancedOptions()) {
927 m_pRadioBoxFilterMethod = new StringValueAndTitleRadioBox (this, _T("Filter Method"), ProcessSignal::getFilterMethodCount(), ProcessSignal::getFilterMethodTitleArray(), ProcessSignal::getFilterMethodNameArray());
928 m_pRadioBoxFilterMethod->SetSelection (iDefaultFilterMethodID);
929 pGridSizer->Add (m_pRadioBoxFilterMethod, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
932 static const char* aszFilterMethodTitle[] = {"Convolution", "FFT"};
933 static const char* aszFilterMethodName[] = {"convolution", "rfftw"};
935 static const char* aszFilterMethodTitle[] = {"Convolution", "Fourier"};
936 static const char* aszFilterMethodName[] = {"convolution", "fourier-table"};
938 m_pRadioBoxFilterMethod = new StringValueAndTitleRadioBox (this, _T("Filter Method"), 2, aszFilterMethodTitle, aszFilterMethodName);
940 m_pRadioBoxFilterMethod->SetSelection (1);
942 m_pRadioBoxFilterMethod->SetSelection (0);
944 pGridSizer->Add (m_pRadioBoxFilterMethod, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
947 if (theApp->getAdvancedOptions()) {
948 m_pRadioBoxFilterGeneration = new StringValueAndTitleRadioBox (this, _T("Filter Generation"), ProcessSignal::getFilterGenerationCount(), ProcessSignal::getFilterGenerationTitleArray(), ProcessSignal::getFilterGenerationNameArray());
949 m_pRadioBoxFilterGeneration->SetSelection (iDefaultFilterGenerationID);
950 pGridSizer->Add (m_pRadioBoxFilterGeneration, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
952 m_pRadioBoxBackproject = new StringValueAndTitleRadioBox (this, _T("Backprojection"), Backprojector::getBackprojectCount(), Backprojector::getBackprojectTitleArray(), Backprojector::getBackprojectNameArray());
953 m_pRadioBoxBackproject->SetSelection (iDefaultBackprojectID);
954 pGridSizer->Add (m_pRadioBoxBackproject, 0, wxALL | wxALIGN_RIGHT | wxEXPAND);
957 m_pRadioBoxInterp = new StringValueAndTitleRadioBox (this, _T("Interpolation"), Backprojector::getInterpCount(), Backprojector::getInterpTitleArray(), Backprojector::getInterpNameArray());
958 m_pRadioBoxInterp->SetSelection (iDefaultInterpID);
959 pGridSizer->Add (m_pRadioBoxInterp, 0, wxALL | wxALIGN_RIGHT | wxEXPAND);
961 static const char* aszTraceTitle[] = {"None", "Full"};
962 static const char* aszTraceName[] = {"none", "full"};
963 m_pRadioBoxTrace = new StringValueAndTitleRadioBox (this, _T("Trace Level"), 2, aszTraceTitle, aszTraceName);
964 iTrace = clamp(iTrace, 0, 1);
965 m_pRadioBoxTrace->SetSelection (iTrace);
966 pGridSizer->Add (m_pRadioBoxTrace);
968 wxFlexGridSizer* pTextGridSizer = new wxFlexGridSizer (2);
969 std::ostringstream os;
971 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
972 pTextGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
973 pTextGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
974 std::ostringstream osYSize;
975 osYSize << iDefaultYSize;
976 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
977 pTextGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
978 pTextGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
980 std::ostringstream osHammingParam;
981 osHammingParam << dDefaultHammingParam;
982 m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, osHammingParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
983 pTextGridSizer->Add (new wxStaticText (this, -1, "Hamming Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
984 pTextGridSizer->Add (m_pTextCtrlFilterParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
986 if (theApp->getAdvancedOptions()) {
987 std::ostringstream osZeropad;
988 osZeropad << iDefaultZeropad;
989 m_pTextCtrlZeropad = new wxTextCtrl (this, -1, osZeropad.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
990 pTextGridSizer->Add (new wxStaticText (this, -1, "Zeropad"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
991 pTextGridSizer->Add (m_pTextCtrlZeropad, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
993 pGridSizer->Add (pTextGridSizer);
995 #if HAVE_FREQ_PREINTERP
996 std::ostringstream osInterpParam;
997 osInterpParam << iDefaultInterpParam;
998 m_pTextCtrlInterpParam = new wxTextCtrl (this, -1, osInterpParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
999 pGridSizer->Add (new wxStaticText (this, -1, "Interpolation Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1000 pGridSizer->Add (m_pTextCtrlInterpParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1003 if (theApp->getAdvancedOptions()) {
1004 wxFlexGridSizer* pROIGridSizer = new wxFlexGridSizer (2);
1005 std::ostringstream osRoiXMin;
1006 osRoiXMin << m_dDefaultRoiXMin;
1007 m_pTextCtrlRoiXMin = new wxTextCtrl (this, -1, osRoiXMin.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1008 pROIGridSizer->Add (new wxStaticText (this, -1, "ROI XMin"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1009 pROIGridSizer->Add (m_pTextCtrlRoiXMin, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1010 std::ostringstream osRoiXMax;
1011 osRoiXMax << m_dDefaultRoiXMax;
1012 m_pTextCtrlRoiXMax = new wxTextCtrl (this, -1, osRoiXMax.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1013 pROIGridSizer->Add (new wxStaticText (this, -1, "ROI XMax"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1014 pROIGridSizer->Add (m_pTextCtrlRoiXMax, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1015 std::ostringstream osRoiYMin;
1016 osRoiYMin << m_dDefaultRoiYMin;
1017 m_pTextCtrlRoiYMin = new wxTextCtrl (this, -1, osRoiYMin.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1018 pROIGridSizer->Add (new wxStaticText (this, -1, "ROI YMin"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1019 pROIGridSizer->Add (m_pTextCtrlRoiYMin, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1020 std::ostringstream osRoiYMax;
1021 osRoiYMax << m_dDefaultRoiYMax;
1022 m_pTextCtrlRoiYMax = new wxTextCtrl (this, -1, osRoiYMax.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1023 pROIGridSizer->Add (new wxStaticText (this, -1, "ROI YMax"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1024 pROIGridSizer->Add (m_pTextCtrlRoiYMax, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1026 pGridSizer->Add (pROIGridSizer);
1029 pTopSizer->Add (pGridSizer, 1, wxALL, 3);
1031 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1033 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1034 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
1035 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1036 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
1037 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1038 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_RECONSTRUCTION);
1039 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
1041 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1042 pButtonOk->SetDefault();
1044 SetAutoLayout (true);
1045 SetSizer (pTopSizer);
1046 pTopSizer->Layout();
1047 pTopSizer->Fit (this);
1048 pTopSizer->SetSizeHints (this);
1051 DialogGetReconstructionParameters::~DialogGetReconstructionParameters ()
1057 DialogGetReconstructionParameters::getXSize ()
1059 wxString strCtrl = m_pTextCtrlXSize->GetValue();
1060 unsigned long lValue;
1061 if (strCtrl.ToULong (&lValue))
1064 return (m_iDefaultXSize);
1068 DialogGetReconstructionParameters::getYSize ()
1070 wxString strCtrl = m_pTextCtrlYSize->GetValue();
1071 unsigned long lValue;
1072 if (strCtrl.ToULong (&lValue))
1075 return (m_iDefaultYSize);
1079 DialogGetReconstructionParameters::getZeropad ()
1081 if (theApp->getAdvancedOptions()) {
1082 wxString strCtrl = m_pTextCtrlZeropad->GetValue();
1083 unsigned long lValue;
1084 if (strCtrl.ToULong (&lValue))
1087 return (m_iDefaultZeropad);
1094 DialogGetReconstructionParameters::getInterpParam ()
1096 #if HAVE_FREQ_PREINTERP
1097 wxString strCtrl = m_pTextCtrlInterpParam->GetValue();
1098 unsigned long lValue;
1099 if (strCtrl.ToULong (&lValue))
1102 return (m_iDefaultInterpParam);
1109 DialogGetReconstructionParameters::getFilterParam ()
1111 wxString strCtrl = m_pTextCtrlFilterParam->GetValue();
1113 if (strCtrl.ToDouble (&dValue))
1116 return (m_dDefaultFilterParam);
1120 DialogGetReconstructionParameters::getFilterName ()
1122 return m_pRadioBoxFilter->getSelectionStringValue();
1126 DialogGetReconstructionParameters::getFilterMethodName ()
1128 return m_pRadioBoxFilterMethod->getSelectionStringValue();
1132 DialogGetReconstructionParameters::getInterpName ()
1134 return m_pRadioBoxInterp->getSelectionStringValue();
1138 DialogGetReconstructionParameters::getTrace ()
1141 if (strcmp("full", m_pRadioBoxTrace->getSelectionStringValue()) == 0)
1142 iTrace = Trace::TRACE_PLOT;
1147 DialogGetReconstructionParameters::getBackprojectName ()
1149 if (theApp->getAdvancedOptions()) {
1150 return m_pRadioBoxBackproject->getSelectionStringValue();
1156 DialogGetReconstructionParameters::getFilterGenerationName ()
1158 if (theApp->getAdvancedOptions()) {
1159 return m_pRadioBoxFilterGeneration->getSelectionStringValue();
1161 if (ProcessSignal::convertFilterMethodNameToID(m_pRadioBoxFilterMethod->getSelectionStringValue())
1162 == ProcessSignal::FILTER_METHOD_CONVOLUTION)
1165 return "inverse-fourier";
1170 DialogGetReconstructionParameters::getROI (ReconstructionROI* pROI)
1172 if (theApp->getAdvancedOptions()) {
1174 if (m_pTextCtrlRoiXMin->GetValue().ToDouble (&dValue))
1175 pROI->m_dXMin = dValue;
1177 pROI->m_dXMin = m_dDefaultRoiXMin;
1179 if (m_pTextCtrlRoiXMax->GetValue().ToDouble (&dValue))
1180 pROI->m_dXMax = dValue;
1182 pROI->m_dXMax = m_dDefaultRoiXMax;
1184 if (m_pTextCtrlRoiYMin->GetValue().ToDouble (&dValue))
1185 pROI->m_dYMin = dValue;
1187 pROI->m_dYMin = m_dDefaultRoiYMin;
1189 if (m_pTextCtrlRoiYMax->GetValue().ToDouble (&dValue))
1190 pROI->m_dYMax = dValue;
1192 pROI->m_dYMax = m_dDefaultRoiYMax;
1194 pROI->m_dXMin = m_dDefaultRoiXMin;
1195 pROI->m_dXMax = m_dDefaultRoiXMax;
1196 pROI->m_dYMin = m_dDefaultRoiYMin;
1197 pROI->m_dYMax = m_dDefaultRoiYMax;
1201 /////////////////////////////////////////////////////////////////////
1202 // CLASS IDENTIFICATION
1204 // DialogGetFilterParameters
1205 /////////////////////////////////////////////////////////////////////
1209 DialogGetFilterParameters::DialogGetFilterParameters (wxWindow* pParent, int iDefaultXSize, int iDefaultYSize, int iDefaultFilterID, double dDefaultFilterParam, double dDefaultBandwidth, int iDefaultDomainID, double dDefaultInputScale, double dDefaultOutputScale)
1210 : wxDialog (pParent, -1, _T("Filter Parameters"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1212 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1214 pTopSizer->Add (new wxStaticText (this, -1, "Filter Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
1215 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1217 wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (2);
1219 m_pRadioBoxFilter = new StringValueAndTitleRadioBox (this, _T("Filter"), SignalFilter::getFilterCount(), SignalFilter::getFilterTitleArray(), SignalFilter::getFilterNameArray());
1220 m_pRadioBoxFilter->SetSelection (iDefaultFilterID);
1221 pGridSizer->Add (m_pRadioBoxFilter, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
1223 m_pRadioBoxDomain = new StringValueAndTitleRadioBox (this, _T("Domain"), SignalFilter::getDomainCount(), SignalFilter::getDomainTitleArray(), SignalFilter::getDomainNameArray());
1224 m_pRadioBoxDomain->SetSelection (iDefaultDomainID);
1225 pGridSizer->Add (m_pRadioBoxDomain, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
1227 std::ostringstream os;
1228 os << iDefaultXSize;
1229 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1230 pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1231 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1233 std::ostringstream osYSize;
1234 osYSize << iDefaultYSize;
1235 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1236 pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1237 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1239 std::ostringstream osFilterParam;
1240 osFilterParam << dDefaultFilterParam;
1241 m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, osFilterParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1242 pGridSizer->Add (new wxStaticText (this, -1, "Filter Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1243 pGridSizer->Add (m_pTextCtrlFilterParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1245 std::ostringstream osBandwidth;
1246 osBandwidth << dDefaultBandwidth;
1247 m_pTextCtrlBandwidth = new wxTextCtrl (this, -1, osBandwidth.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1248 pGridSizer->Add (new wxStaticText (this, -1, "Bandwidth"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1249 pGridSizer->Add (m_pTextCtrlBandwidth, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1251 std::ostringstream osInputScale;
1252 osInputScale << dDefaultInputScale;
1253 m_pTextCtrlInputScale = new wxTextCtrl (this, -1, osInputScale.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1254 pGridSizer->Add (new wxStaticText (this, -1, "Axis (input) Scale"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1255 pGridSizer->Add (m_pTextCtrlInputScale, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1257 std::ostringstream osOutputScale;
1258 osOutputScale << dDefaultOutputScale;
1259 m_pTextCtrlOutputScale = new wxTextCtrl (this, -1, osOutputScale.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1260 pGridSizer->Add (new wxStaticText (this, -1, "Filter Output Scale"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1261 pGridSizer->Add (m_pTextCtrlOutputScale, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1263 pTopSizer->Add (pGridSizer, 1, wxALL, 3);
1265 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1267 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1268 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
1269 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1270 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
1271 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1272 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_FILTER);
1273 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
1275 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1276 pButtonOk->SetDefault();
1278 SetAutoLayout (true);
1279 SetSizer (pTopSizer);
1280 pTopSizer->Layout();
1281 pTopSizer->Fit (this);
1282 pTopSizer->SetSizeHints (this);
1285 DialogGetFilterParameters::~DialogGetFilterParameters ()
1291 DialogGetFilterParameters::getXSize ()
1293 wxString strCtrl = m_pTextCtrlXSize->GetValue();
1294 unsigned long lValue;
1295 if (strCtrl.ToULong (&lValue))
1298 return (m_iDefaultXSize);
1302 DialogGetFilterParameters::getYSize ()
1304 wxString strCtrl = m_pTextCtrlYSize->GetValue();
1305 unsigned long lValue;
1306 if (strCtrl.ToULong (&lValue))
1309 return (m_iDefaultYSize);
1313 DialogGetFilterParameters::getBandwidth ()
1315 wxString strCtrl = m_pTextCtrlBandwidth->GetValue();
1317 if (strCtrl.ToDouble (&dValue))
1320 return (m_dDefaultBandwidth);
1324 DialogGetFilterParameters::getFilterParam ()
1326 wxString strCtrl = m_pTextCtrlFilterParam->GetValue();
1328 if (strCtrl.ToDouble (&dValue))
1331 return (m_dDefaultFilterParam);
1335 DialogGetFilterParameters::getInputScale ()
1337 wxString strCtrl = m_pTextCtrlInputScale->GetValue();
1339 if (strCtrl.ToDouble (&dValue))
1342 return (m_dDefaultInputScale);
1346 DialogGetFilterParameters::getOutputScale ()
1348 wxString strCtrl = m_pTextCtrlOutputScale->GetValue();
1350 if (strCtrl.ToDouble (&dValue))
1353 return (m_dDefaultOutputScale);
1357 DialogGetFilterParameters::getFilterName ()
1359 return m_pRadioBoxFilter->getSelectionStringValue();
1363 DialogGetFilterParameters::getDomainName ()
1365 return m_pRadioBoxDomain->getSelectionStringValue();
1369 ///////////////////////////////////////////////////////////////////////
1370 // CLASS IMPLEMENTATION
1371 // DialogExportParameters
1372 ///////////////////////////////////////////////////////////////////////
1374 DialogExportParameters::DialogExportParameters (wxWindow* pParent, int iDefaultFormatID)
1375 : wxDialog (pParent, -1, _T("Select ExportParameters"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1377 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1379 pTopSizer->Add (new wxStaticText (this, -1, "Select Export Format"), 0, wxALIGN_CENTER | wxALL, 5);
1381 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5);
1383 m_pRadioBoxFormat = new StringValueAndTitleRadioBox (this, _T("File Type"),
1384 ImageFile::getExportFormatCount(), ImageFile::getExportFormatTitleArray(), ImageFile::getExportFormatNameArray());
1385 m_pRadioBoxFormat->SetSelection (iDefaultFormatID);
1386 pTopSizer->Add (m_pRadioBoxFormat, 0, wxALL | wxALIGN_CENTER);
1388 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1390 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1391 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
1392 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1393 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
1394 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1395 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_EXPORT);
1396 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
1398 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1399 pButtonOk->SetDefault();
1401 SetAutoLayout (true);
1402 SetSizer (pTopSizer);
1403 pTopSizer->Fit (this);
1404 pTopSizer->SetSizeHints (this);
1408 DialogExportParameters::getFormatName()
1410 return m_pRadioBoxFormat->getSelectionStringValue();
1414 ///////////////////////////////////////////////////////////////////////
1415 // CLASS IMPLEMENTATION
1416 // DialogImportParameters
1417 ///////////////////////////////////////////////////////////////////////
1419 DialogImportParameters::DialogImportParameters (wxWindow* pParent, int iDefaultFormatID)
1420 : wxDialog (pParent, -1, _T("Select Import Parameters"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1422 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1424 pTopSizer->Add (new wxStaticText (this, -1, "Select Import Format"), 0, wxALIGN_CENTER | wxALL, 5);
1426 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5);
1428 m_pRadioBoxFormat = new StringValueAndTitleRadioBox (this, _T("File Type"),
1429 ImageFile::getImportFormatCount(), ImageFile::getImportFormatTitleArray(), ImageFile::getImportFormatNameArray());
1430 m_pRadioBoxFormat->SetSelection (iDefaultFormatID);
1431 pTopSizer->Add (m_pRadioBoxFormat, 0, wxALL | wxALIGN_CENTER);
1433 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1435 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1436 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
1437 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1438 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
1439 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1440 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, IDH_DLG_IMPORT);
1441 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
1443 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1444 pButtonOk->SetDefault();
1446 SetAutoLayout (true);
1447 SetSizer (pTopSizer);
1448 pTopSizer->Fit (this);
1449 pTopSizer->SetSizeHints (this);
1453 DialogImportParameters::getFormatName()
1455 return m_pRadioBoxFormat->getSelectionStringValue();
1459 /////////////////////////////////////////////////////////////////////
1460 // CLASS DiaglogGetXYSize Implementation
1461 /////////////////////////////////////////////////////////////////////
1463 DialogGetXYSize::DialogGetXYSize (wxWindow* pParent, const char* const pszTitle, int iDefaultXSize, int iDefaultYSize)
1464 : wxDialog (pParent, -1, _T(pszTitle), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1466 m_iDefaultXSize = iDefaultXSize;
1467 m_iDefaultYSize = iDefaultYSize;
1469 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1471 pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
1473 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1475 std::ostringstream os;
1476 os << iDefaultXSize;
1477 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1478 std::ostringstream osYSize;
1479 osYSize << iDefaultYSize;
1480 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1482 wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
1483 pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1484 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_CENTER_VERTICAL);
1485 pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1486 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_CENTER_VERTICAL);
1487 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
1489 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1491 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1492 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
1493 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1494 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
1495 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1497 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1498 pButtonOk->SetDefault();
1500 SetAutoLayout (true);
1501 SetSizer (pTopSizer);
1502 pTopSizer->Fit (this);
1503 pTopSizer->SetSizeHints (this);
1506 DialogGetXYSize::~DialogGetXYSize ()
1511 DialogGetXYSize::getXSize ()
1513 wxString strCtrl = m_pTextCtrlXSize->GetValue();
1515 if (strCtrl.ToLong (&lValue))
1518 return (m_iDefaultXSize);
1522 DialogGetXYSize::getYSize ()
1524 wxString strCtrl = m_pTextCtrlYSize->GetValue();
1526 if (strCtrl.ToLong (&lValue))
1529 return (m_iDefaultYSize);
1534 /////////////////////////////////////////////////////////////////////
1535 // CLASS IDENTIFICATION
1537 // DialogGetConvertPolarParameters
1538 /////////////////////////////////////////////////////////////////////
1540 DialogGetConvertPolarParameters::DialogGetConvertPolarParameters (wxWindow* pParent, const char* const pszTitle,
1541 int iDefaultXSize, int iDefaultYSize, int iDefaultInterpolationID, int iDefaultZeropad, int iHelpID)
1542 : wxDialog (pParent, -1, _T(pszTitle), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1544 m_iDefaultXSize = iDefaultXSize;
1545 m_iDefaultYSize = iDefaultYSize;
1546 m_iDefaultZeropad = iDefaultZeropad;
1548 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1550 pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
1551 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1553 wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (1);
1555 m_pRadioBoxInterpolation = new StringValueAndTitleRadioBox (this, _T("Interpolation"), Projections::getInterpCount(), Projections::getInterpTitleArray(), Projections::getInterpNameArray());
1556 m_pRadioBoxInterpolation->SetSelection (iDefaultInterpolationID);
1557 pGridSizer->Add (m_pRadioBoxInterpolation, 0, wxALL | wxALIGN_CENTER);
1559 wxFlexGridSizer* pTextGridSizer = new wxFlexGridSizer (2);
1560 std::ostringstream os;
1561 os << iDefaultXSize;
1562 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1563 pTextGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1564 pTextGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1565 std::ostringstream osYSize;
1566 osYSize << iDefaultYSize;
1567 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1568 pTextGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1569 pTextGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1570 if (m_iDefaultZeropad >= 0) {
1571 std::ostringstream osZeropad;
1572 osZeropad << iDefaultZeropad;
1573 m_pTextCtrlZeropad = new wxTextCtrl (this, -1, osZeropad.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1574 pTextGridSizer->Add (new wxStaticText (this, -1, "Zeropad"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1575 pTextGridSizer->Add (m_pTextCtrlZeropad, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1578 pGridSizer->Add (pTextGridSizer, 0, wxALIGN_CENTER | wxALL);
1580 pTopSizer->Add (pGridSizer, 1, wxALL | wxALIGN_CENTER, 3);
1582 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1584 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1585 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
1586 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1587 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
1588 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1589 CTSimHelpButton* pButtonHelp = new CTSimHelpButton (this, iHelpID);
1590 pButtonSizer->Add (pButtonHelp, 0, wxEXPAND | wxALL, 10);
1592 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1593 pButtonOk->SetDefault();
1594 SetAutoLayout (true);
1595 SetSizer (pTopSizer);
1596 pTopSizer->Layout();
1597 pTopSizer->Fit (this);
1598 pTopSizer->SetSizeHints (this);
1602 DialogGetConvertPolarParameters::~DialogGetConvertPolarParameters ()
1608 DialogGetConvertPolarParameters::getXSize ()
1610 wxString strCtrl = m_pTextCtrlXSize->GetValue();
1611 unsigned long lValue;
1612 if (strCtrl.ToULong (&lValue))
1615 return (m_iDefaultXSize);
1619 DialogGetConvertPolarParameters::getYSize ()
1621 wxString strCtrl = m_pTextCtrlYSize->GetValue();
1622 unsigned long lValue;
1623 if (strCtrl.ToULong (&lValue))
1626 return (m_iDefaultYSize);
1630 DialogGetConvertPolarParameters::getZeropad ()
1632 if (m_iDefaultZeropad >= 0) {
1633 wxString strCtrl = m_pTextCtrlZeropad->GetValue();
1634 unsigned long lValue;
1635 if (strCtrl.ToULong (&lValue))
1638 return (m_iDefaultZeropad);
1644 DialogGetConvertPolarParameters::getInterpolationName ()
1646 return m_pRadioBoxInterpolation->getSelectionStringValue();