** This is part of the CTSim program
** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: ctsim.cpp,v 1.93 2001/03/04 03:14:47 kevin Exp $
+** $Id: ctsim.cpp,v 1.120 2002/10/24 15:54:25 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
#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h!
#endif
-
#include "ct.h"
+#include "ctndicom.h"
#include "ctsim.h"
#include "docs.h"
#include "views.h"
#endif
#endif
-static const char* rcsindent = "$Id: ctsim.cpp,v 1.93 2001/03/04 03:14:47 kevin Exp $";
+static const char* rcsindent = "$Id: ctsim.cpp,v 1.120 2002/10/24 15:54:25 kevin Exp $";
struct option CTSimApp::ctsimOptions[] =
{
CTSimApp::CTSimApp()
: m_bAdvancedOptions(false), m_bSetModifyNewDocs(true), m_bVerboseLogging(false), m_bShowStartupTips(true),
m_iCurrentTip(0), m_bUseBackgroundTasks(false),
-m_docManager(NULL), m_pFrame(NULL), m_pLog(0), m_pConfig(0), m_pLogDoc(0)
+m_docManager(NULL), m_pFrame(NULL), m_pConfig(0), m_pLog(0), m_pLogDoc(0)
{
theApp = this;
}
switch (c) {
case O_VERSION:
std::cout << rcsindent << std::endl;
-#ifdef CTSIMVERSION
- std::cout << "Version: CTSIMVERSION" << std::endl;
-#elif defined(VERSION)
- std::cout << "Version: VERSION" << std::endl;
+#ifdef VERSION
+ std::cout << "Version: " << VERSION << std::endl;\r
+#elif defined(CTSIMVERSION)\r
+ std::cout << "Version: " << CTSIMVERSION << std::endl;
#endif
exit(0);
case O_HELP:
// Create the main frame window
int xDisplay, yDisplay;
::wxDisplaySize (&xDisplay, &yDisplay);
+
m_pFrame = new MainFrame(m_docManager, (wxFrame *) NULL, -1, "CTSim", wxPoint(0, 0),
- wxSize(nearest<int>(xDisplay * .75), nearest<int>(yDisplay * .755)), wxDEFAULT_FRAME_STYLE);
+#ifdef CTSIM_MDI
+ wxSize(nearest<int>(xDisplay * .75), nearest<int>(yDisplay * .75)),
+#else
+ wxSize(nearest<int>(xDisplay * .6), nearest<int>(yDisplay * .4)),
+#endif
+ wxDEFAULT_FRAME_STYLE);
setIconForFrame (m_pFrame);
m_pFrame->Centre(wxBOTH);
wxString helpDir;
if (! m_pConfig->Read("HelpDir", &helpDir))
- helpDir = ::wxGetCwd();
+ helpDir = ::wxGetCwd();\r
#ifdef CTSIM_WINHELP
if (! m_pFrame->getWinHelpController().Initialize(helpDir + "/ctsim"))
*m_pLog << "Cannot initialize the Windows Help system" << "\n";
-#else
- if (! m_pFrame->getHtmlHelpController().Initialize(helpDir + "/ctsim") &&
- ! m_pFrame->getHtmlHelpController().Initialize("/usr/local/man/ctsim"))
- *m_pLog << "Cannot initialize the HTML Help system" << "\n";
+#else\r
+#ifdef DATADIR
+ wxString docDir (DATADIR);\r
+#else\r
+ wxString docDir (::wxGetCwd());\r
+#endif
+ wxString docFile = docDir + "ctsim.htb";
+ if (! m_pFrame->getHtmlHelpController().AddBook(docFile) &&
+ ! m_pFrame->getHtmlHelpController().AddBook("/usr/share/ctsim/ctsim.htb") &&
+ ! m_pFrame->getHtmlHelpController().AddBook("/tmp/ctsim.htb"))\r
+ *m_pLog << "Cannot initialize the HTML Help system" << "\n";
else {
if (::wxDirExists ("/tmp"))
m_pFrame->getHtmlHelpController().SetTempDir(_T("/tmp"));
if (getStartupTips())
ShowTips();
+#ifdef HAVE_WXTHREADS
m_pBackgroundMgr = new BackgroundManager;
+#endif
+
return true;
}
m_pConfig->Read ("StartupTips", &m_bShowStartupTips);
m_pConfig->Read ("CurrentTip", &m_iCurrentTip);
m_pConfig->Read ("UseBackgroundTasks", &m_bUseBackgroundTasks);
+#ifdef HAVE_FFTW
+ wxString strFftwWisdom;
+ m_pConfig->Read ("FftwWisdom", strFftwWisdom);
+ if (strFftwWisdom.size() > 0)
+ fftw_import_wisdom_from_string (strFftwWisdom.c_str());
+#endif
}
void
m_pConfig->Write ("StartupTips", m_bShowStartupTips);
m_pConfig->Write ("CurrentTip", m_iCurrentTip);
m_pConfig->Write ("UseBackgroundTasks", m_bUseBackgroundTasks);
-
+#ifdef HAVE_FFTW
+ const char* const pszWisdom = fftw_export_wisdom_to_string();
+ wxString strFftwWisdom (pszWisdom);
+ fftw_free ((void*) pszWisdom);
+ m_pConfig->Write ("FftwWisdom", strFftwWisdom);
+#endif
+
delete m_pConfig;
}
file_menu->Append(wxID_OPEN, "&Open...\tCtrl-O");
file_menu->AppendSeparator();
- file_menu->Append (MAINMENU_IMPORT, "&Import...\tCtrl-I");
+ file_menu->Append (MAINMENU_IMPORT, "&Import...\tCtrl-M");
file_menu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces...");
file_menu->Append(MAINMENU_FILE_EXIT, "E&xit");
m_dDefaultFilterBandwidth = 1.;
m_dDefaultFilterInputScale = 1.;
m_dDefaultFilterOutputScale = 1.;
- m_iDefaultImportFormat = ImageFile::IMPORT_FORMAT_PPM;
+ m_iDefaultImportFormat = ImageFile::IMPORT_FORMAT_PNG;
wxAcceleratorEntry accelEntries[15];
accelEntries[0].Set (wxACCEL_CTRL, static_cast<int>('O'), wxID_OPEN);
accelEntries[1].Set (wxACCEL_CTRL, static_cast<int>('P'), MAINMENU_FILE_CREATE_PHANTOM);
accelEntries[2].Set (wxACCEL_CTRL, static_cast<int>('F'), MAINMENU_FILE_CREATE_FILTER);
- accelEntries[3].Set (wxACCEL_CTRL, static_cast<int>('I'), MAINMENU_IMPORT);
+ accelEntries[3].Set (wxACCEL_CTRL, static_cast<int>('M'), MAINMENU_IMPORT);
accelEntries[4].Set (wxACCEL_NORMAL, WXK_F1, MAINMENU_HELP_CONTENTS);
#ifndef CTSIM_MDI
for (i = 0; i < 10; i++)
int xSize, ySize;
GetClientSize(&xSize, &ySize);
int yLogSize = ySize / 4;
- theApp->getLogDoc()->getView()->getFrame()->SetSize (0, ySize - yLogSize, xSize, yLogSize);
- theApp->getLogDoc()->getView()->getFrame()->Show (true);
+ theApp->getLogDoc()->getView()->getFrame()->SetSize (0, ySize - yLogSize, xSize, yLogSize);
+ theApp->getLogDoc()->getView()->getFrame()->Show (true);
}
#endif
return;
}
pImageDoc->setImageFile (pImageFile);
- pImageDoc->UpdateAllViews (NULL);
- if (ImageFileView* imageView = pImageDoc->getView()) {
- imageView->OnUpdate (imageView, NULL);
- imageView->getFrame()->SetFocus();
- imageView->getFrame()->Show(true);
- }
if (theApp->getAskDeleteNewDocs())
pImageDoc->Modify (true);
-
}
void
return;
}
pProjDoc->setProjections (pProjections);
- pProjDoc->UpdateAllViews (NULL);
- if (ProjectionFileView* projView = pProjDoc->getView()) {
- projView->OnUpdate (projView, NULL);
- projView->getFrame()->SetFocus();
- projView->getFrame()->Show(true);
- }
-
if (theApp->getAskDeleteNewDocs())
pProjDoc->Modify (true);
}
void
MainFrame::OnHelpSecondary (wxCommandEvent& event)
{
- m_htmlHelp.DisplayContents();
+ m_htmlHelp.Display ("Contents");
}
#endif
#ifdef CTSIM_WINHELP
m_winHelp.DisplayContents ();
#else
- m_htmlHelp.DisplayContents ();
+ m_htmlHelp.Display ("Contents");
#endif
break;
-
-
+
default:
#ifdef CTSIM_WINHELP
m_winHelp.DisplaySection (commandID);
#endif
}
-#ifdef CTSIM_CUSTOM_MRU
-void
-MainFrame::OnMRUFile (wxCommandEvent& event)
-{
- wxString fileName (theApp->getDocManager()->GetHistoryFile(event.GetId() - wxID_FILE1));
- if (fileName != "")
- theApp->getDocManager()->CreateDocument(fileName, wxDOC_SILENT);
-}
-#endif
void
MainFrame::DoWindowMenu (int iMenuPosition, wxCommandEvent& event)
wxString strFilename = pDoc->GetFilename();
const wxView* pView = pDoc->GetFirstView();
if (pView) {
- wxFrame* pFrame = pView->GetFrame();
- pFrame->SetFocus();
- pFrame->Raise();
+ wxWindow* pWindow = pView->GetFrame();
+ pWindow->SetFocus();
+ pWindow->Raise();
}
}
}
ImageFileDocument* pIFDoc = theApp->newImageDoc();
ImageFile* pIF = dicomImport.getImageFile();
pIFDoc->setImageFile (pIF);
- pIFDoc->getView()->getFrame()->Show(true);
std::ostringstream os;
os << "Import file " << strFilename.c_str() << " (type " << strFormatName.c_str() << ")";
pIF->labelAdd (os.str().c_str());
if (theApp->getAskDeleteNewDocs())
pIFDoc->Modify (true);
pIFDoc->UpdateAllViews();
- pIFDoc->GetFirstView()->OnUpdate (NULL, NULL);
- pIFDoc->getView()->getFrame()->Show(true);
+ pIFDoc->getView()->setInitialClientSize();
+ pIFDoc->Activate();
} else if (dicomImport.testProjections()) {
ProjectionFileDocument* pProjDoc = theApp->newProjectionDoc();
Projections* pProj = dicomImport.getProjections();
if (theApp->getAskDeleteNewDocs())
pProjDoc->Modify (true);
pProjDoc->UpdateAllViews();
- pProjDoc->GetFirstView()->OnUpdate (NULL, NULL);
- pProjDoc->getView()->getFrame()->Show(true);
+ pProjDoc->getView()->setInitialClientSize();
+ pProjDoc->Activate();
} else
::wxMessageBox ("Unrecognized DICOM file contents", "Import Error");
}
void
MainFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
{
- long lFreeMem = ::wxGetFreeMemory() / (1024L * 1024L);
wxString strOSDesc = ::wxGetOsDescription();
- *theApp->getLog() << "Operation System: " << strOSDesc;
- if (lFreeMem > 0)
- *theApp->getLog() << ", Free Memory: " << lFreeMem << " MB";
+ *theApp->getLog() << "Operating System: " << strOSDesc;
+ *theApp->getLog() << ", wxWindows: " << wxVERSION_STRING;
+#ifdef __TIMESTAMP__
+ *theApp->getLog() << ", Build Date: " << __TIMESTAMP__;
+#endif
+#if defined(DEBUG)
+ *theApp->getLog() << ", Debug version";
+#else
+ *theApp->getLog() << ", Release version";
+#endif
+#ifdef VERSION
+ *theApp->getLog() << " " << VERSION;
+#elif defined(CTSIMVERSION)
+ *theApp->getLog() << " " << CTSIMVERSION;
+#endif
*theApp->getLog() << "\n";
wxBitmap bmp (splash);
dlg.ShowModal();
} else {
wxString msg = "CTSim\nThe Open Source Computed Tomography Simulator\n";
-#ifdef CTSIMVERSION
- msg += "Version ";
- msg += CTSIMVERSION;
- msg += "\n\n";
-#elif defined(VERSION)
+#ifdef VERSION
msg << "Version: " << VERSION << "\n\n";
+#elif defined(CTSIMVERSION)\r
+ msg << "Version: " << CTSIMVERSION << "\n\n";\r
#endif
msg += "Author: Kevin Rosenberg <kevin@rosenberg.net>\nUsage: ctsim [files-to-open..] [--help]";
wxMessageBox(msg, "About CTSim", wxOK | wxICON_INFORMATION, this);
+ *theApp->getLog() << msg << "\n";
}
}
+\r
+// Create new documents\r
ProjectionFileDocument*
CTSimApp::newProjectionDoc()
{
ProjectionFileDocument* newDoc = dynamic_cast<ProjectionFileDocument*>(m_pDocTemplProjection->CreateDocument (""));
if (newDoc) {
- ProjectionFileView* pView = newDoc->getView();
- if (pView) {
- wxFrame* pFrame = pView->getFrame();
- if (pFrame) {
- pFrame->SetSize (0,0);
- pFrame->Show (false);
- }
- }
newDoc->SetDocumentName (m_pDocTemplProjection->GetDocumentName());
newDoc->SetDocumentTemplate (m_pDocTemplProjection);
newDoc->OnNewDocument();
}
-
+
return newDoc;
}
{
ImageFileDocument* newDoc = dynamic_cast<ImageFileDocument*>(m_pDocTemplImage->CreateDocument (""));
if (newDoc) {
- ImageFileView* pView = newDoc->getView();
- if (pView) {
- wxFrame* pFrame = pView->getFrame();
- if (pFrame) {
- pFrame->SetSize (0,0);
- pFrame->Show (false);
- }
- }
newDoc->SetDocumentName (m_pDocTemplImage->GetDocumentName());
newDoc->SetDocumentTemplate (m_pDocTemplImage);
newDoc->OnNewDocument();
}
-
+
return newDoc;
}
{
PlotFileDocument* newDoc = dynamic_cast<PlotFileDocument*>(m_pDocTemplPlot->CreateDocument (""));
if (newDoc) {
- PlotFileView* pView = newDoc->getView();
- if (pView) {
- wxFrame* pFrame = pView->getFrame();
- if (pFrame) {
- wxSize size;
- m_pFrame->GetClientSize (&size.x, &size.y);
- pFrame->SetSize (size.x / 2, size.y / 2);
- pFrame->Show (false);
- }
- }
newDoc->SetDocumentName (m_pDocTemplPlot->GetDocumentName());
newDoc->SetDocumentTemplate (m_pDocTemplPlot);
newDoc->OnNewDocument();
TextFileDocument* newDoc = dynamic_cast<TextFileDocument*>(m_pDocTemplText->CreateDocument (""));
if (newDoc) {
- TextFileView* pView = newDoc->getView();
- if (pView) {
- wxFrame* pFrame = pView->getFrame();
- if (pFrame) {
- wxSize size;
- m_pFrame->GetClientSize (&size.x, &size.y);;
- pFrame->SetSize (size.x / 2, size.y / 2);
- pFrame->Show (false);
- }
- }
newDoc->SetDocumentName (m_pDocTemplText->GetDocumentName());
newDoc->SetDocumentTemplate (m_pDocTemplText);
newDoc->OnNewDocument();
{
PhantomFileDocument* newDoc = dynamic_cast<PhantomFileDocument*>(m_pDocTemplPhantom->CreateDocument (""));
if (newDoc) {
- PhantomFileView* pView = newDoc->getView();
- if (pView) {
- wxFrame* pFrame = pView->getFrame();
- if (pFrame)
- pFrame->SetSize (0,0);
- }
newDoc->SetDocumentName (m_pDocTemplPhantom->GetDocumentName());
newDoc->SetDocumentTemplate (m_pDocTemplPhantom);
newDoc->OnNewDocument();
return newDoc;
}
-#if wxUSE_GLCANVAS
+#if wxUSE_GLCANVAS
Graph3dFileDocument*
CTSimApp::newGraph3dDoc()
{
Graph3dFileDocument* newDoc = dynamic_cast<Graph3dFileDocument*>(m_pDocTemplGraph3d->CreateDocument (""));
if (newDoc) {
- Graph3dFileView* pView = newDoc->getView();
- if (pView) {
- wxFrame* pFrame = pView->getFrame();
- if (pFrame)
- pFrame->SetSize (0,0);
- }
newDoc->SetDocumentName (m_pDocTemplGraph3d->GetDocumentName());
newDoc->SetDocumentTemplate (m_pDocTemplGraph3d);
newDoc->OnNewDocument();