X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/00a1c49a77f50b13034a54df0285dc09c7e4f243..85b1997c095b18cd5e9e54e9d39feaa71c5ffa06:/samples/docview/doc.cpp?ds=sidebyside diff --git a/samples/docview/doc.cpp b/samples/docview/doc.cpp index 4108800ede..cf53892ea2 100644 --- a/samples/docview/doc.cpp +++ b/samples/docview/doc.cpp @@ -34,6 +34,7 @@ #else #include "wx/txtstrm.h" #endif +#include "wx/wfstream.h" #include "doc.h" #include "view.h" @@ -171,42 +172,134 @@ DocumentIstream& DoodleSegment::LoadObject(DocumentIstream& istream) } // ---------------------------------------------------------------------------- -// TextEditDocument implementation +// wxTextDocument: wxDocument and wxTextCtrl married // ---------------------------------------------------------------------------- -IMPLEMENT_DYNAMIC_CLASS(TextEditDocument, wxDocument) +IMPLEMENT_CLASS(wxTextDocument, wxDocument) + +bool wxTextDocument::OnCreate(const wxString& path, long flags) +{ + if ( !wxDocument::OnCreate(path, flags) ) + return false; + + // subscribe to changes in the text control to update the document state + // when it's modified + GetTextCtrl()->Connect + ( + wxEVT_COMMAND_TEXT_UPDATED, + wxCommandEventHandler(wxTextDocument::OnTextChange), + NULL, + this + ); + + return true; +} // Since text windows have their own method for saving to/loading from files, // we override DoSave/OpenDocument instead of Save/LoadObject -bool TextEditDocument::DoSaveDocument(const wxString& filename) +bool wxTextDocument::DoSaveDocument(const wxString& filename) { - return GetFirstView()->GetText()->SaveFile(filename); + return GetTextCtrl()->SaveFile(filename); } -bool TextEditDocument::DoOpenDocument(const wxString& filename) +bool wxTextDocument::DoOpenDocument(const wxString& filename) { - return GetFirstView()->GetText()->LoadFile(filename); + if ( !GetTextCtrl()->LoadFile(filename) ) + return false; + + // we're not modified by the user yet + Modify(false); + + return true; } -bool TextEditDocument::IsModified() const +bool wxTextDocument::IsModified() const { - TextEditView* view = GetFirstView(); - return wxDocument::IsModified() || (view && view->GetText()->IsModified()); + wxTextCtrl* wnd = GetTextCtrl(); + return wxDocument::IsModified() || (wnd && wnd->IsModified()); } -void TextEditDocument::Modify(bool modified) +void wxTextDocument::Modify(bool modified) { - TextEditView* view = GetFirstView(); - wxDocument::Modify(modified); - if ( !modified && view && view->GetText() ) - view->GetText()->DiscardEdits(); + wxTextCtrl* wnd = GetTextCtrl(); + if (wnd && !modified) + { + wnd->DiscardEdits(); + } +} + +void wxTextDocument::OnTextChange(wxCommandEvent& event) +{ + Modify(true); + + event.Skip(); +} + +// ---------------------------------------------------------------------------- +// TextEditDocument implementation +// ---------------------------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(TextEditDocument, wxDocument) + +wxTextCtrl* TextEditDocument::GetTextCtrl() const +{ + wxView* view = GetFirstView(); + return view ? wxStaticCast(view, TextEditView)->GetText() : NULL; +} + +// ---------------------------------------------------------------------------- +// wxImageDocument implementation +// ---------------------------------------------------------------------------- + +///////////////////////////////////////////////////////////////////////////// +// wxImageDocument + +IMPLEMENT_DYNAMIC_CLASS(wxImageDocument, wxDocument) + +wxImageDocument::wxImageDocument() : wxDocument() +{ +} + +wxImageDocument::~wxImageDocument() +{ +} + +bool wxImageDocument::DeleteContents() +{ + bool ok = wxDocument::DeleteContents(); + if (ok && m_image.IsOk()) + { + m_image.Destroy(); + } + return ok; +} + +bool wxImageDocument::SaveFile(wxOutputStream* stream, wxBitmapType type) const +{ + return m_image.IsOk() && m_image.SaveFile(*stream, type); +} + +bool wxImageDocument::DoOpenDocument(const wxString& file) +{ + wxFileInputStream stream(file); + return stream.IsOk() && DoOpenDocument(&stream); +} + +bool wxImageDocument::DoSaveDocument(const wxString& file) +{ + wxFileOutputStream stream(file); + return stream.IsOk() && DoSaveDocument(&stream); +} + +bool wxImageDocument::DoOpenDocument(wxInputStream* stream) +{ + return m_image.LoadFile(*stream); } -TextEditView* TextEditDocument::GetFirstView() const +bool wxImageDocument::DoSaveDocument(wxOutputStream* stream) const { - wxView* view = wxDocument::GetFirstView(); - return view ? wxStaticCast(view, TextEditView) : NULL; + return m_image.IsOk() && SaveFile(stream, m_image.GetType()); }