+void
+ImageFileDocument::Modify(bool mod)
+{
+ wxDocument::Modify(mod);
+}
+
+ImageFileView*
+ImageFileDocument::getView() const
+{
+ return dynamic_cast<ImageFileView*>(GetFirstView());
+}
+
+
+bool
+ImageFileDocument::Revert ()
+{
+ if (IsModified()) {
+ wxString msg ("Revert to saved ");
+ msg += GetFilename();
+ msg += "?";
+ wxMessageDialog dialog (getView()->getFrame(), msg, "Are you sure?", wxYES_NO | wxNO_DEFAULT);
+ if (dialog.ShowModal() == wxID_YES) {
+ if (theApp->getVerboseLogging())
+ *theApp->getLog() << "Reverting to saved " << GetFilename() << "\n";
+ Modify (false);
+ OnOpenDocument (GetFilename());
+ }
+ }
+ getView()->OnUpdate (getView(), NULL);
+ UpdateAllViews();
+
+ return true;
+}
+
+// BackgroundProcessingDocument - Base Class
+
+IMPLEMENT_DYNAMIC_CLASS(BackgroundProcessingDocument, wxDocument)
+BEGIN_EVENT_TABLE(BackgroundProcessingDocument, wxDocument)
+#ifdef CTSIM_THREADS
+EVT_MENU(BackgroundSupervisor::MSG_BACKGROUND_SUPERVISOR_ADD, BackgroundProcessingDocument::OnAddBackground)
+EVT_MENU(BackgroundSupervisor::MSG_BACKGROUND_SUPERVISOR_REMOVE, BackgroundProcessingDocument::OnRemoveBackground)
+#endif
+END_EVENT_TABLE()
+
+#ifdef CTSIM_TREADS
+void
+BackgroundProcessingDocument::OnAddBackground (wxCommandEvent& event)
+{
+ BackgroundSupervisor* pSupervisor = reinterpret_cast<BackgroundSupervisor*>(event.GetClientData());
+ wxASSERT (pSupervisor != NULL);
+
+ wxCriticalSectionLocker locker (m_criticalSection);
+ if (pSupervisor)
+ m_vecpBackgroundSupervisors.push_back (pSupervisor);
+}
+
+void
+BackgroundProcessingDocument::OnRemoveBackground (wxCommandEvent& event)