X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fctsim.cpp;h=6f6d6b1632e0194143e056a90f7844e4e97628b2;hb=ab78de6e33fff94c37847621458db3ad430a8bb3;hp=5bd53127267ae3bd857d87017cc6c28c38e4cf40;hpb=8cce345df80fdbeea1c03a04a71d805951a87b74;p=ctsim.git diff --git a/src/ctsim.cpp b/src/ctsim.cpp index 5bd5312..6f6d6b1 100644 --- a/src/ctsim.cpp +++ b/src/ctsim.cpp @@ -9,7 +9,7 @@ ** 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.119 2002/06/27 03:19:23 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 @@ -46,8 +46,8 @@ #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" @@ -69,7 +69,7 @@ #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.119 2002/06/27 03:19:23 kevin Exp $"; struct option CTSimApp::ctsimOptions[] = { @@ -84,7 +84,7 @@ IMPLEMENT_APP(CTSimApp) 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; } @@ -117,10 +117,10 @@ CTSimApp::OnInit() 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; +#elif defined(CTSIMVERSION) + std::cout << "Version: " << CTSIMVERSION << std::endl; #endif exit(0); case O_HELP: @@ -158,8 +158,14 @@ CTSimApp::OnInit() // 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(xDisplay * .75), nearest(yDisplay * .755)), wxDEFAULT_FRAME_STYLE); +#ifdef CTSIM_MDI + wxSize(nearest(xDisplay * .75), nearest(yDisplay * .75)), +#else + wxSize(nearest(xDisplay * .6), nearest(yDisplay * .4)), +#endif + wxDEFAULT_FRAME_STYLE); setIconForFrame (m_pFrame); m_pFrame->Centre(wxBOTH); @@ -189,14 +195,21 @@ CTSimApp::OnInit() wxString helpDir; if (! m_pConfig->Read("HelpDir", &helpDir)) - helpDir = ::wxGetCwd(); + helpDir = ::wxGetCwd(); #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 +#ifdef DATADIR + wxString docDir (DATADIR); +#else + wxString docDir (::wxGetCwd()); +#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")) + *m_pLog << "Cannot initialize the HTML Help system" << "\n"; else { if (::wxDirExists ("/tmp")) m_pFrame->getHtmlHelpController().SetTempDir(_T("/tmp")); @@ -229,7 +242,10 @@ CTSimApp::OnInit() if (getStartupTips()) ShowTips(); +#ifdef HAVE_WXTHREADS m_pBackgroundMgr = new BackgroundManager; +#endif + return true; } @@ -289,6 +305,12 @@ CTSimApp::openConfig() 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 @@ -300,7 +322,13 @@ CTSimApp::closeConfig() 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; } @@ -402,7 +430,7 @@ MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const 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"); @@ -453,13 +481,13 @@ MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const 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('O'), wxID_OPEN); accelEntries[1].Set (wxACCEL_CTRL, static_cast('P'), MAINMENU_FILE_CREATE_PHANTOM); accelEntries[2].Set (wxACCEL_CTRL, static_cast('F'), MAINMENU_FILE_CREATE_FILTER); - accelEntries[3].Set (wxACCEL_CTRL, static_cast('I'), MAINMENU_IMPORT); + accelEntries[3].Set (wxACCEL_CTRL, static_cast('M'), MAINMENU_IMPORT); accelEntries[4].Set (wxACCEL_NORMAL, WXK_F1, MAINMENU_HELP_CONTENTS); #ifndef CTSIM_MDI for (i = 0; i < 10; i++) @@ -502,8 +530,8 @@ MainFrame::OnSize (wxSizeEvent& event) 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 @@ -602,15 +630,8 @@ MainFrame::OnNewImageFile (wxCommandEvent& event) 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 @@ -623,13 +644,6 @@ MainFrame::OnNewProjectionFile (wxCommandEvent& event) 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); } @@ -662,7 +676,7 @@ MainFrame::OnHelpButton (wxCommandEvent& event) void MainFrame::OnHelpSecondary (wxCommandEvent& event) { - m_htmlHelp.DisplayContents(); + m_htmlHelp.Display ("Contents"); } #endif @@ -675,11 +689,10 @@ MainFrame::showHelp (int commandID) #ifdef CTSIM_WINHELP m_winHelp.DisplayContents (); #else - m_htmlHelp.DisplayContents (); + m_htmlHelp.Display ("Contents"); #endif break; - - + default: #ifdef CTSIM_WINHELP m_winHelp.DisplaySection (commandID); @@ -724,15 +737,6 @@ MainFrame::OnUpdateUI (wxUpdateUIEvent& rEvent) #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) @@ -981,15 +985,14 @@ MainFrame::OnImport (wxCommandEvent& WXUNUSED(event) ) 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(); @@ -1001,8 +1004,8 @@ MainFrame::OnImport (wxCommandEvent& WXUNUSED(event) ) 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"); } @@ -1016,11 +1019,22 @@ MainFrame::OnImport (wxCommandEvent& WXUNUSED(event) ) 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); @@ -1029,38 +1043,31 @@ MainFrame::OnAbout(wxCommandEvent& WXUNUSED(event) ) 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) + msg << "Version: " << CTSIMVERSION << "\n\n"; #endif msg += "Author: Kevin Rosenberg \nUsage: ctsim [files-to-open..] [--help]"; wxMessageBox(msg, "About CTSim", wxOK | wxICON_INFORMATION, this); + *theApp->getLog() << msg << "\n"; } } + +// Create new documents ProjectionFileDocument* CTSimApp::newProjectionDoc() { ProjectionFileDocument* newDoc = dynamic_cast(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; } @@ -1069,19 +1076,11 @@ CTSimApp::newImageDoc() { ImageFileDocument* newDoc = dynamic_cast(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; } @@ -1090,16 +1089,6 @@ CTSimApp::newPlotDoc() { PlotFileDocument* newDoc = dynamic_cast(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(); @@ -1117,16 +1106,6 @@ CTSimApp::newTextDoc() TextFileDocument* newDoc = dynamic_cast(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(); @@ -1141,12 +1120,6 @@ CTSimApp::newPhantomDoc() { PhantomFileDocument* newDoc = dynamic_cast(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(); @@ -1155,19 +1128,13 @@ CTSimApp::newPhantomDoc() return newDoc; } -#if wxUSE_GLCANVAS +#if wxUSE_GLCANVAS Graph3dFileDocument* CTSimApp::newGraph3dDoc() { Graph3dFileDocument* newDoc = dynamic_cast(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();