]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/richtext/richtextbuffer.h
put wxUSE_DATAVIEWCTRL in alphabetical order
[wxWidgets.git] / include / wx / richtext / richtextbuffer.h
index f0b9a90dac37d5b76ed6bf12b0ae787bd968e2af..e1633bc419859c63d4ebd64bb472ae19dee2cada 100644 (file)
@@ -1,14 +1,17 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        richtextbuffer.h
+// Name:        wx/richtext/richtextbuffer.h
 // Purpose:     Buffer for wxRichTextCtrl
 // Author:      Julian Smart
-// Modified by: 
+// Modified by:
 // Created:     2005-09-30
-// RCS-ID:      
+// RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
+#ifndef _WX_RICHTEXTBUFFER_H_
+#define _WX_RICHTEXTBUFFER_H_
+
 /*
 
   Data structures
   it can report a partial size, so that wrapping can be implemented,
   hit test calculations performed, etc. So GetRangeSize must be implemented
   for each object.
-  
- */
 
-#ifndef _WX_RICHTEXTBUFFER_H_
-#define _WX_RICHTEXTBUFFER_H_
+ */
 
 /*!
  * Includes
  */
 
-#include "wx/list.h"
+#include "wx/defs.h"
 
 #if wxUSE_RICHTEXT
 
+#include "wx/list.h"
+#include "wx/textctrl.h"
+#include "wx/bitmap.h"
 #include "wx/image.h"
 #include "wx/cmdproc.h"
 #include "wx/txtstrm.h"
@@ -134,6 +137,10 @@ class WXDLLIMPEXP_ADV wxTextAttrEx;
 #define wxRICHTEXT_VARIABLE_WIDTH   0x04
 #define wxRICHTEXT_VARIABLE_HEIGHT  0x08
 
+// Only lay out the part of the buffer that lies within
+// the rect passed to Layout.
+#define wxRICHTEXT_LAYOUT_SPECIFIED_RECT 0x10
+
 /*!
  * Flags returned from hit-testing
  */
@@ -206,6 +213,7 @@ public:
     ~wxRichTextRange() {}
 
     void operator =(const wxRichTextRange& range) { m_start = range.m_start; m_end = range.m_end; }
+    bool operator ==(const wxRichTextRange& range) const { return (m_start == range.m_start && m_end == range.m_end); }
     wxRichTextRange operator -(const wxRichTextRange& range) const { return wxRichTextRange(m_start - range.m_start, m_end - range.m_end); }
     wxRichTextRange operator +(const wxRichTextRange& range) const { return wxRichTextRange(m_start + range.m_start, m_end + range.m_end); }
 
@@ -243,6 +251,9 @@ protected:
     long m_end;
 };
 
+#define wxRICHTEXT_ALL  wxRichTextRange(-2, -2)
+#define wxRICHTEXT_NONE  wxRichTextRange(-1, -1)
+
 /*!
  * wxTextAttrEx is an extended version of wxTextAttr with more paragraph attributes.
  */
@@ -481,13 +492,13 @@ private:
     wxString            m_paragraphStyleName;
 };
 
-#define wxTEXT_ATTR_CHARACTER (wxTEXT_ATTR_FONT) | wxTEXT_ATTR_BACKGROUND_COLOUR | wxTEXT_ATTR_TEXT_COLOUR
+#define wxTEXT_ATTR_CHARACTER (wxTEXT_ATTR_FONT | wxTEXT_ATTR_BACKGROUND_COLOUR | wxTEXT_ATTR_TEXT_COLOUR)
 
-#define wxTEXT_ATTR_PARAGRAPH  wxTEXT_ATTR_ALIGNMENT|wxTEXT_ATTR_LEFT_INDENT|wxTEXT_ATTR_RIGHT_INDENT|wxTEXT_ATTR_TABS|\
+#define wxTEXT_ATTR_PARAGRAPH (wxTEXT_ATTR_ALIGNMENT|wxTEXT_ATTR_LEFT_INDENT|wxTEXT_ATTR_RIGHT_INDENT|wxTEXT_ATTR_TABS|\
     wxTEXT_ATTR_PARA_SPACING_BEFORE|wxTEXT_ATTR_PARA_SPACING_AFTER|wxTEXT_ATTR_LINE_SPACING|\
