X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d87098c062ac92e38434f89eba372fa8547ebaa4..e733c4ce1e24cf7e4b0b0d8362fc59aaa7a7641c:/interface/wx/richtext/richtextbuffer.h diff --git a/interface/wx/richtext/richtextbuffer.h b/interface/wx/richtext/richtextbuffer.h index 41cc9abc49..7857043e98 100644 --- a/interface/wx/richtext/richtextbuffer.h +++ b/interface/wx/richtext/richtextbuffer.h @@ -4,7 +4,6 @@ // Author: Julian Smart // Modified by: // Created: 2005-09-30 -// RCS-ID: $Id$ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -13,7 +12,7 @@ The line break character that can be embedded in content. */ -extern WXDLLIMPEXP_RICHTEXT const wxChar wxRichTextLineBreakChar; +extern const wxChar wxRichTextLineBreakChar; /** File types in wxRichText context. @@ -233,7 +232,7 @@ enum wxTextBoxAttrPosition @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimensions */ -class WXDLLIMPEXP_RICHTEXT wxTextAttrDimension +class wxTextAttrDimension { public: /** @@ -251,9 +250,12 @@ public: void Reset() { m_value = 0; m_flags = 0; } /** - Partial equality test. + Partial equality test. If @a weakTest is @true, attributes of this object do not + have to be present if those attributes of @a dim are present. If @a weakTest is + @false, the function will fail if an attribute is present in @a dim but not + in this object. */ - bool EqPartial(const wxTextAttrDimension& dim) const; + bool EqPartial(const wxTextAttrDimension& dim, bool weakTest = true) const; /** Apply the dimension, but not those identical to @a compareWith if present. */ @@ -359,7 +361,7 @@ public: @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension */ -class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensions +class wxTextAttrDimensions { public: /** @@ -378,10 +380,13 @@ public: bool operator==(const wxTextAttrDimensions& dims) const { return m_left == dims.m_left && m_top == dims.m_top && m_right == dims.m_right && m_bottom == dims.m_bottom; } /** - Partial equality test. + Partial equality test. If @a weakTest is @true, attributes of this object do not + have to be present if those attributes of @a dim sare present. If @a weakTest is + @false, the function will fail if an attribute is present in @a dims but not + in this object. */ - bool EqPartial(const wxTextAttrDimensions& dims) const; + bool EqPartial(const wxTextAttrDimensions& dims, bool weakTest = true) const; /** Apply to 'this', but not if the same as @a compareWith. @@ -450,7 +455,7 @@ public: @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension */ -class WXDLLIMPEXP_RICHTEXT wxTextAttrSize +class wxTextAttrSize { public: /** @@ -469,9 +474,12 @@ public: bool operator==(const wxTextAttrSize& size) const { return m_width == size.m_width && m_height == size.m_height ; } /** - Partial equality test. + Partial equality test. If @a weakTest is @true, attributes of this object do not + have to be present if those attributes of @a size are present. If @a weakTest is + @false, the function will fail if an attribute is present in @a size but not + in this object. */ - bool EqPartial(const wxTextAttrSize& dims) const; + bool EqPartial(const wxTextAttrSize& size, bool weakTest = true) const; /** Apply to this object, but not if the same as @a compareWith. @@ -550,7 +558,7 @@ public: @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension */ -class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensionConverter +class wxTextAttrDimensionConverter { public: /** @@ -671,7 +679,7 @@ enum wxTextBoxAttrVerticalAlignment @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorders */ -class WXDLLIMPEXP_RICHTEXT wxTextAttrBorder +class wxTextAttrBorder { public: /** @@ -694,9 +702,12 @@ public: void Reset() { m_borderStyle = 0; m_borderColour = 0; m_flags = 0; m_borderWidth.Reset(); } /** - Partial equality test. + Partial equality test. If @a weakTest is @true, attributes of this object do not + have to be present if those attributes of @a border are present. If @a weakTest is + @false, the function will fail if an attribute is present in @a border but not + in this object. */ - bool EqPartial(const wxTextAttrBorder& border) const; + bool EqPartial(const wxTextAttrBorder& border, bool weakTest = true) const; /** Applies the border to this object, but not if the same as @a compareWith. @@ -822,7 +833,7 @@ public: @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorder */ -class WXDLLIMPEXP_RICHTEXT wxTextAttrBorders +class wxTextAttrBorders { public: /** @@ -870,9 +881,12 @@ public: void Reset() { m_left.Reset(); m_right.Reset(); m_top.Reset(); m_bottom.Reset(); } /** - Partial equality test. + Partial equality test. If @a weakTest is @true, attributes of this object do not + have to be present if those attributes of @a borders are present. If @a weakTest is + @false, the function will fail if an attribute is present in @a borders but not + in this object. */ - bool EqPartial(const wxTextAttrBorders& borders) const; + bool EqPartial(const wxTextAttrBorders& borders, bool weakTest = true) const; /** Applies border to this object, but not if the same as @a compareWith. @@ -933,7 +947,7 @@ public: @see wxRichTextAttr, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxTextBoxAttr +class wxTextBoxAttr { public: /** @@ -968,10 +982,13 @@ public: bool operator== (const wxTextBoxAttr& attr) const; /** - Partial equality test, ignoring unset attributes. + Partial equality test, ignoring unset attributes. If @a weakTest is @true, attributes of this object do not + have to be present if those attributes of @a attr are present. If @a weakTest is + @false, the function will fail if an attribute is present in @a attr but not + in this object. */ - bool EqPartial(const wxTextBoxAttr& attr) const; + bool EqPartial(const wxTextBoxAttr& attr, bool weakTest = true) const; /** Merges the given attributes. If @a compareWith is non-NULL, then it will be used @@ -1331,7 +1348,7 @@ public: @see wxRichTextAttr, wxTextBoxAttr, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextAttr: public wxTextAttr +class wxRichTextAttr: public wxTextAttr { public: /** @@ -1370,9 +1387,12 @@ public: bool operator==(const wxRichTextAttr& attr) const; /** - Partial equality test taking comparison object into account. + Partial equality test. If @a weakTest is @true, attributes of this object do not + have to be present if those attributes of @a attr are present. If @a weakTest is + @false, the function will fail if an attribute is present in @a attr but not + in this object. */ - bool EqPartial(const wxRichTextAttr& attr) const; + bool EqPartial(const wxRichTextAttr& attr, bool weakTest = true) const; /** Merges the given attributes. If @a compareWith @@ -1403,10 +1423,16 @@ public: */ void SetTextBoxAttr(const wxTextBoxAttr& attr) { m_textBoxAttr = attr; } + /** + Returns @true if no attributes are set. + */ + bool IsDefault() const { return (GetFlags() == 0) && m_textBoxAttr.IsDefault(); } + wxTextBoxAttr m_textBoxAttr; }; -WX_DECLARE_USER_EXPORTED_OBJARRAY(wxVariant, wxRichTextVariantArray, WXDLLIMPEXP_RICHTEXT); +class wxRichTextAttrArray; +class wxRichTextVariantArray; /** @class wxRichTextProperties @@ -1419,9 +1445,8 @@ WX_DECLARE_USER_EXPORTED_OBJARRAY(wxVariant, wxRichTextVariantArray, WXDLLIMPEXP @see wxRichTextBuffer, wxRichTextObject, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextProperties: public wxObject +class wxRichTextProperties: public wxObject { -DECLARE_DYNAMIC_CLASS(wxRichTextProperties) public: /** @@ -1589,7 +1614,7 @@ protected: @see wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextFontTable: public wxObject +class wxRichTextFontTable: public wxObject { public: /** @@ -1633,9 +1658,14 @@ public: */ bool operator != (const wxRichTextFontTable& table) const { return !(*this == table); } + /** + Set the font scale factor. + */ + void SetFontScale(double fontScale); + protected: - DECLARE_DYNAMIC_CLASS(wxRichTextFontTable) + double m_fontScale; }; /** @@ -1649,7 +1679,7 @@ protected: @see wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextRange +class wxRichTextRange { public: // Constructors @@ -1771,7 +1801,7 @@ protected: long m_end; }; -WX_DECLARE_USER_EXPORTED_OBJARRAY(wxRichTextRange, wxRichTextRangeArray, WXDLLIMPEXP_RICHTEXT); +class wxRichTextRangeArray; #define wxRICHTEXT_ALL wxRichTextRange(-2, -2) #define wxRICHTEXT_NONE wxRichTextRange(-1, -1) @@ -1794,7 +1824,7 @@ WX_DECLARE_USER_EXPORTED_OBJARRAY(wxRichTextRange, wxRichTextRangeArray, WXDLLIM @see wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextSelection +class wxRichTextSelection { public: /** @@ -1950,18 +1980,17 @@ public: @see wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextDrawingContext: public wxObject +class wxRichTextDrawingContext: public wxObject { - DECLARE_CLASS(wxRichTextDrawingContext) public: /** Pass the buffer to the context so the context can retrieve information such as virtual attributes. */ - wxRichTextDrawingContext(wxRichTextBuffer* buffer) { Init(); m_buffer = buffer; } + wxRichTextDrawingContext(wxRichTextBuffer* buffer); - void Init() { m_buffer = NULL; } + void Init(); /** Does this object have virtual attributes? @@ -1982,6 +2011,44 @@ public: */ bool ApplyVirtualAttributes(wxRichTextAttr& attr, wxRichTextObject* obj) const; + /** + Gets the count for mixed virtual attributes for individual positions within the object. + For example, individual characters within a text object may require special highlighting. + */ + int GetVirtualSubobjectAttributesCount(wxRichTextObject* obj) const; + + /** + Gets the mixed virtual attributes for individual positions within the object. + For example, individual characters within a text object may require special highlighting. + The function is passed the count returned by GetVirtualSubobjectAttributesCount. + */ + int GetVirtualSubobjectAttributes(wxRichTextObject* obj, wxArrayInt& positions, + wxRichTextAttrArray& attributes) const; + + /** + Do we have virtual text for this object? Virtual text allows an application + to replace characters in an object for editing and display purposes, for example + for highlighting special characters. + */ + bool HasVirtualText(const wxRichTextPlainText* obj) const; + + /** + Gets the virtual text for this object. + */ + bool GetVirtualText(const wxRichTextPlainText* obj, wxString& text) const; + + /** + Enables virtual attribute processing. + */ + + void EnableVirtualAttributes(bool b); + + /** + Returns @true if virtual attribute processing is enabled. + */ + + bool GetVirtualAttributesEnabled() const; + wxRichTextBuffer* m_buffer; }; @@ -1996,9 +2063,8 @@ public: @see wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextObject: public wxObject +class wxRichTextObject: public wxObject { - DECLARE_CLASS(wxRichTextObject) public: /** Constructor, taking an optional parent pointer. @@ -2013,15 +2079,17 @@ public: Draw the item, within the given range. Some objects may ignore the range (for example paragraphs) while others must obey it (lines, to implement wrapping) */ - virtual bool Draw(wxDC& dc, wxRichTextDrawingContext& context, const wxRichTextRange& range, const wxRichTextSelection& selection, const wxRect& rect, int descent, int style) = 0; + virtual bool Draw(wxDC& dc, wxRichTextDrawingContext& context, const wxRichTextRange& range, + const wxRichTextSelection& selection, const wxRect& rect, int descent, int style) = 0; /** Lay the item out at the specified position with the given size constraint. - Layout must set the cached size. @rect is the available space for the object, + Layout must set the cached size. @a rect is the available space for the object, and @a parentRect is the container that is used to determine a relative size or position (for example if a text box must be 50% of the parent text box). */ - virtual bool Layout(wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, const wxRect& parentRect, int style) = 0; + virtual bool Layout(wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, + const wxRect& parentRect, int style) = 0; /** Hit-testing: returns a flag indicating hit test details, plus @@ -2036,78 +2104,97 @@ public: @return One of the ::wxRichTextHitTestFlags values. */ - virtual int HitTest(wxDC& dc, wxRichTextDrawingContext& context, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, wxRichTextObject** contextObj, int flags = 0); + virtual int HitTest(wxDC& dc, wxRichTextDrawingContext& context, const wxPoint& pt, + long& textPosition, wxRichTextObject** obj, wxRichTextObject** contextObj, + int flags = 0); /** Finds the absolute position and row height for the given character position. */ - virtual bool FindPosition(wxDC& WXUNUSED(dc), wxRichTextDrawingContext& WXUNUSED(context), long WXUNUSED(index), wxPoint& WXUNUSED(pt), int* WXUNUSED(height), bool WXUNUSED(forceLineStart)) { return false; } + virtual bool FindPosition(wxDC& dc, wxRichTextDrawingContext& context, long index, + wxPoint& pt, int* height, bool forceLineStart); /** - Returns the best size, i.e. the ideal starting size for this object irrespective + Returns the best size, i.e.\ the ideal starting size for this object irrespective of available space. For a short text string, it will be the size that exactly encloses the text. For a longer string, it might use the parent width for example. */ - virtual wxSize GetBestSize() const { return m_size; } + virtual wxSize GetBestSize() const; /** Returns the object size for the given range. Returns @false if the range is invalid for this object. */ - virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const = 0; + virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, + wxDC& dc, wxRichTextDrawingContext& context, int flags, + const wxPoint& position = wxPoint(0,0), + const wxSize& parentSize = wxDefaultSize, + wxArrayInt* partialExtents = NULL) const = 0; /** Do a split from @a pos, returning an object containing the second part, and setting the first part in 'this'. */ - virtual wxRichTextObject* DoSplit(long WXUNUSED(pos)) { return NULL; } + virtual wxRichTextObject* DoSplit(long pos); /** Calculates the range of the object. By default, guess that the object is 1 unit long. */ - virtual void CalculateRange(long start, long& end) { end = start ; m_range.SetRange(start, end); } + virtual void CalculateRange(long start, long& end); /** Deletes the given range. */ - virtual bool DeleteRange(const wxRichTextRange& WXUNUSED(range)) { return false; } + virtual bool DeleteRange(const wxRichTextRange& range); /** Returns @true if the object is empty. */ - virtual bool IsEmpty() const { return false; } + virtual bool IsEmpty() const; /** Returns @true if this class of object is floatable. */ - virtual bool IsFloatable() const { return false; } + virtual bool IsFloatable() const; /** Returns @true if this object is currently floating. */ - virtual bool IsFloating() const { return GetAttributes().GetTextBoxAttr().IsFloating(); } + virtual bool IsFloating() const; /** Returns the floating direction. */ - virtual int GetFloatDirection() const { return GetAttributes().GetTextBoxAttr().GetFloatMode(); } + virtual int GetFloatDirection() const; /** Returns any text in this object for the given range. */ - virtual wxString GetTextForRange(const wxRichTextRange& WXUNUSED(range)) const { return wxEmptyString; } + virtual wxString GetTextForRange(const wxRichTextRange& range) const; /** Returns @true if this object can merge itself with the given one. */ - virtual bool CanMerge(wxRichTextObject* WXUNUSED(object)) const { return false; } + virtual bool CanMerge(wxRichTextObject* object, wxRichTextDrawingContext& context) const; /** Returns @true if this object merged itself with the given one. The calling code will then delete the given object. */ - virtual bool Merge(wxRichTextObject* WXUNUSED(object)) { return false; } + virtual bool Merge(wxRichTextObject* object, wxRichTextDrawingContext& context); + + /** + Returns @true if this object can potentially be split, by virtue of having + different virtual attributes for individual sub-objects. + */ + virtual bool CanSplit(wxRichTextDrawingContext& context) const; + + /** + Returns the final object in the split objects if this object was split due to differences between sub-object virtual attributes. + Returns itself if it was not split. + */ + virtual wxRichTextObject* Split(wxRichTextDrawingContext& context); /** Dump object data to the given output stream for debugging. @@ -2117,31 +2204,29 @@ public: /** Returns @true if we can edit the object's properties via a GUI. */ - virtual bool CanEditProperties() const { return false; } + virtual bool CanEditProperties() const; /** Edits the object's properties via a GUI. */ - virtual bool EditProperties(wxWindow* WXUNUSED(parent), wxRichTextBuffer* WXUNUSED(buffer)) { return false; } + virtual bool EditProperties(wxWindow* parent, wxRichTextBuffer* buffer); /** Returns the label to be used for the properties context menu item. */ - virtual wxString GetPropertiesMenuLabel() const { return wxEmptyString; } + virtual wxString GetPropertiesMenuLabel() const; /** - Returns @true if objects of this class can accept the focus, i.e. a call to SetFocusObject + Returns @true if objects of this class can accept the focus, i.e.\ a call to SetFocusObject is possible. For example, containers supporting text, such as a text box object, can accept the focus, but a table can't (set the focus to individual cells instead). */ - virtual bool AcceptsFocus() const { return false; } + virtual bool AcceptsFocus() const; -#if wxUSE_XML /** Imports this object from XML. */ virtual bool ImportFromXML(wxRichTextBuffer* buffer, wxXmlNode* node, wxRichTextXMLHandler* handler, bool* recurse); -#endif #if wxRICHTEXT_HAVE_DIRECT_OUTPUT /** @@ -2166,12 +2251,12 @@ public: /** Returns @true if this object takes note of paragraph attributes (text and image objects don't). */ - virtual bool UsesParagraphAttributes() const { return true; } + virtual bool UsesParagraphAttributes() const; /** Returns the XML node name of this object. This must be overridden for wxXmlNode-base XML export to work. */ - virtual wxString GetXMLNodeName() const { return wxT("unknown"); } + virtual wxString GetXMLNodeName() const; /** Invalidates the object at the given range. With no argument, invalidates the whole object. @@ -2182,65 +2267,65 @@ public: Returns @true if this object can handle the selections of its children, fOr example a table. Required for composite selection handling to work. */ - virtual bool HandlesChildSelections() const { return false; } + virtual bool HandlesChildSelections() const; /** Returns a selection object specifying the selections between start and end character positions. For example, a table would deduce what cells (of range length 1) are selected when dragging across the table. */ - virtual wxRichTextSelection GetSelection(long WXUNUSED(start), long WXUNUSED(end)) const { return wxRichTextSelection(); } + virtual wxRichTextSelection GetSelection(long start, long end) const; // Accessors /** Gets the cached object size as calculated by Layout. */ - virtual wxSize GetCachedSize() const { return m_size; } + virtual wxSize GetCachedSize() const; /** Sets the cached object size as calculated by Layout. */ - virtual void SetCachedSize(const wxSize& sz) { m_size = sz; } + virtual void SetCachedSize(const wxSize& sz); /** Gets the maximum object size as calculated by Layout. This allows us to fit an object to its contents or allocate extra space if required. */ - virtual wxSize GetMaxSize() const { return m_maxSize; } + virtual wxSize GetMaxSize() const; /** Sets the maximum object size as calculated by Layout. This allows us to fit an object to its contents or allocate extra space if required. */ - virtual void SetMaxSize(const wxSize& sz) { m_maxSize = sz; } + virtual void SetMaxSize(const wxSize& sz); /** Gets the minimum object size as calculated by Layout. This allows us to constrain an object to its absolute minimum size if necessary. */ - virtual wxSize GetMinSize() const { return m_minSize; } + virtual wxSize GetMinSize() const; /** Sets the minimum object size as calculated by Layout. This allows us to constrain an object to its absolute minimum size if necessary. */ - virtual void SetMinSize(const wxSize& sz) { m_minSize = sz; } + virtual void SetMinSize(const wxSize& sz); /** Gets the 'natural' size for an object. For an image, it would be the image size. */ - virtual wxTextAttrSize GetNaturalSize() const { return wxTextAttrSize(); } + virtual wxTextAttrSize GetNaturalSize() const; /** Returns the object position in pixels. */ - virtual wxPoint GetPosition() const { return m_pos; } + virtual wxPoint GetPosition() const; /** Sets the object position in pixels. */ - virtual void SetPosition(const wxPoint& pos) { m_pos = pos; } + virtual void SetPosition(const wxPoint& pos); /** Returns the absolute object position, by traversing up the child/parent hierarchy. @@ -2252,63 +2337,63 @@ public: /** Returns the rectangle enclosing the object. */ - virtual wxRect GetRect() const { return wxRect(GetPosition(), GetCachedSize()); } + virtual wxRect GetRect() const; /** Sets the object's range within its container. */ - void SetRange(const wxRichTextRange& range) { m_range = range; } + void SetRange(const wxRichTextRange& range); /** Returns the object's range. */ - const wxRichTextRange& GetRange() const { return m_range; } + const wxRichTextRange& GetRange() const; /** Returns the object's range. */ - wxRichTextRange& GetRange() { return m_range; } + wxRichTextRange& GetRange(); /** Set the object's own range, for a top-level object with its own position space. */ - void SetOwnRange(const wxRichTextRange& range) { m_ownRange = range; } + void SetOwnRange(const wxRichTextRange& range); /** Returns the object's own range (valid if top-level). */ - const wxRichTextRange& GetOwnRange() const { return m_ownRange; } + const wxRichTextRange& GetOwnRange() const; /** Returns the object's own range (valid if top-level). */ - wxRichTextRange& GetOwnRange() { return m_ownRange; } + wxRichTextRange& GetOwnRange(); /** Returns the object's own range only if a top-level object. */ - wxRichTextRange GetOwnRangeIfTopLevel() const { return IsTopLevel() ? m_ownRange : m_range; } + wxRichTextRange GetOwnRangeIfTopLevel() const; /** Returns @true if this object is composite. */ - virtual bool IsComposite() const { return false; } + virtual bool IsComposite() const; /** Returns @true if no user editing can be done inside the object. This returns @true for simple objects, @false for most composite objects, but @true for fields, which if composite, should not be user-edited. */ - virtual bool IsAtomic() const { return true; } + virtual bool IsAtomic() const; /** Returns a pointer to the parent object. */ - virtual wxRichTextObject* GetParent() const { return m_parent; } + virtual wxRichTextObject* GetParent() const; /** Sets the pointer to the parent object. */ - virtual void SetParent(wxRichTextObject* parent) { m_parent = parent; } + virtual void SetParent(wxRichTextObject* parent); /** Returns the top-level container of this object. @@ -2321,7 +2406,7 @@ public: Returns the top-level container of this object. Returns a different container than itself, unless there's no parent, in which case it will return NULL. */ - virtual wxRichTextParagraphLayoutBox* GetParentContainer() const { return GetParent() ? GetParent()->GetContainer() : GetContainer(); } + virtual wxRichTextParagraphLayoutBox* GetParentContainer() const; /** Set the margin around the object, in pixels. @@ -2374,42 +2459,42 @@ public: /** Sets the object's attributes. */ - void SetAttributes(const wxRichTextAttr& attr) { m_attributes = attr; } + void SetAttributes(const wxRichTextAttr& attr); /** Returns the object's attributes. */ - const wxRichTextAttr& GetAttributes() const { return m_attributes; } + const wxRichTextAttr& GetAttributes() const; /** Returns the object's attributes. */ - wxRichTextAttr& GetAttributes() { return m_attributes; } + wxRichTextAttr& GetAttributes(); /** Returns the object's properties. */ - wxRichTextProperties& GetProperties() { return m_properties; } + wxRichTextProperties& GetProperties(); /** Returns the object's properties. */ - const wxRichTextProperties& GetProperties() const { return m_properties; } + const wxRichTextProperties& GetProperties() const; /** Sets the object's properties. */ - void SetProperties(const wxRichTextProperties& props) { m_properties = props; } + void SetProperties(const wxRichTextProperties& props); /** Sets the stored descent value. */ - void SetDescent(int descent) { m_descent = descent; } + void SetDescent(int descent); /** Returns the stored descent value. */ - int GetDescent() const { return m_descent; } + int GetDescent() const; /** Returns the containing buffer. @@ -2419,22 +2504,22 @@ public: /** Sets the identifying name for this object as a property using the "name" key. */ - void SetName(const wxString& name) { m_properties.SetProperty(wxT("name"), name); } + void SetName(const wxString& name); /** Returns the identifying name for this object from the properties, using the "name" key. */ - wxString GetName() const { return m_properties.GetPropertyString(wxT("name")); } + wxString GetName() const; /** - Returns @true if this object is top-level, i.e. contains its own paragraphs, such as a text box. + Returns @true if this object is top-level, i.e.\ contains its own paragraphs, such as a text box. */ - virtual bool IsTopLevel() const { return false; } + virtual bool IsTopLevel() const; /** Returns @true if the object will be shown, @false otherwise. */ - bool IsShown() const { return m_show; } + bool IsShown() const; // Operations @@ -2442,12 +2527,12 @@ public: Call to show or hide this object. This function does not cause the content to be laid out or redrawn. */ - virtual void Show(bool show) { m_show = show; } + virtual void Show(bool show); /** Clones the object. */ - virtual wxRichTextObject* Clone() const { return NULL; } + virtual wxRichTextObject* Clone() const; /** Copies the object. @@ -2459,7 +2544,7 @@ public: lists (not yet used). */ - void Reference() { m_refCount ++; } + void Reference(); /** Reference-counting allows us to use the same object in multiple @@ -2496,7 +2581,7 @@ public: Draws the borders and background for the given rectangle and attributes. @a boxRect is taken to be the outer margin box, not the box around the content. */ - static bool DrawBoxAttributes(wxDC& dc, wxRichTextBuffer* buffer, const wxRichTextAttr& attr, const wxRect& boxRect, int flags = 0); + static bool DrawBoxAttributes(wxDC& dc, wxRichTextBuffer* buffer, const wxRichTextAttr& attr, const wxRect& boxRect, int flags = 0, wxRichTextObject* obj = NULL); /** Draws a border. @@ -2509,13 +2594,15 @@ public: Note that the outline doesn't affect the position of the rectangle, it's drawn in whatever space is available. */ - static bool GetBoxRects(wxDC& dc, wxRichTextBuffer* buffer, const wxRichTextAttr& attr, wxRect& marginRect, wxRect& borderRect, wxRect& contentRect, wxRect& paddingRect, wxRect& outlineRect); + static bool GetBoxRects(wxDC& dc, wxRichTextBuffer* buffer, const wxRichTextAttr& attr, + wxRect& marginRect, wxRect& borderRect, wxRect& contentRect, + wxRect& paddingRect, wxRect& outlineRect); /** Returns the total margin for the object in pixels, taking into account margin, padding and border size. */ - static bool GetTotalMargin(wxDC& dc, wxRichTextBuffer* buffer, const wxRichTextAttr& attr, int& leftMargin, int& rightMargin, - int& topMargin, int& bottomMargin); + static bool GetTotalMargin(wxDC& dc, wxRichTextBuffer* buffer, const wxRichTextAttr& attr, + int& leftMargin, int& rightMargin, int& topMargin, int& bottomMargin); /** Returns the rectangle which the child has available to it given restrictions specified in the @@ -2523,8 +2610,9 @@ public: availableContainerSpace might be a parent that the cell has to compute its width relative to. E.g. a cell that's 50% of its parent. */ - static wxRect AdjustAvailableSpace(wxDC& dc, wxRichTextBuffer* buffer, const wxRichTextAttr& parentAttr, const wxRichTextAttr& childAttr, - const wxRect& availableParentSpace, const wxRect& availableContainerSpace); + static wxRect AdjustAvailableSpace(wxDC& dc, wxRichTextBuffer* buffer, const wxRichTextAttr& parentAttr, + const wxRichTextAttr& childAttr, const wxRect& availableParentSpace, + const wxRect& availableContainerSpace); protected: wxSize m_size; @@ -2549,7 +2637,7 @@ protected: wxRichTextProperties m_properties; }; -WX_DECLARE_LIST_WITH_DECL( wxRichTextObject, wxRichTextObjectList, class WXDLLIMPEXP_RICHTEXT ); +class wxRichTextObjectList; /** @class wxRichTextCompositeObject @@ -2562,9 +2650,8 @@ WX_DECLARE_LIST_WITH_DECL( wxRichTextObject, wxRichTextObjectList, class WXDLLIM @see wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextCompositeObject: public wxRichTextObject +class wxRichTextCompositeObject: public wxRichTextObject { - DECLARE_CLASS(wxRichTextCompositeObject) public: // Constructors @@ -2573,9 +2660,12 @@ public: // Overridables - virtual int HitTest(wxDC& dc, wxRichTextDrawingContext& context, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, wxRichTextObject** contextObj, int flags = 0); + virtual int HitTest(wxDC& dc, wxRichTextDrawingContext& context, const wxPoint& pt, + long& textPosition, wxRichTextObject** obj, + wxRichTextObject** contextObj, int flags = 0); - virtual bool FindPosition(wxDC& dc, wxRichTextDrawingContext& context, long index, wxPoint& pt, int* height, bool forceLineStart); + virtual bool FindPosition(wxDC& dc, wxRichTextDrawingContext& context, long index, + wxPoint& pt, int* height, bool forceLineStart); virtual void CalculateRange(long start, long& end); @@ -2583,7 +2673,11 @@ public: virtual wxString GetTextForRange(const wxRichTextRange& range) const; - virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const; + virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, + wxDC& dc, wxRichTextDrawingContext& context, int flags, + const wxPoint& position = wxPoint(0,0), + const wxSize& parentSize = wxDefaultSize, + wxArrayInt* partialExtents = NULL) const; virtual void Dump(wxTextOutputStream& stream); @@ -2594,11 +2688,11 @@ public: /** Returns the children. */ - wxRichTextObjectList& GetChildren() { return m_children; } + wxRichTextObjectList& GetChildren(); /** Returns the children. */ - const wxRichTextObjectList& GetChildren() const { return m_children; } + const wxRichTextObjectList& GetChildren() const; /** Returns the number of children. @@ -2613,18 +2707,18 @@ public: /** Returns @true if this object is composite. */ - virtual bool IsComposite() const { return true; } + virtual bool IsComposite() const; /** Returns @true if no user editing can be done inside the object. This returns @true for simple objects, @false for most composite objects, but @true for fields, which if composite, should not be user-edited. */ - virtual bool IsAtomic() const { return false; } + virtual bool IsAtomic() const; /** Returns true if the buffer is empty. */ - virtual bool IsEmpty() const { return GetChildCount() == 0; } + virtual bool IsEmpty() const; /** Returns the child object at the given character position. @@ -2635,7 +2729,7 @@ public: void Copy(const wxRichTextCompositeObject& obj); - void operator= (const wxRichTextCompositeObject& obj) { Copy(obj); } + void operator= (const wxRichTextCompositeObject& obj); /** Appends a child, returning the position. @@ -2660,7 +2754,7 @@ public: /** Recursively merges all pieces that can be merged. */ - bool Defragment(const wxRichTextRange& range = wxRICHTEXT_ALL); + bool Defragment(wxRichTextDrawingContext& context, const wxRichTextRange& range = wxRICHTEXT_ALL); /** Moves the object recursively, by adding the offset from old to new. @@ -2682,9 +2776,8 @@ protected: @see wxRichTextCompositeObject, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextParagraphLayoutBox: public wxRichTextCompositeObject +class wxRichTextParagraphLayoutBox: public wxRichTextCompositeObject { - DECLARE_DYNAMIC_CLASS(wxRichTextParagraphLayoutBox) public: // Constructors @@ -2700,15 +2793,13 @@ public: virtual bool Layout(wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, const wxRect& parentRect, int style); - virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const; + virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, const wxPoint& position = wxPoint(0,0), const wxSize& parentSize = wxDefaultSize, wxArrayInt* partialExtents = NULL) const; virtual bool DeleteRange(const wxRichTextRange& range); virtual wxString GetTextForRange(const wxRichTextRange& range) const; -#if wxUSE_XML virtual bool ImportFromXML(wxRichTextBuffer* buffer, wxXmlNode* node, wxRichTextXMLHandler* handler, bool* recurse); -#endif #if wxRICHTEXT_HAVE_DIRECT_OUTPUT virtual bool ExportXML(wxOutputStream& stream, int indent, wxRichTextXMLHandler* handler); @@ -3119,6 +3210,11 @@ public: */ virtual bool SetProperties(const wxRichTextRange& range, const wxRichTextProperties& properties, int flags = wxRICHTEXT_SETPROPERTIES_WITH_UNDO); + /** + Sets with undo the properties for the given object. + */ + virtual bool SetObjectPropertiesWithUndo(wxRichTextObject& obj, const wxRichTextProperties& properties, wxRichTextObject* objToSet = NULL); + /** Test if this whole range has character attributes of the specified kind. If any of the attributes are different within the range, the test fails. You @@ -3283,9 +3379,8 @@ protected: @see wxRichTextParagraphLayoutBox, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextBox: public wxRichTextParagraphLayoutBox +class wxRichTextBox: public wxRichTextParagraphLayoutBox { - DECLARE_DYNAMIC_CLASS(wxRichTextBox) public: // Constructors @@ -3353,8 +3448,8 @@ protected: covers common needs especially for simple, static fields using text or a bitmap. Register field types on application initialisation with the static function - wxRichTextParagraphLayoutBox::AddFieldType. They will be deleted automatically - on application exit. + wxRichTextBuffer::AddFieldType. They will be deleted automatically on + application exit. An application can write a field to a control with wxRichTextCtrl::WriteField, taking a field type, the properties for the field, and optional attributes. @@ -3365,9 +3460,8 @@ protected: @see wxRichTextFieldTypeStandard, wxRichTextFieldType, wxRichTextParagraphLayoutBox, wxRichTextProperties, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextField: public wxRichTextParagraphLayoutBox +class wxRichTextField: public wxRichTextParagraphLayoutBox { - DECLARE_DYNAMIC_CLASS(wxRichTextField) public: // Constructors @@ -3389,7 +3483,7 @@ public: virtual bool Layout(wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, const wxRect& parentRect, int style); - virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const; + virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, const wxPoint& position = wxPoint(0,0), const wxSize& parentSize = wxDefaultSize, wxArrayInt* partialExtents = NULL) const; virtual wxString GetXMLNodeName() const { return wxT("field"); } @@ -3423,7 +3517,7 @@ public: Update the field; delegated to the associated field type. This would typically expand the field to its value, if this is a dynamically changing and/or composite field. */ - virtual bool UpdateField(); + virtual bool UpdateField(wxRichTextBuffer* buffer); virtual wxRichTextObject* Clone() const { return new wxRichTextField(*this); } @@ -3440,8 +3534,8 @@ protected: property editing functionality for a field. Register field types on application initialisation with the static function - wxRichTextParagraphLayoutBox::AddFieldType. They will be deleted automatically - on application exit. + wxRichTextBuffer::AddFieldType. They will be deleted automatically on + application exit. @library{wxrichtext} @category{richtext} @@ -3449,9 +3543,8 @@ protected: @see wxRichTextFieldTypeStandard, wxRichTextField, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextFieldType: public wxObject +class wxRichTextFieldType: public wxObject { - DECLARE_CLASS(wxRichTextFieldType) public: /** Creates a field type definition. @@ -3475,7 +3568,7 @@ public: /** Lay the item out at the specified position with the given size constraint. - Layout must set the cached size. @rect is the available space for the object, + Layout must set the cached size. @a rect is the available space for the object, and @a parentRect is the container that is used to determine a relative size or position (for example if a text box must be 50% of the parent text box). */ @@ -3485,33 +3578,33 @@ public: Returns the object size for the given range. Returns @false if the range is invalid for this object. */ - virtual bool GetRangeSize(wxRichTextField* obj, const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const = 0; + virtual bool GetRangeSize(wxRichTextField* obj, const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, const wxPoint& position = wxPoint(0,0), const wxSize& parentSize = wxDefaultSize, wxArrayInt* partialExtents = NULL) const = 0; /** Returns @true if we can edit the object's properties via a GUI. */ - virtual bool CanEditProperties(wxRichTextField* WXUNUSED(obj)) const { return false; } + virtual bool CanEditProperties(wxRichTextField* obj) const { return false; } /** Edits the object's properties via a GUI. */ - virtual bool EditProperties(wxRichTextField* WXUNUSED(obj), wxWindow* WXUNUSED(parent), wxRichTextBuffer* WXUNUSED(buffer)) { return false; } + virtual bool EditProperties(wxRichTextField* obj, wxWindow* parent, wxRichTextBuffer* buffer) { return false; } /** Returns the label to be used for the properties context menu item. */ - virtual wxString GetPropertiesMenuLabel(wxRichTextField* WXUNUSED(obj)) const { return wxEmptyString; } + virtual wxString GetPropertiesMenuLabel(wxRichTextField* obj) const { return wxEmptyString; } /** Update the field. This would typically expand the field to its value, if this is a dynamically changing and/or composite field. */ - virtual bool UpdateField(wxRichTextField* WXUNUSED(obj)) { return false; } + virtual bool UpdateField(wxRichTextBuffer* buffer, wxRichTextField* obj) { return false; } /** - Returns @true if this object is top-level, i.e. contains its own paragraphs, such as a text box. + Returns @true if this object is top-level, i.e.\ contains its own paragraphs, such as a text box. */ - virtual bool IsTopLevel(wxRichTextField* WXUNUSED(obj)) const { return true; } + virtual bool IsTopLevel(wxRichTextField* obj) const { return true; } /** Sets the field type name. There should be a unique name per field type object. @@ -3528,7 +3621,7 @@ protected: wxString m_name; }; -WX_DECLARE_STRING_HASH_MAP(wxRichTextFieldType*, wxRichTextFieldTypeHashMap); +class wxRichTextFieldTypeHashMap; /** @class wxRichTextFieldTypeStandard @@ -3561,9 +3654,8 @@ WX_DECLARE_STRING_HASH_MAP(wxRichTextFieldType*, wxRichTextFieldTypeHashMap); @see wxRichTextFieldType, wxRichTextField, wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextFieldTypeStandard: public wxRichTextFieldType +class wxRichTextFieldTypeStandard: public wxRichTextFieldType { - DECLARE_CLASS(wxRichTextFieldTypeStandard) public: // Display style types @@ -3577,7 +3669,7 @@ public: /** Constructor, creating a field type definition with a text label. - @param parent + @param name The name of the type definition. This must be unique, and is the type name used when adding a field to a control. @param label @@ -3593,10 +3685,10 @@ public: /** Constructor, creating a field type definition with a bitmap label. - @param parent + @param name The name of the type definition. This must be unique, and is the type name used when adding a field to a control. - @param label + @param bitmap The bitmap label to be shown on the field. @param displayStyle The display style: one of wxRICHTEXT_FIELD_STYLE_RECTANGLE, @@ -3641,7 +3733,7 @@ public: /** Lay the item out at the specified position with the given size constraint. - Layout must set the cached size. @rect is the available space for the object, + Layout must set the cached size. @a rect is the available space for the object, and @a parentRect is the container that is used to determine a relative size or position (for example if a text box must be 50% of the parent text box). */ @@ -3651,7 +3743,7 @@ public: Returns the object size for the given range. Returns @false if the range is invalid for this object. */ - virtual bool GetRangeSize(wxRichTextField* obj, const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const; + virtual bool GetRangeSize(wxRichTextField* obj, const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, const wxPoint& position = wxPoint(0,0), const wxSize& parentSize = wxDefaultSize, wxArrayInt* partialExtents = NULL) const; /** Get the size of the field, given the label, font size, and so on. @@ -3661,7 +3753,7 @@ public: /** Returns @true if the display type is wxRICHTEXT_FIELD_STYLE_COMPOSITE, @false otherwise. */ - virtual bool IsTopLevel(wxRichTextField* WXUNUSED(obj)) const { return (GetDisplayStyle() & wxRICHTEXT_FIELD_STYLE_COMPOSITE) != 0; } + virtual bool IsTopLevel(wxRichTextField* obj) const { return (GetDisplayStyle() & wxRICHTEXT_FIELD_STYLE_COMPOSITE) != 0; } /** Sets the text label for fields of this type. @@ -3801,7 +3893,7 @@ protected: @see wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextLine +class wxRichTextLine { public: // Constructors @@ -3922,7 +4014,7 @@ protected: #endif }; -WX_DECLARE_LIST_WITH_DECL( wxRichTextLine, wxRichTextLineList , class WXDLLIMPEXP_RICHTEXT ); +class wxRichTextLineList; /** @class wxRichTextParagraph @@ -3935,9 +4027,8 @@ WX_DECLARE_LIST_WITH_DECL( wxRichTextLine, wxRichTextLineList , class WXDLLIMPEX @see wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextParagraph: public wxRichTextCompositeObject +class wxRichTextParagraph: public wxRichTextCompositeObject { - DECLARE_DYNAMIC_CLASS(wxRichTextParagraph) public: // Constructors @@ -3958,7 +4049,7 @@ public: virtual bool Layout(wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, const wxRect& parentRect, int style); - virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const; + virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, const wxPoint& position = wxPoint(0,0), const wxSize& parentSize = wxDefaultSize, wxArrayInt* partialExtents = NULL) const; virtual bool FindPosition(wxDC& dc, wxRichTextDrawingContext& context, long index, wxPoint& pt, int* height, bool forceLineStart); @@ -4083,7 +4174,7 @@ public: /** Lays out the floating objects. */ - void LayoutFloat(wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, int style, wxRichTextFloatCollector* floatCollector); + void LayoutFloat(wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, const wxRect& parentRect, int style, wxRichTextFloatCollector* floatCollector); protected: @@ -4107,9 +4198,8 @@ friend class wxRichTextFloatCollector; @see wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextPlainText: public wxRichTextObject +class wxRichTextPlainText: public wxRichTextObject { - DECLARE_DYNAMIC_CLASS(wxRichTextPlainText) public: // Constructors @@ -4129,7 +4219,7 @@ public: virtual bool Layout(wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, const wxRect& parentRect, int style); - virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const; + virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, const wxPoint& position = wxPoint(0,0), const wxSize& parentSize = wxDefaultSize, wxArrayInt* partialExtents = NULL) const; virtual wxString GetTextForRange(const wxRichTextRange& range) const; @@ -4141,9 +4231,13 @@ public: virtual bool IsEmpty() const { return m_text.empty(); } - virtual bool CanMerge(wxRichTextObject* object) const; + virtual bool CanMerge(wxRichTextObject* object, wxRichTextDrawingContext& context) const; + + virtual bool Merge(wxRichTextObject* object, wxRichTextDrawingContext& context); - virtual bool Merge(wxRichTextObject* object); + virtual bool CanSplit(wxRichTextDrawingContext& context) const; + + virtual wxRichTextObject* Split(wxRichTextDrawingContext& context); virtual void Dump(wxTextOutputStream& stream); @@ -4155,9 +4249,7 @@ public: /// Does this object take note of paragraph attributes? Text and image objects don't. virtual bool UsesParagraphAttributes() const { return false; } -#if wxUSE_XML virtual bool ImportFromXML(wxRichTextBuffer* buffer, wxXmlNode* node, wxRichTextXMLHandler* handler, bool* recurse); -#endif #if wxRICHTEXT_HAVE_DIRECT_OUTPUT virtual bool ExportXML(wxOutputStream& stream, int indent, wxRichTextXMLHandler* handler); @@ -4207,7 +4299,7 @@ protected: @see wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextImageBlock: public wxObject +class wxRichTextImageBlock: public wxObject { public: /** @@ -4373,9 +4465,8 @@ protected: @see wxRichTextBuffer, wxRichTextCtrl, wxRichTextImageBlock */ -class WXDLLIMPEXP_RICHTEXT wxRichTextImage: public wxRichTextObject +class wxRichTextImage: public wxRichTextObject { - DECLARE_DYNAMIC_CLASS(wxRichTextImage) public: // Constructors @@ -4405,7 +4496,7 @@ public: virtual bool Layout(wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, const wxRect& parentRect, int style); - virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const; + virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, const wxPoint& position = wxPoint(0,0), const wxSize& parentSize = wxDefaultSize, wxArrayInt* partialExtents = NULL) const; /** Returns the 'natural' size for this object - the image size. @@ -4422,9 +4513,7 @@ public: virtual bool UsesParagraphAttributes() const { return false; } -#if wxUSE_XML virtual bool ImportFromXML(wxRichTextBuffer* buffer, wxXmlNode* node, wxRichTextXMLHandler* handler, bool* recurse); -#endif #if wxRICHTEXT_HAVE_DIRECT_OUTPUT virtual bool ExportXML(wxOutputStream& stream, int indent, wxRichTextXMLHandler* handler); @@ -4486,15 +4575,15 @@ public: /** Creates a cached image at the required size. */ - virtual bool LoadImageCache(wxDC& dc, bool resetCache = false); + virtual bool LoadImageCache(wxDC& dc, bool resetCache = false, const wxSize& parentSize = wxDefaultSize); protected: wxRichTextImageBlock m_imageBlock; wxBitmap m_imageCache; }; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCommand; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction; +class wxRichTextCommand; +class wxRichTextAction; /** @class wxRichTextBuffer @@ -4507,9 +4596,8 @@ class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction; @see wxRichTextParagraphLayoutBox, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextBuffer: public wxRichTextParagraphLayoutBox +class wxRichTextBuffer: public wxRichTextParagraphLayoutBox { - DECLARE_DYNAMIC_CLASS(wxRichTextBuffer) public: // Constructors @@ -4576,6 +4664,31 @@ public: */ void SetFontTable(const wxRichTextFontTable& table) { m_fontTable = table; } + /** + Sets the scale factor for displaying fonts, for example for more comfortable + editing. + */ + void SetFontScale(double fontScale); + + /** + Returns the scale factor for displaying fonts, for example for more comfortable + editing. + */ + double GetFontScale() const { return m_fontScale; } + + /** + Sets the scale factor for displaying certain dimensions such as indentation and + inter-paragraph spacing. This can be useful when editing in a small control + where you still want legible text, but a minimum of wasted white space. + */ + void SetDimensionScale(double dimScale); + + /** + Returns the scale factor for displaying certain dimensions such as indentation + and inter-paragraph spacing. + */ + double GetDimensionScale() const { return m_dimensionScale; } + // Operations /** @@ -5191,6 +5304,19 @@ public: */ void SetScale(double scale) { m_scale = scale; } + /** + Returns the floating layout mode. The default is @true, where objects + are laid out according to their floating status. + */ + static bool GetFloatingLayoutMode(); + + /** + Sets the floating layout mode. Pass @false to speed up editing by not performing + floating layout. This setting affects all buffers. + + */ + static void SetFloatingLayoutMode(bool mode); + protected: /// Command processor @@ -5251,12 +5377,18 @@ protected: /** @class wxRichTextCell - wxRichTextCell is the cell in a table. + wxRichTextCell is the cell in a table, in which the user can type. As well as + text, it can also contain objects e.g. an image, or even another wxRichTextTable. + + A cell's appearance can be changed via its associated wxRichTextAttr; for example + its size altered or its background colour set. It also has the properties of + column- and row-span. By default these are 1, meaning that the cell only spans + itself, but can be increased using the SetColspan() and SetRowspan() methods. + Attempts to set too large a span are silently truncated to the table edge. */ -class WXDLLIMPEXP_RICHTEXT wxRichTextCell: public wxRichTextBox +class wxRichTextCell: public wxRichTextBox { - DECLARE_DYNAMIC_CLASS(wxRichTextCell) public: // Constructors @@ -5276,6 +5408,8 @@ public: virtual bool Draw(wxDC& dc, wxRichTextDrawingContext& context, const wxRichTextRange& range, const wxRichTextSelection& selection, const wxRect& rect, int descent, int style); + virtual int HitTest(wxDC& dc, wxRichTextDrawingContext& context, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, wxRichTextObject** contextObj, int flags = 0); + virtual wxString GetXMLNodeName() const { return wxT("cell"); } virtual bool CanEditProperties() const { return true; } @@ -5286,6 +5420,52 @@ public: // Accessors + /** + Returns the number of columns spanned by the cell. + + By default a cell doesn't span extra columns, so this function returns 1. + + @since 2.9.5 + + @see SetColspan(), GetRowspan() + */ + int GetColspan() const; + + /** + Set the number of columns spanned by the cell. + + By default colspan is 1 i.e. a cell doesn't span extra columns. Pass a value >1 + to change this. Attempting to set a colspan <1 will assert and be ignored. + + @since 2.9.5 + + @see GetColspan(), SetRowspan() + */ + void SetColspan(long span); + + /** + Returns the number of rows spanned by the cell. + + By default a cell doesn't span extra rows, so this function returns 1. + + @since 2.9.5 + + @see SetRowspan(), GetColspan() + */ + int GetRowspan() const; + + /** + Set the number of rows spanned by the cell. + + By default colspan is 1 i.e. a cell doesn't span extra rows. Pass a value >1 + to change this. Attempting to set a rowspan <1 will assert and be ignored. + + @since 2.9.5 + + @see GetRowspan(), SetColspan() + */ + void SetRowspan(long span); + // Operations virtual wxRichTextObject* Clone() const { return new wxRichTextCell(*this); } @@ -5301,12 +5481,11 @@ protected: wxRichTextTable represents a table with arbitrary columns and rows. */ -WX_DEFINE_ARRAY_PTR(wxRichTextObject*, wxRichTextObjectPtrArray); -WX_DECLARE_OBJARRAY(wxRichTextObjectPtrArray, wxRichTextObjectPtrArrayArray); +class wxRichTextObjectPtrArray; +class wxRichTextObjectPtrArrayArray; -class WXDLLIMPEXP_RICHTEXT wxRichTextTable: public wxRichTextBox +class wxRichTextTable: public wxRichTextBox { - DECLARE_DYNAMIC_CLASS(wxRichTextTable) public: // Constructors @@ -5327,19 +5506,19 @@ public: virtual bool Draw(wxDC& dc, wxRichTextDrawingContext& context, const wxRichTextRange& range, const wxRichTextSelection& selection, const wxRect& rect, int descent, int style); + virtual int HitTest(wxDC& dc, wxRichTextDrawingContext& context, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, wxRichTextObject** contextObj, int flags = 0); + virtual wxString GetXMLNodeName() const { return wxT("table"); } virtual bool Layout(wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, const wxRect& parentRect, int style); - virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const; + virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, wxRichTextDrawingContext& context, int flags, const wxPoint& position = wxPoint(0,0), const wxSize& parentSize = wxDefaultSize, wxArrayInt* partialExtents = NULL) const; virtual bool DeleteRange(const wxRichTextRange& range); virtual wxString GetTextForRange(const wxRichTextRange& range) const; -#if wxUSE_XML virtual bool ImportFromXML(wxRichTextBuffer* buffer, wxXmlNode* node, wxRichTextXMLHandler* handler, bool* recurse); -#endif #if wxRICHTEXT_HAVE_DIRECT_OUTPUT virtual bool ExportXML(wxOutputStream& stream, int indent, wxRichTextXMLHandler* handler); @@ -5408,6 +5587,11 @@ public: */ virtual bool GetCellRowColumnPosition(long pos, int& row, int& col) const; + /** + Returns the coordinates of the cell with keyboard focus, or (-1,-1) if none. + */ + virtual wxPosition GetFocusedCell() const; + // Operations /** @@ -5475,6 +5659,55 @@ protected: wxRichTextObjectPtrArrayArray m_cells; }; +/** @class wxRichTextTableBlock + + Stores the coordinates for a block of cells. + */ + +class wxRichTextTableBlock +{ +public: + wxRichTextTableBlock() { Init(); } + wxRichTextTableBlock(int colStart, int colEnd, int rowStart, int rowEnd) + { Init(); m_colStart = colStart; m_colEnd = colEnd; m_rowStart = rowStart; m_rowEnd = rowEnd; } + wxRichTextTableBlock(const wxRichTextTableBlock& block) { Copy(block); } + + void Init() { m_colStart = 0; m_colEnd = 0; m_rowStart = 0; m_rowEnd = 0; } + + void Copy(const wxRichTextTableBlock& block) + { + m_colStart = block.m_colStart; m_colEnd = block.m_colEnd; m_rowStart = block.m_rowStart; m_rowEnd = block.m_rowEnd; + } + void operator=(const wxRichTextTableBlock& block) { Copy(block); } + bool operator==(const wxRichTextTableBlock& block) + { return m_colStart == block.m_colStart && m_colEnd == block.m_colEnd && m_rowStart == block.m_rowStart && m_rowEnd == block.m_rowEnd; } + + /// Computes the block given a table (perhaps about to be edited) and a rich text control + /// that may have a selection. If no selection, the whole table is used. If just the whole content + /// of one cell is selected, this cell only is used. If the cell contents is not selected and + /// requireCellSelection is @false, the focused cell will count as a selected cell. + bool ComputeBlockForSelection(wxRichTextTable* table, wxRichTextCtrl* ctrl, bool requireCellSelection = true); + + /// Does this block represent the whole table? + bool IsWholeTable(wxRichTextTable* table) const; + + /// Returns the cell focused in the table, if any + static wxRichTextCell* GetFocusedCell(wxRichTextCtrl* ctrl); + + int& ColStart() { return m_colStart; } + int ColStart() const { return m_colStart; } + + int& ColEnd() { return m_colEnd; } + int ColEnd() const { return m_colEnd; } + + int& RowStart() { return m_rowStart; } + int RowStart() const { return m_rowStart; } + + int& RowEnd() { return m_rowEnd; } + int RowEnd() const { return m_rowEnd; } + + int m_colStart, m_colEnd, m_rowStart, m_rowEnd; +}; /** The command identifiers for Do/Undo. @@ -5503,7 +5736,7 @@ enum wxRichTextCommandId @see wxRichTextCommand */ -class WXDLLIMPEXP_RICHTEXT wxRichTextObjectAddress +class wxRichTextObjectAddress { public: /** @@ -5559,7 +5792,7 @@ protected: wxArrayInt m_address; }; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction; +class wxRichTextAction; /** @class wxRichTextCommand @@ -5573,7 +5806,7 @@ class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction; @see wxRichTextAction */ -class WXDLLIMPEXP_RICHTEXT wxRichTextCommand: public wxCommand +class wxRichTextCommand: public wxCommand { public: /** @@ -5630,7 +5863,7 @@ protected: @see wxRichTextCommand */ -class WXDLLIMPEXP_RICHTEXT wxRichTextAction: public wxObject +class wxRichTextAction: public wxObject { public: /** @@ -5685,6 +5918,14 @@ public: */ wxRichTextObject* GetObject() const { return m_object; } + /** + Stores the object to replace the one at the position defined by the container address + without making an address for it + + @see SetObject(), MakeObject()). + */ + void StoreObject(wxRichTextObject* obj) { m_object = obj; } + /** Sets the object to replace the one at the position defined by the container address and the action's range start position. @@ -5696,6 +5937,11 @@ public: */ void MakeObject(wxRichTextObject* obj) { m_objectAddress.Create(m_buffer, obj); } + /** + Sets the existing and new objects, for use with wxRICHTEXT_CHANGE_OBJECT. + */ + void SetOldAndNewObjects(wxRichTextObject* oldObj, wxRichTextObject* newObj); + /** Calculate arrays for refresh optimization. */ @@ -5751,6 +5997,16 @@ public: */ const wxString& GetName() const { return m_name; } + /** + Instructs the first Do() command should be skipped as it's already been applied. + */ + void SetIgnoreFirstTime(bool b); + + /** + Returns true if the first Do() command should be skipped as it's already been applied. + */ + bool GetIgnoreFirstTime() const; + protected: // Action name wxString m_name; @@ -5833,9 +6089,8 @@ protected: @see wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextFileHandler: public wxObject +class wxRichTextFileHandler: public wxObject { - DECLARE_CLASS(wxRichTextFileHandler) public: /** Creates a file handler object. @@ -5844,7 +6099,6 @@ public: : m_name(name), m_extension(ext), m_type(type), m_flags(0), m_visible(true) { } -#if wxUSE_STREAMS /** Loads the buffer from a stream. Not all handlers will implement file loading. @@ -5858,9 +6112,7 @@ public: */ bool SaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream) { return DoSaveFile(buffer, stream); } -#endif -#if wxUSE_FFILE && wxUSE_STREAMS /** Loads the buffer from a file. */ @@ -5870,7 +6122,6 @@ public: Saves the buffer to a file. */ virtual bool SaveFile(wxRichTextBuffer *buffer, const wxString& filename); -#endif // wxUSE_STREAMS && wxUSE_STREAMS /** Returns @true if we handle this filename (if using files). By default, checks the extension. @@ -5957,7 +6208,6 @@ public: protected: -#if wxUSE_STREAMS /** Override to load content from @a stream into @a buffer. */ @@ -5967,7 +6217,6 @@ protected: Override to save content to @a stream from @a buffer. */ virtual bool DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream) = 0; -#endif wxString m_name; wxString m_encoding; @@ -5988,12 +6237,11 @@ protected: @see wxRichTextFileHandler, wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextPlainTextHandler: public wxRichTextFileHandler +class wxRichTextPlainTextHandler: public wxRichTextFileHandler { - DECLARE_CLASS(wxRichTextPlainTextHandler) public: - wxRichTextPlainTextHandler(const wxString& name = wxT("Text"), - const wxString& ext = wxT("txt"), + wxRichTextPlainTextHandler(const wxString& name = "Text", + const wxString& ext = "txt", wxRichTextFileType type = wxRICHTEXT_TYPE_TEXT) : wxRichTextFileHandler(name, ext, type) { } @@ -6006,10 +6254,8 @@ public: protected: -#if wxUSE_STREAMS virtual bool DoLoadFile(wxRichTextBuffer *buffer, wxInputStream& stream); virtual bool DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream); -#endif }; @@ -6025,9 +6271,8 @@ protected: @see wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextDrawingHandler: public wxObject +class wxRichTextDrawingHandler: public wxObject { - DECLARE_CLASS(wxRichTextDrawingHandler) public: /** Creates a drawing handler object. @@ -6046,6 +6291,31 @@ public: */ virtual bool GetVirtualAttributes(wxRichTextAttr& attr, wxRichTextObject* obj) const = 0; + /** + Gets the count for mixed virtual attributes for individual positions within the object. + For example, individual characters within a text object may require special highlighting. + */ + virtual int GetVirtualSubobjectAttributesCount(wxRichTextObject* obj) const = 0; + + /** + Gets the mixed virtual attributes for individual positions within the object. + For example, individual characters within a text object may require special highlighting. + Returns the number of virtual attributes found. + */ + virtual int GetVirtualSubobjectAttributes(wxRichTextObject* obj, wxArrayInt& positions, wxRichTextAttrArray& attributes) const = 0; + + /** + Do we have virtual text for this object? Virtual text allows an application + to replace characters in an object for editing and display purposes, for example + for highlighting special characters. + */ + virtual bool HasVirtualText(const wxRichTextPlainText* obj) const = 0; + + /** + Gets the virtual text for this object. + */ + virtual bool GetVirtualText(const wxRichTextPlainText* obj, wxString& text) const = 0; + /** Sets the name of the handler. */ @@ -6061,7 +6331,6 @@ protected: wxString m_name; }; -#if wxUSE_DATAOBJ /** @class wxRichTextBufferDataObject @@ -6074,7 +6343,7 @@ protected: @see wxDataObjectSimple, wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextBufferDataObject: public wxDataObjectSimple +class wxRichTextBufferDataObject: public wxDataObjectSimple { public: /** @@ -6114,7 +6383,6 @@ private: static const wxChar* ms_richTextBufferFormatId; // our format id }; -#endif /** @class wxRichTextRenderer @@ -6127,7 +6395,7 @@ private: @see wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextRenderer: public wxObject +class wxRichTextRenderer: public wxObject { public: /** @@ -6168,7 +6436,7 @@ public: @see wxRichTextRenderer, wxRichTextBuffer, wxRichTextCtrl */ -class WXDLLIMPEXP_RICHTEXT wxRichTextStdRenderer: public wxRichTextRenderer +class wxRichTextStdRenderer: public wxRichTextRenderer { public: /** @@ -6200,36 +6468,32 @@ inline bool wxRichTextHasStyle(int flags, int style) } /// Compare two attribute objects -WXDLLIMPEXP_RICHTEXT bool wxTextAttrEq(const wxRichTextAttr& attr1, const wxRichTextAttr& attr2); -WXDLLIMPEXP_RICHTEXT bool wxTextAttrEq(const wxRichTextAttr& attr1, const wxRichTextAttr& attr2); - -/// Compare two attribute objects, but take into account the flags -/// specifying attributes of interest. -WXDLLIMPEXP_RICHTEXT bool wxTextAttrEqPartial(const wxRichTextAttr& attr1, const wxRichTextAttr& attr2); +bool wxTextAttrEq(const wxRichTextAttr& attr1, const wxRichTextAttr& attr2); +bool wxTextAttrEq(const wxRichTextAttr& attr1, const wxRichTextAttr& attr2); /// Apply one style to another -WXDLLIMPEXP_RICHTEXT bool wxRichTextApplyStyle(wxRichTextAttr& destStyle, const wxRichTextAttr& style, wxRichTextAttr* compareWith = NULL); +bool wxRichTextApplyStyle(wxRichTextAttr& destStyle, const wxRichTextAttr& style, wxRichTextAttr* compareWith = NULL); // Remove attributes -WXDLLIMPEXP_RICHTEXT bool wxRichTextRemoveStyle(wxRichTextAttr& destStyle, const wxRichTextAttr& style); +bool wxRichTextRemoveStyle(wxRichTextAttr& destStyle, const wxRichTextAttr& style); /// Combine two bitlists -WXDLLIMPEXP_RICHTEXT bool wxRichTextCombineBitlists(int& valueA, int valueB, int& flagsA, int flagsB); +bool wxRichTextCombineBitlists(int& valueA, int valueB, int& flagsA, int flagsB); /// Compare two bitlists -WXDLLIMPEXP_RICHTEXT bool wxRichTextBitlistsEqPartial(int valueA, int valueB, int flags); +bool wxRichTextBitlistsEqPartial(int valueA, int valueB, int flags); /// Split into paragraph and character styles -WXDLLIMPEXP_RICHTEXT bool wxRichTextSplitParaCharStyles(const wxRichTextAttr& style, wxRichTextAttr& parStyle, wxRichTextAttr& charStyle); +bool wxRichTextSplitParaCharStyles(const wxRichTextAttr& style, wxRichTextAttr& parStyle, wxRichTextAttr& charStyle); /// Compare tabs -WXDLLIMPEXP_RICHTEXT bool wxRichTextTabsEq(const wxArrayInt& tabs1, const wxArrayInt& tabs2); +bool wxRichTextTabsEq(const wxArrayInt& tabs1, const wxArrayInt& tabs2); /// Convert a decimal to Roman numerals -WXDLLIMPEXP_RICHTEXT wxString wxRichTextDecimalToRoman(long n); +wxString wxRichTextDecimalToRoman(long n); // Collects the attributes that are common to a range of content, building up a note of // which attributes are absent in some objects and which clash in some objects. -WXDLLIMPEXP_RICHTEXT void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAttr& attr, wxTextAttr& clashingAttr, wxTextAttr& absentAttr); +void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAttr& attr, wxTextAttr& clashingAttr, wxTextAttr& absentAttr); -WXDLLIMPEXP_RICHTEXT void wxRichTextModuleInit(); +void wxRichTextModuleInit();