X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fdocs.cpp;h=16462d7bb27544ff5cdc8c9e51b6de72ae6d91cb;hb=3b09207d7c37bc3d48e331657353123ed2f66ed9;hp=03ad1138293dd42647bb123eedab51c0f4bac16c;hpb=d3a6bf4aa2ccd32ed7671d1d97777dfc414df51d;p=ctsim.git diff --git a/src/docs.cpp b/src/docs.cpp index 03ad113..16462d7 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.18 2001/01/30 05:05:41 kevin Exp $ +** $Id: docs.cpp,v 1.28 2001/02/25 06:32:12 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,8 +114,9 @@ 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"; - Modify(false); + if (theApp->getVerboseLogging()) + *theApp->getLog() << "Reverting to saved " << GetFilename() << "\n"; + Modify (false); OnOpenDocument (GetFilename()); } } @@ -128,19 +129,78 @@ 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) +bool +ProjectionFileDocument::OnSaveDocument(const wxString& filename) { if (! m_pProjectionFile->write (filename.c_str())) { *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; } -bool ProjectionFileDocument::OnOpenDocument(const wxString& filename) +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) +{ + 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); + + 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 [ProjectionFileDocument::removeBackgroundTask"); + + wxCommandEvent ackEvent (wxEVT_COMMAND_MENU_SELECTED, BackgroundSupervisor::MSG_DOCUMENT_ACK_REMOVE); + wxPostEvent (pSupervisor, ackEvent); +} + +bool +ProjectionFileDocument::OnOpenDocument(const wxString& filename) { if (! OnSaveModified()) return false; @@ -150,7 +210,8 @@ bool 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(); @@ -160,12 +221,14 @@ bool ProjectionFileDocument::OnOpenDocument(const wxString& filename) return true; } -bool ProjectionFileDocument::IsModified(void) const +bool +ProjectionFileDocument::IsModified(void) const { return wxDocument::IsModified(); } -void ProjectionFileDocument::Modify(bool mod) +void +ProjectionFileDocument::Modify(bool mod) { wxDocument::Modify(mod); } @@ -181,7 +244,8 @@ ProjectionFileDocument::getView() const IMPLEMENT_DYNAMIC_CLASS(PhantomFileDocument, wxDocument) -bool PhantomFileDocument::OnOpenDocument(const wxString& filename) +bool +PhantomFileDocument::OnOpenDocument(const wxString& filename) { if (! OnSaveModified()) return false; @@ -189,7 +253,8 @@ bool 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); @@ -210,23 +275,27 @@ bool PhantomFileDocument::OnOpenDocument(const wxString& filename) return true; } -bool PhantomFileDocument::OnSaveDocument(const wxString& filename) +bool +PhantomFileDocument::OnSaveDocument(const wxString& filename) { if (! m_phantom.fileWrite (filename.c_str())) { *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; } -bool PhantomFileDocument::IsModified(void) const +bool +PhantomFileDocument::IsModified(void) const { return false; } -void PhantomFileDocument::Modify(bool mod) +void +PhantomFileDocument::Modify(bool mod) { wxDocument::Modify(mod); } @@ -242,19 +311,22 @@ PhantomFileDocument::getView() const IMPLEMENT_DYNAMIC_CLASS(PlotFileDocument, wxDocument) -bool PlotFileDocument::OnSaveDocument(const wxString& filename) +bool +PlotFileDocument::OnSaveDocument(const wxString& filename) { m_namePlot = filename.c_str(); if (! m_plot.fileWrite (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; } -bool PlotFileDocument::OnOpenDocument(const wxString& filename) +bool +PlotFileDocument::OnOpenDocument(const wxString& filename) { if (! OnSaveModified()) return false; @@ -264,7 +336,8 @@ bool 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); @@ -276,12 +349,14 @@ bool PlotFileDocument::OnOpenDocument(const wxString& filename) } -bool PlotFileDocument::IsModified(void) const +bool +PlotFileDocument::IsModified(void) const { return wxDocument::IsModified(); } -void PlotFileDocument::Modify(bool mod) +void +PlotFileDocument::Modify (bool mod) { wxDocument::Modify(mod); } @@ -300,9 +375,8 @@ PlotFileDocument::getView() const IMPLEMENT_DYNAMIC_CLASS(TextFileDocument, wxDocument) -// Since text windows have their own method for saving to/loading from files, -// we override OnSave/OpenDocument instead of Save/LoadObject -bool TextFileDocument::OnSaveDocument(const wxString& filename) +bool +TextFileDocument::OnSaveDocument(const wxString& filename) { TextFileView *view = getView(); if (! view->getTextCtrl()->SaveFile(filename)) @@ -311,7 +385,8 @@ bool TextFileDocument::OnSaveDocument(const wxString& filename) return true; } -bool TextFileDocument::OnOpenDocument(const wxString& filename) +bool +TextFileDocument::OnOpenDocument(const wxString& filename) { TextFileView *view = getView(); @@ -327,7 +402,8 @@ bool TextFileDocument::OnOpenDocument(const wxString& filename) return true; } -bool TextFileDocument::IsModified(void) const +bool +TextFileDocument::IsModified(void) const { return false; @@ -352,3 +428,69 @@ TextFileDocument::getTextCtrl() return dynamic_cast(GetFirstView())->getTextCtrl(); } +////////////////////////////////////////////////////////////////////////// +// +// Graph3dFileDocument +// +////////////////////////////////////////////////////////////////////////// + +#if wxUSE_GLCANVAS + +IMPLEMENT_DYNAMIC_CLASS(Graph3dFileDocument, wxDocument) + +Graph3dFileDocument::Graph3dFileDocument(void) +: 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; +} + +bool +Graph3dFileDocument::OnSaveDocument(const wxString& filename) +{ + Modify(false); + return true; +} + +bool +Graph3dFileDocument::OnOpenDocument(const wxString& filename) +{ + SetFilename (filename, true); + Modify (false); + UpdateAllViews(); + m_bBadFileOpen = false; + return true; +} + +bool +Graph3dFileDocument::IsModified(void) const +{ + return wxDocument::IsModified(); +} + + +Graph3dFileView* +Graph3dFileDocument::getView() const +{ + return dynamic_cast(GetFirstView()); +} + +bool +Graph3dFileDocument::createFromImageFile (const ImageFile& rImageFile) +{ +// delete [] m_pVertices; +// delete [] m_pNormals; + + + m_nx = rImageFile.nx(); + m_ny = rImageFile.ny(); + m_array = rImageFile.getArray(); + + return true; +} + +#endif // wxUSE_GLCANVAS