-    wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_NUMBER|wxTEXT_ATTR_BULLET_SYMBOL
+    wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_NUMBER|wxTEXT_ATTR_BULLET_SYMBOL)
 
-#define wxTEXT_ATTR_ALL wxTEXT_ATTR_CHARACTER|wxTEXT_ATTR_PARAGRAPH
+#define wxTEXT_ATTR_ALL (wxTEXT_ATTR_CHARACTER|wxTEXT_ATTR_PARAGRAPH)
 
 /*!
  * wxRichTextObject class declaration
@@ -640,7 +651,7 @@ protected:
     wxTextAttrEx            m_attributes;
 };
 
-WX_DECLARE_EXPORTED_LIST( wxRichTextObject, wxRichTextObjectList );
+WX_DECLARE_LIST_WITH_DECL( wxRichTextObject, wxRichTextObjectList, class WXDLLIMPEXP_ADV );
 
 /*!
  * wxRichTextCompositeObject class declaration
@@ -850,10 +861,10 @@ public:
     virtual wxRichTextObject* GetLeafObjectAtPosition(long position) const;
 
     /// Get the paragraph by number
-    virtual wxRichTextParagraph* GetParagraphAtLine(long paragraphNumber) const; 
+    virtual wxRichTextParagraph* GetParagraphAtLine(long paragraphNumber) const;
 
     /// Get the paragraph for a given line
-    virtual wxRichTextParagraph* GetParagraphForLine(wxRichTextLine* line) const; 
+    virtual wxRichTextParagraph* GetParagraphForLine(wxRichTextLine* line) const;
 
     /// Get the length of the paragraph
     virtual int GetParagraphLength(long paragraphNumber) const;
@@ -909,9 +920,6 @@ public:
     /// Copy
     void Copy(const wxRichTextParagraphLayoutBox& obj);
 
-    /// Clone
-    virtual wxRichTextObject* Clone() { return new wxRichTextParagraphLayoutBox(*this); }
-
     /// Calculate ranges
     virtual void UpdateRanges() { long end; CalculateRange(0, end); }
 
@@ -932,9 +940,18 @@ public:
     /// Get basic (overall) style
     virtual const wxTextAttrEx& GetBasicStyle() const { return m_attributes; }
 
+    /// Invalidate the buffer. With no argument, invalidates whole buffer.
+    void Invalidate(const wxRichTextRange& invalidRange = wxRICHTEXT_ALL);
+
+    /// Get invalid range, rounding to entire paragraphs if argument is true.
+    wxRichTextRange GetInvalidRange(bool wholeParagraphs = false) const;
+
 protected:
     wxRichTextCtrl* m_ctrl;
     wxTextAttrEx    m_defaultAttributes;
+
+    /// The invalidated range that will need full layout
+    wxRichTextRange         m_invalidRange;
 };
 
 /*!
@@ -969,7 +986,7 @@ public:
     void Copy(const wxRichTextFragment& obj);
 
     /// Clone
-    virtual wxRichTextObject* Clone() { return new wxRichTextFragment(*this); }
+    virtual wxRichTextObject* Clone() const { return new wxRichTextFragment(*this); }
 
 protected:
 
@@ -990,7 +1007,7 @@ public:
 // Constructors
 
     wxRichTextLine(wxRichTextParagraph* parent);
-    wxRichTextLine(const wxRichTextLine& obj) { Init(); Copy(obj); }
+    wxRichTextLine(const wxRichTextLine& obj) { Init( NULL); Copy(obj); }
     virtual ~wxRichTextLine() {}
 
 // Overrideables
@@ -1008,6 +1025,9 @@ public:
     const wxRichTextRange& GetRange() const { return m_range; }
     wxRichTextRange& GetRange() { return m_range; }
 
+    /// Get the absolute range
+    wxRichTextRange GetAbsoluteRange() const;
+
     /// Get/set the line size as calculated by Layout.
     virtual wxSize GetSize() const { return m_size; }
     virtual void SetSize(const wxSize& sz) { m_size = sz; }
@@ -1029,7 +1049,7 @@ public:
 // Operations
 
     /// Initialisation
-    void Init();
+    void Init(wxRichTextParagraph* parent);
 
     /// Copy
     void Copy(const wxRichTextLine& obj);
@@ -1040,6 +1060,7 @@ public:
 protected:
 
     /// The range of the line (start position to end position)
+    /// This is relative to the parent paragraph.
     wxRichTextRange     m_range;
 
     /// Size and position measured relative to top of paragraph
@@ -1053,7 +1074,7 @@ protected:
     wxRichTextParagraph* m_parent;
 };
 
-WX_DECLARE_EXPORTED_LIST( wxRichTextLine, wxRichTextLineList );
+WX_DECLARE_LIST_WITH_DECL( wxRichTextLine, wxRichTextLineList , class WXDLLIMPEXP_ADV );
 
 /*!
  * wxRichTextParagraph class declaration
@@ -1141,6 +1162,12 @@ public:
     /// Get the bullet text for this paragraph.
     wxString GetBulletText();
 
+    /// Allocate or reuse a line object
+    wxRichTextLine* AllocateLine(int pos);
+
+    /// Clear remaining unused line objects, if any
+    bool ClearUnusedLines(int lineCount);
+
 protected:
     /// The lines that make up the wrapped paragraph
     wxRichTextLineList m_cachedLines;
@@ -1186,7 +1213,7 @@ public:
     virtual bool DeleteRange(const wxRichTextRange& range);
 
     /// Returns true if the object is empty
-    virtual bool IsEmpty() const { return m_text.IsEmpty(); }
+    virtual bool IsEmpty() const { return m_text.empty(); }
 
     /// Returns true if this object can merge itself with the given one.
     virtual bool CanMerge(wxRichTextObject* object) const;
@@ -1240,7 +1267,7 @@ public:
     // to conserve space.
     // If it's not a JPEG we can make use of 'image', already scaled, so we don't have to
     // load the image a 2nd time.
-    virtual bool MakeImageBlock(const wxString& filename, int imageType, wxImage& image, bool convertToJPEG = TRUE);
+    virtual bool MakeImageBlock(const wxString& filename, int imageType, wxImage& image, bool convertToJPEG = true);
 
     // Make an image block from the wxImage in the given
     // format.
@@ -1465,7 +1492,7 @@ public:
     virtual void ClearStyleStack();
 
     /// Get the size of the style stack, for example to check correct nesting
-    virtual int GetStyleStackSize() const { return m_attributeStack.GetCount(); }
+    virtual size_t GetStyleStackSize() const { return m_attributeStack.GetCount(); }
 
     /// Begin using bold
     bool BeginBold();
@@ -1609,8 +1636,10 @@ public:
     /// Finds a handler by type
     static wxRichTextFileHandler *FindHandler(int imageType);
 
-    /// Gets a wildcard incorporating all visible handlers
-    static wxString GetExtWildcard(bool combine = false, bool save = false);
+    /// Gets a wildcard incorporating all visible handlers. If 'types' is present,
+    /// will be filled with the file type corresponding to each filter. This can be
+    /// used to determine the type to pass to LoadFile given a selected filter.
+    static wxString GetExtWildcard(bool combine = false, bool save = false, wxArrayInt* types = NULL);
 
     /// Clean up handlers
     static void CleanUpHandlers();
@@ -1671,7 +1700,7 @@ class WXDLLIMPEXP_ADV wxRichTextCommand: public wxCommand
 public:
     // Ctor for one action
     wxRichTextCommand(const wxString& name, wxRichTextCommandId id, wxRichTextBuffer* buffer,
-        wxRichTextCtrl* ctrl, bool ignoreFirstTime = FALSE);
+        wxRichTextCtrl* ctrl, bool ignoreFirstTime = false);
 
     // Ctor for multiple actions
     wxRichTextCommand(const wxString& name);
@@ -1700,7 +1729,7 @@ class WXDLLIMPEXP_ADV wxRichTextAction: public wxObject
 {
 public:
     wxRichTextAction(wxRichTextCommand* cmd, const wxString& name, wxRichTextCommandId id, wxRichTextBuffer* buffer,
-        wxRichTextCtrl* ctrl, bool ignoreFirstTime = FALSE);
+        wxRichTextCtrl* ctrl, bool ignoreFirstTime = false);
 
     ~wxRichTextAction();
 
@@ -1771,12 +1800,14 @@ public:
         { }
 
 #if wxUSE_STREAMS
-    virtual bool LoadFile(wxRichTextBuffer *buffer, wxInputStream& stream) = 0;
-    virtual bool SaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream) = 0;
+    bool LoadFile(wxRichTextBuffer *buffer, wxInputStream& stream)
+    { return DoLoadFile(buffer, stream); }
+    bool SaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream)
+    { return DoSaveFile(buffer, stream); }
 #endif
 
-    virtual bool LoadFile(wxRichTextBuffer *buffer, const wxString& filename);
-    virtual bool SaveFile(wxRichTextBuffer *buffer, const wxString& filename);
+    bool LoadFile(wxRichTextBuffer *buffer, const wxString& filename);
+    bool SaveFile(wxRichTextBuffer *buffer, const wxString& filename);
 
     /// Can we handle this filename (if using files)? By default, checks the extension.
     virtual bool CanHandle(const wxString& filename) const;
@@ -1791,18 +1822,31 @@ public:
     virtual bool IsVisible() const { return m_visible; }
     virtual void SetVisible(bool visible) { m_visible = visible; }
 
+    /// The name of the nandler
     void SetName(const wxString& name) { m_name = name; }
     wxString GetName() const { return m_name; }
 
+    /// The default extension to recognise
     void SetExtension(const wxString& ext) { m_extension = ext; }
     wxString GetExtension() const { return m_extension; }
 
+    /// The handler type
     void SetType(int type) { m_type = type; }
     int GetType() const { return m_type; }
 
+    /// Encoding to use when saving a file. If empty, a suitable encoding is chosen
+    void SetEncoding(const wxString& encoding) { m_encoding = encoding; }
+    const wxString& GetEncoding() const { return m_encoding; }
+
 protected:
 
+#if wxUSE_STREAMS
+    virtual bool DoLoadFile(wxRichTextBuffer *buffer, wxInputStream& stream) = 0;
+    virtual bool DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream) = 0;
+#endif
+
     wxString  m_name;
+    wxString  m_encoding;
     wxString  m_extension;
     int       m_type;
     bool      m_visible;
@@ -1821,11 +1865,6 @@ public:
         : wxRichTextFileHandler(name, ext, type)
         { }
 
-#if wxUSE_STREAMS
-    virtual bool LoadFile(wxRichTextBuffer *buffer, wxInputStream& stream);
-    virtual bool SaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream);
-#endif
-
     /// Can we save using this handler?
     virtual bool CanSave() const { return true; }
 
@@ -1834,6 +1873,11 @@ public:
 
 protected:
 
+#if wxUSE_STREAMS
+    virtual bool DoLoadFile(wxRichTextBuffer *buffer, wxInputStream& stream);
+    virtual bool DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream);
+#endif
+
 };
 
 /*!
@@ -1865,4 +1909,3 @@ bool wxRichTextApplyStyle(wxTextAttrEx& destStyle, const wxRichTextAttr& style);
 
 #endif
     // _WX_RICHTEXTBUFFER_H_
-