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.28 2001/02/08 06:25:07 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"
52 //#include "ctsupport.h"
53 //#include "scanner.h"
54 //#include "phantom.h"
56 //#include "backprojectors.h"
59 #include "imagefile.h"
61 #if defined(MSVC) || HAVE_SSTREAM
64 #include <sstream_subst>
68 ///////////////////////////////////////////////////////////////////////
69 // CLASS IMPLEMENTATION
70 // StringValueAndTitleListBox
71 ///////////////////////////////////////////////////////////////////////
73 StringValueAndTitleListBox::StringValueAndTitleListBox (wxDialog* pParent, int nChoices, const char* aszTitle[], const char* aszValue[])
76 wxString* psTitle = new wxString [nChoices];
77 for (int i = 0; i < nChoices; i++)
78 psTitle[i] = aszTitle[i];
80 Create (pParent, -1, wxDefaultPosition, wxSize(200,-1), nChoices, psTitle, wxLB_SINGLE | wxLB_NEEDED_SB);
82 m_ppszValues = aszValue;
87 StringValueAndTitleListBox::getSelectionStringValue () const
89 return m_ppszValues[GetSelection()];
93 ///////////////////////////////////////////////////////////////////////
94 // CLASS IMPLEMENTATION
96 ///////////////////////////////////////////////////////////////////////
98 DialogGetPhantom::DialogGetPhantom (wxWindow* pParent, int iDefaultPhantom)
99 : wxDialog (pParent, -1, "Select Phantom", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
101 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
103 pTopSizer->Add (new wxStaticText (this, -1, "Select Phantom"), 0, wxALIGN_CENTER | wxALL, 5);
105 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5);
107 m_pListBoxPhantom = new StringValueAndTitleListBox (this, Phantom::getPhantomCount(), Phantom::getPhantomTitleArray(), Phantom::getPhantomNameArray());
108 m_pListBoxPhantom->SetSelection (iDefaultPhantom);
109 pTopSizer->Add (m_pListBoxPhantom, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
111 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
113 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
114 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
115 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
116 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
117 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
119 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
121 SetAutoLayout (true);
122 SetSizer (pTopSizer);
123 pTopSizer->Fit (this);
124 pTopSizer->SetSizeHints (this);
128 DialogGetPhantom::getPhantom()
130 return m_pListBoxPhantom->getSelectionStringValue();
134 ///////////////////////////////////////////////////////////////////////
135 // CLASS IMPLEMENTATION
136 // DialogGetComparisonImage
137 ///////////////////////////////////////////////////////////////////////
139 DialogGetComparisonImage::DialogGetComparisonImage (wxWindow* pParent, const char* const pszTitle, const std::vector<ImageFileDocument*>& rVecIF, bool bShowMakeDifference)
140 : wxDialog (pParent, -1, pszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION), m_rVecIF(rVecIF)
142 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
144 pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxALL, 5);
146 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5);
148 int iNImages = m_rVecIF.size();
149 wxString* pstrImages = new wxString [iNImages];
150 for (int i = 0; i < iNImages; i++) {
151 ImageFileView* pView = dynamic_cast<ImageFileView*>(m_rVecIF[i]->GetFirstView());
153 pstrImages[i] = pView->getFrame()->GetTitle();
156 m_pListBoxImageChoices = new wxListBox (this, -1, wxDefaultPosition, wxDefaultSize, iNImages, pstrImages, wxLB_SINGLE);
157 delete [] pstrImages;
159 m_pListBoxImageChoices->SetSelection (0);
160 pTopSizer->Add (m_pListBoxImageChoices, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
162 if (bShowMakeDifference) {
163 m_pMakeDifferenceImage = new wxCheckBox (this, -1, "Make Difference Image");
164 m_pMakeDifferenceImage->SetValue (FALSE);
165 pTopSizer->Add (m_pMakeDifferenceImage, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
167 m_pMakeDifferenceImage = NULL;
169 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
171 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
172 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
173 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
174 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
175 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
177 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
179 SetAutoLayout (true);
180 SetSizer (pTopSizer);
181 pTopSizer->Fit (this);
182 pTopSizer->SetSizeHints (this);
186 DialogGetComparisonImage::getImageFileDocument()
188 return m_rVecIF[ m_pListBoxImageChoices->GetSelection() ];
192 DialogGetComparisonImage::getMakeDifferenceImage()
194 if (m_pMakeDifferenceImage)
195 return m_pMakeDifferenceImage->GetValue();
201 /////////////////////////////////////////////////////////////////////
202 // CLASS DiaglogGetMinMax Implementation
203 /////////////////////////////////////////////////////////////////////
205 DialogGetMinMax::DialogGetMinMax (wxWindow* pParent, const char* const pszTitle, double dDefaultMin, double dDefaultMax)
206 : wxDialog (pParent, -1, pszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
208 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
210 pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
212 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
214 std::ostringstream os;
216 m_pTextCtrlMin = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
217 std::ostringstream osMax;
218 osMax << dDefaultMax;
219 m_pTextCtrlMax = new wxTextCtrl (this, -1, osMax.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
221 wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
222 pGridSizer->Add (new wxStaticText (this, -1, "Minimum"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
223 pGridSizer->Add (m_pTextCtrlMin, 0, wxALIGN_CENTER_VERTICAL);
224 pGridSizer->Add (new wxStaticText (this, -1, "Maximum"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
225 pGridSizer->Add (m_pTextCtrlMax, 0, wxALIGN_CENTER_VERTICAL);
226 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
228 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
230 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
231 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
232 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
233 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
234 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
236 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
238 SetAutoLayout (true);
239 SetSizer (pTopSizer);
240 pTopSizer->Fit (this);
241 pTopSizer->SetSizeHints (this);
244 DialogGetMinMax::~DialogGetMinMax ()
249 DialogGetMinMax::getMinimum ()
251 wxString strCtrl = m_pTextCtrlMin->GetValue();
253 if (strCtrl.ToDouble (&dValue))
256 return (m_dDefaultMin);
260 DialogGetMinMax::getMaximum ()
262 wxString strCtrl = m_pTextCtrlMax->GetValue();
264 if (strCtrl.ToDouble (&dValue))
267 return (m_dDefaultMax);
271 /////////////////////////////////////////////////////////////////////
272 // CLASS DialogAutoScaleParameters IMPLEMENTATION
273 /////////////////////////////////////////////////////////////////////
275 DialogAutoScaleParameters::DialogAutoScaleParameters (wxWindow *pParent, double mean, double mode, double median, double stddev, double dDefaultScaleFactor)
276 : wxDialog (pParent, -1, "Auto Scale Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION), m_dMean(mean), m_dMode(mode), m_dMedian(median), m_dStdDev(stddev)
278 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
280 pTopSizer->Add (new wxStaticText (this, -1, "Auto Scale Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
282 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
285 asTitle[0] = "Median";
289 m_pListBoxCenter = new wxListBox (this, -1, wxDefaultPosition, wxDefaultSize, 3, asTitle, wxLB_SINGLE | wxLB_NEEDED_SB);
290 m_pListBoxCenter->SetSelection (0);
291 pTopSizer->Add (m_pListBoxCenter, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
293 wxGridSizer *pGridSizer = new wxGridSizer (2);
294 pGridSizer->Add (new wxStaticText (this, -1, "Standard Deviation Factor"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
295 std::ostringstream osDefaultFactor;
296 osDefaultFactor << dDefaultScaleFactor;
297 m_pTextCtrlStdDevFactor = new wxTextCtrl (this, -1, osDefaultFactor.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
298 pGridSizer->Add (m_pTextCtrlStdDevFactor, 0, wxALIGN_CENTER_VERTICAL);
299 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
301 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
303 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
304 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
305 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
306 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
307 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
309 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
311 SetAutoLayout (true);
312 SetSizer (pTopSizer);
313 pTopSizer->Fit (this);
314 pTopSizer->SetSizeHints (this);
318 DialogAutoScaleParameters::getMinMax (double* pMin, double* pMax)
320 int iCenter = m_pListBoxCenter->GetSelection();
321 double dCenter = m_dMedian;
324 else if (iCenter == 2)
327 wxString sStddevFactor = m_pTextCtrlStdDevFactor->GetValue();
329 if (! sStddevFactor.ToDouble (&dValue)) {
330 *theApp->getLog() << "Error: Non-numeric Standard Deviation Factor of " << sStddevFactor << "\n";
333 double dHalfWidth = dValue * m_dStdDev / 2;
334 *pMin = dCenter - dHalfWidth;
335 *pMax = dCenter + dHalfWidth;
336 *theApp->getLog() << "Setting minimum to " << *pMin << " and maximum to " << *pMax << "\n";
342 DialogAutoScaleParameters::getAutoScaleFactor ()
344 wxString sStddevFactor = m_pTextCtrlStdDevFactor->GetValue();
346 if (! sStddevFactor.ToDouble (&dValue)) {
347 *theApp->getLog() << "Error: Non-numeric Standard Deviation Factor of " << sStddevFactor << "\n";
354 /////////////////////////////////////////////////////////////////////
355 // CLASS IDENTIFICATION
357 // DialogGetRasterParameters
358 /////////////////////////////////////////////////////////////////////
360 DialogGetRasterParameters::DialogGetRasterParameters
361 (wxWindow* pParent, int iDefaultXSize, int iDefaultYSize, int iDefaultNSamples, double dDefaultViewRatio)
362 : wxDialog (pParent, -1, "Set Rasterization Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
364 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
366 pTopSizer->Add (new wxStaticText (this, -1, "Set Rasterization Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
368 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
370 wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
371 std::ostringstream os;
373 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
374 pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
375 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_CENTER_VERTICAL);
376 std::ostringstream osYSize;
377 osYSize << iDefaultYSize;
378 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
379 pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
380 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_CENTER_VERTICAL);
381 std::ostringstream osViewRatio;
382 osViewRatio << dDefaultViewRatio;
383 m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, osViewRatio.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
384 pGridSizer->Add (new wxStaticText (this, -1, "View Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
385 pGridSizer->Add (m_pTextCtrlViewRatio, 0, wxALIGN_CENTER_VERTICAL);
386 std::ostringstream osNSamples;
387 osNSamples << iDefaultNSamples;
388 m_pTextCtrlNSamples = new wxTextCtrl (this, -1, osNSamples.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
389 pGridSizer->Add (new wxStaticText (this, -1, "Samples per Pixel"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
390 pGridSizer->Add (m_pTextCtrlNSamples, 0, wxALIGN_CENTER_VERTICAL);
392 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
394 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
396 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
397 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
398 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
399 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
400 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
402 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
404 SetAutoLayout (true);
405 SetSizer (pTopSizer);
406 pTopSizer->Fit (this);
407 pTopSizer->SetSizeHints (this);
410 DialogGetRasterParameters::~DialogGetRasterParameters ()
416 DialogGetRasterParameters::getXSize ()
418 wxString strCtrl = m_pTextCtrlXSize->GetValue();
419 unsigned long lValue;
420 if (strCtrl.ToULong (&lValue))
423 return (m_iDefaultXSize);
427 DialogGetRasterParameters::getYSize ()
429 wxString strCtrl = m_pTextCtrlYSize->GetValue();
430 unsigned long lValue;
431 if (strCtrl.ToULong (&lValue))
434 return (m_iDefaultYSize);
438 DialogGetRasterParameters::getNSamples ()
440 wxString strCtrl = m_pTextCtrlNSamples->GetValue();
441 unsigned long lValue;
442 if (strCtrl.ToULong (&lValue))
445 return (m_iDefaultNSamples);
449 DialogGetRasterParameters::getViewRatio ()
451 wxString strCtrl = m_pTextCtrlViewRatio->GetValue();
453 if (strCtrl.ToDouble (&dValue))
456 return (m_dDefaultViewRatio);
460 /////////////////////////////////////////////////////////////////////
461 // CLASS IDENTIFICATION
463 // DialogGetProjectionParameters
464 /////////////////////////////////////////////////////////////////////
467 DialogGetProjectionParameters::DialogGetProjectionParameters
468 (wxWindow* pParent, int iDefaultNDet, int iDefaultNView, int iDefaultNSamples,
469 double dDefaultRotAngle, double dDefaultFocalLength, double dDefaultViewRatio,
470 double dDefaultScanRatio, int iDefaultGeometry, int iDefaultTrace)
471 : wxDialog (pParent, -1, "Set Projection Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
473 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
475 m_dDefaultRotAngle = dDefaultRotAngle;
476 m_dDefaultFocalLength = dDefaultFocalLength;
477 m_dDefaultViewRatio = dDefaultViewRatio;
478 m_dDefaultScanRatio = dDefaultScanRatio;
479 m_iDefaultNSamples = iDefaultNSamples;
480 m_iDefaultNView = iDefaultNView;
481 m_iDefaultNDet = iDefaultNDet;
482 m_iDefaultTrace = iDefaultTrace;
483 m_iDefaultGeometry = iDefaultGeometry;
485 pTopSizer->Add (new wxStaticText (this, -1, "Set Projection Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
487 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
489 wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (2);
490 pGridSizer->Add (new wxStaticText (this, -1, "Scanner Geometry"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
491 m_pListBoxGeometry = new StringValueAndTitleListBox (this, Scanner::getGeometryCount(), Scanner::getGeometryTitleArray(), Scanner::getGeometryNameArray());
492 m_pListBoxGeometry->SetSelection (iDefaultGeometry);
494 pGridSizer->Add (m_pListBoxGeometry, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
496 std::ostringstream os;
498 m_pTextCtrlNDet = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
499 pGridSizer->Add (new wxStaticText (this, -1, "Detectors"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
500 pGridSizer->Add (m_pTextCtrlNDet, 0, wxALIGN_CENTER_VERTICAL);
501 std::ostringstream osNView;
502 osNView << iDefaultNView;
503 m_pTextCtrlNView = new wxTextCtrl (this, -1, osNView.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
504 pGridSizer->Add (new wxStaticText (this, -1, "Views"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
505 pGridSizer->Add (m_pTextCtrlNView, 0, wxALIGN_CENTER_VERTICAL);
506 std::ostringstream osNSamples;
507 osNSamples << iDefaultNSamples;
508 m_pTextCtrlNSamples = new wxTextCtrl (this, -1, osNSamples.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
509 pGridSizer->Add (new wxStaticText (this, -1, "Samples per Detector"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
510 pGridSizer->Add (m_pTextCtrlNSamples, 0, wxALIGN_CENTER_VERTICAL);
511 std::ostringstream osRotAngle;
512 osRotAngle << dDefaultRotAngle;
513 m_pTextCtrlRotAngle = new wxTextCtrl (this, -1, osRotAngle.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
514 pGridSizer->Add (new wxStaticText (this, -1, "Rotation Angle (PI units)"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
515 pGridSizer->Add (m_pTextCtrlRotAngle, 0, wxALIGN_CENTER_VERTICAL);
516 std::ostringstream osFocalLength;
517 osFocalLength << dDefaultFocalLength;
518 m_pTextCtrlFocalLength = new wxTextCtrl (this, -1, osFocalLength.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
519 pGridSizer->Add (new wxStaticText (this, -1, "Focal Length Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
520 pGridSizer->Add (m_pTextCtrlFocalLength, 0, wxALIGN_CENTER_VERTICAL);
521 std::ostringstream osViewRatio;
522 osViewRatio << dDefaultViewRatio;
523 m_pTextCtrlViewRatio = new wxTextCtrl (this, -1, osViewRatio.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
524 pGridSizer->Add (new wxStaticText (this, -1, "View Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
525 pGridSizer->Add (m_pTextCtrlViewRatio, 0, wxALIGN_CENTER_VERTICAL);
526 std::ostringstream osScanRatio;
527 osScanRatio << dDefaultScanRatio;
528 m_pTextCtrlScanRatio = new wxTextCtrl (this, -1, osScanRatio.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
529 pGridSizer->Add (new wxStaticText (this, -1, "Scan Ratio"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
530 pGridSizer->Add (m_pTextCtrlScanRatio, 0, wxALIGN_CENTER_VERTICAL);
532 m_pListBoxTrace = new StringValueAndTitleListBox (this, Trace::getTraceCount(), Trace::getTraceTitleArray(), Trace::getTraceNameArray());
533 m_pListBoxTrace->SetSelection (iDefaultTrace);
535 pGridSizer->Add (new wxStaticText (this, -1, "Trace Level"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
536 pGridSizer->Add (m_pListBoxTrace, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
537 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
539 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
541 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
542 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
543 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
544 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
545 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
547 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
549 SetAutoLayout (true);
550 SetSizer (pTopSizer);
551 pTopSizer->Fit (this);
552 pTopSizer->SetSizeHints (this);
555 DialogGetProjectionParameters::~DialogGetProjectionParameters ()
561 DialogGetProjectionParameters::getNDet ()
563 wxString strCtrl = m_pTextCtrlNDet->GetValue();
564 unsigned long lValue;
565 if (strCtrl.ToULong (&lValue))
568 return (m_iDefaultNDet);
572 DialogGetProjectionParameters::getNView ()
574 wxString strCtrl = m_pTextCtrlNView->GetValue();
575 unsigned long lValue;
576 if (strCtrl.ToULong (&lValue))
579 return (m_iDefaultNView);
584 DialogGetProjectionParameters::getNSamples ()
586 wxString strCtrl = m_pTextCtrlNSamples->GetValue();
587 unsigned long lValue;
588 if (strCtrl.ToULong (&lValue))
591 return (m_iDefaultNSamples);
595 DialogGetProjectionParameters::getRotAngle ()
597 wxString strCtrl = m_pTextCtrlRotAngle->GetValue();
599 if (strCtrl.ToDouble (&dValue))
600 return (dValue * PI);
602 return (m_dDefaultRotAngle);
606 DialogGetProjectionParameters::getFocalLengthRatio ()
608 wxString strCtrl = m_pTextCtrlFocalLength->GetValue();
610 if (strCtrl.ToDouble (&dValue))
613 return (m_dDefaultFocalLength);
617 DialogGetProjectionParameters::getViewRatio ()
619 wxString strCtrl = m_pTextCtrlViewRatio->GetValue();
621 if (strCtrl.ToDouble (&dValue))
624 return (m_dDefaultViewRatio);
628 DialogGetProjectionParameters::getScanRatio ()
630 wxString strCtrl = m_pTextCtrlScanRatio->GetValue();
632 if (strCtrl.ToDouble (&dValue))
635 return (m_dDefaultScanRatio);
639 DialogGetProjectionParameters::getGeometry ()
641 return m_pListBoxGeometry->getSelectionStringValue();
645 DialogGetProjectionParameters::getTrace ()
647 return Trace::convertTraceNameToID(m_pListBoxTrace->getSelectionStringValue());
652 /////////////////////////////////////////////////////////////////////
653 // CLASS IDENTIFICATION
655 // DialogGetReconstructionParameters
656 /////////////////////////////////////////////////////////////////////
659 DialogGetReconstructionParameters::DialogGetReconstructionParameters (wxWindow* pParent, int iDefaultXSize, int iDefaultYSize, int iDefaultFilterID, double dDefaultFilterParam, int iDefaultFilterMethodID, int iDefaultFilterGenerationID, int iDefaultZeropad, int iDefaultInterpID, int iDefaultInterpParam, int iDefaultBackprojectID, int iTrace)
660 : wxDialog (pParent, -1, "Set Reconstruction Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
662 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
664 pTopSizer->Add (new wxStaticText (this, -1, "Set Reconstruction Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
666 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
668 std::ostringstream os;
670 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
671 std::ostringstream osYSize;
672 osYSize << iDefaultYSize;
673 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
674 std::ostringstream osFilterParam;
675 osFilterParam << dDefaultFilterParam;
676 m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, osFilterParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
677 std::ostringstream osZeropad;
678 osZeropad << iDefaultZeropad;
679 m_pTextCtrlZeropad = new wxTextCtrl (this, -1, osZeropad.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
680 std::ostringstream osInterpParam;
681 osInterpParam << iDefaultInterpParam;
682 m_pTextCtrlInterpParam = new wxTextCtrl (this, -1, osInterpParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
684 wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (6);
685 pGridSizer->Add (new wxStaticText (this, -1, "Filter"), 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
686 m_pListBoxFilter = new StringValueAndTitleListBox (this, SignalFilter::getFilterCount(), SignalFilter::getFilterTitleArray(), SignalFilter::getFilterNameArray());
687 m_pListBoxFilter->SetSelection (iDefaultFilterID);
688 pGridSizer->Add (m_pListBoxFilter, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
690 m_pListBoxFilterMethod = new StringValueAndTitleListBox (this, ProcessSignal::getFilterMethodCount(), ProcessSignal::getFilterMethodTitleArray(), ProcessSignal::getFilterMethodNameArray());
691 m_pListBoxFilterMethod->SetSelection (iDefaultFilterMethodID);
692 pGridSizer->Add (new wxStaticText (this, -1, "Filter Method"), 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
693 pGridSizer->Add (m_pListBoxFilterMethod, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
695 m_pListBoxFilterGeneration = new StringValueAndTitleListBox (this, ProcessSignal::getFilterGenerationCount(), ProcessSignal::getFilterGenerationTitleArray(), ProcessSignal::getFilterGenerationNameArray());
696 m_pListBoxFilterGeneration->SetSelection (iDefaultFilterGenerationID);
697 pGridSizer->Add (new wxStaticText (this, -1, "Filter Generation"), 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
698 pGridSizer->Add (m_pListBoxFilterGeneration, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
701 m_pListBoxBackproject = new StringValueAndTitleListBox (this, Backprojector::getBackprojectCount(), Backprojector::getBackprojectTitleArray(), Backprojector::getBackprojectNameArray());
702 m_pListBoxBackproject->SetSelection (iDefaultBackprojectID);
703 pGridSizer->Add (new wxStaticText (this, -1, "Backprojection"), 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
704 pGridSizer->Add (m_pListBoxBackproject, 0, wxALL | wxALIGN_RIGHT | wxEXPAND);
706 m_pListBoxInterp = new StringValueAndTitleListBox (this, Backprojector::getInterpCount(), Backprojector::getInterpTitleArray(), Backprojector::getInterpNameArray());
707 m_pListBoxInterp->SetSelection (iDefaultInterpID);
708 pGridSizer->Add (new wxStaticText (this, -1, "Interpolation"), 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
709 pGridSizer->Add (m_pListBoxInterp, 0, wxALL | wxALIGN_RIGHT | wxEXPAND);
712 pGridSizer->Add (new wxStaticText (this, -1, "Trace Level"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
713 static const char* aszTraceTitle[] = {"None", "Full"};
714 static const char* aszTraceName[] = {"none", "full"};
715 m_pListBoxTrace = new StringValueAndTitleListBox (this, 2, aszTraceTitle, aszTraceName);
716 iTrace = clamp(iTrace, 0, 1);
717 m_pListBoxTrace->SetSelection (iTrace);
718 pGridSizer->Add (m_pListBoxTrace);
720 pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
721 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
722 pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
723 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
724 pGridSizer->Add (new wxStaticText (this, -1, "Filter Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
725 pGridSizer->Add (m_pTextCtrlFilterParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
726 pGridSizer->Add (new wxStaticText (this, -1, "Zeropad"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
727 pGridSizer->Add (m_pTextCtrlZeropad, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
728 pGridSizer->Add (new wxStaticText (this, -1, "Interpolation Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
729 pGridSizer->Add (m_pTextCtrlInterpParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
731 pTopSizer->Add (pGridSizer, 1, wxALL, 3);
733 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
735 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
736 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
737 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
738 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
739 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
741 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
743 SetAutoLayout (true);
744 SetSizer (pTopSizer);
746 pTopSizer->Fit (this);
747 pTopSizer->SetSizeHints (this);
750 DialogGetReconstructionParameters::~DialogGetReconstructionParameters ()
756 DialogGetReconstructionParameters::getXSize ()
758 wxString strCtrl = m_pTextCtrlXSize->GetValue();
759 unsigned long lValue;
760 if (strCtrl.ToULong (&lValue))
763 return (m_iDefaultXSize);
767 DialogGetReconstructionParameters::getYSize ()
769 wxString strCtrl = m_pTextCtrlYSize->GetValue();
770 unsigned long lValue;
771 if (strCtrl.ToULong (&lValue))
774 return (m_iDefaultYSize);
778 DialogGetReconstructionParameters::getZeropad ()
780 wxString strCtrl = m_pTextCtrlZeropad->GetValue();
781 unsigned long lValue;
782 if (strCtrl.ToULong (&lValue))
785 return (m_iDefaultZeropad);
790 DialogGetReconstructionParameters::getInterpParam ()
792 wxString strCtrl = m_pTextCtrlInterpParam->GetValue();
793 unsigned long lValue;
794 if (strCtrl.ToULong (&lValue))
797 return (m_iDefaultInterpParam);
801 DialogGetReconstructionParameters::getFilterParam ()
803 wxString strCtrl = m_pTextCtrlFilterParam->GetValue();
805 if (strCtrl.ToDouble (&dValue))
808 return (m_dDefaultFilterParam);
812 DialogGetReconstructionParameters::getFilterName ()
814 return m_pListBoxFilter->getSelectionStringValue();
818 DialogGetReconstructionParameters::getFilterMethodName ()
820 return m_pListBoxFilterMethod->getSelectionStringValue();
824 DialogGetReconstructionParameters::getInterpName ()
826 return m_pListBoxInterp->getSelectionStringValue();
830 DialogGetReconstructionParameters::getTrace ()
833 if (strcmp("full", m_pListBoxTrace->getSelectionStringValue()) == 0)
834 iTrace = Trace::TRACE_PLOT;
839 DialogGetReconstructionParameters::getBackprojectName ()
841 return m_pListBoxBackproject->getSelectionStringValue();
845 DialogGetReconstructionParameters::getFilterGenerationName ()
847 return m_pListBoxFilterGeneration->getSelectionStringValue();
851 /////////////////////////////////////////////////////////////////////
852 // CLASS IDENTIFICATION
854 // DialogGetFilterParameters
855 /////////////////////////////////////////////////////////////////////
859 DialogGetFilterParameters::DialogGetFilterParameters (wxWindow* pParent, int iDefaultXSize, int iDefaultYSize, int iDefaultFilterID, double dDefaultFilterParam, double dDefaultBandwidth, int iDefaultDomainID, double dDefaultInputScale, double dDefaultOutputScale)
860 : wxDialog (pParent, -1, "Set Filter Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
862 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
864 pTopSizer->Add (new wxStaticText (this, -1, "Set Filter Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
866 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
868 std::ostringstream os;
870 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
871 std::ostringstream osYSize;
872 osYSize << iDefaultYSize;
873 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
874 std::ostringstream osFilterParam;
875 osFilterParam << dDefaultFilterParam;
876 m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, osFilterParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
877 std::ostringstream osBandwidth;
878 osBandwidth << dDefaultBandwidth;
879 m_pTextCtrlBandwidth = new wxTextCtrl (this, -1, osBandwidth.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
880 std::ostringstream osInputScale;
881 osInputScale << dDefaultInputScale;
882 m_pTextCtrlInputScale = new wxTextCtrl (this, -1, osInputScale.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
883 std::ostringstream osOutputScale;
884 osOutputScale << dDefaultOutputScale;
885 m_pTextCtrlOutputScale = new wxTextCtrl (this, -1, osOutputScale.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
887 wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (2);
888 pGridSizer->Add (new wxStaticText (this, -1, "Filter"), 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
889 m_pListBoxFilter = new StringValueAndTitleListBox (this, SignalFilter::getFilterCount(), SignalFilter::getFilterTitleArray(), SignalFilter::getFilterNameArray());
890 m_pListBoxFilter->SetSelection (iDefaultFilterID);
891 pGridSizer->Add (m_pListBoxFilter, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
893 m_pListBoxDomain = new StringValueAndTitleListBox (this, SignalFilter::getDomainCount(), SignalFilter::getDomainTitleArray(), SignalFilter::getDomainNameArray());
894 m_pListBoxDomain->SetSelection (iDefaultDomainID);
895 pGridSizer->Add (new wxStaticText (this, -1, "Domain"), 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
896 pGridSizer->Add (m_pListBoxDomain, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
898 pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
899 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
900 pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
901 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
902 pGridSizer->Add (new wxStaticText (this, -1, "Filter Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
903 pGridSizer->Add (m_pTextCtrlFilterParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
904 pGridSizer->Add (new wxStaticText (this, -1, "Bandwidth"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
905 pGridSizer->Add (m_pTextCtrlBandwidth, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
906 pGridSizer->Add (new wxStaticText (this, -1, "Axis (input) Scale"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
907 pGridSizer->Add (m_pTextCtrlInputScale, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
908 pGridSizer->Add (new wxStaticText (this, -1, "Filter Output Scale"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
909 pGridSizer->Add (m_pTextCtrlOutputScale, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
911 pTopSizer->Add (pGridSizer, 1, wxALL, 3);
913 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
915 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
916 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
917 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
918 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
919 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
921 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
923 SetAutoLayout (true);
924 SetSizer (pTopSizer);
926 pTopSizer->Fit (this);
927 pTopSizer->SetSizeHints (this);
930 DialogGetFilterParameters::~DialogGetFilterParameters ()
936 DialogGetFilterParameters::getXSize ()
938 wxString strCtrl = m_pTextCtrlXSize->GetValue();
939 unsigned long lValue;
940 if (strCtrl.ToULong (&lValue))
943 return (m_iDefaultXSize);
947 DialogGetFilterParameters::getYSize ()
949 wxString strCtrl = m_pTextCtrlYSize->GetValue();
950 unsigned long lValue;
951 if (strCtrl.ToULong (&lValue))
954 return (m_iDefaultYSize);
958 DialogGetFilterParameters::getBandwidth ()
960 wxString strCtrl = m_pTextCtrlBandwidth->GetValue();
962 if (strCtrl.ToDouble (&dValue))
965 return (m_dDefaultBandwidth);
969 DialogGetFilterParameters::getFilterParam ()
971 wxString strCtrl = m_pTextCtrlFilterParam->GetValue();
973 if (strCtrl.ToDouble (&dValue))
976 return (m_dDefaultFilterParam);
980 DialogGetFilterParameters::getInputScale ()
982 wxString strCtrl = m_pTextCtrlInputScale->GetValue();
984 if (strCtrl.ToDouble (&dValue))
987 return (m_dDefaultInputScale);
991 DialogGetFilterParameters::getOutputScale ()
993 wxString strCtrl = m_pTextCtrlOutputScale->GetValue();
995 if (strCtrl.ToDouble (&dValue))
998 return (m_dDefaultOutputScale);
1002 DialogGetFilterParameters::getFilterName ()
1004 return m_pListBoxFilter->getSelectionStringValue();
1008 DialogGetFilterParameters::getDomainName ()
1010 return m_pListBoxDomain->getSelectionStringValue();
1014 ///////////////////////////////////////////////////////////////////////
1015 // CLASS IMPLEMENTATION
1016 // DialogExportParameters
1017 ///////////////////////////////////////////////////////////////////////
1019 DialogExportParameters::DialogExportParameters (wxWindow* pParent, int iDefaultFormatID)
1020 : wxDialog (pParent, -1, "Select ExportParameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1022 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1024 pTopSizer->Add (new wxStaticText (this, -1, "Select Export Format"), 0, wxALIGN_CENTER | wxALL, 5);
1026 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5);
1028 m_pListBoxFormat = new StringValueAndTitleListBox (this, ImageFile::getFormatCount(), ImageFile::getFormatTitleArray(), ImageFile::getFormatNameArray());
1029 m_pListBoxFormat->SetSelection (iDefaultFormatID);
1030 pTopSizer->Add (m_pListBoxFormat, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
1032 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1034 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1035 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
1036 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
1037 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1038 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1040 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1042 SetAutoLayout (true);
1043 SetSizer (pTopSizer);
1044 pTopSizer->Fit (this);
1045 pTopSizer->SetSizeHints (this);
1049 DialogExportParameters::getFormatName()
1051 return m_pListBoxFormat->getSelectionStringValue();
1055 /////////////////////////////////////////////////////////////////////
1056 // CLASS DiaglogGetXYSize Implementation
1057 /////////////////////////////////////////////////////////////////////
1059 DialogGetXYSize::DialogGetXYSize (wxWindow* pParent, const char* const pszTitle, int iDefaultXSize, int iDefaultYSize)
1060 : wxDialog (pParent, -1, pszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1062 m_iDefaultXSize = iDefaultXSize;
1063 m_iDefaultYSize = iDefaultYSize;
1065 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1067 pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
1069 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1071 std::ostringstream os;
1072 os << iDefaultXSize;
1073 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1074 std::ostringstream osYSize;
1075 osYSize << iDefaultYSize;
1076 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1078 wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
1079 pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1080 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_CENTER_VERTICAL);
1081 pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1082 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_CENTER_VERTICAL);
1083 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
1085 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1087 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1088 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
1089 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
1090 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1091 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1093 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1095 SetAutoLayout (true);
1096 SetSizer (pTopSizer);
1097 pTopSizer->Fit (this);
1098 pTopSizer->SetSizeHints (this);
1101 DialogGetXYSize::~DialogGetXYSize ()
1106 DialogGetXYSize::getXSize ()
1108 wxString strCtrl = m_pTextCtrlXSize->GetValue();
1110 if (strCtrl.ToLong (&lValue))
1113 return (m_iDefaultXSize);
1117 DialogGetXYSize::getYSize ()
1119 wxString strCtrl = m_pTextCtrlYSize->GetValue();
1121 if (strCtrl.ToLong (&lValue))
1124 return (m_iDefaultYSize);
1129 /////////////////////////////////////////////////////////////////////
1130 // CLASS IDENTIFICATION
1132 // DialogGetConvertPolarParameters
1133 /////////////////////////////////////////////////////////////////////
1135 DialogGetConvertPolarParameters::DialogGetConvertPolarParameters (wxWindow* pParent, const char* const pszTitle,
1136 int iDefaultXSize, int iDefaultYSize, int iDefaultInterpolationID, int iDefaultZeropad)
1137 : wxDialog (pParent, -1, pszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
1139 m_iDefaultXSize = iDefaultXSize;
1140 m_iDefaultYSize = iDefaultYSize;
1141 m_iDefaultZeropad = iDefaultZeropad;
1143 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
1145 pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
1147 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1149 std::ostringstream os;
1150 os << iDefaultXSize;
1151 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1152 std::ostringstream osYSize;
1153 osYSize << iDefaultYSize;
1154 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1156 wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (2);
1158 m_pListBoxInterpolation = new StringValueAndTitleListBox (this, Projections::getInterpCount(), Projections::getInterpTitleArray(), Projections::getInterpNameArray());
1159 m_pListBoxInterpolation->SetSelection (iDefaultInterpolationID);
1160 pGridSizer->Add (new wxStaticText (this, -1, "Interpolation"), 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
1161 pGridSizer->Add (m_pListBoxInterpolation, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
1163 pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1164 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1165 pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1166 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1167 if (iDefaultZeropad >= 0) {
1168 std::ostringstream osZeropad;
1169 osZeropad << iDefaultZeropad;
1170 m_pTextCtrlZeropad = new wxTextCtrl (this, -1, osZeropad.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
1171 pGridSizer->Add (new wxStaticText (this, -1, "Zeropad"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
1172 pGridSizer->Add (m_pTextCtrlZeropad, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
1175 pTopSizer->Add (pGridSizer, 1, wxALL, 3);
1177 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
1179 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
1180 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
1181 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
1182 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
1183 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
1185 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
1187 SetAutoLayout (true);
1188 SetSizer (pTopSizer);
1189 pTopSizer->Layout();
1190 pTopSizer->Fit (this);
1191 pTopSizer->SetSizeHints (this);
1195 DialogGetConvertPolarParameters::~DialogGetConvertPolarParameters ()
1201 DialogGetConvertPolarParameters::getXSize ()
1203 wxString strCtrl = m_pTextCtrlXSize->GetValue();
1204 unsigned long lValue;
1205 if (strCtrl.ToULong (&lValue))
1208 return (m_iDefaultXSize);
1212 DialogGetConvertPolarParameters::getYSize ()
1214 wxString strCtrl = m_pTextCtrlYSize->GetValue();
1215 unsigned long lValue;
1216 if (strCtrl.ToULong (&lValue))
1219 return (m_iDefaultYSize);
1223 DialogGetConvertPolarParameters::getZeropad ()
1225 wxString strCtrl = m_pTextCtrlZeropad->GetValue();
1226 unsigned long lValue;
1227 if (strCtrl.ToULong (&lValue))
1230 return (m_iDefaultZeropad);
1234 DialogGetConvertPolarParameters::getInterpolationName ()
1236 return m_pListBoxInterpolation->getSelectionStringValue();