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.32 2001/02/14 18:39:47 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 ******************************************************************************/
29 // #pragma implementation
32 // For compilers that support precompilation, includes "wx/wx.h".
33 #include "wx/wxprec.h"
43 #if !wxUSE_DOC_VIEW_ARCHITECTURE
44 #error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h!
47 #include "wx/statline.h"
54 #include "imagefile.h"
56 #if defined(MSVC) || HAVE_SSTREAM
59 #include <sstream_subst>
63 ///////////////////////////////////////////////////////////////////////
64 // CLASS IMPLEMENTATION
65 // StringValueAndTitleListBox
66 ///////////////////////////////////////////////////////////////////////
68 StringValueAndTitleListBox::StringValueAndTitleListBox (wxDialog* pParent, int nChoices, const char* aszTitle[], const char* aszValue[])
71 wxString* psTitle = new wxString [nChoices];
72 for (int i = 0; i < nChoices; i++)
73 psTitle[i] = aszTitle[i];
75 Create (pParent, -1, wxDefaultPosition, wxSize(-1,-1), nChoices, psTitle, wxLB_SINGLE | wxLB_NEEDED_SB);
77 m_ppszValues = aszValue;
82 StringValueAndTitleListBox::getSelectionStringValue () const
84 return m_ppszValues[GetSelection()];
87 StringValueAndTitleRadioBox::StringValueAndTitleRadioBox (wxDialog* pParent, const wxString& strTitle, int nChoices, const char* aszTitle[], const char* aszValue[])
90 wxString* psTitle = new wxString [nChoices];
91 for (int i = 0; i < nChoices; i++)
92 psTitle[i] = aszTitle[i];
94 Create (pParent, -1, strTitle, wxDefaultPosition, wxDefaultSize, nChoices, psTitle, 1, wxRA_SPECIFY_COLS);
96 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, "Select Phantom", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
114 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
116 pTopSizer->Add (new wxStaticText (this, -1, "Select Phantom"), 0, wxALIGN_CENTER | wxALL, 5);
118 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, 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 | wxEXPAND);
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, "Okay");
128 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
129 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
130 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
132 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
134 SetAutoLayout (true);
135 SetSizer (pTopSizer);
136 pTopSizer->Fit (this);
137 pTopSizer->SetSizeHints (this);
141 DialogGetPhantom::getPhantom()
143 return m_pRadioBoxPhantom->getSelectionStringValue();
147 ///////////////////////////////////////////////////////////////////////
148 // CLASS IMPLEMENTATION
149 // DialogGetComparisonImage
150 ///////////////////////////////////////////////////////////////////////
152 DialogGetComparisonImage::DialogGetComparisonImage (wxWindow* pParent, const char* const pszTitle, const std::vector<ImageFileDocument*>& rVecIF, bool bShowMakeDifference)
153 : wxDialog (pParent, -1, pszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION), m_rVecIF(rVecIF)
155 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
157 pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxALL, 5);
159 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5);
161 int iNImages = m_rVecIF.size();
162 wxString* pstrImages = new wxString [iNImages];
163 for (int i = 0; i < iNImages; i++) {
164 ImageFileView* pView = dynamic_cast<ImageFileView*>(m_rVecIF[i]->GetFirstView());
166 pstrImages[i] = pView->getFrame()->GetTitle();
169 m_pListBoxImageChoices = new wxListBox (this, -1, wxDefaultPosition, wxDefaultSize, iNImages, pstrImages, wxLB_SINGLE);
170 delete [] pstrImages;
172 m_pListBoxImageChoices->SetSelection (0);
173 pTopSizer->Add (m_pListBoxImageChoices, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
175 if (bShowMakeDifference) {
176 m_pMakeDifferenceImage = new wxCheckBox (this, -1, "Make Difference Image");
177 m_pMakeDifferenceImage->SetValue (FALSE);
178 pTopSizer->Add (m_pMakeDifferenceImage, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
180 m_pMakeDifferenceImage = NULL;
182 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
184 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
185 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
186 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
187 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
188 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
190 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
192 SetAutoLayout (true);
193 SetSizer (pTopSizer);
194 pTopSizer->Fit (this);
195 pTopSizer->SetSizeHints (this);
199 DialogGetComparisonImage::getImageFileDocument()
201 return m_rVecIF[ m_pListBoxImageChoices->GetSelection() ];
205 DialogGetComparisonImage::getMakeDifferenceImage()
207 if (m_pMakeDifferenceImage)
208 return m_pMakeDifferenceImage->GetValue();
214 /////////////////////////////////////////////////////////////////////
215 // CLASS DiaglogPreferences Implementation
216 /////////////////////////////////////////////////////////////////////
218 DialogPreferences::DialogPreferences (wxWindow* pParent, const char* const pszTitle,
219 bool bAdvancedOptions, bool bAskDeleteNewDocs)
220 : wxDialog (pParent, -1, pszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
222 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
224 pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
226 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
228 m_pCBAdvancedOptions = new wxCheckBox (this, -1, "Advanced Options", wxDefaultPosition, wxSize(250, 25), 0);
229 m_pCBAdvancedOptions->SetValue (bAdvancedOptions);
230 pTopSizer->Add (m_pCBAdvancedOptions, 0, wxALIGN_CENTER_VERTICAL);
232 m_pCBAskDeleteNewDocs = new wxCheckBox (this, -1, "Ask \"Save New Documents\" Before Closing", wxDefaultPosition, wxSize(250, 25), 0);
233 m_pCBAskDeleteNewDocs->SetValue (bAskDeleteNewDocs);
234 pTopSizer->Add (m_pCBAskDeleteNewDocs, 0, wxALIGN_CENTER_VERTICAL);
236 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
238 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
239 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
240 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
241 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
242 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
244 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
246 SetAutoLayout (true);
247 SetSizer (pTopSizer);
248 pTopSizer->Fit (this);
249 pTopSizer->SetSizeHints (this);
252 DialogPreferences::~DialogPreferences ()
257 DialogPreferences::getAdvancedOptions ()
259 return static_cast<bool>(m_pCBAdvancedOptions->GetValue());
263 DialogPreferences::getAskDeleteNewDocs ()
265 return static_cast<bool>(m_pCBAskDeleteNewDocs->GetValue());
269 /////////////////////////////////////////////////////////////////////
270 // CLASS DiaglogGetMinMax Implementation
271 /////////////////////////////////////////////////////////////////////
273 DialogGetMinMax::DialogGetMinMax (wxWindow* pParent, const char* const pszTitle, double dDefaultMin, double dDefaultMax)
274 : wxDialog (pParent, -1, pszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
276 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
278 pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
280 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
282 std::ostringstream os;
284 m_pTextCtrlMin = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
285 std::ostringstream osMax;
286 osMax << dDefaultMax;
287 m_pTextCtrlMax = new wxTextCtrl (this, -1, osMax.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
289 wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
290 pGridSizer->Add (new wxStaticText (this, -1, "Minimum"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
291 pGridSizer->Add (m_pTextCtrlMin, 0, wxALIGN_CENTER_VERTICAL);
292 pGridSizer->Add (new wxStaticText (this, -1, "Maximum"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
293 pGridSizer->Add (m_pTextCtrlMax, 0, wxALIGN_CENTER_VERTICAL);
294 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
296 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
298 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
299 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
300 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
301 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
302 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
304 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
306 SetAutoLayout (true);
307 SetSizer (pTopSizer);
308 pTopSizer->Fit (this);
309 pTopSizer->SetSizeHints (this);
312 DialogGetMinMax::~DialogGetMinMax ()
317 DialogGetMinMax::getMinimum ()
319 wxString strCtrl = m_pTextCtrlMin->GetValue();
321 if (strCtrl.ToDouble (&dValue))
324 return (m_dDefaultMin);
328 DialogGetMinMax::getMaximum ()
330 wxString strCtrl = m_pTextCtrlMax->GetValue();
332 if (strCtrl.ToDouble (&dValue))
335 return (m_dDefaultMax);
339 /////////////////////////////////////////////////////////////////////
340 // CLASS DialogAutoScaleParameters IMPLEMENTATION
341 /////////////////////////////////////////////////////////////////////
343 DialogAutoScaleParameters::DialogAutoScaleParameters (wxWindow *pParent, double mean, double mode, double median, double stddev, double dDefaultScaleFactor)
344 : wxDialog (pParent, -1, "Auto Scale Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION), m_dMean(mean), m_dMode(mode), m_dMedian(median), m_dStdDev(stddev)
346 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
348 pTopSizer->Add (new wxStaticText (this, -1, "Auto Scale Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
350 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
352 wxString asTitle[] = {"Median", "Mode", "Mean"};
354 m_pRadioBoxCenter = new wxRadioBox (this, -1, _T("Center"), wxDefaultPosition, wxDefaultSize, 3, asTitle, 1, wxRA_SPECIFY_COLS);
355 m_pRadioBoxCenter->SetSelection (0);
356 pTopSizer->Add (m_pRadioBoxCenter, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
358 wxGridSizer *pGridSizer = new wxGridSizer (2);
359 pGridSizer->Add (new wxStaticText (this, -1, "Standard Deviation Factor"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
360 std::ostringstream osDefaultFactor;
361 osDefaultFactor << dDefaultScaleFactor;
362 m_pTextCtrlStdDevFactor = new wxTextCtrl (this, -1, osDefaultFactor.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
363 pGridSizer->Add (m_pTextCtrlStdDevFactor, 0, wxALIGN_CENTER_VERTICAL);
364 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
366 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
368 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
369 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
370 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
371 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
372 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
374 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
376 SetAutoLayout (true);
377 SetSizer (pTopSizer);
378 pTopSizer->Fit (this);
379 pTopSizer->SetSizeHints (this);
383 DialogAutoScaleParameters::getMinMax (double* pMin, double* pMax)
385 int iCenter = m_pRadioBoxCenter->GetSelection();
386 double dCenter = m_dMedian;
389 else if (iCenter == 2)
392 wxString sStddevFactor = m_pTextCtrlStdDevFactor->GetValue();
394 if (! sStddevFactor.ToDouble (&dValue)) {
395 *theApp->getLog() << "Error: Non-numeric Standard Deviation Factor of " << sStddevFactor << "\n";
398 double dHalfWidth = dValue * m_dStdDev / 2;
399 *pMin = dCenter - dHalfWidth;
400 *pMax = dCenter + dHalfWidth;
401 *theApp->getLog() << "Setting minimum to " << *pMin << " and maximum to " << *pMax << "\n";
407 DialogAutoScaleParameters::getAutoScaleFactor ()
409 wxString sStddevFactor = m_pTextCtrlStdDevFactor->GetValue();
411 if (! sStddevFactor.ToDouble (&dValue)) {
412 *theApp->getLog() << "Error: Non-numeric Standard Deviation Factor of " << sStddevFactor << "\n";
419 /////////////////////////////////////////////////////////////////////
420 // CLASS IDENTIFICATION
422 // DialogGetRasterParameters
423 /////////////////////////////////////////////////////////////////////
425 DialogGetRasterParameters::DialogGetRasterParameters
426 (wxWindow* pParent, int iDefaultXSize, int iDefaultYSize, int iDefaultNSamples, double dDefaultViewRatio)
427 : wxDialog (pParent, -1, "Set Rasterization Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
429 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
431 pTopSizer->Add (new wxStaticText (this, -1, "Set Rasterization Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
433 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
435 wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
436 std::ostringstream os;
438 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
439 pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
440 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_CENTER_VERTICAL);
441 std::ostringstream osYSize;
442 osYSize << iDefaultYSize;
443 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
444 pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
445 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_CENTER_VERTICAL);
446 std::ostringstream osViewRatio;
447 osViewRatio << dDefaultViewRatio;
448 m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, osViewRatio.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
449 pGridSizer->Add (new wxStaticText (this, -1, "View Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
450 pGridSizer->Add (m_pTextCtrlViewRatio, 0, wxALIGN_CENTER_VERTICAL);
451 std::ostringstream osNSamples;
452 osNSamples << iDefaultNSamples;
453 m_pTextCtrlNSamples = new wxTextCtrl (this, -1, osNSamples.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
454 pGridSizer->Add (new wxStaticText (this, -1, "Samples per Pixel"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
455 pGridSizer->Add (m_pTextCtrlNSamples, 0, wxALIGN_CENTER_VERTICAL);
457 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
459 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
461 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
462 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
463 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
464 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
465 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
467 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
469 SetAutoLayout (true);
470 SetSizer (pTopSizer);
471 pTopSizer->Fit (this);
472 pTopSizer->SetSizeHints (this);
475 DialogGetRasterParameters::~DialogGetRasterParameters ()
481 DialogGetRasterParameters::getXSize ()
483 wxString strCtrl = m_pTextCtrlXSize->GetValue();
484 unsigned long lValue;
485 if (strCtrl.ToULong (&lValue))
488 return (m_iDefaultXSize);
492 DialogGetRasterParameters::getYSize ()
494 wxString strCtrl = m_pTextCtrlYSize->GetValue();
495 unsigned long lValue;
496 if (strCtrl.ToULong (&lValue))
499 return (m_iDefaultYSize);
503 DialogGetRasterParameters::getNSamples ()
505 wxString strCtrl = m_pTextCtrlNSamples->GetValue();
506 unsigned long lValue;
507 if (strCtrl.ToULong (&lValue))
510 return (m_iDefaultNSamples);
514 DialogGetRasterParameters::getViewRatio ()
516 wxString strCtrl = m_pTextCtrlViewRatio->GetValue();
518 if (strCtrl.ToDouble (&dValue))
521 return (m_dDefaultViewRatio);
525 /////////////////////////////////////////////////////////////////////
526 // CLASS IDENTIFICATION
528 // DialogGetProjectionParameters
529 /////////////////////////////////////////////////////////////////////
532 DialogGetProjectionParameters::DialogGetProjectionParameters
533 (wxWindow* pParent, int iDefaultNDet, int iDefaultNView, int iDefaultNSamples,
534 double dDefaultRotAngle, double dDefaultFocalLength, double dDefaultViewRatio,
535 double dDefaultScanRatio, int iDefaultGeometry, int iDefaultTrace)
536 : wxDialog (pParent, -1, "Set Projection Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
538 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
540 m_dDefaultRotAngle = dDefaultRotAngle;
541 m_dDefaultFocalLength = dDefaultFocalLength;
542 m_dDefaultViewRatio = dDefaultViewRatio;
543 m_dDefaultScanRatio = dDefaultScanRatio;
544 m_iDefaultNSamples = iDefaultNSamples;
545 m_iDefaultNView = iDefaultNView;
546 m_iDefaultNDet = iDefaultNDet;
547 m_iDefaultTrace = iDefaultTrace;
548 m_iDefaultGeometry = iDefaultGeometry;
550 pTopSizer->Add (new wxStaticText (this, -1, "Set Projection Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
552 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
554 wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (2);
555 m_pRadioBoxGeometry = new StringValueAndTitleRadioBox (this, _T("Geometry"), Scanner::getGeometryCount(), Scanner::getGeometryTitleArray(), Scanner::getGeometryNameArray());
556 m_pRadioBoxGeometry->SetSelection (iDefaultGeometry);
558 pGridSizer->Add (m_pRadioBoxGeometry, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
560 m_pRadioBoxTrace = new StringValueAndTitleRadioBox (this, _T("Trace Level"), Trace::getTraceCount(), Trace::getTraceTitleArray(), Trace::getTraceNameArray());
561 m_pRadioBoxTrace->SetSelection (iDefaultTrace);
562 pGridSizer->Add (m_pRadioBoxTrace, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
564 wxFlexGridSizer* pText1Sizer = new wxFlexGridSizer(2);
565 std::ostringstream os;
567 m_pTextCtrlNDet = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
568 pText1Sizer->Add (new wxStaticText (this, -1, "Detectors"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
569 pText1Sizer->Add (m_pTextCtrlNDet, 0, wxALIGN_CENTER_VERTICAL);
570 std::ostringstream osNView;
571 osNView << iDefaultNView;
572 m_pTextCtrlNView = new wxTextCtrl (this, -1, osNView.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
573 pText1Sizer->Add (new wxStaticText (this, -1, "Views"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
574 pText1Sizer->Add (m_pTextCtrlNView, 0, wxALIGN_CENTER_VERTICAL);
575 std::ostringstream osNSamples;
576 osNSamples << iDefaultNSamples;
577 m_pTextCtrlNSamples = new wxTextCtrl (this, -1, osNSamples.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
578 pText1Sizer->Add (new wxStaticText (this, -1, "Samples per Detector"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
579 pText1Sizer->Add (m_pTextCtrlNSamples, 0, wxALIGN_CENTER_VERTICAL);
581 pGridSizer->Add (pText1Sizer);
583 wxFlexGridSizer* pText2Sizer = new wxFlexGridSizer(2);
584 std::ostringstream osViewRatio;
585 osViewRatio << dDefaultViewRatio;
586 m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, osViewRatio.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
587 pText2Sizer->Add (new wxStaticText (this, -1, "View Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
588 pText2Sizer->Add (m_pTextCtrlViewRatio, 0, wxALIGN_CENTER_VERTICAL);
589 std::ostringstream osScanRatio;
590 osScanRatio << dDefaultScanRatio;
591 m_pTextCtrlScanRatio = new wxTextCtrl (this, -1, osScanRatio.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
592 pText2Sizer->Add (new wxStaticText (this, -1, "Scan Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
593 pText2Sizer->Add (m_pTextCtrlScanRatio, 0, wxALIGN_CENTER_VERTICAL);
594 std::ostringstream osFocalLength;
595 osFocalLength << dDefaultFocalLength;
596 m_pTextCtrlFocalLength = new wxTextCtrl (this, -1, osFocalLength.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
597 pText2Sizer->Add (new wxStaticText (this, -1, "Focal Length Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
598 pText2Sizer->Add (m_pTextCtrlFocalLength, 0, wxALIGN_CENTER_VERTICAL);
600 if (theApp->getAdvancedOptions()) {
601 std::ostringstream osRotAngle;
602 osRotAngle << dDefaultRotAngle;
603 m_pTextCtrlRotAngle = new wxTextCtrl (this, -1, osRotAngle.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
604 pText2Sizer->Add (new wxStaticText (this, -1, "Rotation Angle (PI units)"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
605 pText2Sizer->Add (m_pTextCtrlRotAngle, 0, wxALIGN_CENTER_VERTICAL);
607 pGridSizer->Add (pText2Sizer);
609 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
611 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
613 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
614 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
615 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
616 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
617 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
619 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
621 SetAutoLayout (true);
622 SetSizer (pTopSizer);
623 pTopSizer->Fit (this);
624 pTopSizer->SetSizeHints (this);
627 DialogGetProjectionParameters::~DialogGetProjectionParameters ()
633 DialogGetProjectionParameters::getNDet ()
635 wxString strCtrl = m_pTextCtrlNDet->GetValue();
636 unsigned long lValue;
637 if (strCtrl.ToULong (&lValue))
640 return (m_iDefaultNDet);
644 DialogGetProjectionParameters::getNView ()
646 wxString strCtrl = m_pTextCtrlNView->GetValue();
647 unsigned long lValue;
648 if (strCtrl.ToULong (&lValue))
651 return (m_iDefaultNView);
656 DialogGetProjectionParameters::getNSamples ()
658 wxString strCtrl = m_pTextCtrlNSamples->GetValue();
659 unsigned long lValue;
660 if (strCtrl.ToULong (&lValue))
663 return (m_iDefaultNSamples);
667 DialogGetProjectionParameters::getRotAngle ()
669 if (theApp->getAdvancedOptions()) {
670 wxString strCtrl = m_pTextCtrlRotAngle->GetValue();
672 if (strCtrl.ToDouble (&dValue))
673 return (dValue * PI);
675 return (m_dDefaultRotAngle);
677 if (Scanner::convertGeometryNameToID (m_pRadioBoxGeometry->getSelectionStringValue()) ==
678 Scanner::GEOMETRY_PARALLEL)
686 DialogGetProjectionParameters::getFocalLengthRatio ()
688 wxString strCtrl = m_pTextCtrlFocalLength->GetValue();
690 if (strCtrl.ToDouble (&dValue))
693 return (m_dDefaultFocalLength);
697 DialogGetProjectionParameters::getViewRatio ()
699 wxString strCtrl = m_pTextCtrlViewRatio->GetValue();
701 if (strCtrl.ToDouble (&dValue))
704 return (m_dDefaultViewRatio);
708 DialogGetProjectionParameters::getScanRatio ()
710 wxString strCtrl = m_pTextCtrlScanRatio->GetValue();
712 if (strCtrl.ToDouble (&dValue))
715 return (m_dDefaultScanRatio);
719 DialogGetProjectionParameters::getGeometry ()
721 return m_pRadioBoxGeometry->getSelectionStringValue();
725 DialogGetProjectionParameters::getTrace ()
727 return Trace::convertTraceNameToID(m_pRadioBoxTrace->getSelectionStringValue());
732 /////////////////////////////////////////////////////////////////////
733 // CLASS IDENTIFICATION
735 // DialogGetReconstructionParameters
736 /////////////////////////////////////////////////////////////////////
739 DialogGetReconstructionParameters::DialogGetReconstructionParameters (wxWindow* pParent, int iDefaultXSize,
740 int iDefaultYSize, int iDefaultFilterID, double dDefaultHammingParam,
741 int iDefaultFilterMethodID, int iDefaultFilterGenerationID, int iDefaultZeropad,
742 int iDefaultInterpID, int iDefaultInterpParam, int iDefaultBackprojectID, int iTrace)
743 : wxDialog (pParent, -1, "Set Reconstruction Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
745 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
747 pTopSizer->Add (new wxStaticText (this, -1, "Set Reconstruction Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
748 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
750 wxFlexGridSizer* pGridSizer = NULL;
751 if (theApp->getAdvancedOptions())
752 pGridSizer = new wxFlexGridSizer (4);
754 pGridSizer = new wxFlexGridSizer (3);
756 if (theApp->getAdvancedOptions())
757 m_pRadioBoxFilter = new StringValueAndTitleRadioBox (this, _T("Filter"), SignalFilter::getFilterCount(), SignalFilter::getFilterTitleArray(), SignalFilter::getFilterNameArray());
759 m_pRadioBoxFilter = new StringValueAndTitleRadioBox (this, _T("Filter"), SignalFilter::getReconstructFilterCount(), SignalFilter::getFilterTitleArray(), SignalFilter::getFilterNameArray());
760 m_pRadioBoxFilter->SetSelection (iDefaultFilterID);
761 pGridSizer->Add (m_pRadioBoxFilter, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
763 m_pRadioBoxFilterMethod = new StringValueAndTitleRadioBox (this, _T("Filter Method"), ProcessSignal::getFilterMethodCount(), ProcessSignal::getFilterMethodTitleArray(), ProcessSignal::getFilterMethodNameArray());
764 m_pRadioBoxFilterMethod->SetSelection (iDefaultFilterMethodID);
765 pGridSizer->Add (m_pRadioBoxFilterMethod, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
767 if (theApp->getAdvancedOptions()) {
768 m_pRadioBoxFilterGeneration = new StringValueAndTitleRadioBox (this, _T("Filter Generation"), ProcessSignal::getFilterGenerationCount(), ProcessSignal::getFilterGenerationTitleArray(), ProcessSignal::getFilterGenerationNameArray());
769 m_pRadioBoxFilterGeneration->SetSelection (iDefaultFilterGenerationID);
770 pGridSizer->Add (m_pRadioBoxFilterGeneration, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
772 m_pRadioBoxBackproject = new StringValueAndTitleRadioBox (this, _T("Backprojection"), Backprojector::getBackprojectCount(), Backprojector::getBackprojectTitleArray(), Backprojector::getBackprojectNameArray());
773 m_pRadioBoxBackproject->SetSelection (iDefaultBackprojectID);
774 pGridSizer->Add (m_pRadioBoxBackproject, 0, wxALL | wxALIGN_RIGHT | wxEXPAND);
777 m_pRadioBoxInterp = new StringValueAndTitleRadioBox (this, _T("Interpolation"), Backprojector::getInterpCount(), Backprojector::getInterpTitleArray(), Backprojector::getInterpNameArray());
778 m_pRadioBoxInterp->SetSelection (iDefaultInterpID);
779 pGridSizer->Add (m_pRadioBoxInterp, 0, wxALL | wxALIGN_RIGHT | wxEXPAND);
781 static const char* aszTraceTitle[] = {"None", "Full"};
782 static const char* aszTraceName[] = {"none", "full"};
783 m_pRadioBoxTrace = new StringValueAndTitleRadioBox (this, _T("Trace Level"), 2, aszTraceTitle, aszTraceName);
784 iTrace = clamp(iTrace, 0, 1);
785 m_pRadioBoxTrace->SetSelection (iTrace);
786 pGridSizer->Add (m_pRadioBoxTrace);
788 wxFlexGridSizer* pTextGridSizer = new wxFlexGridSizer (2);
789 std::ostringstream os;
791 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
792 pTextGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
793 pTextGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
794 std::ostringstream osYSize;
795 osYSize << iDefaultYSize;
796 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
797 pTextGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
798 pTextGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
800 std::ostringstream osHammingParam;
801 osHammingParam << dDefaultHammingParam;
802 m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, osHammingParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
803 pTextGridSizer->Add (new wxStaticText (this, -1, "Hamming Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
804 pTextGridSizer->Add (m_pTextCtrlFilterParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
806 if (theApp->getAdvancedOptions()) {
807 std::ostringstream osZeropad;
808 osZeropad << iDefaultZeropad;
809 m_pTextCtrlZeropad = new wxTextCtrl (this, -1, osZeropad.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
810 pTextGridSizer->Add (new wxStaticText (this, -1, "Zeropad"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
811 pTextGridSizer->Add (m_pTextCtrlZeropad, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
813 pGridSizer->Add (pTextGridSizer);
815 #if HAVE_FREQ_PREINTERP
816 std::ostringstream osInterpParam;
817 osInterpParam << iDefaultInterpParam;
818 m_pTextCtrlInterpParam = new wxTextCtrl (this, -1, osInterpParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
819 pGridSizer->Add (new wxStaticText (this, -1, "Interpolation Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
820 pGridSizer->Add (m_pTextCtrlInterpParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
823 pTopSizer->Add (pGridSizer, 1, wxALL, 3);
825 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
827 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
828 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
829 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
830 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
831 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
833 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
835 SetAutoLayout (true);
836 SetSizer (pTopSizer);
838 pTopSizer->Fit (this);
839 pTopSizer->SetSizeHints (this);
842 DialogGetReconstructionParameters::~DialogGetReconstructionParameters ()
848 DialogGetReconstructionParameters::getXSize ()
850 wxString strCtrl = m_pTextCtrlXSize->GetValue();
851 unsigned long lValue;
852 if (strCtrl.ToULong (&lValue))
855 return (m_iDefaultXSize);
859 DialogGetReconstructionParameters::getYSize ()
861 wxString strCtrl = m_pTextCtrlYSize->GetValue();
862 unsigned long lValue;
863 if (strCtrl.ToULong (&lValue))
866 return (m_iDefaultYSize);
870 DialogGetReconstructionParameters::getZeropad ()
872 if (theApp->getAdvancedOptions()) {
873 wxString strCtrl = m_pTextCtrlZeropad->GetValue();
874 unsigned long lValue;
875 if (strCtrl.ToULong (&lValue))
878 return (m_iDefaultZeropad);
885 DialogGetReconstructionParameters::getInterpParam ()
887 #if HAVE_FREQ_PREINTERP
888 wxString strCtrl = m_pTextCtrlInterpParam->GetValue();
889 unsigned long lValue;
890 if (strCtrl.ToULong (&lValue))
893 return (m_iDefaultInterpParam);
900 DialogGetReconstructionParameters::getFilterParam ()
902 wxString strCtrl = m_pTextCtrlFilterParam->GetValue();
904 if (strCtrl.ToDouble (&dValue))
907 return (m_dDefaultFilterParam);
911 DialogGetReconstructionParameters::getFilterName ()
913 return m_pRadioBoxFilter->getSelectionStringValue();
917 DialogGetReconstructionParameters::getFilterMethodName ()
919 return m_pRadioBoxFilterMethod->getSelectionStringValue();
923 DialogGetReconstructionParameters::getInterpName ()
925 return m_pRadioBoxInterp->getSelectionStringValue();
929 DialogGetReconstructionParameters::getTrace ()
932 if (strcmp("full", m_pRadioBoxTrace->getSelectionStringValue()) == 0)
933 iTrace = Trace::TRACE_PLOT;
938 DialogGetReconstructionParameters::getBackprojectName ()
940 if (theApp->getAdvancedOptions()) {
941 return m_pRadioBoxBackproject->getSelectionStringValue();
947 DialogGetReconstructionParameters::getFilterGenerationName ()
949 if (theApp->getAdvancedOptions()) {
950 return m_pRadioBoxFilterGeneration->getSelectionStringValue();
952 if (ProcessSignal::convertFilterMethodNameToID(m_pRadioBoxFilterMethod->getSelectionStringValue())
953 == ProcessSignal::FILTER_METHOD_CONVOLUTION)
956 return "inverse-fourier";
961 /////////////////////////////////////////////////////////////////////
962 // CLASS IDENTIFICATION
964 // DialogGetFilterParameters
965 /////////////////////////////////////////////////////////////////////
969 DialogGetFilterParameters::DialogGetFilterParameters (wxWindow* pParent, int iDefaultXSize, int iDefaultYSize, int iDefaultFilterID, double dDefaultFilterParam, double dDefaultBandwidth, int iDefaultDomainID, double dDefaultInputScale, double dDefaultOutputScale)
970 : wxDialog (pParent, -1, "Set Filter Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
972 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
974 pTopSizer->Add (new wxStaticText (this, -1, "Set Filter Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
975 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
977 wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (2);
979 m_pRadioBoxFilter = new StringValueAndTitleRadioBox (this, _T("Filter"), SignalFilter::getFilterCount(), SignalFilter::getFilterTitleArray(), SignalFilter::getFilterNameArray());
980 m_pRadioBoxFilter->SetSelection (iDefaultFilterID);
981 pGridSizer->Add (m_pRadioBoxFilter, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
983 m_pRadioBoxDomain = new StringValueAndTitleRadioBox (this, _T("Domain"), SignalFilter::getDomainCount(), SignalFilter::getDomainTitleArray(), SignalFilter::getDomainNameArray());
984 m_pRadioBoxDomain->SetSelection (iDefaultDomainID);
985 pGridSizer->Add (m_pRadioBoxDomain, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
987 std::ostringstream os;
989 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
990 pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
991 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
993 std::ostringstream osYSize;
994 osYSize << iDefaultYSize;
995 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
996 pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
997 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
999 std::ostringstream osFilterParam;
1000 osFilterParam << dDefaultFilterParam;
1001 m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, osFilterParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1002 pGridSizer->Add (new wxStaticText (this, -1, "Filter Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1003 pGridSizer->Add (m_pTextCtrlFilterParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1005 std::ostringstream osBandwidth;
1006 osBandwidth << dDefaultBandwidth;
1007 m_pTextCtrlBandwidth = new wxTextCtrl (this, -1, osBandwidth.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1008 pGridSizer->Add (new wxStaticText (this, -1, "Bandwidth"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1009 pGridSizer->Add (m_pTextCtrlBandwidth, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1011 std::ostringstream osInputScale;
1012 osInputScale << dDefaultInputScale;
1013 m_pTextCtrlInputScale = new wxTextCtrl (this, -1, osInputScale.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1014 pGridSizer->Add (new wxStaticText (this, -1, "Axis (input) Scale"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1015 pGridSizer->Add (m_pTextCtrlInputScale, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1017 std::ostringstream osOutputScale;
1018 osOutputScale << dDefaultOutputScale;
1019 m_pTextCtrlOutputScale = new wxTextCtrl (this, -1, osOutputScale.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1020 pGridSizer->Add (new wxStaticText (this, -1, "Filter Output Scale"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1021 pGridSizer->Add (m_pTextCtrlOutputScale, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1023 pTopSizer->Add (pGridSizer, 1, wxALL, 3);
1025 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1027 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1028 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
1029 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
1030 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1031 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1033 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1035 SetAutoLayout (true);
1036 SetSizer (pTopSizer);
1037 pTopSizer->Layout();
1038 pTopSizer->Fit (this);
1039 pTopSizer->SetSizeHints (this);
1042 DialogGetFilterParameters::~DialogGetFilterParameters ()
1048 DialogGetFilterParameters::getXSize ()
1050 wxString strCtrl = m_pTextCtrlXSize->GetValue();
1051 unsigned long lValue;
1052 if (strCtrl.ToULong (&lValue))
1055 return (m_iDefaultXSize);
1059 DialogGetFilterParameters::getYSize ()
1061 wxString strCtrl = m_pTextCtrlYSize->GetValue();
1062 unsigned long lValue;
1063 if (strCtrl.ToULong (&lValue))
1066 return (m_iDefaultYSize);
1070 DialogGetFilterParameters::getBandwidth ()
1072 wxString strCtrl = m_pTextCtrlBandwidth->GetValue();
1074 if (strCtrl.ToDouble (&dValue))
1077 return (m_dDefaultBandwidth);
1081 DialogGetFilterParameters::getFilterParam ()
1083 wxString strCtrl = m_pTextCtrlFilterParam->GetValue();
1085 if (strCtrl.ToDouble (&dValue))
1088 return (m_dDefaultFilterParam);
1092 DialogGetFilterParameters::getInputScale ()
1094 wxString strCtrl = m_pTextCtrlInputScale->GetValue();
1096 if (strCtrl.ToDouble (&dValue))
1099 return (m_dDefaultInputScale);
1103 DialogGetFilterParameters::getOutputScale ()
1105 wxString strCtrl = m_pTextCtrlOutputScale->GetValue();
1107 if (strCtrl.ToDouble (&dValue))
1110 return (m_dDefaultOutputScale);
1114 DialogGetFilterParameters::getFilterName ()
1116 return m_pRadioBoxFilter->getSelectionStringValue();
1120 DialogGetFilterParameters::getDomainName ()
1122 return m_pRadioBoxDomain->getSelectionStringValue();
1126 ///////////////////////////////////////////////////////////////////////
1127 // CLASS IMPLEMENTATION
1128 // DialogExportParameters
1129 ///////////////////////////////////////////////////////////////////////
1131 DialogExportParameters::DialogExportParameters (wxWindow* pParent, int iDefaultFormatID)
1132 : wxDialog (pParent, -1, "Select ExportParameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1134 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1136 pTopSizer->Add (new wxStaticText (this, -1, "Select Export Format"), 0, wxALIGN_CENTER | wxALL, 5);
1138 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5);
1140 m_pRadioBoxFormat = new StringValueAndTitleRadioBox (this, _T("Export Type"), ImageFile::getFormatCount(), ImageFile::getFormatTitleArray(), ImageFile::getFormatNameArray());
1141 m_pRadioBoxFormat->SetSelection (iDefaultFormatID);
1142 pTopSizer->Add (m_pRadioBoxFormat, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
1144 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1146 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1147 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
1148 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
1149 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1150 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1152 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1154 SetAutoLayout (true);
1155 SetSizer (pTopSizer);
1156 pTopSizer->Fit (this);
1157 pTopSizer->SetSizeHints (this);
1161 DialogExportParameters::getFormatName()
1163 return m_pRadioBoxFormat->getSelectionStringValue();
1167 /////////////////////////////////////////////////////////////////////
1168 // CLASS DiaglogGetXYSize Implementation
1169 /////////////////////////////////////////////////////////////////////
1171 DialogGetXYSize::DialogGetXYSize (wxWindow* pParent, const char* const pszTitle, int iDefaultXSize, int iDefaultYSize)
1172 : wxDialog (pParent, -1, pszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1174 m_iDefaultXSize = iDefaultXSize;
1175 m_iDefaultYSize = iDefaultYSize;
1177 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1179 pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
1181 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1183 std::ostringstream os;
1184 os << iDefaultXSize;
1185 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1186 std::ostringstream osYSize;
1187 osYSize << iDefaultYSize;
1188 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1190 wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
1191 pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1192 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_CENTER_VERTICAL);
1193 pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1194 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_CENTER_VERTICAL);
1195 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
1197 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1199 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1200 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
1201 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
1202 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1203 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1205 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1207 SetAutoLayout (true);
1208 SetSizer (pTopSizer);
1209 pTopSizer->Fit (this);
1210 pTopSizer->SetSizeHints (this);
1213 DialogGetXYSize::~DialogGetXYSize ()
1218 DialogGetXYSize::getXSize ()
1220 wxString strCtrl = m_pTextCtrlXSize->GetValue();
1222 if (strCtrl.ToLong (&lValue))
1225 return (m_iDefaultXSize);
1229 DialogGetXYSize::getYSize ()
1231 wxString strCtrl = m_pTextCtrlYSize->GetValue();
1233 if (strCtrl.ToLong (&lValue))
1236 return (m_iDefaultYSize);
1241 /////////////////////////////////////////////////////////////////////
1242 // CLASS IDENTIFICATION
1244 // DialogGetConvertPolarParameters
1245 /////////////////////////////////////////////////////////////////////
1247 DialogGetConvertPolarParameters::DialogGetConvertPolarParameters (wxWindow* pParent, const char* const pszTitle,
1248 int iDefaultXSize, int iDefaultYSize, int iDefaultInterpolationID, int iDefaultZeropad)
1249 : wxDialog (pParent, -1, pszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1251 m_iDefaultXSize = iDefaultXSize;
1252 m_iDefaultYSize = iDefaultYSize;
1253 m_iDefaultZeropad = iDefaultZeropad;
1255 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1257 pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
1259 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1261 std::ostringstream os;
1262 os << iDefaultXSize;
1263 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1264 std::ostringstream osYSize;
1265 osYSize << iDefaultYSize;
1266 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1268 wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (2);
1270 m_pRadioBoxInterpolation = new StringValueAndTitleRadioBox (this, _T("Interpolation"), Projections::getInterpCount(), Projections::getInterpTitleArray(), Projections::getInterpNameArray());
1271 m_pRadioBoxInterpolation->SetSelection (iDefaultInterpolationID);
1272 pGridSizer->Add (m_pRadioBoxInterpolation, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
1274 pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1275 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1276 pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1277 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1278 if (iDefaultZeropad >= 0) {
1279 std::ostringstream osZeropad;
1280 osZeropad << iDefaultZeropad;
1281 m_pTextCtrlZeropad = new wxTextCtrl (this, -1, osZeropad.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1282 pGridSizer->Add (new wxStaticText (this, -1, "Zeropad"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1283 pGridSizer->Add (m_pTextCtrlZeropad, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1286 pTopSizer->Add (pGridSizer, 1, wxALL, 3);
1288 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1290 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1291 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
1292 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
1293 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1294 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1296 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1298 SetAutoLayout (true);
1299 SetSizer (pTopSizer);
1300 pTopSizer->Layout();
1301 pTopSizer->Fit (this);
1302 pTopSizer->SetSizeHints (this);
1306 DialogGetConvertPolarParameters::~DialogGetConvertPolarParameters ()
1312 DialogGetConvertPolarParameters::getXSize ()
1314 wxString strCtrl = m_pTextCtrlXSize->GetValue();
1315 unsigned long lValue;
1316 if (strCtrl.ToULong (&lValue))
1319 return (m_iDefaultXSize);
1323 DialogGetConvertPolarParameters::getYSize ()
1325 wxString strCtrl = m_pTextCtrlYSize->GetValue();
1326 unsigned long lValue;
1327 if (strCtrl.ToULong (&lValue))
1330 return (m_iDefaultYSize);
1334 DialogGetConvertPolarParameters::getZeropad ()
1336 wxString strCtrl = m_pTextCtrlZeropad->GetValue();
1337 unsigned long lValue;
1338 if (strCtrl.ToULong (&lValue))
1341 return (m_iDefaultZeropad);
1345 DialogGetConvertPolarParameters::getInterpolationName ()
1347 return m_pRadioBoxInterpolation->getSelectionStringValue();