** This is part of the CTSim program
** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: views.cpp,v 1.112 2001/02/22 11:05:38 kevin Exp $
+** $Id: views.cpp,v 1.113 2001/02/22 15:00:20 kevin Exp $
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
#include "timer.h"
#include "threadrecon.h"
-#define CTSIM_THREADS 1
-
#if defined(MSVC) || HAVE_SSTREAM
#include <sstream>
#else
return;
}
pDifferenceDoc->setImageFile (pDifferenceImage);
-
+
wxString s = GetFrame()->GetTitle() + ": ";
pDifferenceImage->labelsCopy (rIF, s.c_str());
s = pCompareDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";
rIF.invertPixelValues (rIF);
rIF.labelAdd ("Invert Pixel Values");
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
rIF.square (rIF);
rIF.labelAdd ("Square Pixel Values");
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
rIF.sqrt (rIF);
rIF.labelAdd ("Square-root Pixel Values");
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
rIF.log (rIF);
rIF.labelAdd ("Logrithm base-e Pixel Values");
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
rIF.exp (rIF);
rIF.labelAdd ("Exponent base-e Pixel Values");
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
m_bMinSpecified = false;
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
m_bMinSpecified = false;
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
m_bMinSpecified = false;
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
m_bMinSpecified = false;
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
m_bMinSpecified = false;
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
m_bMinSpecified = false;
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
#endif
m_bMinSpecified = false;
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
m_bMinSpecified = false;
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
m_bMinSpecified = false;
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
m_bMinSpecified = false;
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
m_bMinSpecified = false;
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
}
m_bMinSpecified = false;
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
- GetDocument()->Modify (true);
+ GetDocument()->Modify (true);
GetDocument()->UpdateAllViews (this);
}
}
#else
wxAcceleratorTable accelTable (4, accelEntries);
#endif
-
+
subframe->SetAcceleratorTable (accelTable);
return subframe;
//GetDocumentManager()->ActivateView (this, false, true);
if (! GetDocument() || ! GetDocument()->Close())
return false;
-
+
Activate (false);
if (m_pCanvas) {
m_pCanvas->setView(NULL);
rIF.scaleImage (rScaledIF);
*theApp->getLog() << os.str().c_str() << "\n";
if (theApp->getAskDeleteNewDocs())
- pScaledDoc->Modify (true);
+ pScaledDoc->Modify (true);
pScaledDoc->UpdateAllViews (this);
pScaledDoc->getView()->OnUpdate (this, NULL);
pScaledDoc->getView()->getFrame()->Show(true);
delete pYMag;
}
if (theApp->getAskDeleteNewDocs())
- pPlotDoc->Modify (true);
+ pPlotDoc->Modify (true);
pPlotDoc->UpdateAllViews ();
pPlotDoc->getView()->OnUpdate (this, NULL);
pPlotDoc->getView()->getFrame()->Show(true);
delete pYMag;
}
if (theApp->getAskDeleteNewDocs())
- pPlotDoc->Modify (true);
+ pPlotDoc->Modify (true);
pPlotDoc->UpdateAllViews ();
pPlotDoc->getView()->OnUpdate (this, NULL);
pPlotDoc->getView()->getFrame()->Show(true);
delete [] pcIn;
if (theApp->getAskDeleteNewDocs())
- pPlotDoc->Modify (true);
+ pPlotDoc->Modify (true);
pPlotDoc->UpdateAllViews ();
pPlotDoc->getView()->OnUpdate (this, NULL);
pPlotDoc->getView()->getFrame()->Show(true);
delete [] pcIn;
if (theApp->getAskDeleteNewDocs())
- pPlotDoc->Modify (true);
+ pPlotDoc->Modify (true);
pPlotDoc->UpdateAllViews ();
pPlotDoc->getView()->OnUpdate (this, NULL);
pPlotDoc->getView()->getFrame()->Show(true);
{
if (! m_pView)
return wxSize(0,0);
-
+
int xSize, ySize;
theApp->getMainFrame()->GetClientSize (&xSize, &ySize);
xSize = maxValue<int> (xSize, ySize);
const Phantom& rPhantom = GetDocument()->getPhantom();
Projections* pProj = new Projections;
Scanner theScanner (rPhantom, sGeometry.c_str(), m_iDefaultNDet, m_iDefaultNView, m_iDefaultNSample,
- m_dDefaultRotation, m_dDefaultFocalLength, m_dDefaultViewRatio, m_dDefaultScanRatio);
+ m_dDefaultRotation, m_dDefaultFocalLength, m_dDefaultViewRatio, m_dDefaultScanRatio);
if (theScanner.fail()) {
wxString msg = "Failed making scanner\n";
msg += theScanner.failMessage().c_str();
m_dDefaultRasterViewRatio = 0;
if (m_iDefaultRasterNX > 0 && m_iDefaultRasterNY > 0) {
const Phantom& rPhantom = GetDocument()->getPhantom();
-
+
ImageFile* pImageFile = new ImageFile;
pImageFile->setArraySize (m_iDefaultRasterNX, m_iDefaultRasterNY);
wxProgressDialog dlgProgress (wxString("Rasterize"), wxString("Rasterization Progress"),
- pImageFile->nx() + 1, getFrameForChild(), wxPD_CAN_ABORT );
+ pImageFile->nx() + 1, getFrameForChild(), wxPD_CAN_ABORT );
Timer timer;
for (unsigned int i = 0; i < pImageFile->nx(); i++) {
rPhantom.convertToImagefile (*pImageFile, m_dDefaultRasterViewRatio, m_iDefaultRasterNSamples,
return;
}
}
-
+
ImageFileDocument* pRasterDoc = theApp->newImageDoc();
if (! pRasterDoc) {
sys_error (ERR_SEVERE, "Unable to create image file");
return;
}
pRasterDoc->setImageFile (pImageFile);
-
+
if (theApp->getAskDeleteNewDocs())
pRasterDoc->Modify (true);
pRasterDoc->UpdateAllViews (this);
m_iDefaultPolarNY = dialogPolar.getYSize();
m_iDefaultPolarZeropad = dialogPolar.getZeropad();
ImageFile* pIF = new ImageFile (m_iDefaultPolarNX, m_iDefaultPolarNY);
-
+
m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str());
if (! rProj.convertFFTPolar (*pIF, m_iDefaultPolarInterpolation, m_iDefaultPolarZeropad)) {
delete pIF;
void
ProjectionFileView::OnReconstructFourier (wxCommandEvent& event)
{
-#if CTSIM_THREADS
+ wxMessageBox ("Fourier Reconstruction is not yet supported", "Unimplemented function");
+}
+
+void
+ProjectionFileView::OnReconstructFBP (wxCommandEvent& event)
+{
DialogGetReconstructionParameters dialogReconstruction (getFrameForChild(), m_iDefaultNX, m_iDefaultNY,
m_iDefaultFilter, m_dDefaultFilterParam, m_iDefaultFilterMethod, m_iDefaultFilterGeneration,
m_iDefaultZeropad, m_iDefaultInterpolation, m_iDefaultInterpParam, m_iDefaultBackprojector,
wxString optBackprojectName = dialogReconstruction.getBackprojectName();
m_iDefaultBackprojector = Backprojector::convertBackprojectNameToID (optBackprojectName.c_str());
m_iDefaultTrace = dialogReconstruction.getTrace();
-
+
if (m_iDefaultNX > 0 && m_iDefaultNY > 0) {
const Projections& rProj = GetDocument()->getProjections();
- ImageFile* pImageFile = new ImageFile;
- pImageFile->setArraySize (m_iDefaultNX, m_iDefaultNY);
std::ostringstream os;
os << "Reconstruct " << rProj.getFilename() << ": xSize=" << m_iDefaultNX << ", ySize=" << m_iDefaultNY << ", Filter=" << optFilterName.c_str() << ", FilterParam=" << m_dDefaultFilterParam << ", FilterMethod=" << optFilterMethodName.c_str() << ", FilterGeneration=" << optFilterGenerationName.c_str() << ", Zeropad=" << m_iDefaultZeropad << ", Interpolation=" << optInterpName.c_str() << ", InterpolationParam=" << m_iDefaultInterpParam << ", Backprojection=" << optBackprojectName.c_str();
Timer timerRecon;
if (m_iDefaultTrace > Trace::TRACE_CONSOLE) {
+ ImageFile* pImageFile = new ImageFile;
+ pImageFile->setArraySize (m_iDefaultNX, m_iDefaultNY);
Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(),
- m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(),
- optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace);
-
+ m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(),
+ optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace);
+
ReconstructDialog* pDlgReconstruct = new ReconstructDialog (*pReconstructor, rProj, *pImageFile, m_iDefaultTrace, getFrameForChild());
for (int iView = 0; iView < rProj.nView(); iView++) {
::wxYield();
}
delete pDlgReconstruct;
delete pReconstructor;
- ImageFileDocument* pReconDoc = theApp->newImageDoc();
- if (! pReconDoc) {
- sys_error (ERR_SEVERE, "Unable to create image file");
- return;
- }
- pReconDoc->setImageFile (pImageFile);
- if (theApp->getAskDeleteNewDocs())
- pReconDoc->Modify (true);
- pReconDoc->UpdateAllViews (this);
- if (ImageFileView* rasterView = pReconDoc->getView()) {
- rasterView->OnUpdate (rasterView, NULL);
- rasterView->getFrame()->SetFocus();
- rasterView->getFrame()->Show(true);
- }
- *theApp->getLog() << os.str().c_str() << "\n";
- pImageFile->labelAdd (rProj.getLabel());
- pImageFile->labelAdd (os.str().c_str(), timerRecon.timerEnd());
-
- } else {
-#if CTSIM_THREADS
- ThreadedReconstructor* pReconstructor = new ThreadedReconstructor (this,
- m_iDefaultNX, m_iDefaultNY, optFilterName.c_str(),
- m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(),
- optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), os.str().c_str());
- if (! pReconstructor->start()) {
- delete pImageFile;
- delete pReconstructor;
+ ImageFileDocument* pReconDoc = theApp->newImageDoc();
+ if (! pReconDoc) {
+ sys_error (ERR_SEVERE, "Unable to create image file");
return;
}
- delete pImageFile;
- // delete pReconstructor;
-#else
- Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(),
- m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(),
- optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace);
-
- wxProgressDialog dlgProgress (wxString("Reconstruction"), wxString("Reconstruction Progress"), rProj.nView() + 1, getFrameForChild(), wxPD_CAN_ABORT );
- for (int iView = 0; iView < rProj.nView(); iView++) {
- pReconstructor->reconstructView (iView, 1);
- if (! dlgProgress.Update (iView + 1)) {
- delete pReconstructor;
- delete pImageFile;
- return;
- }
+ pReconDoc->setImageFile (pImageFile);
+ if (theApp->getAskDeleteNewDocs())
+ pReconDoc->Modify (true);
+ pReconDoc->UpdateAllViews (this);
+ if (ImageFileView* rasterView = pReconDoc->getView()) {
+ rasterView->OnUpdate (rasterView, NULL);
+ rasterView->getFrame()->SetFocus();
+ rasterView->getFrame()->Show(true);
}
- delete pReconstructor;
- ImageFileDocument* pReconDoc = theApp->newImageDoc();
- if (! pReconDoc) {
- sys_error (ERR_SEVERE, "Unable to create image file");
- return;
- }
- pReconDoc->setImageFile (pImageFile);
- if (theApp->getAskDeleteNewDocs())
- pReconDoc->Modify (true);
- pReconDoc->UpdateAllViews (this);
- if (ImageFileView* rasterView = pReconDoc->getView()) {
- rasterView->OnUpdate (rasterView, NULL);
- rasterView->getFrame()->SetFocus();
- rasterView->getFrame()->Show(true);
- }
- *theApp->getLog() << os.str().c_str() << "\n";
- pImageFile->labelAdd (rProj.getLabel());
- pImageFile->labelAdd (os.str().c_str(), timerRecon.timerEnd());
-#endif
- }
- }
- }
-#else
- wxMessageBox ("Fourier Reconstruction is not yet supported", "Unimplemented function");
-#endif
-}
-
-void
-ProjectionFileView::OnReconstructFBP (wxCommandEvent& event)
-{
- DialogGetReconstructionParameters dialogReconstruction (getFrameForChild(), m_iDefaultNX, m_iDefaultNY,
- m_iDefaultFilter, m_dDefaultFilterParam, m_iDefaultFilterMethod, m_iDefaultFilterGeneration,
- m_iDefaultZeropad, m_iDefaultInterpolation, m_iDefaultInterpParam, m_iDefaultBackprojector,
- m_iDefaultTrace);
-
- int retVal = dialogReconstruction.ShowModal();
- if (retVal == wxID_OK) {
- m_iDefaultNX = dialogReconstruction.getXSize();
- m_iDefaultNY = dialogReconstruction.getYSize();
- wxString optFilterName = dialogReconstruction.getFilterName();
- m_iDefaultFilter = SignalFilter::convertFilterNameToID (optFilterName.c_str());
- m_dDefaultFilterParam = dialogReconstruction.getFilterParam();
- wxString optFilterMethodName = dialogReconstruction.getFilterMethodName();
- m_iDefaultFilterMethod = ProcessSignal::convertFilterMethodNameToID(optFilterMethodName.c_str());
- m_iDefaultZeropad = dialogReconstruction.getZeropad();
- wxString optFilterGenerationName = dialogReconstruction.getFilterGenerationName();
- m_iDefaultFilterGeneration = ProcessSignal::convertFilterGenerationNameToID (optFilterGenerationName.c_str());
- wxString optInterpName = dialogReconstruction.getInterpName();
- m_iDefaultInterpolation = Backprojector::convertInterpNameToID (optInterpName.c_str());
- m_iDefaultInterpParam = dialogReconstruction.getInterpParam();
- wxString optBackprojectName = dialogReconstruction.getBackprojectName();
- m_iDefaultBackprojector = Backprojector::convertBackprojectNameToID (optBackprojectName.c_str());
- m_iDefaultTrace = dialogReconstruction.getTrace();
-
- if (m_iDefaultNX > 0 && m_iDefaultNY > 0) {
- const Projections& rProj = GetDocument()->getProjections();
- ImageFile* pImageFile = new ImageFile;
- pImageFile->setArraySize (m_iDefaultNX, m_iDefaultNY);
-
- Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(),
- m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(),
- optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace);
-
- Timer timerRecon;
- if (m_iDefaultTrace > Trace::TRACE_CONSOLE) {
- ReconstructDialog* pDlgReconstruct = new ReconstructDialog (*pReconstructor, rProj, *pImageFile, m_iDefaultTrace, getFrameForChild());
- for (int iView = 0; iView < rProj.nView(); iView++) {
- ::wxYield();
- if (pDlgReconstruct->isCancelled() || ! pDlgReconstruct->reconstructView (iView, true)) {
- delete pDlgReconstruct;
+ *theApp->getLog() << os.str().c_str() << "\n";
+ pImageFile->labelAdd (rProj.getLabel());
+ pImageFile->labelAdd (os.str().c_str(), timerRecon.timerEnd());
+
+ } else {
+ if (theApp->getUseBackgroundTasks() || theApp->getNumberCPU() > 1) {
+ ThreadedReconstructor* pReconstructor = new ThreadedReconstructor (this,
+ m_iDefaultNX, m_iDefaultNY, optFilterName.c_str(),
+ m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(),
+ optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), os.str().c_str());
+ if (! pReconstructor->start()) {
delete pReconstructor;
- delete pImageFile;
return;
}
- ::wxYield();
- ::wxYield();
- while (pDlgReconstruct->isPaused()) {
- ::wxYield();
- ::wxUsleep(50);
+ // delete pReconstructor; // reconstructor is still running
+ } else {
+ ImageFile* pImageFile = new ImageFile;
+ pImageFile->setArraySize (m_iDefaultNX, m_iDefaultNY);
+ Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(),
+ m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(),
+ optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace);
+
+ wxProgressDialog dlgProgress (wxString("Reconstruction"), wxString("Reconstruction Progress"), rProj.nView() + 1, getFrameForChild(), wxPD_CAN_ABORT );
+ for (int iView = 0; iView < rProj.nView(); iView++) {
+ pReconstructor->reconstructView (iView, 1);
+ if (! dlgProgress.Update (iView + 1)) {
+ delete pReconstructor;
+ delete pImageFile;
+ return;
+ }
}
- }
- delete pDlgReconstruct;
- } else {
- wxProgressDialog dlgProgress (wxString("Reconstruction"), wxString("Reconstruction Progress"), rProj.nView() + 1, getFrameForChild(), wxPD_CAN_ABORT );
- for (int iView = 0; iView < rProj.nView(); iView++) {
- pReconstructor->reconstructView (iView, 1);
- if (! dlgProgress.Update (iView + 1)) {
- delete pReconstructor;
- delete pImageFile;
+ delete pReconstructor;
+ ImageFileDocument* pReconDoc = theApp->newImageDoc();
+ if (! pReconDoc) {
+ sys_error (ERR_SEVERE, "Unable to create image file");
return;
}
+ pReconDoc->setImageFile (pImageFile);
+ if (theApp->getAskDeleteNewDocs())
+ pReconDoc->Modify (true);
+ pReconDoc->UpdateAllViews (this);
+ if (ImageFileView* rasterView = pReconDoc->getView()) {
+ rasterView->OnUpdate (rasterView, NULL);
+ rasterView->getFrame()->SetFocus();
+ rasterView->getFrame()->Show(true);
+ }
+ *theApp->getLog() << os.str().c_str() << "\n";
+ pImageFile->labelAdd (rProj.getLabel());
+ pImageFile->labelAdd (os.str().c_str(), timerRecon.timerEnd());
}
}
- delete pReconstructor;
- ImageFileDocument* pReconDoc = theApp->newImageDoc();
- if (! pReconDoc) {
- sys_error (ERR_SEVERE, "Unable to create image file");
- return;
- }
- pReconDoc->setImageFile (pImageFile);
- if (theApp->getAskDeleteNewDocs())
- pReconDoc->Modify (true);
- pReconDoc->UpdateAllViews (this);
- if (ImageFileView* rasterView = pReconDoc->getView()) {
- rasterView->OnUpdate (rasterView, NULL);
- rasterView->getFrame()->SetFocus();
- rasterView->getFrame()->Show(true);
- }
- std::ostringstream os;
- os << "Reconstruct " << rProj.getFilename() << ": xSize=" << m_iDefaultNX << ", ySize=" << m_iDefaultNY << ", Filter=" << optFilterName.c_str() << ", FilterParam=" << m_dDefaultFilterParam << ", FilterMethod=" << optFilterMethodName.c_str() << ", FilterGeneration=" << optFilterGenerationName.c_str() << ", Zeropad=" << m_iDefaultZeropad << ", Interpolation=" << optInterpName.c_str() << ", InterpolationParam=" << m_iDefaultInterpParam << ", Backprojection=" << optBackprojectName.c_str();
- *theApp->getLog() << os.str().c_str() << "\n";
- pImageFile->labelAdd (rProj.getLabel());
- pImageFile->labelAdd (os.str().c_str(), timerRecon.timerEnd());
}
}
}
wxMenu *reconstruct_menu = new wxMenu;
reconstruct_menu->Append (PJMENU_RECONSTRUCT_FBP, "&Filtered Backprojection...\tCtrl-R", "Reconstruct image using filtered backprojection");
reconstruct_menu->Append (PJMENU_RECONSTRUCT_FOURIER, "&Fourier...\tCtrl-E", "Reconstruct image using inverse Fourier");
-#ifndef CTSIM_THREADS
reconstruct_menu->Enable (PJMENU_RECONSTRUCT_FOURIER, false);
-#endif
-
+
wxMenu *help_menu = new wxMenu;
help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
help_menu->Append (MAINMENU_HELP_TIPS, "&Tips");
if (GetDocument() && GetDocument()->getBadFileOpen())
::wxYield(); // wxWindows bug workaround
}
-
+
return true;
}
m_pFrame = NULL;
if (GetDocument() && GetDocument()->getBadFileOpen())
::wxYield(); // wxWindows bug workaround
- }
-
+ }
+
return true;
}
if (GetDocument() && GetDocument()->getBadFileOpen())
::wxYield(); // wxWindows bug workaround
}
-
+
return TRUE;
}
#endif
theApp->setIconForFrame (subframe);
- m_pFileMenu = new wxMenu;
+ m_pFileMenu = new wxMenu;
m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
subframe->SetMenuBar(menu_bar);
subframe->Centre(wxBOTH);
-
+
return subframe;
}