diff --git a/samples/docview/doc.cpp b/samples/docview/doc.cpp index 4108800ede..f43bbb1c13 100644 --- a/samples/docview/doc.cpp +++ b/samples/docview/doc.cpp @@ -170,43 +170,49 @@ DocumentIstream& DoodleSegment::LoadObject(DocumentIstream& istream) return istream; } +// ---------------------------------------------------------------------------- +// wxTextDocument: wxDocument and wxTextCtrl married +// ---------------------------------------------------------------------------- + +IMPLEMENT_CLASS(wxTextDocument, wxDocument) + +// Since text windows have their own method for saving to/loading from files, +// we override DoSave/OpenDocument instead of Save/LoadObject +bool wxTextDocument::DoSaveDocument(const wxString& filename) +{ + return GetTextCtrl()->SaveFile(filename); +} + +bool wxTextDocument::DoOpenDocument(const wxString& filename) +{ + return GetTextCtrl()->LoadFile(filename); +} + +bool wxTextDocument::IsModified() const +{ + wxTextCtrl* wnd = GetTextCtrl(); + return wxDocument::IsModified() || (wnd && wnd->IsModified()); +} + +void wxTextDocument::Modify(bool modified) +{ + wxDocument::Modify(modified); + + wxTextCtrl* wnd = GetTextCtrl(); + if (wnd && !modified) + { + wnd->DiscardEdits(); + } +} + // ---------------------------------------------------------------------------- // TextEditDocument implementation // ---------------------------------------------------------------------------- IMPLEMENT_DYNAMIC_CLASS(TextEditDocument, wxDocument) -// 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) +wxTextCtrl* TextEditDocument::GetTextCtrl() const { - return GetFirstView()->GetText()->SaveFile(filename); + wxView* view = GetFirstView(); + return view ? wxStaticCast(view, TextEditView)->GetText() : NULL; } - -bool TextEditDocument::DoOpenDocument(const wxString& filename) -{ - return GetFirstView()->GetText()->LoadFile(filename); -} - -bool TextEditDocument::IsModified() const -{ - TextEditView* view = GetFirstView(); - return wxDocument::IsModified() || (view && view->GetText()->IsModified()); -} - -void TextEditDocument::Modify(bool modified) -{ - TextEditView* view = GetFirstView(); - - wxDocument::Modify(modified); - - if ( !modified && view && view->GetText() ) - view->GetText()->DiscardEdits(); -} - -TextEditView* TextEditDocument::GetFirstView() const -{ - wxView* view = wxDocument::GetFirstView(); - return view ? wxStaticCast(view, TextEditView) : NULL; -} - diff --git a/samples/docview/doc.h b/samples/docview/doc.h index a4547ec65f..280f1656c0 100644 --- a/samples/docview/doc.h +++ b/samples/docview/doc.h @@ -157,21 +157,36 @@ public: // ---------------------------------------------------------------------------- -// A simple text document class +// wxTextDocument: wxDocument and wxTextCtrl married // ---------------------------------------------------------------------------- -class TextEditView; -class TextEditDocument : public wxDocument +class wxTextDocument : public wxDocument { public: - TextEditDocument() : wxDocument() { } - TextEditView *GetFirstView() const; + wxTextDocument() : wxDocument() { } + virtual wxTextCtrl* GetTextCtrl() const = 0; - virtual bool DoSaveDocument(const wxString& filename); - virtual bool DoOpenDocument(const wxString& filename); virtual bool IsModified() const; virtual void Modify(bool mod); +protected: + virtual bool DoSaveDocument(const wxString& filename); + virtual bool DoOpenDocument(const wxString& filename); + + DECLARE_NO_COPY_CLASS(wxTextDocument) + DECLARE_CLASS(wxTextDocument) +}; + +// ---------------------------------------------------------------------------- +// A very simple text document class +// ---------------------------------------------------------------------------- + +class TextEditDocument : public wxTextDocument +{ +public: + TextEditDocument() : wxTextDocument() { } + virtual wxTextCtrl* GetTextCtrl() const; + DECLARE_NO_COPY_CLASS(TextEditDocument) DECLARE_DYNAMIC_CLASS(TextEditDocument) };