X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fdocs.cpp;h=2c18e4a6fa76b662f72a13fa535d727c8bacf0a7;hb=0e305a6bd11df323b21c77f16159ef365b6846ff;hp=16462d7bb27544ff5cdc8c9e51b6de72ae6d91cb;hpb=3b09207d7c37bc3d48e331657353123ed2f66ed9;p=ctsim.git diff --git a/src/docs.cpp b/src/docs.cpp index 16462d7..2c18e4a 100644 --- a/src/docs.cpp +++ b/src/docs.cpp @@ -1,7 +1,7 @@ /***************************************************************************** ** FILE IDENTIFICATION ** -** Name: doc.cpp +** Name: docs.cpp ** Purpose: Document routines for CTSim program ** Programmer: Kevin Rosenberg ** Date Started: July 2000 @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: docs.cpp,v 1.28 2001/02/25 06:32:12 kevin Exp $ +** $Id: docs.cpp,v 1.37 2002/04/30 18:13:40 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 @@ -80,7 +80,7 @@ bool ImageFileDocument::OnOpenDocument(const wxString& filename) SetFilename(filename, true); Modify(false); UpdateAllViews(); - getView()->OnUpdate (getView(), NULL); + // getView()->OnUpdate (NULL, NULL); m_bBadFileOpen = false; return true; @@ -104,7 +104,6 @@ ImageFileDocument::getView() const return dynamic_cast(GetFirstView()); } - bool ImageFileDocument::Revert () { @@ -120,66 +119,38 @@ ImageFileDocument::Revert () OnOpenDocument (GetFilename()); } } - getView()->OnUpdate (getView(), NULL); + //getView()->OnUpdate (getView(), NULL); UpdateAllViews(); return true; } -// ProjectionFileDocument - -IMPLEMENT_DYNAMIC_CLASS(ProjectionFileDocument, wxDocument) -BEGIN_EVENT_TABLE(ProjectionFileDocument, wxDocument) -EVT_MENU(BackgroundSupervisor::MSG_BACKGROUND_SUPERVISOR_ADD, ProjectionFileDocument::OnAddBackground) -EVT_MENU(BackgroundSupervisor::MSG_BACKGROUND_SUPERVISOR_REMOVE, ProjectionFileDocument::OnRemoveBackground) -END_EVENT_TABLE() - -bool -ProjectionFileDocument::OnSaveDocument(const wxString& filename) +void +ImageFileDocument::Activate() { - if (! m_pProjectionFile->write (filename.c_str())) { - *theApp->getLog() << "Unable to write projection file " << filename << "\n"; - return false; - } - if (theApp->getVerboseLogging()) - *theApp->getLog() << "Wrote projection file " << filename << "\n"; - Modify(false); - return true; -} +#if CTSIM_MDI + getView()->getFrame()->Activate(); +#endif +}; -ProjectionFileDocument::~ProjectionFileDocument() -{ - m_criticalSection.Enter(); - for (BackgroundContainer::iterator i = m_vecpBackgroundSupervisors.begin(); - i != m_vecpBackgroundSupervisors.end(); i++) - BackgroundSupervisor::cancelSupervisor(*i); - m_criticalSection.Leave(); +// BackgroundProcessingDocument - Base Class - while (m_vecpBackgroundSupervisors.size() > 0) { - ::wxUsleep(50); - ::wxYield(); - } - - delete m_pProjectionFile; -} +IMPLEMENT_DYNAMIC_CLASS(BackgroundProcessingDocument, wxDocument) +BEGIN_EVENT_TABLE(BackgroundProcessingDocument, wxDocument) +END_EVENT_TABLE() +#ifdef HAVE_WXTHREADS void -ProjectionFileDocument::OnAddBackground (wxCommandEvent& event) +BackgroundProcessingDocument::addBackgroundSupervisor (BackgroundSupervisor* pSupervisor) { - BackgroundSupervisor* pSupervisor = reinterpret_cast(event.GetClientData()); - wxASSERT (pSupervisor != NULL); - wxCriticalSectionLocker locker (m_criticalSection); if (pSupervisor) m_vecpBackgroundSupervisors.push_back (pSupervisor); } void -ProjectionFileDocument::OnRemoveBackground (wxCommandEvent& event) +BackgroundProcessingDocument::removeBackgroundSupervisor (BackgroundSupervisor* pSupervisor) { - BackgroundSupervisor* pSupervisor = reinterpret_cast(event.GetClientData()); - wxASSERT (pSupervisor != NULL); - m_criticalSection.Enter(); bool bFound = false; for (BackgroundContainer::iterator i = m_vecpBackgroundSupervisors.begin(); @@ -193,10 +164,50 @@ ProjectionFileDocument::OnRemoveBackground (wxCommandEvent& event) m_criticalSection.Leave(); if (! bFound) - sys_error (ERR_SEVERE, "Could not find background task [ProjectionFileDocument::removeBackgroundTask"); - - wxCommandEvent ackEvent (wxEVT_COMMAND_MENU_SELECTED, BackgroundSupervisor::MSG_DOCUMENT_ACK_REMOVE); - wxPostEvent (pSupervisor, ackEvent); + sys_error (ERR_SEVERE, "Could not find background task [OnRemoveBackground]"); +} +#endif + +void +BackgroundProcessingDocument::cancelRunningTasks() +{ +#ifdef HAVE_WXTHREADS + m_criticalSection.Enter(); + for (BackgroundContainer::iterator i = m_vecpBackgroundSupervisors.begin(); + i != m_vecpBackgroundSupervisors.end(); i++) + (*i)->onCancel(); + m_criticalSection.Leave(); + + while (m_vecpBackgroundSupervisors.size() > 0) { + ::wxYield(); + ::wxUsleep(50); + } +#endif +} + + +// ProjectionFileDocument + +IMPLEMENT_DYNAMIC_CLASS(ProjectionFileDocument, BackgroundProcessingTask) + +bool +ProjectionFileDocument::OnSaveDocument(const wxString& filename) +{ + if (! m_pProjectionFile->write (filename.c_str())) { + *theApp->getLog() << "Unable to write projection file " << filename << "\n"; + return false; + } + if (theApp->getVerboseLogging()) + *theApp->getLog() << "Wrote projection file " << filename << "\n"; + Modify(false); + return true; +} + +ProjectionFileDocument::~ProjectionFileDocument() +{ + cancelRunningTasks(); + + delete m_pProjectionFile; } bool @@ -215,7 +226,6 @@ ProjectionFileDocument::OnOpenDocument(const wxString& filename) SetFilename(filename, true); Modify(false); UpdateAllViews(); - GetFirstView()->OnUpdate (GetFirstView(), NULL); m_bBadFileOpen = false; return true; @@ -240,9 +250,22 @@ ProjectionFileDocument::getView() const return dynamic_cast(GetFirstView()); } +void +ProjectionFileDocument::Activate() +{ +#if CTSIM_MDI + getView()->getFrame()->Activate(); +#endif +}; + // PhantomFileDocument -IMPLEMENT_DYNAMIC_CLASS(PhantomFileDocument, wxDocument) +IMPLEMENT_DYNAMIC_CLASS(PhantomFileDocument, BackgroundProcessingTask) + +PhantomFileDocument::~PhantomFileDocument() +{ + cancelRunningTasks(); +} bool PhantomFileDocument::OnOpenDocument(const wxString& filename) @@ -269,7 +292,7 @@ PhantomFileDocument::OnOpenDocument(const wxString& filename) m_idPhantom = m_phantom.id(); Modify(false); UpdateAllViews(); - GetFirstView()->OnUpdate (GetFirstView(), NULL); + //GetFirstView()->OnUpdate (GetFirstView(), NULL); m_bBadFileOpen = false; return true; @@ -307,6 +330,14 @@ PhantomFileDocument::getView() const return dynamic_cast(GetFirstView()); } +void +PhantomFileDocument::Activate() +{ +#if CTSIM_MDI + getView()->getFrame()->Activate(); +#endif +}; + // PlotFileDocument IMPLEMENT_DYNAMIC_CLASS(PlotFileDocument, wxDocument) @@ -342,7 +373,7 @@ PlotFileDocument::OnOpenDocument(const wxString& filename) m_namePlot = filename.c_str(); Modify (false); UpdateAllViews(); - GetFirstView()->OnUpdate (NULL, NULL); + //GetFirstView()->OnUpdate (NULL, NULL); m_bBadFileOpen = false; return true; @@ -367,6 +398,14 @@ PlotFileDocument::getView() const return dynamic_cast(GetFirstView()); } +void +PlotFileDocument::Activate() +{ +#if CTSIM_MDI + getView()->getFrame()->Activate(); +#endif +}; + ////////////////////////////////////////////////////////////////////////// // // TextFileDocument @@ -397,7 +436,7 @@ TextFileDocument::OnOpenDocument(const wxString& filename) SetFilename (filename, true); Modify (false); - UpdateAllViews(); + // UpdateAllViews(); m_bBadFileOpen = false; return true; } @@ -445,8 +484,6 @@ Graph3dFileDocument::Graph3dFileDocument(void) Graph3dFileDocument::~Graph3dFileDocument() { -// delete [] m_pVertices; -// delete [] m_pNormals; } bool @@ -461,7 +498,7 @@ Graph3dFileDocument::OnOpenDocument(const wxString& filename) { SetFilename (filename, true); Modify (false); - UpdateAllViews(); + // UpdateAllViews(); m_bBadFileOpen = false; return true; } @@ -482,10 +519,6 @@ Graph3dFileDocument::getView() const bool Graph3dFileDocument::createFromImageFile (const ImageFile& rImageFile) { -// delete [] m_pVertices; -// delete [] m_pNormals; - - m_nx = rImageFile.nx(); m_ny = rImageFile.ny(); m_array = rImageFile.getArray(); @@ -493,4 +526,13 @@ Graph3dFileDocument::createFromImageFile (const ImageFile& rImageFile) return true; } +void +Graph3dFileDocument::Activate() +{ +#if CTSIM_MDI + getView()->getFrame()->Activate(); +#endif +}; + + #endif // wxUSE_GLCANVAS