X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fdocs.cpp;h=ae82675c555745862df9479fc256aa1b51eb48a9;hb=f692b2d39f56ffbafc04283f32233c098aa2978b;hp=d9b3d1098169533deb28d032598663bbc3912854;hpb=c00c639073653fac7463a88f2b000f263236550d;p=ctsim.git diff --git a/src/docs.cpp b/src/docs.cpp index d9b3d10..ae82675 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.11 2001/01/02 16:02:13 kevin Exp $ +** $Id: docs.cpp,v 1.22 2001/02/02 00:46:38 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 @@ -57,7 +57,7 @@ IMPLEMENT_DYNAMIC_CLASS(ImageFileDocument, wxDocument) bool ImageFileDocument::OnSaveDocument(const wxString& filename) { - if (! m_imageFile.fileWrite (filename)) { + if (! m_pImageFile->fileWrite (filename)) { *theApp->getLog() << "Unable to write image file " << filename << "\n"; return false; } @@ -68,47 +68,71 @@ bool ImageFileDocument::OnSaveDocument(const wxString& filename) bool ImageFileDocument::OnOpenDocument(const wxString& filename) { - if (filename == "untitled.if") { - wxString untitledFilename = theApp->getUntitledFilename(); - SetFilename (untitledFilename, true); - } else { - if (! m_imageFile.fileRead (filename.c_str())) { - *theApp->getLog() << "Unable to read image file " << filename << "\n"; - return false; - } - *theApp->getLog() << "Read image file " << filename << "\n"; - SetFilename(filename, 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(); - GetFirstView()->OnUpdate (GetFirstView(), NULL); + 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); + wxDocument::Modify(mod); } -bool ImageFileDocument::OnCloseDocument () +ImageFileView* +ImageFileDocument::getView() const +{ + return dynamic_cast(GetFirstView()); +} + + +bool +ImageFileDocument::Revert () { - bool bReturn = wxDocument::OnCloseDocument(); - return bReturn; + 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 IMPLEMENT_DYNAMIC_CLASS(ProjectionFileDocument, wxDocument) -bool ProjectionFileDocument::OnSaveDocument(const wxString& filename) +bool +ProjectionFileDocument::OnSaveDocument(const wxString& filename) { - if (! m_projectionFile.write (filename.c_str())) { + if (! m_pProjectionFile->write (filename.c_str())) { *theApp->getLog() << "Unable to write projection file " << filename << "\n"; return false; } @@ -117,48 +141,56 @@ bool ProjectionFileDocument::OnSaveDocument(const wxString& filename) return true; } -bool ProjectionFileDocument::OnOpenDocument(const wxString& filename) +bool +ProjectionFileDocument::OnOpenDocument(const wxString& filename) { - if (filename == "untitled.pj") { - wxString untitledFilename = theApp->getUntitledFilename(); - SetFilename (untitledFilename, true); - } else { - if (! m_projectionFile.read (filename.c_str())) { - *theApp->getLog() << "Unable to read projection file " << filename << "\n"; - return false; - } - *theApp->getLog() << "Read projection file " << filename << "\n"; - SetFilename(filename, 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 +bool +ProjectionFileDocument::IsModified(void) const { return wxDocument::IsModified(); } -void ProjectionFileDocument::Modify(bool mod) +void +ProjectionFileDocument::Modify(bool mod) { - wxDocument::Modify(mod); + wxDocument::Modify(mod); } -bool ProjectionFileDocument::OnCloseDocument () -{ - bool bReturn = wxDocument::OnCloseDocument(); - return bReturn; +ProjectionFileView* +ProjectionFileDocument::getView() const +{ + return dynamic_cast(GetFirstView()); } -// PhantomDocument +// PhantomFileDocument -IMPLEMENT_DYNAMIC_CLASS(PhantomDocument, wxDocument) +IMPLEMENT_DYNAMIC_CLASS(PhantomFileDocument, wxDocument) -bool PhantomDocument::OnOpenDocument(const wxString& filename) +bool +PhantomFileDocument::OnOpenDocument(const wxString& filename) { + if (! OnSaveModified()) + return false; + wxString myFilename = filename; if (wxFile::Exists (myFilename)) { m_phantom.createFromFile (myFilename); @@ -171,16 +203,20 @@ bool PhantomDocument::OnOpenDocument(const wxString& filename) 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 PhantomDocument::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"; @@ -191,28 +227,31 @@ bool PhantomDocument::OnSaveDocument(const wxString& filename) return true; } -bool PhantomDocument::OnCloseDocument () +bool +PhantomFileDocument::IsModified(void) const { - bool bReturn = wxDocument::OnCloseDocument(); - return bReturn; + return false; } -bool PhantomDocument::IsModified(void) const +void +PhantomFileDocument::Modify(bool mod) { - return wxDocument::IsModified(); + wxDocument::Modify(mod); } -void PhantomDocument::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) +bool +PlotFileDocument::OnSaveDocument(const wxString& filename) { m_namePlot = filename.c_str(); if (! m_plot.fileWrite (filename)) { @@ -224,40 +263,171 @@ bool PlotFileDocument::OnSaveDocument(const wxString& filename) return true; } -bool PlotFileDocument::OnOpenDocument(const wxString& filename) +bool +PlotFileDocument::OnOpenDocument(const wxString& filename) { - if (filename == "untitled.plt") { - wxString untitledFilename = theApp->getUntitledFilename(); - SetFilename (untitledFilename, true); - } else { - if (! m_plot.fileRead (filename.c_str())) { - *theApp->getLog() << "Unable to read plot file " << filename << "\n"; - return false; - } - *theApp->getLog() << "Read plot file " << filename << "\n"; - SetFilename (filename, true); - m_namePlot = filename.c_str(); + 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) +bool +TextFileDocument::OnSaveDocument(const wxString& filename) +{ + TextFileView *view = getView(); + if (! view->getTextCtrl()->SaveFile(filename)) + return false; + Modify(false); return true; } -bool PlotFileDocument::OnCloseDocument () +bool +TextFileDocument::OnOpenDocument(const wxString& filename) { - bool bReturn = wxDocument::OnCloseDocument(); - return bReturn; + 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 PlotFileDocument::IsModified(void) const +bool +TextFileDocument::IsModified(void) const { - return wxDocument::IsModified(); + return false; + + TextFileView *view = getView(); + + if (view) + return (wxDocument::IsModified() || view->getTextCtrl()->IsModified()); + else + return wxDocument::IsModified(); } -void PlotFileDocument::Modify(bool mod) + +TextFileView* +TextFileDocument::getView() const +{ + return dynamic_cast(GetFirstView()); +} + +wxTextCtrl* +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() { - wxDocument::Modify(mod); +// 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 \ No newline at end of file