r582: no message
[ctsim.git] / src / docs.cpp
index 16462d7bb27544ff5cdc8c9e51b6de72ae6d91cb..99e6a56e9c9245d5cda5b1b88b8a840db209fdee 100644 (file)
@@ -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.29 2001/02/25 10:52:55 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
@@ -126,45 +126,16 @@ 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)
+EVT_MENU(BackgroundSupervisor::MSG_BACKGROUND_SUPERVISOR_ADD, BackgroundProcessingDocument::OnAddBackground)
+EVT_MENU(BackgroundSupervisor::MSG_BACKGROUND_SUPERVISOR_REMOVE, BackgroundProcessingDocument::OnRemoveBackground)
 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;
-}
-
 void
-ProjectionFileDocument::OnAddBackground (wxCommandEvent& event)
+BackgroundProcessingDocument::OnAddBackground (wxCommandEvent& event)
 {
   BackgroundSupervisor* pSupervisor = reinterpret_cast<BackgroundSupervisor*>(event.GetClientData());
   wxASSERT (pSupervisor != NULL);
@@ -175,7 +146,7 @@ ProjectionFileDocument::OnAddBackground (wxCommandEvent& event)
 }
 
 void
-ProjectionFileDocument::OnRemoveBackground (wxCommandEvent& event)
+BackgroundProcessingDocument::OnRemoveBackground (wxCommandEvent& event)
 {
   BackgroundSupervisor* pSupervisor = reinterpret_cast<BackgroundSupervisor*>(event.GetClientData());
   wxASSERT (pSupervisor != NULL);
@@ -193,12 +164,52 @@ ProjectionFileDocument::OnRemoveBackground (wxCommandEvent& event)
   m_criticalSection.Leave();
 
   if (! bFound) 
-     sys_error (ERR_SEVERE, "Could not find background task [ProjectionFileDocument::removeBackgroundTask");
+     sys_error (ERR_SEVERE, "Could not find background task [OnRemoveBackground]");
   
   wxCommandEvent ackEvent (wxEVT_COMMAND_MENU_SELECTED, BackgroundSupervisor::MSG_DOCUMENT_ACK_REMOVE);
   wxPostEvent (pSupervisor, ackEvent);
 }
 
+void
+BackgroundProcessingDocument::cancelRunningTasks()
+{
+  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();
+  }
+}
+
+
+// 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 
 ProjectionFileDocument::OnOpenDocument(const wxString& filename)
 {
@@ -242,7 +253,7 @@ ProjectionFileDocument::getView() const
 
 // PhantomFileDocument
 
-IMPLEMENT_DYNAMIC_CLASS(PhantomFileDocument, wxDocument)
+IMPLEMENT_DYNAMIC_CLASS(PhantomFileDocument, BackgroundProcessingTask)
 
 bool 
 PhantomFileDocument::OnOpenDocument(const wxString& filename)