| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        samples/docview/doc.h
 
- // Purpose:     Document classes
 
- // Author:      Julian Smart
 
- // Modified by: Vadim Zeitlin: merge with the MDI version and general cleanup
 
- // Created:     04/01/98
 
- // Copyright:   (c) 1998 Julian Smart
 
- //              (c) 2008 Vadim Zeitlin
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- #ifndef _WX_SAMPLES_DOCVIEW_DOC_H_
 
- #define _WX_SAMPLES_DOCVIEW_DOC_H_
 
- #include "wx/docview.h"
 
- #include "wx/cmdproc.h"
 
- #include "wx/vector.h"
 
- #include "wx/image.h"
 
- // This sample is written to build both with wxUSE_STD_IOSTREAM==0 and 1, which
 
- // somewhat complicates its code but is necessary in order to support building
 
- // it under all platforms and in all build configurations
 
- //
 
- // In your own code you would normally use std::stream classes only and so
 
- // wouldn't need these typedefs
 
- #if wxUSE_STD_IOSTREAM
 
-     typedef wxSTD istream DocumentIstream;
 
-     typedef wxSTD ostream DocumentOstream;
 
- #else // !wxUSE_STD_IOSTREAM
 
-     typedef wxInputStream DocumentIstream;
 
-     typedef wxOutputStream DocumentOstream;
 
- #endif // wxUSE_STD_IOSTREAM/!wxUSE_STD_IOSTREAM
 
- // ----------------------------------------------------------------------------
 
- // The document class and its helpers
 
- // ----------------------------------------------------------------------------
 
- // Represents a line from one point to the other
 
- struct DoodleLine
 
- {
 
-     DoodleLine() { /* leave fields uninitialized */ }
 
-     DoodleLine(const wxPoint& pt1, const wxPoint& pt2)
 
-         : x1(pt1.x), y1(pt1.y), x2(pt2.x), y2(pt2.y)
 
-     {
 
-     }
 
-     wxInt32 x1;
 
-     wxInt32 y1;
 
-     wxInt32 x2;
 
-     wxInt32 y2;
 
- };
 
- typedef wxVector<DoodleLine> DoodleLines;
 
- // Contains a list of lines: represents a mouse-down doodle
 
- class DoodleSegment
 
- {
 
- public:
 
-     DocumentOstream& SaveObject(DocumentOstream& stream);
 
-     DocumentIstream& LoadObject(DocumentIstream& stream);
 
-     bool IsEmpty() const { return m_lines.empty(); }
 
-     void AddLine(const wxPoint& pt1, const wxPoint& pt2)
 
-     {
 
-         m_lines.push_back(DoodleLine(pt1, pt2));
 
-     }
 
-     const DoodleLines& GetLines() const { return m_lines; }
 
- private:
 
-     DoodleLines m_lines;
 
- };
 
- typedef wxVector<DoodleSegment> DoodleSegments;
 
- // The drawing document (model) class itself
 
- class DrawingDocument : public wxDocument
 
- {
 
- public:
 
-     DrawingDocument() : wxDocument() { }
 
-     DocumentOstream& SaveObject(DocumentOstream& stream);
 
-     DocumentIstream& LoadObject(DocumentIstream& stream);
 
-     // add a new segment to the document
 
-     void AddDoodleSegment(const DoodleSegment& segment);
 
-     // remove the last segment, if any, and copy it in the provided pointer if
 
-     // not NULL and return true or return false and do nothing if there are no
 
-     // segments
 
-     bool PopLastSegment(DoodleSegment *segment);
 
-     // get direct access to our segments (for DrawingView)
 
-     const DoodleSegments& GetSegments() const { return m_doodleSegments; }
 
- private:
 
-     void DoUpdate();
 
-     DoodleSegments m_doodleSegments;
 
-     wxDECLARE_DYNAMIC_CLASS(DrawingDocument);
 
- };
 
- // ----------------------------------------------------------------------------
 
- // Some operations (which can be done and undone by the view) on the document:
 
- // ----------------------------------------------------------------------------
 
- // Base class for all operations on DrawingDocument
 
- class DrawingCommand : public wxCommand
 
- {
 
- public:
 
-     DrawingCommand(DrawingDocument *doc,
 
-                    const wxString& name,
 
-                    const DoodleSegment& segment = DoodleSegment())
 
-         : wxCommand(true, name),
 
-           m_doc(doc),
 
-           m_segment(segment)
 
-     {
 
-     }
 
- protected:
 
-     bool DoAdd() { m_doc->AddDoodleSegment(m_segment); return true; }
 
-     bool DoRemove() { return m_doc->PopLastSegment(&m_segment); }
 
- private:
 
-     DrawingDocument * const m_doc;
 
-     DoodleSegment m_segment;
 
- };
 
