X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fdocs.cpp;h=47ca4dcb160a706aeac56bff77626ffbf765dc00;hb=6562049dd76f2b8d6ded69dc75b4649e1b203743;hp=460082a63ae8f3a14f1e30a1beccb1c322e21352;hpb=0730f9f3adbf326b9d4bac754634399ad688efd1;p=ctsim.git diff --git a/src/docs.cpp b/src/docs.cpp index 460082a..47ca4dc 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.25 2001/02/22 11:05:38 kevin Exp $ +** $Id: docs.cpp,v 1.38 2002/05/03 00:40:30 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()->setInitialClientSize(); m_bBadFileOpen = false; return true; @@ -104,7 +104,6 @@ ImageFileDocument::getView() const return dynamic_cast(GetFirstView()); } - bool ImageFileDocument::Revert () { @@ -120,15 +119,76 @@ ImageFileDocument::Revert () OnOpenDocument (GetFilename()); } } - getView()->OnUpdate (getView(), NULL); + //getView()->OnUpdate (getView(), NULL); UpdateAllViews(); return true; } +void +ImageFileDocument::Activate() +{ +#if CTSIM_MDI + getView()->getFrame()->Activate(); +#endif +}; + +// BackgroundProcessingDocument - Base Class + +IMPLEMENT_DYNAMIC_CLASS(BackgroundProcessingDocument, wxDocument) +BEGIN_EVENT_TABLE(BackgroundProcessingDocument, wxDocument) +END_EVENT_TABLE() + +#ifdef HAVE_WXTHREADS +void +BackgroundProcessingDocument::addBackgroundSupervisor (BackgroundSupervisor* pSupervisor) +{ + wxCriticalSectionLocker locker (m_criticalSection); + if (pSupervisor) + m_vecpBackgroundSupervisors.push_back (pSupervisor); +} + +void +BackgroundProcessingDocument::removeBackgroundSupervisor (BackgroundSupervisor* pSupervisor) +{ + m_criticalSection.Enter(); + 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; + } + m_criticalSection.Leave(); + + if (! bFound) + 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, wxDocument) +IMPLEMENT_DYNAMIC_CLASS(ProjectionFileDocument, BackgroundProcessingTask) bool ProjectionFileDocument::OnSaveDocument(const wxString& filename) @@ -145,31 +205,9 @@ ProjectionFileDocument::OnSaveDocument(const wxString& filename) ProjectionFileDocument::~ProjectionFileDocument() { - for (int i = 0; i < m_vecpActiveReconstructors.size(); i++) { - ThreadedReconstructor* pThreadedReconstructor = m_vecpActiveReconstructors[i]; - if (pThreadedReconstructor) { - pThreadedReconstructor->cancel(); - } - } - - delete m_pProjectionFile; -} + cancelRunningTasks(); -void -ProjectionFileDocument::addReconstructor (ThreadedReconstructor* pRecon) -{ - wxCriticalSectionLocker locker (m_criticalSection); - m_vecpActiveReconstructors.push_back (pRecon); -} - -void -ProjectionFileDocument::removeReconstructor (ThreadedReconstructor* pRecon) -{ - wxCriticalSectionLocker locker (m_criticalSection); - for (int i = 0; i < m_vecpActiveReconstructors.size(); i++) { - if (m_vecpActiveReconstructors[i] == pRecon) - m_vecpActiveReconstructors[i] = NULL; - } + delete m_pProjectionFile; } bool @@ -188,7 +226,7 @@ ProjectionFileDocument::OnOpenDocument(const wxString& filename) SetFilename(filename, true); Modify(false); UpdateAllViews(); - GetFirstView()->OnUpdate (GetFirstView(), NULL); + getView()->setInitialClientSize(); m_bBadFileOpen = false; return true; @@ -213,9 +251,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) @@ -242,7 +293,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; @@ -280,6 +331,14 @@ PhantomFileDocument::getView() const return dynamic_cast(GetFirstView()); } +void +PhantomFileDocument::Activate() +{ +#if CTSIM_MDI + getView()->getFrame()->Activate(); +#endif +}; + // PlotFileDocument IMPLEMENT_DYNAMIC_CLASS(PlotFileDocument, wxDocument) @@ -315,7 +374,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; @@ -340,6 +399,14 @@ PlotFileDocument::getView() const return dynamic_cast(GetFirstView()); } +void +PlotFileDocument::Activate() +{ +#if CTSIM_MDI + getView()->getFrame()->Activate(); +#endif +}; + ////////////////////////////////////////////////////////////////////////// // // TextFileDocument @@ -370,7 +437,7 @@ TextFileDocument::OnOpenDocument(const wxString& filename) SetFilename (filename, true); Modify (false); - UpdateAllViews(); + // UpdateAllViews(); m_bBadFileOpen = false; return true; } @@ -418,8 +485,6 @@ Graph3dFileDocument::Graph3dFileDocument(void) Graph3dFileDocument::~Graph3dFileDocument() { -// delete [] m_pVertices; -// delete [] m_pNormals; } bool @@ -434,7 +499,7 @@ Graph3dFileDocument::OnOpenDocument(const wxString& filename) { SetFilename (filename, true); Modify (false); - UpdateAllViews(); + // UpdateAllViews(); m_bBadFileOpen = false; return true; } @@ -455,10 +520,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(); @@ -466,4 +527,13 @@ Graph3dFileDocument::createFromImageFile (const ImageFile& rImageFile) return true; } +void +Graph3dFileDocument::Activate() +{ +#if CTSIM_MDI + getView()->getFrame()->Activate(); +#endif +}; + + #endif // wxUSE_GLCANVAS