X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/526954c5968baa29218c994ec48e476ae2bd4b9f..814028444d682b23af3809227cd485f4bebc1286:/samples/docview/doc.cpp diff --git a/samples/docview/doc.cpp b/samples/docview/doc.cpp index 713a76d569..e093d82ae3 100644 --- a/samples/docview/doc.cpp +++ b/samples/docview/doc.cpp @@ -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,7 +260,7 @@ wxTextCtrl* TextEditDocument::GetTextCtrl() const } // ---------------------------------------------------------------------------- -// ImageDocument and wxImageDetailsDocument implementation +// ImageDocument and ImageDetailsDocument implementation // ---------------------------------------------------------------------------- IMPLEMENT_DYNAMIC_CLASS(ImageDocument, wxDocument) @@ -260,3 +270,29 @@ bool ImageDocument::DoOpenDocument(const wxString& file) return m_image.LoadFile(file); } +bool ImageDocument::OnOpenDocument(const wxString& filename) +{ + if ( !wxDocument::OnOpenDocument(filename) ) + return false; + + // 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); + + new ImageDetailsView(docDetails); + + return true; +} + +ImageDetailsDocument::ImageDetailsDocument(ImageDocument *parent) + : wxDocument(parent) +{ + const wxImage image = parent->GetImage(); + + m_size.x = image.GetWidth(); + m_size.y = image.GetHeight(); + m_numColours = image.CountColours(); + m_type = image.GetType(); + m_hasAlpha = image.HasAlpha(); +}