- // The command for adding a new segment
 
- class DrawingAddSegmentCommand : public DrawingCommand
 
- {
 
- public:
 
-     DrawingAddSegmentCommand(DrawingDocument *doc, const DoodleSegment& segment)
 
-         : DrawingCommand(doc, "Add new segment", segment)
 
-     {
 
-     }
 
-     virtual bool Do() { return DoAdd(); }
 
-     virtual bool Undo() { return DoRemove(); }
 
- };
 
- // The command for removing the last segment
 
- class DrawingRemoveSegmentCommand : public DrawingCommand
 
- {
 
- public:
 
-     DrawingRemoveSegmentCommand(DrawingDocument *doc)
 
-         : DrawingCommand(doc, "Remove last segment")
 
-     {
 
-     }
 
-     virtual bool Do() { return DoRemove(); }
 
-     virtual bool Undo() { return DoAdd(); }
 
- };
 
- // ----------------------------------------------------------------------------
 
- // wxTextDocument: wxDocument and wxTextCtrl married
 
- // ----------------------------------------------------------------------------
 
- class wxTextDocument : public wxDocument
 
- {
 
- public:
 
-     wxTextDocument() : wxDocument() { }
 
-     virtual bool OnCreate(const wxString& path, long flags);
 
-     virtual wxTextCtrl* GetTextCtrl() const = 0;
 
-     virtual bool IsModified() const;
 
-     virtual void Modify(bool mod);
 
- protected:
 
-     virtual bool DoSaveDocument(const wxString& filename);
 
-     virtual bool DoOpenDocument(const wxString& filename);
 
-     void OnTextChange(wxCommandEvent& event);
 
-     wxDECLARE_NO_COPY_CLASS(wxTextDocument);
 
-     wxDECLARE_ABSTRACT_CLASS(wxTextDocument);
 
- };
 
- // ----------------------------------------------------------------------------
 
- // A very simple text document class
 
- // ----------------------------------------------------------------------------
 
- class TextEditDocument : public wxTextDocument
 
- {
 
- public:
 
-     TextEditDocument() : wxTextDocument() { }
 
-     virtual wxTextCtrl* GetTextCtrl() const;
 
-     wxDECLARE_NO_COPY_CLASS(TextEditDocument);
 
-     wxDECLARE_DYNAMIC_CLASS(TextEditDocument);
 
- };
 
- // ----------------------------------------------------------------------------
 
- // Image and image details document classes (both are read-only for simplicity)
 
- // ----------------------------------------------------------------------------
 
- // This is a normal document containing an image, just like TextEditDocument
 
- // above contains some text. It can be created from an image file on disk as
 
- // usual.
 
- class ImageDocument : public wxDocument
 
- {
 
- public:
 
-     ImageDocument() : wxDocument() { }
 
-     virtual bool OnOpenDocument(const wxString& file);
 
-     wxImage GetImage() const { return m_image; }
 
- protected:
 
-     virtual bool DoOpenDocument(const wxString& file);
 
- private:
 
-     wxImage m_image;
 
-     wxDECLARE_NO_COPY_CLASS(ImageDocument);
 
-     wxDECLARE_DYNAMIC_CLASS(ImageDocument);
 
- };
 
- // This is a child document of ImageDocument: this document doesn't
 
- // correspond to any file on disk, it's part of ImageDocument and can't be
 
- // instantiated independently of it.
 
- class ImageDetailsDocument : public wxDocument
 
- {
 
- public:
 
-     ImageDetailsDocument(ImageDocument *parent);
 
-     // accessors for ImageDetailsView
 
-     wxSize GetSize() const { return m_size; }
 
-     unsigned long GetNumColours() const { return m_numColours; }
 
-     wxBitmapType GetType() const { return m_type; }
 
-     bool HasAlpha() const { return m_hasAlpha; }
 
- private:
 
-     // some information about the image we choose to show to the user
 
-     wxSize m_size;
 
-     unsigned long m_numColours;
 
-     wxBitmapType m_type;
 
-     bool m_hasAlpha;
 
-     wxDECLARE_NO_COPY_CLASS(ImageDetailsDocument);
 
- };
 
- #endif // _WX_SAMPLES_DOCVIEW_DOC_H_
 
 
  |