X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fdocs.cpp;h=aa70dbfb4bb72c563fd38cdb5019ff8e0f557857;hb=08c1ec110dc7936c2bbd1c619bd2cf3618c6b4cc;hp=16462d7bb27544ff5cdc8c9e51b6de72ae6d91cb;hpb=3b09207d7c37bc3d48e331657353123ed2f66ed9;p=ctsim.git diff --git a/src/docs.cpp b/src/docs.cpp index 16462d7..aa70dbf 100644 --- a/src/docs.cpp +++ b/src/docs.cpp @@ -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.34 2001/03/11 17:55:29 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 @@ -104,6 +104,13 @@ ImageFileDocument::getView() const return dynamic_cast(GetFirstView()); } +void +ImageFileDocument::Activate() +{ +#if CTSIM_MDI + getView()->getFrame()->Activate(); +#endif +}; bool ImageFileDocument::Revert () @@ -126,60 +133,24 @@ ImageFileDocument::Revert () return true; } -// ProjectionFileDocument +// BackgroundProcessingDocument - Base Class -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) +IMPLEMENT_DYNAMIC_CLASS(BackgroundProcessingDocument, wxDocument) +BEGIN_EVENT_TABLE(BackgroundProcessingDocument, wxDocument) END_EVENT_TABLE() -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() -{ - m_criticalSection.Enter(); - for (BackgroundContainer::iterator i = m_vecpBackgroundSupervisors.begin(); - i != m_vecpBackgroundSupervisors.end(); i++) - BackgroundSupervisor::cancelSupervisor(*i); - m_criticalSection.Leave(); - - while (m_vecpBackgroundSupervisors.size() > 0) { - ::wxUsleep(50); - ::wxYield(); - } - - delete m_pProjectionFile; -} - +#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 @@ -242,7 +253,12 @@ ProjectionFileDocument::getView() const // PhantomFileDocument -IMPLEMENT_DYNAMIC_CLASS(PhantomFileDocument, wxDocument) +IMPLEMENT_DYNAMIC_CLASS(PhantomFileDocument, BackgroundProcessingTask) + +PhantomFileDocument::~PhantomFileDocument() +{ + cancelRunningTasks(); +} bool PhantomFileDocument::OnOpenDocument(const wxString& filename)