X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fdocs.cpp;h=03ad1138293dd42647bb123eedab51c0f4bac16c;hb=d3a6bf4aa2ccd32ed7671d1d97777dfc414df51d;hp=d5abb54835690538544dfd7febb600eebb8ca799;hpb=1fd4f7cc977b9f1499716de10d15656bd50f4816;p=ctsim.git diff --git a/src/docs.cpp b/src/docs.cpp index d5abb54..03ad113 100644 --- a/src/docs.cpp +++ b/src/docs.cpp @@ -7,9 +7,9 @@ ** Date Started: July 2000 ** ** This is part of the CTSim program -** Copyright (C) 1983-2000 Kevin Rosenberg +** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: docs.cpp,v 1.1 2000/07/13 07:01:59 kevin Exp $ +** $Id: docs.cpp,v 1.18 2001/01/30 05:05:41 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 @@ -40,47 +40,89 @@ #include "wx/wx.h" #endif #include "wx/txtstrm.h" +#include "wx/file.h" #if !wxUSE_DOC_VIEW_ARCHITECTURE #error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h! #endif +#include "ct.h" +#include "ctsim.h" #include "docs.h" #include "views.h" - - // ImageFileDocument IMPLEMENT_DYNAMIC_CLASS(ImageFileDocument, wxDocument) bool ImageFileDocument::OnSaveDocument(const wxString& filename) { - if (!m_imageFile.fileWrite (filename)) - return false; - Modify(false); - return true; + if (! m_pImageFile->fileWrite (filename)) { + *theApp->getLog() << "Unable to write image file " << filename << "\n"; + return false; + } + *theApp->getLog() << "Wrote image file " << filename << "\n"; + Modify(false); + return true; } bool ImageFileDocument::OnOpenDocument(const wxString& filename) { - if (! m_imageFile.fileRead (filename)) - return false; - - SetFilename(filename, true); - Modify(false); - UpdateAllViews(); - return true; + if (! OnSaveModified()) + return false; + + if (! m_pImageFile->fileRead (filename.c_str())) { + *theApp->getLog() << "Unable to read image file " << filename << "\n"; + m_bBadFileOpen = true; + return false; + } + *theApp->getLog() << "Read image file " << filename << "\n"; + SetFilename(filename, true); + Modify(false); + UpdateAllViews(); + getView()->OnUpdate (getView(), NULL); + m_bBadFileOpen = false; + + return true; } -bool ImageFileDocument::IsModified(void) const +bool +ImageFileDocument::IsModified(void) const { return wxDocument::IsModified(); } -void ImageFileDocument::Modify(bool mod) +void +ImageFileDocument::Modify(bool mod) +{ + wxDocument::Modify(mod); +} + +ImageFileView* +ImageFileDocument::getView() const +{ + return dynamic_cast(GetFirstView()); +} + + +bool +ImageFileDocument::Revert () { - wxDocument::Modify(mod); + 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) { + *theApp->getLog() << "Reverting to saved " << GetFilename() << "\n"; + Modify(false); + OnOpenDocument (GetFilename()); + } + } + getView()->OnUpdate (getView(), NULL); + UpdateAllViews(); + + return true; } // ProjectionFileDocument @@ -89,21 +131,33 @@ IMPLEMENT_DYNAMIC_CLASS(ProjectionFileDocument, wxDocument) bool ProjectionFileDocument::OnSaveDocument(const wxString& filename) { - if (!m_projectionFile.write (filename)) - return false; - Modify(false); - return true; + 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"; + Modify(false); + return true; } bool ProjectionFileDocument::OnOpenDocument(const wxString& filename) { - if (! m_projectionFile.read (filename)) - return false; - - SetFilename(filename, true); - Modify(false); - UpdateAllViews(); - return true; + if (! OnSaveModified()) + return false; + + if (! m_pProjectionFile->read (filename.c_str())) { + *theApp->getLog() << "Unable to read projection file " << filename << "\n"; + m_bBadFileOpen = true; + return false; + } + *theApp->getLog() << "Read projection file " << filename << "\n"; + SetFilename(filename, true); + Modify(false); + UpdateAllViews(); + GetFirstView()->OnUpdate (GetFirstView(), NULL); + m_bBadFileOpen = false; + + return true; } bool ProjectionFileDocument::IsModified(void) const @@ -113,5 +167,188 @@ bool ProjectionFileDocument::IsModified(void) const void ProjectionFileDocument::Modify(bool mod) { - wxDocument::Modify(mod); + wxDocument::Modify(mod); } + + +ProjectionFileView* +ProjectionFileDocument::getView() const +{ + return dynamic_cast(GetFirstView()); +} + +// PhantomFileDocument + +IMPLEMENT_DYNAMIC_CLASS(PhantomFileDocument, wxDocument) + +bool PhantomFileDocument::OnOpenDocument(const wxString& filename) +{ + if (! OnSaveModified()) + return false; + + wxString myFilename = filename; + if (wxFile::Exists (myFilename)) { + m_phantom.createFromFile (myFilename); + *theApp->getLog() << "Read phantom file " << filename << "\n"; + } else { + myFilename.Replace (".phm", ""); + m_phantom.createFromPhantom (myFilename); + } + m_namePhantom = myFilename; + SetFilename (myFilename, true); + if (m_phantom.fail()) { + *theApp->getLog() << "Failure creating phantom " << myFilename << "\n"; + m_bBadFileOpen = true; + return false; + } + m_idPhantom = m_phantom.id(); + Modify(false); + UpdateAllViews(); + GetFirstView()->OnUpdate (GetFirstView(), NULL); + m_bBadFileOpen = false; + + return true; +} + +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"; + Modify(false); + return true; +} + +bool PhantomFileDocument::IsModified(void) const +{ + return false; +} + +void PhantomFileDocument::Modify(bool mod) +{ + wxDocument::Modify(mod); +} + + +PhantomFileView* +PhantomFileDocument::getView() const +{ + return dynamic_cast(GetFirstView()); +} + +// PlotFileDocument + +IMPLEMENT_DYNAMIC_CLASS(PlotFileDocument, wxDocument) + +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"; + Modify(false); + return true; +} + +bool PlotFileDocument::OnOpenDocument(const wxString& filename) +{ + if (! OnSaveModified()) + return false; + + if (! m_plot.fileRead (filename.c_str())) { + *theApp->getLog() << "Unable to read plot file " << filename << "\n"; + m_bBadFileOpen = true; + return false; + } + *theApp->getLog() << "Read plot file " << filename << "\n"; + SetFilename (filename, true); + m_namePlot = filename.c_str(); + Modify (false); + UpdateAllViews(); + GetFirstView()->OnUpdate (NULL, NULL); + m_bBadFileOpen = false; + + return true; +} + + +bool PlotFileDocument::IsModified(void) const +{ + return wxDocument::IsModified(); +} + +void PlotFileDocument::Modify(bool mod) +{ + wxDocument::Modify(mod); +} + +PlotFileView* +PlotFileDocument::getView() const +{ + return dynamic_cast(GetFirstView()); +} + +////////////////////////////////////////////////////////////////////////// +// +// TextFileDocument +// +////////////////////////////////////////////////////////////////////////// + +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) +{ + TextFileView *view = getView(); + if (! view->getTextCtrl()->SaveFile(filename)) + return false; + Modify(false); + return true; +} + +bool TextFileDocument::OnOpenDocument(const wxString& filename) +{ + TextFileView *view = getView(); + + if (! view->getTextCtrl()->LoadFile(filename)) { + m_bBadFileOpen = true; + return false; + } + + SetFilename (filename, true); + Modify (false); + UpdateAllViews(); + m_bBadFileOpen = false; + return true; +} + +bool TextFileDocument::IsModified(void) const +{ + return false; + + TextFileView *view = getView(); + + if (view) + return (wxDocument::IsModified() || view->getTextCtrl()->IsModified()); + else + return wxDocument::IsModified(); +} + + +TextFileView* +TextFileDocument::getView() const +{ + return dynamic_cast(GetFirstView()); +} + +wxTextCtrl* +TextFileDocument::getTextCtrl() +{ + return dynamic_cast(GetFirstView())->getTextCtrl(); +} +