X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f37f49b652601744a8576d94568985cba49fc784..c29c95fe24973b94fd724db767193171ca7c513d:/samples/docview/doc.cpp diff --git a/samples/docview/doc.cpp b/samples/docview/doc.cpp index cf53892ea2..e093d82ae3 100644 --- a/samples/docview/doc.cpp +++ b/samples/docview/doc.cpp @@ -7,7 +7,7 @@ // RCS-ID: $Id$ // Copyright: (c) 1998 Julian Smart // (c) 2008 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ---------------------------------------------------------------------------- @@ -79,6 +79,16 @@ DocumentIstream& DrawingDocument::LoadObject(DocumentIstream& istream) wxInt32 count = 0; stream >> count; + if ( count < 0 ) + { + wxLogWarning("Drawing document corrupted: invalid segments count."); +#if wxUSE_STD_IOSTREAM + istream.clear(std::ios::badbit); +#else + istream.Reset(wxSTREAM_READ_ERROR); +#endif + return istream; + } for ( int n = 0; n < count; n++ ) { @@ -250,56 +260,39 @@ wxTextCtrl* TextEditDocument::GetTextCtrl() const } // ---------------------------------------------------------------------------- -// wxImageDocument implementation +// ImageDocument and ImageDetailsDocument implementation // ---------------------------------------------------------------------------- -///////////////////////////////////////////////////////////////////////////// -// wxImageDocument - -IMPLEMENT_DYNAMIC_CLASS(wxImageDocument, wxDocument) - -wxImageDocument::wxImageDocument() : wxDocument() -{ -} +IMPLEMENT_DYNAMIC_CLASS(ImageDocument, wxDocument) -wxImageDocument::~wxImageDocument() +bool ImageDocument::DoOpenDocument(const wxString& file) { + return m_image.LoadFile(file); } -bool wxImageDocument::DeleteContents() +bool ImageDocument::OnOpenDocument(const wxString& filename) { - bool ok = wxDocument::DeleteContents(); - if (ok && m_image.IsOk()) - { - m_image.Destroy(); - } - return ok; -} + if ( !wxDocument::OnOpenDocument(filename) ) + return false; -bool wxImageDocument::SaveFile(wxOutputStream* stream, wxBitmapType type) const -{ - return m_image.IsOk() && m_image.SaveFile(*stream, type); -} + // we don't have a wxDocTemplate for the image details document as it's + // never created by wxWidgets automatically, instead just do it manually + ImageDetailsDocument * const docDetails = new ImageDetailsDocument(this); + docDetails->SetFilename(filename); -bool wxImageDocument::DoOpenDocument(const wxString& file) -{ - wxFileInputStream stream(file); - return stream.IsOk() && DoOpenDocument(&stream); -} + new ImageDetailsView(docDetails); -bool wxImageDocument::DoSaveDocument(const wxString& file) -{ - wxFileOutputStream stream(file); - return stream.IsOk() && DoSaveDocument(&stream); + return true; } -bool wxImageDocument::DoOpenDocument(wxInputStream* stream) +ImageDetailsDocument::ImageDetailsDocument(ImageDocument *parent) + : wxDocument(parent) { - return m_image.LoadFile(*stream); -} + const wxImage image = parent->GetImage(); -bool wxImageDocument::DoSaveDocument(wxOutputStream* stream) const -{ - return m_image.IsOk() && SaveFile(stream, m_image.GetType()); + m_size.x = image.GetWidth(); + m_size.y = image.GetHeight(); + m_numColours = image.CountColours(); + m_type = image.GetType(); + m_hasAlpha = image.HasAlpha(); } -