#include "wx/cmdproc.h"
#include "wx/txtstrm.h"
#include "wx/variant.h"
+#include "wx/position.h"
#if wxUSE_DATAOBJ
#include "wx/dataobj.h"
class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCtrl;
class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextObject;
class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextImage;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextPlainText;
class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCacheObject;
class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextObjectList;
class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextLine;
*/
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(wxRichTextAttr, wxRichTextAttrArray, WXDLLIMPEXP_RICHTEXT);
+
WX_DECLARE_USER_EXPORTED_OBJARRAY(wxVariant, wxRichTextVariantArray, WXDLLIMPEXP_RICHTEXT);
/**
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() { m_buffer = NULL; m_enableVirtualAttributes = true; }
/**
Does this object have virtual attributes?
*/
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) { m_enableVirtualAttributes = b; }
+
+ /**
+ Returns @true if virtual attribute processing is enabled.
+ */
+
+ bool GetVirtualAttributesEnabled() const { return m_enableVirtualAttributes; }
+
wxRichTextBuffer* m_buffer;
+ bool m_enableVirtualAttributes;
};
/**
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
/**
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* WXUNUSED(object), wxRichTextDrawingContext& WXUNUSED(context)) const { return false; }
/**
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* WXUNUSED(object), wxRichTextDrawingContext& WXUNUSED(context)) { return false; }
+
+ /**
+ JACS
+ Returns @true if this object can potentially be split, by virtue of having
+ different virtual attributes for individual sub-objects.
+ */
+ virtual bool CanSplit(wxRichTextDrawingContext& WXUNUSED(context)) const { return false; }
+
+ /**
+ 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& WXUNUSED(context)) { return this; }
/**
Dump object data to the given output stream for debugging.
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);
/**
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.
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 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"); }
/**
Copy constructor.
*/
- wxRichTextFieldType(const wxRichTextFieldType& fieldType) { Copy(fieldType); }
+ wxRichTextFieldType(const wxRichTextFieldType& fieldType)
+ : wxObject(fieldType)
+ { Copy(fieldType); }
void Copy(const wxRichTextFieldType& fieldType) { m_name = fieldType.m_name; }
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.
The copy constructor.
*/
- wxRichTextFieldTypeStandard(const wxRichTextFieldTypeStandard& field) { Copy(field); }
+ wxRichTextFieldTypeStandard(const wxRichTextFieldTypeStandard& field)
+ : wxRichTextFieldType(field)
+ { Copy(field); }
/**
Initialises the object.
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.
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);
/**
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:
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;
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);
+ virtual bool Merge(wxRichTextObject* object, wxRichTextDrawingContext& context);
virtual void Dump(wxTextOutputStream& stream);
+ virtual bool CanSplit(wxRichTextDrawingContext& context) const;
+
+ virtual wxRichTextObject* Split(wxRichTextDrawingContext& context);
+
/**
Get the first position from pos that has a line break character.
*/
*/
wxRichTextImage(const wxRichTextImage& obj): wxRichTextObject(obj) { Copy(obj); }
+ /**
+ Destructor.
+ */
+ ~wxRichTextImage();
+
/**
Initialisation.
*/
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.
/**
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);
/**
Gets the original image size.
*/
void SetScale(double scale) { m_scale = scale; }
+ /**
+ 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) { sm_floatingLayoutMode = mode; }
+
+ /**
+ Returns the floating layout mode. The default is @true, where objects
+ are laid out according to their floating status.
+ */
+ static bool GetFloatingLayoutMode() { return sm_floatingLayoutMode; }
+
protected:
/// Command processor
/// Factor to multiply by character height to get a reasonable bullet size
static float sm_bulletProportion;
+ /// Floating layout mode, @true by default
+ static bool sm_floatingLayoutMode;
+
/// Scaling factor in use: needed to calculate correct dimensions when printing
double m_scale;
*/
WX_DEFINE_ARRAY_PTR(wxRichTextObject*, wxRichTextObjectPtrArray);
-WX_DECLARE_OBJARRAY(wxRichTextObjectPtrArray, wxRichTextObjectPtrArrayArray);
+WX_DECLARE_USER_EXPORTED_OBJARRAY(wxRichTextObjectPtrArray, wxRichTextObjectPtrArrayArray, WXDLLIMPEXP_RICHTEXT);
class WXDLLIMPEXP_RICHTEXT wxRichTextTable: public wxRichTextBox
{
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 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
/**
*/
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 (cf SetObject() and 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.
*/
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.
*/