X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fdocs.cpp;h=bb8ec90d973e122046ac32d95cda6c34d7f52bb4;hb=6480e936da257519dd36840862ac995ca8c374da;hp=93c5f1ea8d60954ccc54d007d644d842dd58e81b;hpb=f1303ea0f1188b0a89846c67b5783f596e7ba1b7;p=ctsim.git diff --git a/src/docs.cpp b/src/docs.cpp index 93c5f1e..bb8ec90 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.24 2001/02/21 20:13:03 kevin Exp $ +** $Id: docs.cpp,v 1.27 2001/02/23 21:58:31 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 @@ -29,18 +29,14 @@ // #pragma implementation #endif -// For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" -#ifdef __BORLANDC__ -#pragma hdrstop -#endif - #ifndef WX_PRECOMP #include "wx/wx.h" #endif #include "wx/txtstrm.h" #include "wx/file.h" +#include "wx/thread.h" #if !wxUSE_DOC_VIEW_ARCHITECTURE #error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h! @@ -50,6 +46,8 @@ #include "ctsim.h" #include "docs.h" #include "views.h" +#include "threadrecon.h" + // ImageFileDocument @@ -131,6 +129,10 @@ ImageFileDocument::Revert () // 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) @@ -145,6 +147,50 @@ ProjectionFileDocument::OnSaveDocument(const wxString& filename) return true; } +ProjectionFileDocument::~ProjectionFileDocument() +{ + for (BackgroundContainer::iterator i = m_vecpBackgroundSupervisors.begin(); + i != m_vecpBackgroundSupervisors.end(); i++) { + BackgroundSupervisor::cancelSupervisor(*i); + } + + while (m_vecpBackgroundSupervisors.size() > 0) + ::wxYield(); + + delete m_pProjectionFile; +} + +void +ProjectionFileDocument::OnAddBackground (wxCommandEvent& event) +{ + 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) +{ + BackgroundSupervisor* pSupervisor = reinterpret_cast(event.GetClientData()); + wxASSERT (pSupervisor != NULL); + + wxCriticalSectionLocker locker (m_criticalSection); + bool bFound = false; + for (BackgroundContainer::iterator i = m_vecpBackgroundSupervisors.begin(); + i != m_vecpBackgroundSupervisors.end(); + i++) + if (*i == pSupervisor) { + m_vecpBackgroundSupervisors.erase(i); + bFound = true; + break; + } + if (! bFound) + sys_error (ERR_SEVERE, "Could not find background task [ProjectionFileDocument::removeBackgroundTask"); +} + bool ProjectionFileDocument::OnOpenDocument(const wxString& filename) {