X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=src%2Fdocs.cpp;h=bb8ec90d973e122046ac32d95cda6c34d7f52bb4;hp=59371ab10fd589eb751a63fedf19e43c2f91494e;hb=6480e936da257519dd36840862ac995ca8c374da;hpb=31a835d9aebd8acb367a033cc92efb4c944a7b4d diff --git a/src/docs.cpp b/src/docs.cpp index 59371ab..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.20 2001/01/30 10:58:13 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 @@ -61,7 +59,8 @@ bool ImageFileDocument::OnSaveDocument(const wxString& filename) *theApp->getLog() << "Unable to write image file " << filename << "\n"; return false; } - *theApp->getLog() << "Wrote image file " << filename << "\n"; + if (theApp->getVerboseLogging()) + *theApp->getLog() << "Wrote image file " << filename << "\n"; Modify(false); return true; } @@ -76,7 +75,8 @@ bool ImageFileDocument::OnOpenDocument(const wxString& filename) m_bBadFileOpen = true; return false; } - *theApp->getLog() << "Read image file " << filename << "\n"; + if (theApp->getVerboseLogging()) + *theApp->getLog() << "Read image file " << filename << "\n"; SetFilename(filename, true); Modify(false); UpdateAllViews(); @@ -114,7 +114,8 @@ ImageFileDocument::Revert () msg += "?"; wxMessageDialog dialog (getView()->getFrame(), msg, "Are you sure?", wxYES_NO | wxNO_DEFAULT); if (dialog.ShowModal() == wxID_YES) { - *theApp->getLog() << "Reverting to saved " << GetFilename() << "\n"; + if (theApp->getVerboseLogging()) + *theApp->getLog() << "Reverting to saved " << GetFilename() << "\n"; Modify (false); OnOpenDocument (GetFilename()); } @@ -128,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) @@ -136,11 +141,56 @@ ProjectionFileDocument::OnSaveDocument(const wxString& filename) *theApp->getLog() << "Unable to write projection file " << filename << "\n"; return false; } - *theApp->getLog() << "Wrote projection file " << filename << "\n"; + if (theApp->getVerboseLogging()) + *theApp->getLog() << "Wrote projection file " << filename << "\n"; Modify(false); 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) { @@ -152,7 +202,8 @@ ProjectionFileDocument::OnOpenDocument(const wxString& filename) m_bBadFileOpen = true; return false; } - *theApp->getLog() << "Read projection file " << filename << "\n"; + if (theApp->getVerboseLogging()) + *theApp->getLog() << "Read projection file " << filename << "\n"; SetFilename(filename, true); Modify(false); UpdateAllViews(); @@ -194,7 +245,8 @@ PhantomFileDocument::OnOpenDocument(const wxString& filename) wxString myFilename = filename; if (wxFile::Exists (myFilename)) { m_phantom.createFromFile (myFilename); - *theApp->getLog() << "Read phantom file " << filename << "\n"; + if (theApp->getVerboseLogging()) + *theApp->getLog() << "Read phantom file " << filename << "\n"; } else { myFilename.Replace (".phm", ""); m_phantom.createFromPhantom (myFilename); @@ -222,7 +274,8 @@ PhantomFileDocument::OnSaveDocument(const wxString& filename) *theApp->getLog() << "Unable to write phantom file " << filename << "\n"; return false; } - *theApp->getLog() << "Wrote phantom file " << filename << "\n"; + if (theApp->getVerboseLogging()) + *theApp->getLog() << "Wrote phantom file " << filename << "\n"; Modify(false); return true; } @@ -258,7 +311,8 @@ PlotFileDocument::OnSaveDocument(const wxString& filename) *theApp->getLog() << "Unable to write plot file " << filename << "\n"; return false; } - *theApp->getLog() << "Wrote plot file " << filename << "\n"; + if (theApp->getVerboseLogging()) + *theApp->getLog() << "Wrote plot file " << filename << "\n"; Modify(false); return true; } @@ -274,7 +328,8 @@ PlotFileDocument::OnOpenDocument(const wxString& filename) m_bBadFileOpen = true; return false; } - *theApp->getLog() << "Read plot file " << filename << "\n"; + if (theApp->getVerboseLogging()) + *theApp->getLog() << "Read plot file " << filename << "\n"; SetFilename (filename, true); m_namePlot = filename.c_str(); Modify (false); @@ -371,17 +426,19 @@ TextFileDocument::getTextCtrl() // ////////////////////////////////////////////////////////////////////////// +#if wxUSE_GLCANVAS + IMPLEMENT_DYNAMIC_CLASS(Graph3dFileDocument, wxDocument) Graph3dFileDocument::Graph3dFileDocument(void) -: m_bBadFileOpen(false), m_nVertices(0), m_pVertices(0), m_pNormals(0) +: m_bBadFileOpen(false), m_nVertices(0), m_pVertices(0), m_pNormals(0),m_nx(0),m_ny(0),m_array(0) { } Graph3dFileDocument::~Graph3dFileDocument() { - delete [] m_pVertices; - delete [] m_pNormals; +// delete [] m_pVertices; +// delete [] m_pNormals; } bool @@ -417,29 +474,15 @@ Graph3dFileDocument::getView() const bool Graph3dFileDocument::createFromImageFile (const ImageFile& rImageFile) { - delete [] m_pVertices; - delete [] m_pNormals; +// delete [] m_pVertices; +// delete [] m_pNormals; + m_nx = rImageFile.nx(); m_ny = rImageFile.ny(); m_array = rImageFile.getArray(); -#if 0 - const int nTriangles = nx * ny; - m_nVertices = nTriangles; - m_pVertices = new glTripleFloat [nTriangles]; - m_pNormals = new glTripleFloat [nTriangles]; - - for (unsigned int ix = 0; ix < nx; ix++) { - for (unsigned int iy = 0; iy < ny; iy++) { - const int iTriangle = ix * iy; - m_pVertices[iTriangle][0] = ix; - m_pVertices[iTriangle][1] = iy; - m_pVertices[iTriangle][2] = v[ix][iy]; - m_pNormals[iTriangle][0] = 0; - m_pNormals[iTriangle][1] = 0; - m_pNormals[iTriangle][2] = 0; - } - } -#endif + return true; } + +#endif // wxUSE_GLCANVAS