/**
Hit-testing: returns a flag indicating hit test details, plus
- information about position. contextObj is returned to specify what object
+ information about position. @a contextObj is returned to specify what object
position is relevant to, since otherwise there's an ambiguity.
- obj may not a child of contextObj, since we may be referring to the container itself
+ @ obj might not be a child of @a contextObj, since we may be referring to the container itself
if we have no hit on a child - for example if we click outside an object.
+
+ The function puts the position in @a textPosition if one is found.
+ @a pt is in logical units (a zero y position is at the beginning of the buffer).
+
+ @return One of the ::wxRichTextHitTestFlags values.
*/
+
virtual int HitTest(wxDC& dc, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, wxRichTextObject** contextObj, int flags = 0);
/**
virtual bool PositionToXY(long pos, long* x, long* y) const;
/**
- Sets text attributes: character and/or paragraph styles.
+ Sets the attributes for the given range. Pass flags to determine how the
+ attributes are set.
+
+ The end point of range is specified as the last character position of the span
+ of text. So, for example, to set the style for a character at position 5,
+ use the range (5,5).
+ This differs from the wxRichTextCtrl API, where you would specify (5,6).
+
+ @a flags may contain a bit list of the following values:
+ - wxRICHTEXT_SETSTYLE_NONE: no style flag.
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
+ undoable.
+ - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
+ if the combined style at this point is already the style in question.
+ - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
+ applied to paragraphs, and not the content.
+ This allows content styling to be preserved independently from that
+ of e.g. a named paragraph style.
+ - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
+ applied to characters, and not the paragraph.
+ This allows content styling to be preserved independently from that
+ of e.g. a named paragraph style.
+ - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
+ the new style.
+ - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style.
+ Only the style flags are used in this operation.
*/
virtual bool SetStyle(const wxRichTextRange& range, const wxRichTextAttr& style, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
/**
Returns the combined text attributes for this position.
+
+ This function gets the @e uncombined style - that is, the attributes associated
+ with the paragraph or character content, and not necessarily the combined
+ attributes you see on the screen. To get the combined attributes, use GetStyle().
+ If you specify (any) paragraph attribute in @e style's flags, this function
+ will fetch the paragraph attributes.
+ Otherwise, it will return the character attributes.
*/
virtual bool GetStyle(long position, wxRichTextAttr& style);
virtual bool DoGetStyle(long position, wxRichTextAttr& style, bool combineStyles = true);
/**
- Returns the combined style for a range - if any attribute is different within the range,
- that attribute is not present within the flags.
+ This function gets a style representing the common, combined attributes in the
+ given range.
+ Attributes which have different values within the specified range will not be
+ included the style flags.
+
+ The function is used to get the attributes to display in the formatting dialog:
+ the user can edit the attributes common to the selection, and optionally specify the
+ values of further attributes to be applied uniformly.
+
+ To apply the edited attributes, you can use SetStyle() specifying
+ the wxRICHTEXT_SETSTYLE_OPTIMIZE flag, which will only apply attributes that
+ are different from the @e combined attributes within the range.
+ So, the user edits the effective, displayed attributes for the range,
+ but his choice won't be applied unnecessarily to content. As an example,
+ say the style for a paragraph specifies bold, but the paragraph text doesn't
+ specify a weight.
+ The combined style is bold, and this is what the user will see on-screen and
+ in the formatting dialog. The user now specifies red text, in addition to bold.
+ When applying with SetStyle(), the content font weight attributes won't be
+ changed to bold because this is already specified by the paragraph.
+ However the text colour attributes @e will be changed to show red.
*/
virtual bool GetStyleForRange(const wxRichTextRange& range, wxRichTextAttr& style);
*/
bool CollectStyle(wxRichTextAttr& currentStyle, const wxRichTextAttr& style, wxRichTextAttr& clashingAttr, wxRichTextAttr& absentAttr);
+ //@{
/**
- Set the list style.
- */
- virtual bool SetListStyle(const wxRichTextRange& range, wxRichTextListStyleDefinition* def, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+ Sets the list attributes for the given range, passing flags to determine how
+ the attributes are set.
+ Either the style definition or the name of the style definition (in the current
+ sheet) can be passed.
- /**
- Set the list style.
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+ - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
+ @a startFrom, otherwise existing attributes are used.
+ - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
+ as the level for all paragraphs, otherwise the current indentation will be used.
+
+ @see NumberList(), PromoteList(), ClearListStyle().
*/
+ virtual bool SetListStyle(const wxRichTextRange& range, wxRichTextListStyleDefinition* def, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
virtual bool SetListStyle(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+ //@}
/**
- Clear the list for the given range.
+ Clears the list style from the given range, clearing list-related attributes
+ and applying any named paragraph style associated with each paragraph.
+
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+
+ @see SetListStyle(), PromoteList(), NumberList()
*/
virtual bool ClearListStyle(const wxRichTextRange& range, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
+ //@{
/**
- Number/renumber any list elements in the given range.
+ Numbers the paragraphs in the given range.
+
+ Pass flags to determine how the attributes are set.
+ Either the style definition or the name of the style definition (in the current
+ sheet) can be passed.
+
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+ - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
+ @a startFrom, otherwise existing attributes are used.
+ - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
+ as the level for all paragraphs, otherwise the current indentation will be used.
+
@a def can be NULL to indicate that the existing list style should be used.
- */
- virtual bool NumberList(const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
- /**
- Number/renumber any list elements in the given range.
- @a defName can be empty to indicate that the existing list style should be used.
+ @see SetListStyle(), PromoteList(), ClearListStyle()
*/
+ virtual bool NumberList(const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
virtual bool NumberList(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+ //@}
+ //@{
/**
- Promotes the list items within the given range. @a promoteBy can be a positive or negative number, e.g. 1 or -1.
- */
- virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1);
+ Promotes the list items within the given range.
+ A positive @a promoteBy produces a smaller indent, and a negative number
+ produces a larger indent. Pass flags to determine how the attributes are set.
+ Either the style definition or the name of the style definition (in the current
+ sheet) can be passed.
- /**
- Promotes the list items within the given range. @a promoteBy can be a positive or negative number, e.g. 1 or -1.
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+ - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
+ @a startFrom, otherwise existing attributes are used.
+ - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
+ as the level for all paragraphs, otherwise the current indentation will be used.
+
+ @see SetListStyle(), SetListStyle(), ClearListStyle()
*/
+ virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1);
virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1);
+ //@}
/**
Helper for NumberList and PromoteList, that does renumbering and promotion simultaneously
virtual wxString GetText() const;
/**
- Sets the default style for new content. Setting it to a default attribute
- makes new content take on the 'basic' style.
+ Sets the default style, affecting the style currently being applied
+ (for example, setting the default style to bold will cause subsequently
+ inserted text to be bold).
+
+ This is not cumulative - setting the default style will replace the previous
+ default style.
+
+ Setting it to a default attribute object makes new content take on the 'basic' style.
*/
virtual bool SetDefaultStyle(const wxRichTextAttr& style);
/**
- Returns the default style.
+ Returns the current default style, affecting the style currently being applied
+ (for example, setting the default style to bold will cause subsequently
+ inserted text to be bold).
*/
virtual const wxRichTextAttr& GetDefaultStyle() const { return m_defaultAttributes; }
/**
- Sets the basic (overall) style.
+ Sets the basic (overall) style. This is the style of the whole
+ buffer before further styles are applied, unlike the default style, which
+ only affects the style currently being applied (for example, setting the default
+ style to bold will cause subsequently inserted text to be bold).
*/
virtual void SetBasicStyle(const wxRichTextAttr& style) { m_attributes = style; }
/**
Returns the basic (overall) style.
+
+ This is the style of the whole buffer before further styles are applied,
+ unlike the default style, which only affects the style currently being
+ applied (for example, setting the default style to bold will cause
+ subsequently inserted text to be bold).
*/
virtual const wxRichTextAttr& GetBasicStyle() const { return m_attributes; }
public:
// Constructors
+ /**
+ Constructor.
+ */
wxRichTextPlainText(const wxString& text = wxEmptyString, wxRichTextObject* parent = NULL, wxRichTextAttr* style = NULL);
+
+ /**
+ Copy constructor.
+ */
wxRichTextPlainText(const wxRichTextPlainText& obj): wxRichTextObject() { Copy(obj); }
// Overridables
virtual void Dump(wxTextOutputStream& stream);
- /// Get the first position from pos that has a line break character.
+ /**
+ Get the first position from pos that has a line break character.
+ */
long GetFirstLineBreakPosition(long pos);
/// Does this object take note of paragraph attributes? Text and image objects don't.
// Accessors
- /// Get the text
+ /**
+ Returns the text.
+ */
const wxString& GetText() const { return m_text; }
- /// Set the text
+ /**
+ Sets the text.
+ */
void SetText(const wxString& text) { m_text = text; }
// Operations
- /// Copy
+ // Copies the text object,
void Copy(const wxRichTextPlainText& obj);
- /// Clone
+ // Clones the text object.
virtual wxRichTextObject* Clone() const { return new wxRichTextPlainText(*this); }
+
private:
bool DrawTabbedString(wxDC& dc, const wxRichTextAttr& attr, const wxRect& rect, wxString& str, wxCoord& x, wxCoord& y, bool selected);
class WXDLLIMPEXP_RICHTEXT wxRichTextImageBlock: public wxObject
{
public:
+ /**
+ Constructor.
+ */
wxRichTextImageBlock();
+
+ /**
+ Copy constructor.
+ */
wxRichTextImageBlock(const wxRichTextImageBlock& block);
virtual ~wxRichTextImageBlock();
+ /**
+ Initialises the block.
+ */
void Init();
+
+ /**
+ Clears the block.
+ */
+
void Clear();
- // Load the original image into a memory block.
- // If the image is not a JPEG, we must convert it into a JPEG
- // 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.
+ /**
+ Load the original image into a memory block.
+ If the image is not a JPEG, we must convert it into a JPEG
+ to conserve space.
+ If it's not a JPEG we can make use of @a image, already scaled, so we don't have to
+ load the image a second time.
+ */
virtual bool MakeImageBlock(const wxString& filename, wxBitmapType imageType,
wxImage& image, bool convertToJPEG = true);
- // Make an image block from the wxImage in the given
- // format.
+ /**
+ Make an image block from the wxImage in the given
+ format.
+ */
virtual bool MakeImageBlock(wxImage& image, wxBitmapType imageType, int quality = 80);
- // Uses a const wxImage for efficiency, but can't set quality (only relevant for JPEG)
+ /**
+ Uses a const wxImage for efficiency, but can't set quality (only relevant for JPEG)
+ */
virtual bool MakeImageBlockDefaultQuality(const wxImage& image, wxBitmapType imageType);
- // Makes the image block
+ /**
+ Makes the image block.
+ */
virtual bool DoMakeImageBlock(const wxImage& image, wxBitmapType imageType);
- // Write to a file
+ /**
+ Writes the block to a file.
+ */
bool Write(const wxString& filename);
- // Write data in hex to a stream
+ /**
+ Writes the data in hex to a stream.
+ */
bool WriteHex(wxOutputStream& stream);
- // Read data in hex from a stream
+ /**
+ Reads the data in hex from a stream.
+ */
bool ReadHex(wxInputStream& stream, int length, wxBitmapType imageType);
- // Copy from 'block'
+ /**
+ Copy from @a block.
+ */
void Copy(const wxRichTextImageBlock& block);
// Load a wxImage from the block
+ /**
+ */
bool Load(wxImage& image);
-//// Operators
+// Operators
+
+ /**
+ Assignment operation.
+ */
void operator=(const wxRichTextImageBlock& block);
-//// Accessors
+// Accessors
+ /**
+ Returns the raw data.
+ */
unsigned char* GetData() const { return m_data; }
+
+ /**
+ Returns the data size in bytes.
+ */
size_t GetDataSize() const { return m_dataSize; }
+
+ /**
+ Returns the image type.
+ */
wxBitmapType GetImageType() const { return m_imageType; }
+ /**
+ */
void SetData(unsigned char* image) { m_data = image; }
+
+ /**
+ Sets the data size.
+ */
void SetDataSize(size_t size) { m_dataSize = size; }
+
+ /**
+ Sets the image type.
+ */
void SetImageType(wxBitmapType imageType) { m_imageType = imageType; }
- bool Ok() const { return IsOk(); }
+ /**
+ Returns @true if the data is non-NULL.
+ */
bool IsOk() const { return GetData() != NULL; }
+ bool Ok() const { return IsOk(); }
- // Gets the extension for the block's type
+ /**
+ Gets the extension for the block's type.
+ */
wxString GetExtension() const;
/// Implementation
- // Allocate and read from stream as a block of memory
+ /**
+ Allocates and reads from a stream as a block of memory.
+ */
static unsigned char* ReadBlock(wxInputStream& stream, size_t size);
+
+ /**
+ Allocates and reads from a file as a block of memory.
+ */
static unsigned char* ReadBlock(const wxString& filename, size_t size);
- // Write memory block to stream
+ /**
+ Writes a memory block to stream.
+ */
static bool WriteBlock(wxOutputStream& stream, unsigned char* block, size_t size);
- // Write memory block to file
+ /**
+ Writes a memory block to a file.
+ */
static bool WriteBlock(const wxString& filename, unsigned char* block, size_t size);
protected:
public:
// Constructors
+ /**
+ Default constructor.
+ */
wxRichTextImage(wxRichTextObject* parent = NULL): wxRichTextObject(parent) { }
+
+ /**
+ Creates a wxRichTextImage from a wxImage.
+ */
wxRichTextImage(const wxImage& image, wxRichTextObject* parent = NULL, wxRichTextAttr* charStyle = NULL);
+
+ /**
+ Creates a wxRichTextImage from an image block.
+ */
wxRichTextImage(const wxRichTextImageBlock& imageBlock, wxRichTextObject* parent = NULL, wxRichTextAttr* charStyle = NULL);
+
+ /**
+ Copy constructor.
+ */
wxRichTextImage(const wxRichTextImage& obj): wxRichTextObject(obj) { Copy(obj); }
// Overridables
virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const;
- /// Get the 'natural' size for an object. For an image, it would be the
- /// image size.
+ /**
+ Returns the 'natural' size for this object - the image size.
+ */
virtual wxTextAttrSize GetNaturalSize() const;
virtual bool IsEmpty() const { return false; /* !m_imageBlock.IsOk(); */ }
// Accessors
- /// Get the image cache (scaled bitmap)
+ /**
+ Returns the image cache (a scaled bitmap).
+ */
const wxBitmap& GetImageCache() const { return m_imageCache; }
- /// Set the image cache
+ /**
+ Sets the image cache.
+ */
void SetImageCache(const wxBitmap& bitmap) { m_imageCache = bitmap; }
- /// Reset the image cache
+ /**
+ Resets the image cache.
+ */
void ResetImageCache() { m_imageCache = wxNullBitmap; }
- /// Get the image block containing the raw data
+ /**
+ Returns the image block containing the raw data.
+ */
wxRichTextImageBlock& GetImageBlock() { return m_imageBlock; }
// Operations
- /// Copy
+ /**
+ Copies the image object.
+ */
void Copy(const wxRichTextImage& obj);
- /// Clone
+ /**
+ Clones the image object.
+ */
virtual wxRichTextObject* Clone() const { return new wxRichTextImage(*this); }
- /// Create a cached image at the required size
+ /**
+ Creates a cached image at the required size.
+ */
virtual bool LoadImageCache(wxDC& dc, bool resetCache = false);
protected:
public:
// Constructors
+ /**
+ Default constructor.
+ */
wxRichTextBuffer() { Init(); }
+
+ /**
+ Copy constructor.
+ */
wxRichTextBuffer(const wxRichTextBuffer& obj): wxRichTextParagraphLayoutBox() { Init(); Copy(obj); }
+
virtual ~wxRichTextBuffer() ;
// Accessors
- /// Gets the command processor
+ /**
+ Returns the command processor.
+ A text buffer always creates its own command processor when it is initialized.
+ */
wxCommandProcessor* GetCommandProcessor() const { return m_commandProcessor; }
- /// Set style sheet, if any.
+ /**
+ Sets style sheet, if any. This will allow the application to use named character and paragraph
+ styles found in the style sheet.
+
+ Neither the buffer nor the control owns the style sheet so must be deleted by the application.
+ */
void SetStyleSheet(wxRichTextStyleSheet* styleSheet) { m_styleSheet = styleSheet; }
+
+ /**
+ Returns the style sheet.
+ */
virtual wxRichTextStyleSheet* GetStyleSheet() const { return m_styleSheet; }
- /// Set style sheet and notify of the change
+ /**
+ Sets the style sheet and sends a notification of the change.
+ */
bool SetStyleSheetAndNotify(wxRichTextStyleSheet* sheet);
- /// Push style sheet to top of stack
+ /**
+ Pushes the style sheet to the top of the style sheet stack.
+ */
bool PushStyleSheet(wxRichTextStyleSheet* styleSheet);
- /// Pop style sheet from top of stack
+ /**
+ Pops the style sheet from the top of the style sheet stack.
+ */
wxRichTextStyleSheet* PopStyleSheet();
- /// Set/get table storing fonts
+ /**
+ Returns the table storing fonts, for quick access and font reuse.
+ */
wxRichTextFontTable& GetFontTable() { return m_fontTable; }
+
+ /**
+ Returns the table storing fonts, for quick access and font reuse.
+ */
const wxRichTextFontTable& GetFontTable() const { return m_fontTable; }
+
+ /**
+ Sets table storing fonts, for quick access and font reuse.
+ */
void SetFontTable(const wxRichTextFontTable& table) { m_fontTable = table; }
// Operations
- /// Initialisation
+ /**
+ Initialisation.
+ */
void Init();
- /// Clears the buffer, adds an empty paragraph, and clears the command processor.
+ /**
+ Clears the buffer, adds an empty paragraph, and clears the command processor.
+ */
virtual void ResetAndClearCommands();
- /// Load a file
+ //@{
+ /**
+ Loads content from a stream or file.
+ Not all handlers will implement file loading.
+ */
virtual bool LoadFile(const wxString& filename, wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
-
- /// Save a file
- virtual bool SaveFile(const wxString& filename, wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
-
- /// Load from a stream
virtual bool LoadFile(wxInputStream& stream, wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
+ //@}
- /// Save to a stream
+ //@{
+ /**
+ Saves content to a stream or file.
+ Not all handlers will implement file saving.
+ */
+ virtual bool SaveFile(const wxString& filename, wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
virtual bool SaveFile(wxOutputStream& stream, wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
+ //@}
- /// Set the handler flags, controlling loading and saving
+ /**
+ Sets the handler flags, controlling loading and saving.
+ */
void SetHandlerFlags(int flags) { m_handlerFlags = flags; }
- /// Get the handler flags, controlling loading and saving
+ /**
+ Gets the handler flags, controlling loading and saving.
+ */
int GetHandlerFlags() const { return m_handlerFlags; }
- /// Convenience function to add a paragraph of text
+ /**
+ Convenience function to add a paragraph of text.
+ */
virtual wxRichTextRange AddParagraph(const wxString& text, wxRichTextAttr* paraStyle = NULL) { Modify(); return wxRichTextParagraphLayoutBox::AddParagraph(text, paraStyle); }
- /// Begin collapsing undo/redo commands. Note that this may not work properly
- /// if combining commands that delete or insert content, changing ranges for
- /// subsequent actions.
+ /**
+ Begin collapsing undo/redo commands. Note that this may not work properly
+ if combining commands that delete or insert content, changing ranges for
+ subsequent actions.
+
+ @a cmdName should be the name of the combined command that will appear
+ next to Undo and Redo in the edit menu.
+ */
virtual bool BeginBatchUndo(const wxString& cmdName);
- /// End collapsing undo/redo commands
+ /**
+ End collapsing undo/redo commands.
+ */
virtual bool EndBatchUndo();
- /// Collapsing commands?
+ /**
+ Returns @true if we are collapsing commands.
+ */
virtual bool BatchingUndo() const { return m_batchedCommandDepth > 0; }
- /// Submit immediately, or delay according to whether collapsing is on
+ /**
+ Submit the action immediately, or delay according to whether collapsing is on.
+ */
virtual bool SubmitAction(wxRichTextAction* action);
- /// Get collapsed command
+ /**
+ Returns the collapsed command.
+ */
virtual wxRichTextCommand* GetBatchedCommand() const { return m_batchedCommand; }
- /// Begin suppressing undo/redo commands. The way undo is suppressed may be implemented
- /// differently by each command. If not dealt with by a command implementation, then
- /// it will be implemented automatically by not storing the command in the undo history
- /// when the action is submitted to the command processor.
+ /**
+ Begin suppressing undo/redo commands. The way undo is suppressed may be implemented
+ differently by each command. If not dealt with by a command implementation, then
+ it will be implemented automatically by not storing the command in the undo history
+ when the action is submitted to the command processor.
+ */
virtual bool BeginSuppressUndo();
- /// End suppressing undo/redo commands.
+ /**
+ End suppressing undo/redo commands.
+ */
virtual bool EndSuppressUndo();
- /// Collapsing commands?
+ /**
+ Are we suppressing undo??
+ */
virtual bool SuppressingUndo() const { return m_suppressUndo > 0; }
- /// Copy the range to the clipboard
+ /**
+ Copy the range to the clipboard.
+ */
virtual bool CopyToClipboard(const wxRichTextRange& range);
- /// Paste the clipboard content to the buffer
+ /**
+ Paste the clipboard content to the buffer.
+ */
virtual bool PasteFromClipboard(long position);
- /// Can we paste from the clipboard?
+ /**
+ Returns @true if we can paste from the clipboard.
+ */
virtual bool CanPasteFromClipboard() const;
- /// Begin using a style
+ /**
+ Begin using a style.
+ */
virtual bool BeginStyle(const wxRichTextAttr& style);
- /// End the style
+ /**
+ End the style.
+ */
virtual bool EndStyle();
- /// End all styles
+ /**
+ End all styles.
+ */
virtual bool EndAllStyles();
- /// Clear the style stack
+ /**
+ Clears the style stack.
+ */
virtual void ClearStyleStack();
- /// Get the size of the style stack, for example to check correct nesting
+ /**
+ Returns the size of the style stack, for example to check correct nesting.
+ */
virtual size_t GetStyleStackSize() const { return m_attributeStack.GetCount(); }
- /// Begin using bold
+ /**
+ Begins using bold.
+ */
bool BeginBold();
- /// End using bold
+ /**
+ Ends using bold.
+ */
bool EndBold() { return EndStyle(); }
- /// Begin using italic
+ /**
+ Begins using italic.
+ */
bool BeginItalic();
- /// End using italic
+ /**
+ Ends using italic.
+ */
bool EndItalic() { return EndStyle(); }
- /// Begin using underline
+ /**
+ Begins using underline.
+ */
bool BeginUnderline();
- /// End using underline
+ /**
+ Ends using underline.
+ */
bool EndUnderline() { return EndStyle(); }
- /// Begin using point size
+ /**
+ Begins using point size.
+ */
bool BeginFontSize(int pointSize);
- /// End using point size
+ /**
+ Ends using point size.
+ */
bool EndFontSize() { return EndStyle(); }
- /// Begin using this font
+ /**
+ Begins using this font.
+ */
bool BeginFont(const wxFont& font);
- /// End using a font
+ /**
+ Ends using a font.
+ */
bool EndFont() { return EndStyle(); }
- /// Begin using this colour
+ /**
+ Begins using this colour.
+ */
bool BeginTextColour(const wxColour& colour);
- /// End using a colour
+ /**
+ Ends using a colour.
+ */
bool EndTextColour() { return EndStyle(); }
- /// Begin using alignment
+ /**
+ Begins using alignment.
+ */
bool BeginAlignment(wxTextAttrAlignment alignment);
- /// End alignment
+ /**
+ Ends alignment.
+ */
bool EndAlignment() { return EndStyle(); }
- /// Begin left indent
+ /**
+ Begins using @a leftIndent for the left indent, and optionally @a leftSubIndent for
+ the sub-indent. Both are expressed in tenths of a millimetre.
+
+ The sub-indent is an offset from the left of the paragraph, and is used for all
+ but the first line in a paragraph. A positive value will cause the first line to appear
+ to the left of the subsequent lines, and a negative value will cause the first line to be
+ indented relative to the subsequent lines.
+ */
bool BeginLeftIndent(int leftIndent, int leftSubIndent = 0);
- /// End left indent
+ /**
+ Ends left indent.
+ */
bool EndLeftIndent() { return EndStyle(); }
- /// Begin right indent
+ /**
+ Begins a right indent, specified in tenths of a millimetre.
+ */
bool BeginRightIndent(int rightIndent);
- /// End right indent
+ /**
+ Ends right indent.
+ */
bool EndRightIndent() { return EndStyle(); }
- /// Begin paragraph spacing
+ /**
+ Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
+ in tenths of a millimetre.
+ */
bool BeginParagraphSpacing(int before, int after);
- /// End paragraph spacing
+ /**
+ Ends paragraph spacing.
+ */
bool EndParagraphSpacing() { return EndStyle(); }
- /// Begin line spacing
+ /**
+ Begins line spacing using the specified value. @e spacing is a multiple, where
+ 10 means single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
+
+ The ::wxTextAttrLineSpacing enumeration values are defined for convenience.
+ */
bool BeginLineSpacing(int lineSpacing);
- /// End line spacing
+ /**
+ Ends line spacing.
+ */
bool EndLineSpacing() { return EndStyle(); }
- /// Begin numbered bullet
+ /**
+ Begins numbered bullet.
+
+ This call will be needed for each item in the list, and the
+ application should take care of incrementing the numbering.
+
+ @a bulletNumber is a number, usually starting with 1.
+ @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
+ @a bulletStyle is a bitlist of the following values:
+
+ wxRichTextBuffer uses indentation to render a bulleted item.
+ The left indent is the distance between the margin and the bullet.
+ The content of the paragraph, including the first line, starts
+ at leftMargin + leftSubIndent.
+ So the distance between the left edge of the bullet and the
+ left of the actual paragraph is leftSubIndent.
+ */
bool BeginNumberedBullet(int bulletNumber, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_ARABIC|wxTEXT_ATTR_BULLET_STYLE_PERIOD);
- /// End numbered bullet
+ /**
+ Ends numbered bullet.
+ */
bool EndNumberedBullet() { return EndStyle(); }
- /// Begin symbol bullet
+ /**
+ Begins applying a symbol bullet, using a character from the current font.
+
+ See BeginNumberedBullet() for an explanation of how indentation is used
+ to render the bulleted paragraph.
+ */
bool BeginSymbolBullet(const wxString& symbol, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_SYMBOL);
- /// End symbol bullet
+ /**
+ Ends symbol bullet.
+ */
bool EndSymbolBullet() { return EndStyle(); }
- /// Begin standard bullet
+ /**
+ Begins applying a standard bullet, using one of the standard bullet names
+ (currently @c standard/circle or @c standard/square.
+
+ See BeginNumberedBullet() for an explanation of how indentation is used to
+ render the bulleted paragraph.
+ */
bool BeginStandardBullet(const wxString& bulletName, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_STANDARD);
- /// End standard bullet
+ /**
+ Ends standard bullet.
+ */
bool EndStandardBullet() { return EndStyle(); }
- /// Begin named character style
+ /**
+ Begins named character style.
+ */
bool BeginCharacterStyle(const wxString& characterStyle);
- /// End named character style
+ /**
+ Ends named character style.
+ */
bool EndCharacterStyle() { return EndStyle(); }
- /// Begin named paragraph style
+ /**
+ Begins named paragraph style.
+ */
bool BeginParagraphStyle(const wxString& paragraphStyle);
- /// End named character style
+ /**
+ Ends named character style.
+ */
bool EndParagraphStyle() { return EndStyle(); }
- /// Begin named list style
+ /**
+ Begins named list style.
+
+ Optionally, you can also pass a level and a number.
+ */
bool BeginListStyle(const wxString& listStyle, int level = 1, int number = 1);
- /// End named character style
+ /**
+ Ends named character style.
+ */
bool EndListStyle() { return EndStyle(); }
- /// Begin URL
+ /**
+ Begins applying wxTEXT_ATTR_URL to the content.
+
+ Pass a URL and optionally, a character style to apply, since it is common
+ to mark a URL with a familiar style such as blue text with underlining.
+ */
bool BeginURL(const wxString& url, const wxString& characterStyle = wxEmptyString);
- /// End URL
+ /**
+ Ends URL.
+ */
bool EndURL() { return EndStyle(); }
// Event handling
- /// Add an event handler
+ /**
+ Adds an event handler.
+
+ A buffer associated with a control has the control as the only event handler,
+ but the application is free to add more if further notification is required.
+ All handlers are notified of an event originating from the buffer, such as
+ the replacement of a style sheet during loading.
+
+ The buffer never deletes any of the event handlers, unless RemoveEventHandler()
+ is called with @true as the second argument.
+ */
bool AddEventHandler(wxEvtHandler* handler);
- /// Remove an event handler
+ /**
+ Removes an event handler from the buffer's list of handlers, deleting the
+ object if @a deleteHandler is @true.
+ */
bool RemoveEventHandler(wxEvtHandler* handler, bool deleteHandler = false);
- /// Clear event handlers
+ /**
+ Clear event handlers.
+ */
void ClearEventHandlers();
- /// Send event to event handlers. If sendToAll is true, will send to all event handlers,
- /// otherwise will stop at the first successful one.
+ /**
+ Send event to event handlers. If sendToAll is true, will send to all event handlers,
+ otherwise will stop at the first successful one.
+ */
bool SendEvent(wxEvent& event, bool sendToAll = true);
// Implementation
virtual int HitTest(wxDC& dc, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, wxRichTextObject** contextObj, int flags = 0);
- /// Copy
+ /**
+ Copies the buffer.
+ */
void Copy(const wxRichTextBuffer& obj);
- /// Assignment
+ /**
+ Assignment operator.
+ */
void operator= (const wxRichTextBuffer& obj) { Copy(obj); }
- /// Clone
+ /**
+ Clones the buffer.
+ */
virtual wxRichTextObject* Clone() const { return new wxRichTextBuffer(*this); }
- /// Submit command to insert paragraphs
+ /**
+ Submits a command to insert paragraphs.
+ */
bool InsertParagraphsWithUndo(long pos, const wxRichTextParagraphLayoutBox& paragraphs, wxRichTextCtrl* ctrl, int flags = 0);
- /// Submit command to insert the given text
+ /**
+ Submits a command to insert the given text.
+ */
bool InsertTextWithUndo(long pos, const wxString& text, wxRichTextCtrl* ctrl, int flags = 0);
- /// Submit command to insert a newline
+ /**
+ Submits a command to insert a newline.
+ */
bool InsertNewlineWithUndo(long pos, wxRichTextCtrl* ctrl, int flags = 0);
- /// Submit command to insert the given image
+ /**
+ Submits a command to insert the given image.
+ */
bool InsertImageWithUndo(long pos, const wxRichTextImageBlock& imageBlock, wxRichTextCtrl* ctrl, int flags = 0,
const wxRichTextAttr& textAttr = wxRichTextAttr());
- /// Submit command to insert an object
+ /**
+ Submits a command to insert an object.
+ */
wxRichTextObject* InsertObjectWithUndo(long pos, wxRichTextObject *object, wxRichTextCtrl* ctrl, int flags);
- /// Submit command to delete this range
+ /**
+ Submits a command to delete this range.
+ */
bool DeleteRangeWithUndo(const wxRichTextRange& range, wxRichTextCtrl* ctrl);
- /// Mark modified
+ /**
+ Mark modified.
+ */
void Modify(bool modify = true) { m_modified = modify; }
+
+ /**
+ Returns @true if the buffer was modified.
+ */
bool IsModified() const { return m_modified; }
- /// Dumps contents of buffer for debugging purposes
+ //@{
+ /**
+ Dumps contents of buffer for debugging purposes.
+ */
virtual void Dump();
virtual void Dump(wxTextOutputStream& stream) { wxRichTextParagraphLayoutBox::Dump(stream); }
+ //@}
- /// Returns the file handlers
+ /**
+ Returns the file handlers.
+ */
static wxList& GetHandlers() { return sm_handlers; }
- /// Adds a handler to the end
+ /**
+ Adds a file handler to the end.
+ */
static void AddHandler(wxRichTextFileHandler *handler);
- /// Inserts a handler at the front
+ /**
+ Inserts a file handler at the front.
+ */
static void InsertHandler(wxRichTextFileHandler *handler);
- /// Removes a handler
+ /**
+ Removes a file handler.
+ */
static bool RemoveHandler(const wxString& name);
- /// Finds a handler by name
+ /**
+ Finds a file handler by name.
+ */
static wxRichTextFileHandler *FindHandler(const wxString& name);
- /// Finds a handler by extension and type
+ /**
+ Finds a file handler by extension and type.
+ */
static wxRichTextFileHandler *FindHandler(const wxString& extension, wxRichTextFileType imageType);
- /// Finds a handler by filename or, if supplied, type
+ /**
+ Finds a handler by filename or, if supplied, type.
+ */
static wxRichTextFileHandler *FindHandlerFilenameOrType(const wxString& filename,
wxRichTextFileType imageType);
- /// Finds a handler by type
+ /**
+ Finds a handler by type.
+ */
static wxRichTextFileHandler *FindHandler(wxRichTextFileType imageType);
- /// 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.
+ /**
+ Gets a wildcard incorporating all visible handlers. If @a types is present,
+ it 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
+ /**
+ Clean up file handlers.
+ */
static void CleanUpHandlers();
- /// Initialise the standard handlers
+ /**
+ Initialise the standard file handlers.
+ Currently, only the plain text loading/saving handler is initialised by default.
+ */
static void InitStandardHandlers();
- /// Get renderer
+ /**
+ Returns the renderer object.
+ */
static wxRichTextRenderer* GetRenderer() { return sm_renderer; }
- /// Set renderer, deleting old one
+ /**
+ Sets @a renderer as the object to be used to render certain aspects of the
+ content, such as bullets.
+
+ You can override default rendering by deriving a new class from
+ wxRichTextRenderer or wxRichTextStdRenderer, overriding one or more
+ virtual functions, and setting an instance of the class using this function.
+ */
static void SetRenderer(wxRichTextRenderer* renderer);
- /// Minimum margin between bullet and paragraph in 10ths of a mm
+ /**
+ Returns the minimum margin between bullet and paragraph in 10ths of a mm.
+ */
static int GetBulletRightMargin() { return sm_bulletRightMargin; }
+
+ /**
+ Sets the minimum margin between bullet and paragraph in 10ths of a mm.
+ */
static void SetBulletRightMargin(int margin) { sm_bulletRightMargin = margin; }
- /// Factor to multiply by character height to get a reasonable bullet size
+ /**
+ Returns the factor to multiply by character height to get a reasonable bullet size.
+ */
static float GetBulletProportion() { return sm_bulletProportion; }
+
+ /**
+ Sets the factor to multiply by character height to get a reasonable bullet size.
+ */
static void SetBulletProportion(float prop) { sm_bulletProportion = prop; }
- /// Scale factor for calculating dimensions
+ /**
+ Returns the scale factor for calculating dimensions.
+ */
double GetScale() const { return m_scale; }
+
+ /**
+ Sets the scale factor for calculating dimensions.
+ */
void SetScale(double scale) { m_scale = scale; }
protected:
// Accessors
+ /**
+ Returns the cells array.
+ */
const wxRichTextObjectPtrArrayArray& GetCells() const { return m_cells; }
+
+ /**
+ Returns the cells array.
+ */
wxRichTextObjectPtrArrayArray& GetCells() { return m_cells; }
+ /**
+ Returns the row count.
+ */
int GetRowCount() const { return m_rowCount; }
+
+ /**
+ Returns the column count.
+ */
int GetColumnCount() const { return m_colCount; }
- /// Get the cell at the given row/column position
+ /**
+ Returns the cell at the given row/column position.
+ */
virtual wxRichTextCell* GetCell(int row, int col) const;
- /// Get the cell at the given character position (in the range of the table).
+ /**
+ Returns the cell at the given character position (in the range of the table).
+ */
virtual wxRichTextCell* GetCell(long pos) const;
- /// Get the row/column for a given character position
+ /**
+ Returns the row/column for a given character position.
+ */
virtual bool GetCellRowColumnPosition(long pos, int& row, int& col) const;
// Operations
};
-/*!
- * The command identifiers
- *
- */
+/**
+ The command identifiers for Do/Undo.
+*/
enum wxRichTextCommandId
{
class WXDLLIMPEXP_RICHTEXT wxRichTextObjectAddress
{
public:
- // Creates the address given container and object.
+ /**
+ Creates the address given a container and an object.
+ */
wxRichTextObjectAddress(wxRichTextParagraphLayoutBox* topLevelContainer, wxRichTextObject* obj) { Create(topLevelContainer, obj); }
+ /**
+ */
wxRichTextObjectAddress() { Init(); }
+ /**
+ */
wxRichTextObjectAddress(const wxRichTextObjectAddress& address) { Copy(address); }
void Init() {}
+
+ /**
+ Copies the address.
+ */
void Copy(const wxRichTextObjectAddress& address) { m_address = address.m_address; }
+
+ /**
+ Assignment operator.
+ */
void operator=(const wxRichTextObjectAddress& address) { Copy(address); }
+ /**
+ Returns the object specified by the address, given a top level container.
+ */
wxRichTextObject* GetObject(wxRichTextParagraphLayoutBox* topLevelContainer) const;
+
+ /**
+ Creates the address given a container and an object.
+ */
bool Create(wxRichTextParagraphLayoutBox* topLevelContainer, wxRichTextObject* obj);
+ /**
+ Returns the array of integers representing the object address.
+ */
wxArrayInt& GetAddress() { return m_address; }
+
+ /**
+ Returns the array of integers representing the object address.
+ */
const wxArrayInt& GetAddress() const { return m_address; }
+
+ /**
+ Sets the address from an array of integers.
+ */
void SetAddress(const wxArrayInt& address) { m_address = address; }
protected:
class WXDLLIMPEXP_RICHTEXT wxRichTextCommand: public wxCommand
{
public:
- // Ctor for one action
+ /**
+ Constructor for one action.
+ */
wxRichTextCommand(const wxString& name, wxRichTextCommandId id, wxRichTextBuffer* buffer,
wxRichTextParagraphLayoutBox* container, wxRichTextCtrl* ctrl, bool ignoreFirstTime = false);
- // Ctor for multiple actions
+ /**
+ Constructor for multiple actions.
+ */
wxRichTextCommand(const wxString& name);
virtual ~wxRichTextCommand();
+ /**
+ Performs the command.
+ */
bool Do();
+
+ /**
+ Undoes the command.
+ */
bool Undo();
+ /**
+ Adds an action to the action list.
+ */
void AddAction(wxRichTextAction* action);
+
+ /**
+ Clears the action list.
+ */
void ClearActions();
+ /**
+ Returns the action list.
+ */
wxList& GetActions() { return m_actions; }
protected:
class WXDLLIMPEXP_RICHTEXT wxRichTextAction: public wxObject
{
public:
- /// Constructor. 'buffer' is the top-level buffer, while 'container' is the object within
- /// which the action is taking place. In the simplest case, they are the same.
+ /**
+ Constructor. @a buffer is the top-level buffer, while @a container is the object within
+ which the action is taking place. In the simplest case, they are the same.
+ */
wxRichTextAction(wxRichTextCommand* cmd, const wxString& name, wxRichTextCommandId id,
wxRichTextBuffer* buffer, wxRichTextParagraphLayoutBox* container,
wxRichTextCtrl* ctrl, bool ignoreFirstTime = false);
virtual ~wxRichTextAction();
+ /**
+ Performs the action.
+ */
bool Do();
+
+ /**
+ Undoes the action.
+ */
bool Undo();
- /// Update the control appearance
+ /**
+ Updates the control appearance, optimizing if possible given information from the call to Layout.
+ */
void UpdateAppearance(long caretPosition, bool sendUpdateEvent = false,
wxArrayInt* optimizationLineCharPositions = NULL, wxArrayInt* optimizationLineYPositions = NULL, bool isDoCmd = true);
- /// Replace the buffer paragraphs with the given fragment.
+ /**
+ Replaces the buffer paragraphs with the given fragment.
+ */
void ApplyParagraphs(const wxRichTextParagraphLayoutBox& fragment);
- /// Get the fragments
+ /**
+ Returns the new fragments.
+ */
wxRichTextParagraphLayoutBox& GetNewParagraphs() { return m_newParagraphs; }
+
+ /**
+ Returns the old fragments.
+ */
wxRichTextParagraphLayoutBox& GetOldParagraphs() { return m_oldParagraphs; }
- /// Get the attributes
+ /**
+ Returns the attributes, for single-object commands.
+ */
wxRichTextAttr& GetAttributes() { return m_attributes; }
- /// An object to replace the one at the position
- /// defined by the container address and the action's range start position.
+ /**
+ Returns the object to replace the one at the position defined by the container address
+ and the action's range start position.
+ */
wxRichTextObject* GetObject() const { return m_object; }
+
+ /**
+ Sets the object to replace the one at the position defined by the container address
+ and the action's range start position.
+ */
void SetObject(wxRichTextObject* obj) { m_object = obj; m_objectAddress.Create(m_buffer, m_object); }
+
+ /**
+ Makes an address from the given object.
+ */
void MakeObject(wxRichTextObject* obj) { m_objectAddress.Create(m_buffer, obj); }
- /// Calculate arrays for refresh optimization
+ /**
+ Calculate arrays for refresh optimization.
+ */
void CalculateRefreshOptimizations(wxArrayInt& optimizationLineCharPositions, wxArrayInt& optimizationLineYPositions);
- /// Set/get the position used for e.g. insertion
+ /**
+ Sets the position used for e.g. insertion.
+ */
void SetPosition(long pos) { m_position = pos; }
+
+ /**
+ Returns the position used for e.g. insertion.
+ */
long GetPosition() const { return m_position; }
- /// Set/get the range for e.g. deletion
+ /**
+ Sets the range for e.g. deletion.
+ */
void SetRange(const wxRichTextRange& range) { m_range = range; }
+
+ /**
+ Returns the range for e.g. deletion.
+ */
const wxRichTextRange& GetRange() const { return m_range; }
- /// The address (nested position) of the container within the buffer being manipulated
+ /**
+ Returns the address (nested position) of the container within the buffer being manipulated.
+ */
wxRichTextObjectAddress& GetContainerAddress() { return m_containerAddress; }
+
+ /**
+ Returns the address (nested position) of the container within the buffer being manipulated.
+ */
const wxRichTextObjectAddress& GetContainerAddress() const { return m_containerAddress; }
+
+ /**
+ Sets the address (nested position) of the container within the buffer being manipulated.
+ */
void SetContainerAddress(const wxRichTextObjectAddress& address) { m_containerAddress = address; }
+
+ /**
+ Sets the address (nested position) of the container within the buffer being manipulated.
+ */
void SetContainerAddress(wxRichTextParagraphLayoutBox* container, wxRichTextObject* obj) { m_containerAddress.Create(container, obj); }
- /// Returns the container that this action refers to, using the container address and top-level buffer.
+ /**
+ Returns the container that this action refers to, using the container address and top-level buffer.
+ */
wxRichTextParagraphLayoutBox* GetContainer() const;
- /// Get name
+
+ /**
+ Returns the action name.
+ */
const wxString& GetName() const { return m_name; }
protected:
{
DECLARE_CLASS(wxRichTextFileHandler)
public:
+ /**
+ Creates a file handler object.
+ */
wxRichTextFileHandler(const wxString& name = wxEmptyString, const wxString& ext = wxEmptyString, int type = 0)
: 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.
+ */
bool LoadFile(wxRichTextBuffer *buffer, wxInputStream& stream)
{ return DoLoadFile(buffer, stream); }
+
+ /**
+ Saves the buffer to a stream.
+ Not all handlers will implement file saving.
+ */
bool SaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream)
{ return DoSaveFile(buffer, stream); }
#endif
#if wxUSE_FFILE && wxUSE_STREAMS
+ /**
+ Loads the buffer from a file.
+ */
virtual bool LoadFile(wxRichTextBuffer *buffer, const wxString& filename);
+
+ /**
+ Saves the buffer to a file.
+ */
virtual bool SaveFile(wxRichTextBuffer *buffer, const wxString& filename);
#endif // wxUSE_STREAMS && wxUSE_STREAMS
- /// Can we handle this filename (if using files)? By default, checks the extension.
+ /**
+ Returns @true if we handle this filename (if using files). By default, checks the extension.
+ */
virtual bool CanHandle(const wxString& filename) const;
- /// Can we save using this handler?
+ /**
+ Returns @true if we can save using this handler.
+ */
virtual bool CanSave() const { return false; }
- /// Can we load using this handler?
+ /**
+ Returns @true if we can load using this handler.
+ */
virtual bool CanLoad() const { return false; }
- /// Should this handler be visible to the user?
+ /**
+ Returns @true if this handler should be visible to the user.
+ */
virtual bool IsVisible() const { return m_visible; }
+
+ /**
+ Sets whether the handler should be visible to the user (via the application's
+ load and save dialogs).
+ */
virtual void SetVisible(bool visible) { m_visible = visible; }
- /// The name of the nandler
+ /**
+ Sets the name of the nandler.
+ */
void SetName(const wxString& name) { m_name = name; }
+
+ /**
+ Returns the name of the nandler.
+ */
wxString GetName() const { return m_name; }
- /// The default extension to recognise
+ /**
+ Sets the default extension to recognise.
+ */
void SetExtension(const wxString& ext) { m_extension = ext; }
+
+ /**
+ Returns the default extension to recognise.
+ */
wxString GetExtension() const { return m_extension; }
- /// The handler type
+ /**
+ Sets the handler type.
+ */
void SetType(int type) { m_type = type; }
+
+ /**
+ Returns the handler type.
+ */
int GetType() const { return m_type; }
- /// Flags controlling how loading and saving is done
+ /**
+ Sets flags that change the behaviour of loading or saving.
+ See the documentation for each handler class to see what flags are relevant
+ for each handler.
+
+ You call this function directly if you are using a file handler explicitly
+ (without going through the text control or buffer LoadFile/SaveFile API).
+ Or, you can call the control or buffer's SetHandlerFlags function to set
+ the flags that will be used for subsequent load and save operations.
+ */
void SetFlags(int flags) { m_flags = flags; }
+
+ /**
+ Returns flags controlling how loading and saving is done.
+ */
int GetFlags() const { return m_flags; }
- /// Encoding to use when saving a file. If empty, a suitable encoding is chosen
+ /**
+ Sets the encoding to use when saving a file. If empty, a suitable encoding is chosen.
+ */
void SetEncoding(const wxString& encoding) { m_encoding = encoding; }
+
+ /**
+ Returns the encoding to use when saving a file. If empty, a suitable encoding is chosen.
+ */
const wxString& GetEncoding() const { return m_encoding; }
protected:
#if wxUSE_STREAMS
+ /**
+ Override to load content from @a stream into @a buffer.
+ */
virtual bool DoLoadFile(wxRichTextBuffer *buffer, wxInputStream& stream) = 0;
+
+ /**
+ Override to save content to @a stream from @a buffer.
+ */
virtual bool DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream) = 0;
#endif
: wxRichTextFileHandler(name, ext, type)
{ }
- /// Can we save using this handler?
+ // Can we save using this handler?
virtual bool CanSave() const { return true; }
- /// Can we load using this handler?
+ // Can we load using this handler?
virtual bool CanLoad() const { return true; }
protected:
class WXDLLIMPEXP_RICHTEXT wxRichTextBufferDataObject: public wxDataObjectSimple
{
public:
- // ctor doesn't copy the pointer, so it shouldn't go away while this object
- // is alive
+ /**
+ The constructor doesn't copy the pointer, so it shouldn't go away while this object
+ is alive.
+ */
wxRichTextBufferDataObject(wxRichTextBuffer* richTextBuffer = NULL);
virtual ~wxRichTextBufferDataObject();
- // after a call to this function, the buffer is owned by the caller and it
- // is responsible for deleting it
+ /**
+ After a call to this function, the buffer is owned by the caller and it
+ is responsible for deleting it.
+ */
wxRichTextBuffer* GetRichTextBuffer();
- // Returns the id for the new data format
+ /**
+ Returns the id for the new data format.
+ */
static const wxChar* GetRichTextBufferFormatId() { return ms_richTextBufferFormatId; }
// base class pure virtuals
class WXDLLIMPEXP_RICHTEXT wxRichTextRenderer: public wxObject
{
public:
+ /**
+ Constructor.
+ */
wxRichTextRenderer() {}
virtual ~wxRichTextRenderer() {}
- /// Draw a standard bullet, as specified by the value of GetBulletName
+ /**
+ Draws a standard bullet, as specified by the value of GetBulletName. This function should be overridden.
+ */
virtual bool DrawStandardBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxRichTextAttr& attr, const wxRect& rect) = 0;
- /// Draw a bullet that can be described by text, such as numbered or symbol bullets
+ /**
+ Draws a bullet that can be described by text, such as numbered or symbol bullets. This function should be overridden.
+ */
virtual bool DrawTextBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxRichTextAttr& attr, const wxRect& rect, const wxString& text) = 0;
- /// Draw a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName
+ /**
+ Draws a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName. This function should be overridden.
+ */
virtual bool DrawBitmapBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxRichTextAttr& attr, const wxRect& rect) = 0;
- /// Enumerate the standard bullet names currently supported
+ /**
+ Enumerate the standard bullet names currently supported. This function should be overridden.
+ */
virtual bool EnumerateStandardBulletNames(wxArrayString& bulletNames) = 0;
};
class WXDLLIMPEXP_RICHTEXT wxRichTextStdRenderer: public wxRichTextRenderer
{
public:
+ /**
+ Constructor.
+ */
wxRichTextStdRenderer() {}
- /// Draw a standard bullet, as specified by the value of GetBulletName
+ // Draw a standard bullet, as specified by the value of GetBulletName
virtual bool DrawStandardBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxRichTextAttr& attr, const wxRect& rect);
- /// Draw a bullet that can be described by text, such as numbered or symbol bullets
+ // Draw a bullet that can be described by text, such as numbered or symbol bullets
virtual bool DrawTextBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxRichTextAttr& attr, const wxRect& rect, const wxString& text);
- /// Draw a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName
+ // Draw a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName
virtual bool DrawBitmapBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxRichTextAttr& attr, const wxRect& rect);
- /// Enumerate the standard bullet names currently supported
+ // Enumerate the standard bullet names currently supported
virtual bool EnumerateStandardBulletNames(wxArrayString& bulletNames);
};
class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextStyleDefinition;
-/*!
+/*
* Styles and flags
*/
-/* Styles
- */
+/**
+ Styles
+*/
#define wxRE_READONLY 0x0010
#define wxRE_MULTILINE 0x0020
#define wxRE_CENTRE_CARET 0x8000
#define wxRE_CENTER_CARET wxRE_CENTRE_CARET
-/* Flags
- */
+/**
+ Flags
+*/
#define wxRICHTEXT_SHIFT_DOWN 0x01
#define wxRICHTEXT_CTRL_DOWN 0x02
#define wxRICHTEXT_ALT_DOWN 0x04
-/* Extra flags
- */
+/**
+ Extra flags
+*/
// Don't draw guide lines around boxes and tables
#define wxRICHTEXT_EX_NO_GUIDELINES 0x00000100
-/* Defaults
- */
+/*
+ Defaults
+*/
#define wxRICHTEXT_DEFAULT_OVERALL_SIZE wxSize(-1, -1)
#define wxRICHTEXT_DEFAULT_IMAGE_SIZE wxSize(80, 80)
#define wxID_RICHTEXT_PROPERTIES2 (wxID_HIGHEST + 2)
#define wxID_RICHTEXT_PROPERTIES3 (wxID_HIGHEST + 3)
-/*!
- * Forward declarations
+/*
+ Normal selection occurs initially and as user drags within one container.
+ Common ancestor selection occurs when the user starts dragging across containers
+ that have a common ancestor, for example the cells in a table.
*/
-#if 0
-// Drawing styles/states
-#define wxRICHTEXT_SELECTED 0x01
-#define wxRICHTEXT_TAGGED 0x02
-// The control is focussed
-#define wxRICHTEXT_FOCUSSED 0x04
-// The item itself has the focus
-#define wxRICHTEXT_IS_FOCUS 0x08
-#endif
-
-// Normal selection occurs initially and as user drags within one container.
-// Common ancestor selection occurs when the user starts dragging across containers
-// that have a common ancestor, for example the cells in a table.
enum wxRichTextCtrlSelectionState
{
wxRichTextCtrlSelectionState_Normal,
wxRichTextCtrlSelectionState_CommonAncestor
};
-/*!
- * wxRichTextContextMenuPropertiesInfo keeps track of objects that appear in the context menu,
- * whose properties are available to be edited.
+/**
+ @class wxRichTextContextMenuPropertiesInfo
+
+ wxRichTextContextMenuPropertiesInfo keeps track of objects that appear in the context menu,
+ whose properties are available to be edited.
*/
class WXDLLIMPEXP_RICHTEXT wxRichTextContextMenuPropertiesInfo
{
public:
+ /**
+ Constructor.
+ */
wxRichTextContextMenuPropertiesInfo() { Init(); }
// Operations
- /// Initialisation
+ /**
+ Initialisation.
+ */
void Init() {}
- /// Add an item
+ /**
+ Adds an item.
+ */
bool AddItem(const wxString& label, wxRichTextObject* obj);
- /// Returns number of menu items were added.
+ /**
+ Returns the number of menu items that were added.
+ */
int AddMenuItems(wxMenu* menu, int startCmd = wxID_RICHTEXT_PROPERTIES1) const;
- /// Add appropriate menu items for the current container and clicked on object
- /// (and container's parent, if appropriate).
+ /**
+ Adds appropriate menu items for the current container and clicked on object
+ (and container's parent, if appropriate).
+ */
int AddItems(wxRichTextObject* container, wxRichTextObject* obj);
- /// Clear the items
+ /**
+ Clears the items.
+ */
void Clear() { m_objects.Clear(); m_labels.Clear(); }
// Accessors
- /// Gets the nth label
+
+ /**
+ Returns the nth label.
+ */
wxString GetLabel(int n) const { return m_labels[n]; }
- /// Gets the nth object
+ /**
+ Returns the nth object.
+ */
wxRichTextObject* GetObject(int n) const { return m_objects[n]; }
- /// Get objects
+ /**
+ Returns the array of objects.
+ */
wxRichTextObjectPtrArray& GetObjects() { return m_objects; }
+
+ /**
+ Returns the array of objects.
+ */
const wxRichTextObjectPtrArray& GetObjects() const { return m_objects; }
- /// Get labels
+ /**
+ Returns the array of labels.
+ */
wxArrayString& GetLabels() { return m_labels; }
+
+ /**
+ Returns the array of labels.
+ */
const wxArrayString& GetLabels() const { return m_labels; }
- /// Get number of items
+ /**
+ Returns the number of items.
+ */
int GetCount() const { return m_objects.GetCount(); }
- //wxArrayInt m_ids;
wxRichTextObjectPtrArray m_objects;
wxArrayString m_labels;
};
-/*!
- * wxRichTextCtrl class declaration
+/**
+ @class wxRichTextCtrl
+
+ wxRichTextCtrl provides a generic, ground-up implementation of a text control
+ capable of showing multiple styles and images.
+
+ wxRichTextCtrl sends notification events: see wxRichTextEvent.
+
+ It also sends the standard wxTextCtrl events @c wxEVT_COMMAND_TEXT_ENTER and
+ @c wxEVT_COMMAND_TEXT_UPDATED, and wxTextUrlEvent when URL content is clicked.
+
+ For more information, see the @ref overview_richtextctrl.
+
+ @beginStyleTable
+ @style{wxRE_CENTRE_CARET}
+ The control will try to keep the caret line centred vertically while editing.
+ wxRE_CENTER_CARET is a synonym for this style.
+ @style{wxRE_MULTILINE}
+ The control will be multiline (mandatory).
+ @style{wxRE_READONLY}
+ The control will not be editable.
+ @endStyleTable
+
+ @library{wxrichtext}
+ @category{richtext}
+ @appearance{richtextctrl.png}
+
*/
class WXDLLIMPEXP_RICHTEXT wxRichTextCtrl : public wxControl,
public:
// Constructors
+ /**
+ Default constructor.
+ */
wxRichTextCtrl( );
+
+ /**
+ Constructor, creating and showing a rich text control.
+
+ @param parent
+ Parent window. Must not be @NULL.
+ @param id
+ Window identifier. The value @c wxID_ANY indicates a default value.
+ @param value
+ Default string.
+ @param pos
+ Window position.
+ @param size
+ Window size.
+ @param style
+ Window style.
+ @param validator
+ Window validator.
+ @param name
+ Window name.
+
+ @see Create(), wxValidator
+ */
wxRichTextCtrl( wxWindow* parent, wxWindowID id = -1, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxRE_MULTILINE, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxTextCtrlNameStr);
+ /**
+ Destructor.
+ */
virtual ~wxRichTextCtrl( );
// Operations
- /// Creation
+ /**
+ Creates the underlying window.
+ */
bool Create( wxWindow* parent, wxWindowID id = -1, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxRE_MULTILINE, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxTextCtrlNameStr );
- /// Member initialisation
+ /**
+ Initialises the members of the control.
+ */
void Init();
-///// wxTextCtrl compatibility
-
// Accessors
+ /**
+ Gets the text for the given range.
+ The end point of range is specified as the last character position of
+ the span of text, plus one.
+ */
virtual wxString GetRange(long from, long to) const;
+ /**
+ Returns the length of the specified line in characters.
+ */
virtual int GetLineLength(long lineNo) const ;
+
+ /**
+ Returns the text for the given line.
+ */
virtual wxString GetLineText(long lineNo) const ;
+
+ /**
+ Returns the number of lines in the buffer.
+ */
virtual int GetNumberOfLines() const ;
+ /**
+ Returns @true if the buffer has been modified.
+ */
virtual bool IsModified() const ;
+
+ /**
+ Returns @true if the control is editable.
+ */
virtual bool IsEditable() const ;
- // more readable flag testing methods
+ /**
+ Returns @true if the control is single-line.
+ Currently wxRichTextCtrl does not support single-line editing.
+ */
bool IsSingleLine() const { return !HasFlag(wxRE_MULTILINE); }
+
+ /**
+ Returns @true if the control is multiline.
+ */
bool IsMultiLine() const { return !IsSingleLine(); }
- // If the return values from and to are the same, there is no selection.
+ //@{
+ /**
+ Returns the range of the current selection.
+ The end point of range is specified as the last character position of the span
+ of text, plus one.
+ If the return values @a from and @a to are the same, there is no selection.
+ */
virtual void GetSelection(long* from, long* to) const;
-
- virtual wxString GetStringSelection() const;
-
const wxRichTextSelection& GetSelection() const { return m_selection; }
wxRichTextSelection& GetSelection() { return m_selection; }
- void SetSelection(const wxRichTextSelection& sel) { m_selection = sel; }
+ //@}
+ /**
+ Returns the text within the current selection range, if any.
+ */
+ virtual wxString GetStringSelection() const;
- /// Get filename
+ /**
+ Gets the current filename associated with the control.
+ */
wxString GetFilename() const { return m_filename; }
- /// Set filename
+ /**
+ Sets the current filename.
+ */
void SetFilename(const wxString& filename) { m_filename = filename; }
- /// Set the threshold in character positions for doing layout optimization during sizing
+ /**
+ Sets the size of the buffer beyond which layout is delayed during resizing.
+ This optimizes sizing for large buffers. The default is 20000.
+ */
void SetDelayedLayoutThreshold(long threshold) { m_delayedLayoutThreshold = threshold; }
- /// Get the threshold in character positions for doing layout optimization during sizing
+ /**
+ Gets the size of the buffer beyond which layout is delayed during resizing.
+ This optimizes sizing for large buffers. The default is 20000.
+ */
long GetDelayedLayoutThreshold() const { return m_delayedLayoutThreshold; }
+ /**
+ */
bool GetFullLayoutRequired() const { return m_fullLayoutRequired; }
+
+ /**
+ */
void SetFullLayoutRequired(bool b) { m_fullLayoutRequired = b; }
+ /**
+ */
wxLongLong GetFullLayoutTime() const { return m_fullLayoutTime; }
+
+ /**
+ */
void SetFullLayoutTime(wxLongLong t) { m_fullLayoutTime = t; }
+ /**
+ */
long GetFullLayoutSavedPosition() const { return m_fullLayoutSavedPosition; }
+
+ /**
+ */
void SetFullLayoutSavedPosition(long p) { m_fullLayoutSavedPosition = p; }
// Force any pending layout due to large buffer
+ /**
+ */
void ForceDelayedLayout();
- /// Set text cursor
+ /**
+ Sets the text (normal) cursor.
+ */
void SetTextCursor(const wxCursor& cursor ) { m_textCursor = cursor; }
- /// Get text cursor
+ /**
+ Returns the text (normal) cursor.
+ */
wxCursor GetTextCursor() const { return m_textCursor; }
- /// Set URL cursor
+ /**
+ Sets the cursor to be used over URLs.
+ */
void SetURLCursor(const wxCursor& cursor ) { m_urlCursor = cursor; }
- /// Get URL cursor
+ /**
+ Returns the cursor to be used over URLs.
+ */
wxCursor GetURLCursor() const { return m_urlCursor; }
- /// Are we showing the caret position at the start of a line
- /// instead of at the end of the previous one?
+ /**
+ Returns @true if we are showing the caret position at the start of a line
+ instead of at the end of the previous one.
+ */
bool GetCaretAtLineStart() const { return m_caretAtLineStart; }
+
+ /**
+ Sets a flag to remember that we are showing the caret position at the start of a line
+ instead of at the end of the previous one.
+ */
void SetCaretAtLineStart(bool atStart) { m_caretAtLineStart = atStart; }
- /// Are we dragging a selection?
+ /**
+ Returns @true if we are dragging a selection.
+ */
bool GetDragging() const { return m_dragging; }
+
+ /**
+ Sets a flag to remember if we are dragging a selection.
+ */
void SetDragging(bool dragging) { m_dragging = dragging; }
- /// Get/set drag start position
+ /**
+ Returns the drag start position.
+ */
const wxPoint& GetDragStart() const { return m_dragStart; }
+
+ /**
+ Sets the drag start position.
+ */
void SetDragStart(const wxPoint& pt) { m_dragStart = pt; }
#if wxRICHTEXT_BUFFERED_PAINTING
- /// Get the buffer bitmap
+ //@{
+ /**
+ Returns the buffer bitmap if using buffered painting.
+ */
const wxBitmap& GetBufferBitmap() const { return m_bufferBitmap; }
wxBitmap& GetBufferBitmap() { return m_bufferBitmap; }
+ //@}
#endif
- /// Get/set context menu
+ /**
+ Returns the current context menu.
+ */
wxMenu* GetContextMenu() const { return m_contextMenu; }
+
+ /**
+ Sets the current context menu.
+ */
void SetContextMenu(wxMenu* menu);
- /// Anchor so we know how to extend the selection
- /// It's a caret position since it's between two characters.
+ /**
+ Returns an anchor so we know how to extend the selection.
+ It's a caret position since it's between two characters.
+ */
long GetSelectionAnchor() const { return m_selectionAnchor; }
+
+ /**
+ Sets an anchor so we know how to extend the selection.
+ It's a caret position since it's between two characters.
+ */
void SetSelectionAnchor(long anchor) { m_selectionAnchor = anchor; }
- /// Anchor object if selecting multiple containers.
+ /**
+ Returns the anchor object if selecting multiple containers.
+ */
wxRichTextObject* GetSelectionAnchorObject() const { return m_selectionAnchorObject; }
+
+ /**
+ Sets the anchor object if selecting multiple containers.
+ */
void SetSelectionAnchorObject(wxRichTextObject* anchor) { m_selectionAnchorObject = anchor; }
+ //@{
+ /**
+ Returns an object that stores information about context menu property item(s),
+ in order to communicate between the context menu event handler and the code
+ that responds to it. The wxRichTextContextMenuPropertiesInfo stores one
+ item for each object that could respond to a property-editing event. If
+ objects are nested, several might be editable.
+ */
wxRichTextContextMenuPropertiesInfo& GetContextMenuPropertiesInfo() { return m_contextMenuPropertiesInfo; }
const wxRichTextContextMenuPropertiesInfo& GetContextMenuPropertiesInfo() const { return m_contextMenuPropertiesInfo; }
+ //@}
- /// The wxRichTextObject object that currently has the editing focus
+ /**
+ Returns the wxRichTextObject object that currently has the editing focus.
+ If there are no composite objects, this will be the top-level buffer.
+ */
wxRichTextParagraphLayoutBox* GetFocusObject() const { return m_focusObject; }
+
+ /**
+ Sets the wxRichTextObject object that currently has the editing focus.
+ */
bool SetFocusObject(wxRichTextParagraphLayoutBox* obj, bool setCaretPosition = true);
// Operations
+ /**
+ Invalidates the whole buffer to trigger painting later.
+ */
void Invalidate() { GetBuffer().Invalidate(wxRICHTEXT_ALL); }
- // editing
+ /**
+ Clears the buffer content, leaving a single empty paragraph. Cannot be undone.
+ */
virtual void Clear();
+
+ /**
+ Replaces the content in the specified range with the string specified by
+ @a value.
+ */
virtual void Replace(long from, long to, const wxString& value);
+
+ /**
+ Removes the content in the specified range.
+ */
virtual void Remove(long from, long to);
- // load/save the controls contents from/to the file
+#ifdef DOXYGEN
+ /**
+ Loads content into the control's buffer using the given type.
+
+ If the specified type is wxRICHTEXT_TYPE_ANY, the type is deduced from
+ the filename extension.
+
+ This function looks for a suitable wxRichTextFileHandler object.
+ */
+ bool LoadFile(const wxString& file,
+ int type = wxRICHTEXT_TYPE_ANY);
+#endif
+
+ /**
+ Helper function for LoadFile(). Loads content into the control's buffer using the given type.
+
+ If the specified type is wxRICHTEXT_TYPE_ANY, the type is deduced from
+ the filename extension.
+
+ This function looks for a suitable wxRichTextFileHandler object.
+ */
virtual bool DoLoadFile(const wxString& file, int fileType);
+
+#ifdef DOXYGEN
+ /**
+ Saves the buffer content using the given type.
+
+ If the specified type is wxRICHTEXT_TYPE_ANY, the type is deduced from
+ the filename extension.
+
+ This function looks for a suitable wxRichTextFileHandler object.
+ */
+ bool SaveFile(const wxString& file = wxEmptyString,
+ int type = wxRICHTEXT_TYPE_ANY);
+#endif
+
+ /**
+ Helper function for SaveFile(). Saves the buffer content using the given type.
+
+ If the specified type is wxRICHTEXT_TYPE_ANY, the type is deduced from
+ the filename extension.
+
+ This function looks for a suitable wxRichTextFileHandler object.
+ */
virtual bool DoSaveFile(const wxString& file = wxEmptyString,
int fileType = wxRICHTEXT_TYPE_ANY);
- /// Set the handler flags, controlling loading and saving
+ /**
+ Sets flags that change the behaviour of loading or saving.
+
+ See the documentation for each handler class to see what flags are
+ relevant for each handler.
+ */
void SetHandlerFlags(int flags) { GetBuffer().SetHandlerFlags(flags); }
- /// Get the handler flags, controlling loading and saving
+ /**
+ Returns flags that change the behaviour of loading or saving.
+ See the documentation for each handler class to see what flags are
+ relevant for each handler.
+ */
int GetHandlerFlags() const { return GetBuffer().GetHandlerFlags(); }
- // sets/clears the dirty flag
+ /**
+ Marks the buffer as modified.
+ */
virtual void MarkDirty();
+
+ /**
+ Sets the buffer's modified status to @false, and clears the buffer's command
+ history.
+ */
virtual void DiscardEdits();
- // set the max number of characters which may be entered in a single line
- // text control
+ /**
+ Sets the maximum number of characters that may be entered in a single line
+ text control. For compatibility only; currently does nothing.
+ */
virtual void SetMaxLength(unsigned long WXUNUSED(len)) { }
- // writing text inserts it at the current position, appending always
- // inserts it at the end
+ /**
+ Writes text at the current position.
+ */
virtual void WriteText(const wxString& text);
+
+ /**
+ Sets the insertion point to the end of the buffer and writes the text.
+ */
virtual void AppendText(const wxString& text);
- // text control under some platforms supports the text styles: these
- // methods allow to apply the given text style to the given selection or to
- // set/get the style which will be used for all appended text
+ //@{
+ /**
+ Gets the attributes at the given position.
+ This function gets the combined style - that is, the style you see on the
+ screen as a result of combining base style, paragraph style and character
+ style attributes.
+
+ To get the character or paragraph style alone, use GetUncombinedStyle().
+
+ @beginWxPerlOnly
+ In wxPerl this method is implemented as GetStyle(@a position)
+ returning a 2-element list (ok, attr).
+ @endWxPerlOnly
+ */
+ virtual bool GetStyle(long position, wxTextAttr& style);
+ virtual bool GetStyle(long position, wxRichTextAttr& style);
+ virtual bool GetStyle(long position, wxRichTextAttr& style, wxRichTextParagraphLayoutBox* container);
+ //@}
+
+ //@{
+ /**
+ Sets the attributes for the given range.
+ The end point of range is specified as the last character position of the span
+ of text, plus one.
+
+ So, for example, to set the style for a character at position 5, use the range
+ (5,6).
+ */
virtual bool SetStyle(long start, long end, const wxTextAttr& style);
virtual bool SetStyle(long start, long end, const wxRichTextAttr& style);
virtual bool SetStyle(const wxRichTextRange& range, const wxTextAttr& style);
virtual bool SetStyle(const wxRichTextRange& range, const wxRichTextAttr& style);
- virtual bool GetStyle(long position, wxTextAttr& style);
- virtual bool GetStyle(long position, wxRichTextAttr& style);
- virtual bool GetStyle(long position, wxRichTextAttr& style, wxRichTextParagraphLayoutBox* container);
+ //@}
- // Set the style for a single object
+ /**
+ Sets the attributes for a single object
+ */
virtual void SetStyle(wxRichTextObject *obj, const wxRichTextAttr& textAttr);
- // get the common set of styles for the range
+ //@{
+ /**
+ Gets the attributes common to the specified range.
+ Attributes that differ in value within the range will not be included
+ in @a style flags.
+
+ @beginWxPerlOnly
+ In wxPerl this method is implemented as GetStyleForRange(@a position)
+ returning a 2-element list (ok, attr).
+ @endWxPerlOnly
+ */
virtual bool GetStyleForRange(const wxRichTextRange& range, wxTextAttr& style);
virtual bool GetStyleForRange(const wxRichTextRange& range, wxRichTextAttr& style);
virtual bool GetStyleForRange(const wxRichTextRange& range, wxRichTextAttr& style, wxRichTextParagraphLayoutBox* container);
- // extended style setting operation with flags including:
- // wxRICHTEXT_SETSTYLE_WITH_UNDO, wxRICHTEXT_SETSTYLE_OPTIMIZE, wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY, wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY
- // see richtextbuffer.h for more details.
+ //@}
+
+ /**
+ Sets the attributes for the given range, passing flags to determine how the
+ attributes are set.
+
+ The end point of range is specified as the last character position of the span
+ of text, plus one. So, for example, to set the style for a character at
+ position 5, use the range (5,6).
+
+ @a flags may contain a bit list of the following values:
+ - wxRICHTEXT_SETSTYLE_NONE: no style flag.
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
+ undoable.
+ - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
+ if the combined style at this point is already the style in question.
+ - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
+ applied to paragraphs, and not the content.
+ This allows content styling to be preserved independently from that
+ of e.g. a named paragraph style.
+ - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
+ applied to characters, and not the paragraph.
+ This allows content styling to be preserved independently from that
+ of e.g. a named paragraph style.
+ - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
+ the new style.
+ - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style. Only the style flags
+ are used in this operation.
+ */
virtual bool SetStyleEx(const wxRichTextRange& range, const wxRichTextAttr& style, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
- /// Get the content (uncombined) attributes for this position.
+ //@{
+ /**
+ Gets the attributes at the given position.
+ This function gets the @e uncombined style - that is, the attributes associated
+ with the paragraph or character content, and not necessarily the combined
+ attributes you see on the screen.
+ To get the combined attributes, use GetStyle().
+
+ If you specify (any) paragraph attribute in @e style's flags, this function
+ will fetch the paragraph attributes.
+ Otherwise, it will return the character attributes.
+
+ @beginWxPerlOnly
+ In wxPerl this method is implemented as GetUncombinedStyle(@a position)
+ returning a 2-element list (ok, attr).
+ @endWxPerlOnly
+ */
virtual bool GetUncombinedStyle(long position, wxRichTextAttr& style);
virtual bool GetUncombinedStyle(long position, wxRichTextAttr& style, wxRichTextParagraphLayoutBox* container);
+ //@}
+ //@{
+ /**
+ Sets the current default style, which can be used to change how subsequently
+ inserted text is displayed.
+ */
virtual bool SetDefaultStyle(const wxTextAttr& style);
virtual bool SetDefaultStyle(const wxRichTextAttr& style);
+ //@}
+ /**
+ Returns the current default style, which can be used to change how subsequently
+ inserted text is displayed.
+ */
virtual const wxRichTextAttr& GetDefaultStyleEx() const;
//virtual const wxTextAttr& GetDefaultStyle() const;
- /// Set list style
+ //@{
+ /**
+ Sets the list attributes for the given range, passing flags to determine how
+ the attributes are set.
+
+ Either the style definition or the name of the style definition (in the current
+ sheet) can be passed.
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+ - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
+ @a startFrom, otherwise existing attributes are used.
+ - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
+ as the level for all paragraphs, otherwise the current indentation will be used.
+
+ @see NumberList(), PromoteList(), ClearListStyle().
+ */
virtual bool SetListStyle(const wxRichTextRange& range, wxRichTextListStyleDefinition* def, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
virtual bool SetListStyle(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+ //@}
- /// Clear list for given range
+ /**
+ Clears the list style from the given range, clearing list-related attributes
+ and applying any named paragraph style associated with each paragraph.
+
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+
+ @see SetListStyle(), PromoteList(), NumberList().
+ */
virtual bool ClearListStyle(const wxRichTextRange& range, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
- /// Number/renumber any list elements in the given range
- /// def/defName can be NULL/empty to indicate that the existing list style should be used.
+ //@{
+ /**
+ Numbers the paragraphs in the given range.
+ Pass flags to determine how the attributes are set.
+
+ Either the style definition or the name of the style definition (in the current
+ sheet) can be passed.
+
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+ - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
+ @a startFrom, otherwise existing attributes are used.
+ - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
+ as the level for all paragraphs, otherwise the current indentation will be used.
+
+ @see SetListStyle(), PromoteList(), ClearListStyle().
+ */
virtual bool NumberList(const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
virtual bool NumberList(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
-
- /// Promote the list items within the given range. promoteBy can be a positive or negative number, e.g. 1 or -1
- /// def/defName can be NULL/empty to indicate that the existing list style should be used.
+ //@}
+
+ //@{
+ /**
+ Promotes or demotes the paragraphs in the given range.
+ A positive @a promoteBy produces a smaller indent, and a negative number
+ produces a larger indent. Pass flags to determine how the attributes are set.
+ Either the style definition or the name of the style definition (in the current
+ sheet) can be passed.
+
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+ - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
+ @a startFrom, otherwise existing attributes are used.
+ - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
+ as the level for all paragraphs, otherwise the current indentation will be used.
+
+ @see SetListStyle(), @see SetListStyle(), ClearListStyle().
+ */
virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1);
virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1);
+ //@}
- /// Deletes the content in the given range
+ /**
+ Deletes the content within the given range.
+ */
virtual bool Delete(const wxRichTextRange& range);
- // translate between the position (which is just an index in the text ctrl
- // considering all its contents as a single strings) and (x, y) coordinates
- // which represent column and line.
+ /**
+ Translates from column and line number to position.
+ */
virtual long XYToPosition(long x, long y) const;
+
+ /**
+ Converts a text position to zero-based column and line numbers.
+ */
virtual bool PositionToXY(long pos, long *x, long *y) const;
+ /**
+ Scrolls the buffer so that the given position is in view.
+ */
virtual void ShowPosition(long pos);
- // find the character at position given in pixels
- //
- // NB: pt is in device coords (not adjusted for the client area origin nor
- // scrolling)
+ //@{
+ /**
+ Finds the character at the given position in pixels.
+ @a pt is in device coords (not adjusted for the client area origin nor for
+ scrolling).
+ */
virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, long *pos) const;
virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt,
wxTextCoord *col,
wxTextCoord *row) const;
+ //@}
+
+// Clipboard operations
- // Clipboard operations
+ /**
+ Copies the selected content (if any) to the clipboard.
+ */
virtual void Copy();
+
+ /**
+ Copies the selected content (if any) to the clipboard and deletes the selection.
+ This is undoable.
+ */
virtual void Cut();
+
+ /**
+ Pastes content from the clipboard to the buffer.
+ */
virtual void Paste();
+
+ /**
+ Deletes the content in the selection, if any. This is undoable.
+ */
virtual void DeleteSelection();
+ /**
+ Returns @true if selected content can be copied to the clipboard.
+ */
virtual bool CanCopy() const;
+
+ /**
+ Returns @true if selected content can be copied to the clipboard and deleted.
+ */
virtual bool CanCut() const;
+
+ /**
+ Returns @true if the clipboard content can be pasted to the buffer.
+ */
virtual bool CanPaste() const;
+
+ /**
+ Returns @true if selected content can be deleted.
+ */
virtual bool CanDeleteSelection() const;
- // Undo/redo
+ /**
+ Undoes the command at the top of the command history, if there is one.
+ */
virtual void Undo();
+
+ /**
+ Redoes the current command.
+ */
virtual void Redo();
+ /**
+ Returns @true if there is a command in the command history that can be undone.
+ */
virtual bool CanUndo() const;
+
+ /**
+ Returns @true if there is a command in the command history that can be redone.
+ */
virtual bool CanRedo() const;
- // Insertion point
+ /**
+ Sets the insertion point and causes the current editing style to be taken from
+ the new position (unlike wxRichTextCtrl::SetCaretPosition).
+ */
virtual void SetInsertionPoint(long pos);
+
+ /**
+ Sets the insertion point to the end of the text control.
+ */
virtual void SetInsertionPointEnd();
+
+ /**
+ Returns the current insertion point.
+ */
virtual long GetInsertionPoint() const;
+
+ /**
+ Returns the last position in the buffer.
+ */
virtual wxTextPos GetLastPosition() const;
+ //@{
+ /**
+ Sets the selection to the given range.
+ The end point of range is specified as the last character position of the span
+ of text, plus one.
+
+ So, for example, to set the selection for a character at position 5, use the
+ range (5,6).
+ */
virtual void SetSelection(long from, long to);
+ void SetSelection(const wxRichTextSelection& sel) { m_selection = sel; }
+ //@}
+
+
+ /**
+ Selects all the text in the buffer.
+ */
virtual void SelectAll();
+
+ /**
+ Makes the control editable, or not.
+ */
virtual void SetEditable(bool editable);
- /// Returns true if there was a selection and the object containing the selection
- /// was the same as the current focus object.
+ /**
+ Returns @true if there is a selection and the object containing the selection
+ was the same as the current focus object.
+ */
virtual bool HasSelection() const;
- /// Returns true if there was a selection, whether or not the current focus object
- /// is the same as the selection's container object.
+ /**
+ Returns @true if there was a selection, whether or not the current focus object
+ is the same as the selection's container object.
+ */
virtual bool HasUnfocusedSelection() const;
-///// Functionality specific to wxRichTextCtrl
-
- /// Write an image at the current insertion point. Supply optional type to use
- /// for internal and file storage of the raw data.
+ //@{
+ /**
+ Write a bitmap or image at the current insertion point.
+ Supply an optional type to use for internal and file storage of the raw data.
+ */
virtual bool WriteImage(const wxImage& image, wxBitmapType bitmapType = wxBITMAP_TYPE_PNG,
const wxRichTextAttr& textAttr = wxRichTextAttr());
- /// Write a bitmap at the current insertion point. Supply optional type to use
- /// for internal and file storage of the raw data.
virtual bool WriteImage(const wxBitmap& bitmap, wxBitmapType bitmapType = wxBITMAP_TYPE_PNG,
const wxRichTextAttr& textAttr = wxRichTextAttr());
+ //@}
- /// Load an image from file and write at the current insertion point.
+ /**
+ Loads an image from a file and writes it at the current insertion point.
+ */
virtual bool WriteImage(const wxString& filename, wxBitmapType bitmapType,
const wxRichTextAttr& textAttr = wxRichTextAttr());
- /// Write an image block at the current insertion point.
+ /**
+ Writes an image block at the current insertion point.
+ */
virtual bool WriteImage(const wxRichTextImageBlock& imageBlock,
const wxRichTextAttr& textAttr = wxRichTextAttr());
- /// Write a text box at the current insertion point, returning the text box.
- /// You can then call SetFocusObject() to set the focus to the new object.
+ /**
+ Write a text box at the current insertion point, returning the text box.
+ You can then call SetFocusObject() to set the focus to the new object.
+ */
virtual wxRichTextBox* WriteTextBox(const wxRichTextAttr& textAttr = wxRichTextAttr());
- /// Write a table at the current insertion point, returning the table.
- /// You can then call SetFocusObject() to set the focus to the new object.
+ /**
+ Write a table at the current insertion point, returning the table.
+ You can then call SetFocusObject() to set the focus to the new object.
+ */
virtual wxRichTextTable* WriteTable(int rows, int cols, const wxRichTextAttr& tableAttr = wxRichTextAttr(), const wxRichTextAttr& cellAttr = wxRichTextAttr());
- /// Insert a newline (actually paragraph) at the current insertion point.
+ /**
+ Inserts a new paragraph at the current insertion point. @see LineBreak().
+ */
virtual bool Newline();
- /// Insert a line break at the current insertion point.
+ /**
+ Inserts a line break at the current insertion point.
+
+ A line break forces wrapping within a paragraph, and can be introduced by
+ using this function, by appending the wxChar value @b wxRichTextLineBreakChar
+ to text content, or by typing Shift-Return.
+ */
virtual bool LineBreak();
- /// Set basic (overall) style
+ /**
+ Sets the basic (overall) style.
+
+ This is the style of the whole buffer before further styles are applied,
+ unlike the default style, which only affects the style currently being
+ applied (for example, setting the default style to bold will cause
+ subsequently inserted text to be bold).
+ */
virtual void SetBasicStyle(const wxRichTextAttr& style) { GetBuffer().SetBasicStyle(style); }
- /// Get basic (overall) style
+ /**
+ Gets the basic (overall) style.
+
+ This is the style of the whole buffer before further styles are applied,
+ unlike the default style, which only affects the style currently being
+ applied (for example, setting the default style to bold will cause
+ subsequently inserted text to be bold).
+ */
virtual const wxRichTextAttr& GetBasicStyle() const { return GetBuffer().GetBasicStyle(); }
+ /**
+ Begins applying a style.
+ */
virtual bool BeginStyle(const wxRichTextAttr& style) { return GetBuffer().BeginStyle(style); }
- /// End the style
+ /**
+ Ends the current style.
+ */
virtual bool EndStyle() { return GetBuffer().EndStyle(); }
- /// End all styles
+ /**
+ Ends application of all styles in the current style stack.
+ */
virtual bool EndAllStyles() { return GetBuffer().EndAllStyles(); }
- /// Begin using bold
+ /**
+ Begins using bold.
+ */
bool BeginBold() { return GetBuffer().BeginBold(); }
- /// End using bold
+ /**
+ Ends using bold.
+ */
bool EndBold() { return GetBuffer().EndBold(); }
- /// Begin using italic
+ /**
+ Begins using italic.
+ */
bool BeginItalic() { return GetBuffer().BeginItalic(); }
- /// End using italic
+ /**
+ Ends using italic.
+ */
bool EndItalic() { return GetBuffer().EndItalic(); }
- /// Begin using underline
+ /**
+ Begins using underlining.
+ */
bool BeginUnderline() { return GetBuffer().BeginUnderline(); }
- /// End using underline
+ /**
+ End applying underlining.
+ */
bool EndUnderline() { return GetBuffer().EndUnderline(); }
- /// Begin using point size
+ /**
+ Begins using the given point size.
+ */
bool BeginFontSize(int pointSize) { return GetBuffer().BeginFontSize(pointSize); }
- /// End using point size
+ /**
+ Ends using a point size.
+ */
bool EndFontSize() { return GetBuffer().EndFontSize(); }
- /// Begin using this font
+ /**
+ Begins using this font.
+ */
bool BeginFont(const wxFont& font) { return GetBuffer().BeginFont(font); }
- /// End using a font
+ /**
+ Ends using a font.
+ */
bool EndFont() { return GetBuffer().EndFont(); }
- /// Begin using this colour
+ /**
+ Begins using this colour.
+ */
bool BeginTextColour(const wxColour& colour) { return GetBuffer().BeginTextColour(colour); }
- /// End using a colour
+ /**
+ Ends applying a text colour.
+ */
bool EndTextColour() { return GetBuffer().EndTextColour(); }
- /// Begin using alignment
+ /**
+ Begins using alignment.
+ For alignment values, see wxTextAttr.
+ */
bool BeginAlignment(wxTextAttrAlignment alignment) { return GetBuffer().BeginAlignment(alignment); }
- /// End alignment
+ /**
+ Ends alignment.
+ */
bool EndAlignment() { return GetBuffer().EndAlignment(); }
- /// Begin left indent
+ /**
+ Begins applying a left indent and subindent in tenths of a millimetre.
+ The subindent is an offset from the left edge of the paragraph, and is
+ used for all but the first line in a paragraph. A positive value will
+ cause the first line to appear to the left of the subsequent lines, and
+ a negative value will cause the first line to be indented to the right
+ of the subsequent lines.
+
+ wxRichTextBuffer uses indentation to render a bulleted item. The
+ content of the paragraph, including the first line, starts at the
+ @a leftIndent plus the @a leftSubIndent.
+
+ @param leftIndent
+ The distance between the margin and the bullet.
+ @param leftSubIndent
+ The distance between the left edge of the bullet and the left edge
+ of the actual paragraph.
+ */
bool BeginLeftIndent(int leftIndent, int leftSubIndent = 0) { return GetBuffer().BeginLeftIndent(leftIndent, leftSubIndent); }
- /// End left indent
+ /**
+ Ends left indent.
+ */
bool EndLeftIndent() { return GetBuffer().EndLeftIndent(); }
- /// Begin right indent
+ /**
+ Begins a right indent, specified in tenths of a millimetre.
+ */
bool BeginRightIndent(int rightIndent) { return GetBuffer().BeginRightIndent(rightIndent); }
- /// End right indent
+ /**
+ Ends right indent.
+ */
bool EndRightIndent() { return GetBuffer().EndRightIndent(); }
- /// Begin paragraph spacing
+ /**
+ Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
+ in tenths of a millimetre.
+ */
bool BeginParagraphSpacing(int before, int after) { return GetBuffer().BeginParagraphSpacing(before, after); }
- /// End paragraph spacing
+ /**
+ Ends paragraph spacing.
+ */
bool EndParagraphSpacing() { return GetBuffer().EndParagraphSpacing(); }
- /// Begin line spacing
+ /**
+ Begins appling line spacing. @e spacing is a multiple, where 10 means
+ single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
+
+ The ::wxTextAttrLineSpacing constants are defined for convenience.
+ */
bool BeginLineSpacing(int lineSpacing) { return GetBuffer().BeginLineSpacing(lineSpacing); }
- /// End line spacing
+ /**
+ Ends line spacing.
+ */
bool EndLineSpacing() { return GetBuffer().EndLineSpacing(); }
- /// Begin numbered bullet
+ /**
+ Begins a numbered bullet.
+
+ This call will be needed for each item in the list, and the
+ application should take care of incrementing the numbering.
+
+ @a bulletNumber is a number, usually starting with 1.
+ @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
+ @a bulletStyle is a bitlist of the ::wxTextAttrBulletStyle values.
+
+ wxRichTextBuffer uses indentation to render a bulleted item.
+ The left indent is the distance between the margin and the bullet.
+ The content of the paragraph, including the first line, starts
+ at leftMargin + leftSubIndent.
+ So the distance between the left edge of the bullet and the
+ left of the actual paragraph is leftSubIndent.
+ */
bool BeginNumberedBullet(int bulletNumber, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_ARABIC|wxTEXT_ATTR_BULLET_STYLE_PERIOD)
{ return GetBuffer().BeginNumberedBullet(bulletNumber, leftIndent, leftSubIndent, bulletStyle); }
- /// End numbered bullet
+ /**
+ Ends application of a numbered bullet.
+ */
bool EndNumberedBullet() { return GetBuffer().EndNumberedBullet(); }
- /// Begin symbol bullet
+ /**
+ Begins applying a symbol bullet, using a character from the current font.
+ See BeginNumberedBullet() for an explanation of how indentation is used
+ to render the bulleted paragraph.
+ */
bool BeginSymbolBullet(const wxString& symbol, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_SYMBOL)
{ return GetBuffer().BeginSymbolBullet(symbol, leftIndent, leftSubIndent, bulletStyle); }
- /// End symbol bullet
+ /**
+ Ends applying a symbol bullet.
+ */
bool EndSymbolBullet() { return GetBuffer().EndSymbolBullet(); }
- /// Begin standard bullet
+ /**
+ Begins applying a symbol bullet.
+ */
bool BeginStandardBullet(const wxString& bulletName, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_STANDARD)
{ return GetBuffer().BeginStandardBullet(bulletName, leftIndent, leftSubIndent, bulletStyle); }
- /// End standard bullet
+ /**
+ Begins applying a standard bullet.
+ */
bool EndStandardBullet() { return GetBuffer().EndStandardBullet(); }
- /// Begin named character style
+ /**
+ Begins using the named character style.
+ */
bool BeginCharacterStyle(const wxString& characterStyle) { return GetBuffer().BeginCharacterStyle(characterStyle); }
- /// End named character style
+ /**
+ Ends application of a named character style.
+ */
bool EndCharacterStyle() { return GetBuffer().EndCharacterStyle(); }
- /// Begin named paragraph style
+ /**
+ Begins applying the named paragraph style.
+ */
bool BeginParagraphStyle(const wxString& paragraphStyle) { return GetBuffer().BeginParagraphStyle(paragraphStyle); }
- /// End named character style
+ /**
+ Ends application of a named paragraph style.
+ */
bool EndParagraphStyle() { return GetBuffer().EndParagraphStyle(); }
- /// Begin named list style
+ /**
+ Begins using a specified list style.
+ Optionally, you can also pass a level and a number.
+ */
bool BeginListStyle(const wxString& listStyle, int level = 1, int number = 1) { return GetBuffer().BeginListStyle(listStyle, level, number); }
- /// End named character style
+ /**
+ Ends using a specified list style.
+ */
bool EndListStyle() { return GetBuffer().EndListStyle(); }
- /// Begin URL
+ /**
+ Begins applying wxTEXT_ATTR_URL to the content.
+
+ Pass a URL and optionally, a character style to apply, since it is common
+ to mark a URL with a familiar style such as blue text with underlining.
+ */
bool BeginURL(const wxString& url, const wxString& characterStyle = wxEmptyString) { return GetBuffer().BeginURL(url, characterStyle); }
- /// End URL
+ /**
+ Ends applying a URL.
+ */
bool EndURL() { return GetBuffer().EndURL(); }
- /// Sets the default style to the style under the cursor
+ /**
+ Sets the default style to the style under the cursor.
+ */
bool SetDefaultStyleToCursorStyle();
- /// Clear the selection
+ /**
+ Cancels any selection.
+ */
virtual void SelectNone();
- /// Select the word at the given character position
+ /**
+ Selects the word at the given character position.
+ */
virtual bool SelectWord(long position);
- /// Get/set the selection range in character positions. -1, -1 means no selection.
- /// The range is in API convention, i.e. a single character selection is denoted
- /// by (n, n+1)
+ /**
+ Returns the selection range in character positions. -1, -1 means no selection.
+
+ The range is in API convention, i.e. a single character selection is denoted
+ by (n, n+1)
+ */
wxRichTextRange GetSelectionRange() const;
+
+ /**
+ Sets the selection to the given range.
+ The end point of range is specified as the last character position of the span
+ of text, plus one.
+
+ So, for example, to set the selection for a character at position 5, use the
+ range (5,6).
+ */
void SetSelectionRange(const wxRichTextRange& range);
- /// Get/set the selection range in character positions. -2, -2 means no selection
- /// -1, -1 means select everything.
- /// The range is in internal format, i.e. a single character selection is denoted
- /// by (n, n)
+ /**
+ Returns the selection range in character positions. -2, -2 means no selection
+ -1, -1 means select everything.
+ The range is in internal format, i.e. a single character selection is denoted
+ by (n, n)
+ */
wxRichTextRange GetInternalSelectionRange() const { return m_selection.GetRange(); }
+
+ /**
+ Sets the selection range in character positions. -2, -2 means no selection
+ -1, -1 means select everything.
+ The range is in internal format, i.e. a single character selection is denoted
+ by (n, n)
+ */
void SetInternalSelectionRange(const wxRichTextRange& range) { m_selection.Set(range, GetFocusObject()); }
- /// Add a new paragraph of text to the end of the buffer
+ /**
+ Adds a new paragraph of text to the end of the buffer.
+ */
virtual wxRichTextRange AddParagraph(const wxString& text);
- /// Add an image
+ /**
+ Adds an image to the control's buffer.
+ */
virtual wxRichTextRange AddImage(const wxImage& image);
- /// Layout the buffer: which we must do before certain operations, such as
- /// setting the caret position.
+ /**
+ Lays out the buffer, which must be done before certain operations, such as
+ setting the caret position.
+ This function should not normally be required by the application.
+ */
virtual bool LayoutContent(bool onlyVisibleRect = false);
- /// Move the caret to the given character position
+ /**
+ Move the caret to the given character position.
+
+ Please note that this does not update the current editing style
+ from the new position; to do that, call wxRichTextCtrl::SetInsertionPoint instead.
+ */
virtual bool MoveCaret(long pos, bool showAtLineStart = false, wxRichTextParagraphLayoutBox* container = NULL);
- /// Move right
+ /**
+ Moves right.
+ */
virtual bool MoveRight(int noPositions = 1, int flags = 0);
- /// Move left
+ /**
+ Moves left.
+ */
virtual bool MoveLeft(int noPositions = 1, int flags = 0);
- /// Move up
+ /**
+ Moves to the start of the paragraph.
+ */
virtual bool MoveUp(int noLines = 1, int flags = 0);
- /// Move up
+ /**
+ Moves the caret down.
+ */
virtual bool MoveDown(int noLines = 1, int flags = 0);
- /// Move to the end of the line
+ /**
+ Moves to the end of the line.
+ */
virtual bool MoveToLineEnd(int flags = 0);
- /// Move to the start of the line
+ /**
+ Moves to the start of the line.
+ */
virtual bool MoveToLineStart(int flags = 0);
- /// Move to the end of the paragraph
+ /**
+ Moves to the end of the paragraph.
+ */
virtual bool MoveToParagraphEnd(int flags = 0);
- /// Move to the start of the paragraph
+ /**
+ Moves to the start of the paragraph.
+ */
virtual bool MoveToParagraphStart(int flags = 0);
- /// Move to the start of the buffer
+ /**
+ Moves to the start of the buffer.
+ */
virtual bool MoveHome(int flags = 0);
- /// Move to the end of the buffer
+ /**
+ Moves to the end of the buffer.
+ */
virtual bool MoveEnd(int flags = 0);
- /// Move n pages up
+ /**
+ Moves one or more pages up.
+ */
virtual bool PageUp(int noPages = 1, int flags = 0);
- /// Move n pages down
+ /**
+ Moves one or more pages down.
+ */
virtual bool PageDown(int noPages = 1, int flags = 0);
- /// Move n words left
+ /**
+ Moves a number of words to the left.
+ */
virtual bool WordLeft(int noPages = 1, int flags = 0);
- /// Move n words right
+ /**
+ Move a nuber of words to the right.
+ */
virtual bool WordRight(int noPages = 1, int flags = 0);
- /// Returns the buffer associated with the control.
+ //@{
+ /**
+ Returns the buffer associated with the control.
+ */
wxRichTextBuffer& GetBuffer() { return m_buffer; }
const wxRichTextBuffer& GetBuffer() const { return m_buffer; }
+ //@}
- /// Start batching undo history for commands.
+ /**
+ Starts batching undo history for commands.
+ */
virtual bool BeginBatchUndo(const wxString& cmdName) { return m_buffer.BeginBatchUndo(cmdName); }
- /// End batching undo history for commands.
+ /**
+ Ends batching undo command history.
+ */
virtual bool EndBatchUndo() { return m_buffer.EndBatchUndo(); }
- /// Are we batching undo history for commands?
+ /**
+ Returns @true if undo commands are being batched.
+ */
virtual bool BatchingUndo() const { return m_buffer.BatchingUndo(); }
- /// Start suppressing undo history for commands.
+ /**
+ Starts suppressing undo history for commands.
+ */
virtual bool BeginSuppressUndo() { return m_buffer.BeginSuppressUndo(); }
- /// End suppressing undo history for commands.
+ /**
+ Ends suppressing undo command history.
+ */
virtual bool EndSuppressUndo() { return m_buffer.EndSuppressUndo(); }
- /// Are we suppressing undo history for commands?
+ /**
+ Returns @true if undo history suppression is on.
+ */
virtual bool SuppressingUndo() const { return m_buffer.SuppressingUndo(); }
- /// 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
- /// can use this to implement, for example, bold button updating. style must have
- /// flags indicating which attributes are of interest.
+ /**
+ 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 can use this to implement, for example, bold button updating.
+ @a style must have flags indicating which attributes are of interest.
+ */
virtual bool HasCharacterAttributes(const wxRichTextRange& range, const wxRichTextAttr& style) const
{
return GetBuffer().HasCharacterAttributes(range.ToInternal(), style);
}
- /// Test if this whole range has paragraph attributes of the specified kind. If any
- /// of the attributes are different within the range, the test fails. You
- /// can use this to implement, for example, centering button updating. style must have
- /// flags indicating which attributes are of interest.
+ /**
+ Test if this whole range has paragraph attributes of the specified kind.
+ If any of the attributes are different within the range, the test fails.
+ You can use this to implement, for example, centering button updating.
+ @a style must have flags indicating which attributes are of interest.
+ */
virtual bool HasParagraphAttributes(const wxRichTextRange& range, const wxRichTextAttr& style) const
{
return GetBuffer().HasParagraphAttributes(range.ToInternal(), style);
}
- /// Is all of the selection bold?
+ /**
+ Returns @true if all of the selection is bold.
+ */
virtual bool IsSelectionBold();
- /// Is all of the selection italics?
+ /**
+ Returns @true if all of the selection is italic.
+ */
virtual bool IsSelectionItalics();
- /// Is all of the selection underlined?
+ /**
+ Returns @true if all of the selection is underlined.
+ */
virtual bool IsSelectionUnderlined();
- /// Is all of the selection aligned according to the specified flag?
+ /**
+ Returns @true if all of the selection is aligned according to the specified flag.
+ */
virtual bool IsSelectionAligned(wxTextAttrAlignment alignment);
- /// Apply bold to the selection
+ /**
+ Apples bold to the selection (undoable).
+ */
virtual bool ApplyBoldToSelection();
- /// Apply italic to the selection
+ /**
+ Applies italic to the selection (undoable).
+ */
virtual bool ApplyItalicToSelection();
- /// Apply underline to the selection
+ /**
+ Applies underline to the selection (undoable).
+ */
virtual bool ApplyUnderlineToSelection();
- /// Apply alignment to the selection
+ /**
+ Applies the given alignment to the selection (undoable).
+ For alignment values, see wxTextAttr.
+ */
virtual bool ApplyAlignmentToSelection(wxTextAttrAlignment alignment);
- /// Apply a named style to the selection
+ /**
+ Applies the style sheet to the buffer, matching paragraph styles in the sheet
+ against named styles in the buffer.
+
+ This might be useful if the styles have changed.
+ If @a sheet is @NULL, the sheet set with SetStyleSheet() is used.
+ Currently this applies paragraph styles only.
+ */
virtual bool ApplyStyle(wxRichTextStyleDefinition* def);
- /// Set style sheet, if any
+ /**
+ Sets the style sheet associated with the control.
+ A style sheet allows named character and paragraph styles to be applied.
+ */
void SetStyleSheet(wxRichTextStyleSheet* styleSheet) { GetBuffer().SetStyleSheet(styleSheet); }
+
+ /**
+ Returns the style sheet associated with the control, if any.
+ A style sheet allows named character and paragraph styles to be applied.
+ */
wxRichTextStyleSheet* GetStyleSheet() const { return GetBuffer().GetStyleSheet(); }
- /// Push style sheet to top of stack
+ /**
+ Push the style sheet to top of stack.
+ */
bool PushStyleSheet(wxRichTextStyleSheet* styleSheet) { return GetBuffer().PushStyleSheet(styleSheet); }
- /// Pop style sheet from top of stack
+ /**
+ Pops the style sheet from top of stack.
+ */
wxRichTextStyleSheet* PopStyleSheet() { return GetBuffer().PopStyleSheet(); }
- /// Apply the style sheet to the buffer, for example if the styles have changed.
+ /**
+ Applies the style sheet to the buffer, for example if the styles have changed.
+ */
bool ApplyStyleSheet(wxRichTextStyleSheet* styleSheet = NULL);
// Command handlers
+ /**
+ Sends the event to the control.
+ */
void Command(wxCommandEvent& event);
+
+ /**
+ Loads the first dropped file.
+ */
void OnDropFiles(wxDropFilesEvent& event);
+
void OnCaptureLost(wxMouseCaptureLostEvent& event);
void OnSysColourChanged(wxSysColourChangedEvent& event);
+ /**
+ Standard handler for the wxID_CUT command.
+ */
void OnCut(wxCommandEvent& event);
+
+ /**
+ Standard handler for the wxID_COPY command.
+ */
void OnCopy(wxCommandEvent& event);
+
+ /**
+ Standard handler for the wxID_PASTE command.
+ */
void OnPaste(wxCommandEvent& event);
+
+ /**
+ Standard handler for the wxID_UNDO command.
+ */
void OnUndo(wxCommandEvent& event);
+
+ /**
+ Standard handler for the wxID_REDO command.
+ */
void OnRedo(wxCommandEvent& event);
+
+ /**
+ Standard handler for the wxID_SELECTALL command.
+ */
void OnSelectAll(wxCommandEvent& event);
+
+ /**
+ Standard handler for property commands.
+ */
void OnProperties(wxCommandEvent& event);
+
+ /**
+ Standard handler for the wxID_CLEAR command.
+ */
void OnClear(wxCommandEvent& event);
+ /**
+ Standard update handler for the wxID_CUT command.
+ */
void OnUpdateCut(wxUpdateUIEvent& event);
+
+ /**
+ Standard update handler for the wxID_COPY command.
+ */
void OnUpdateCopy(wxUpdateUIEvent& event);
+
+ /**
+ Standard update handler for the wxID_PASTE command.
+ */
void OnUpdatePaste(wxUpdateUIEvent& event);
+
+ /**
+ Standard update handler for the wxID_UNDO command.
+ */
void OnUpdateUndo(wxUpdateUIEvent& event);
+
+ /**
+ Standard update handler for the wxID_REDO command.
+ */
void OnUpdateRedo(wxUpdateUIEvent& event);
+
+ /**
+ Standard update handler for the wxID_SELECTALL command.
+ */
void OnUpdateSelectAll(wxUpdateUIEvent& event);
+
+ /**
+ Standard update handler for property commands.
+ */
+
void OnUpdateProperties(wxUpdateUIEvent& event);
+
+ /**
+ Standard update handler for the wxID_CLEAR command.
+ */
void OnUpdateClear(wxUpdateUIEvent& event);
- // Show a context menu for Rich Edit controls (the standard
- // EDIT control has one already)
+ /**
+ Shows a standard context menu with undo, redo, cut, copy, paste, clear, and
+ select all commands.
+ */
void OnContextMenu(wxContextMenuEvent& event);
// Event handlers
- /// Painting
+ // Painting
void OnPaint(wxPaintEvent& event);
void OnEraseBackground(wxEraseEvent& event);
- /// Left-click
+ // Left-click
void OnLeftClick(wxMouseEvent& event);
- /// Left-up
+ // Left-up
void OnLeftUp(wxMouseEvent& event);
- /// Motion
+ // Motion
void OnMoveMouse(wxMouseEvent& event);
- /// Left-double-click
+ // Left-double-click
void OnLeftDClick(wxMouseEvent& event);
- /// Middle-click
+ // Middle-click
void OnMiddleClick(wxMouseEvent& event);
- /// Right-click
+ // Right-click
void OnRightClick(wxMouseEvent& event);
- /// Key press
+ // Key press
void OnChar(wxKeyEvent& event);
- /// Sizing
+ // Sizing
void OnSize(wxSizeEvent& event);
- /// Setting/losing focus
+ // Setting/losing focus
void OnSetFocus(wxFocusEvent& event);
void OnKillFocus(wxFocusEvent& event);
- /// Idle-time processing
+ // Idle-time processing
void OnIdle(wxIdleEvent& event);
- /// Scrolling
+ // Scrolling
void OnScroll(wxScrollWinEvent& event);
- /// Set font, and also default attributes
+ /**
+ Sets the font, and also the basic and default attributes
+ (see wxRichTextCtrl::SetDefaultStyle).
+ */
virtual bool SetFont(const wxFont& font);
- /// Set up scrollbars, e.g. after a resize
+ /**
+ A helper function setting up scrollbars, for example after a resize.
+ */
virtual void SetupScrollbars(bool atTop = false);
- /// Keyboard navigation
+ /**
+ Helper function implementing keyboard navigation.
+ */
virtual bool KeyboardNavigate(int keyCode, int flags);
- /// Paint the background
+ /**
+ Paints the background.
+ */
virtual void PaintBackground(wxDC& dc);
- /// Other user defined painting after everything else (i.e. all text) is painted
+ /**
+ Other user defined painting after everything else (i.e. all text) is painted.
+
+ @since 2.9.1
+ */
virtual void PaintAboveContent(wxDC& WXUNUSED(dc)) {}
#if wxRICHTEXT_BUFFERED_PAINTING
- /// Recreate buffer bitmap if necessary
+ /**
+ Recreates the buffer bitmap if necessary.
+ */
virtual bool RecreateBuffer(const wxSize& size = wxDefaultSize);
#endif
- /// Write text
+ // Write text
virtual void DoWriteText(const wxString& value, int flags = 0);
- /// Should we inherit colours?
+ // Should we inherit colours?
virtual bool ShouldInheritColours() const { return false; }
- /// Position the caret
+ /**
+ Internal function to position the visible caret according to the current caret
+ position.
+ */
virtual void PositionCaret(wxRichTextParagraphLayoutBox* container = NULL);
- /// Extend the selection, returning true if the selection was
- /// changed. Selections are in caret positions.
+ /**
+ Helper function for extending the selection, returning @true if the selection
+ was changed. Selections are in caret positions.
+ */
virtual bool ExtendSelection(long oldPosition, long newPosition, int flags);
- /// Scroll into view. This takes a _caret_ position.
+ /**
+ Scrolls @a position into view. This function takes a caret position.
+ */
virtual bool ScrollIntoView(long position, int keyCode);
- /// Refresh the area affected by a selection change
+ /**
+ Refreshes the area affected by a selection change.
+ */
bool RefreshForSelectionChange(const wxRichTextSelection& oldSelection, const wxRichTextSelection& newSelection);
- /// The caret position is the character position just before the caret.
- /// A value of -1 means the caret is at the start of the buffer.
+ /**
+ Sets the caret position.
+
+ The caret position is the character position just before the caret.
+ A value of -1 means the caret is at the start of the buffer.
+ Please note that this does not update the current editing style
+ from the new position or cause the actual caret to be refreshed; to do that,
+ call wxRichTextCtrl::SetInsertionPoint instead.
+ */
void SetCaretPosition(long position, bool showAtLineStart = false) ;
+
+ /**
+ Returns the current caret position.
+ */
long GetCaretPosition() const { return m_caretPosition; }
- /// The adjusted caret position is the character position adjusted to take
- /// into account whether we're at the start of a paragraph, in which case
- /// style information should be taken from the next position, not current one.
+ /**
+ The adjusted caret position is the character position adjusted to take
+ into account whether we're at the start of a paragraph, in which case
+ style information should be taken from the next position, not current one.
+ */
long GetAdjustedCaretPosition(long caretPos) const;
- /// Move caret one visual step forward: this may mean setting a flag
- /// and keeping the same position if we're going from the end of one line
- /// to the start of the next, which may be the exact same caret position.
+ /**
+ Move the caret one visual step forward: this may mean setting a flag
+ and keeping the same position if we're going from the end of one line
+ to the start of the next, which may be the exact same caret position.
+ */
void MoveCaretForward(long oldPosition) ;
- /// Move caret one visual step forward: this may mean setting a flag
- /// and keeping the same position if we're going from the end of one line
- /// to the start of the next, which may be the exact same caret position.
+ /**
+ Move the caret one visual step forward: this may mean setting a flag
+ and keeping the same position if we're going from the end of one line
+ to the start of the next, which may be the exact same caret position.
+ */
void MoveCaretBack(long oldPosition) ;
- /// Get the caret height and position for the given character position. If container is null,
- /// the current focus object will be used.
+ /**
+ Returns the caret height and position for the given character position.
+ If container is null, the current focus object will be used.
+
+ @beginWxPerlOnly
+ In wxPerl this method is implemented as
+ GetCaretPositionForIndex(@a position) returning a
+ 2-element list (ok, rect).
+ @endWxPerlOnly
+ */
bool GetCaretPositionForIndex(long position, wxRect& rect, wxRichTextParagraphLayoutBox* container = NULL);
- /// Gets the line for the visible caret position. If the caret is
- /// shown at the very end of the line, it means the next character is actually
- /// on the following line. So let's get the line we're expecting to find
- /// if this is the case.
+ /**
+ Internal helper function returning the line for the visible caret position.
+ If the caret is shown at the very end of the line, it means the next character
+ is actually on the following line.
+ So this function gets the line we're expecting to find if this is the case.
+ */
wxRichTextLine* GetVisibleLineForCaretPosition(long caretPosition) const;
- /// Gets the command processor
+ /**
+ Gets the command processor associated with the control's buffer.
+ */
wxCommandProcessor* GetCommandProcessor() const { return GetBuffer().GetCommandProcessor(); }
- /// Delete content if there is a selection, e.g. when pressing a key.
- /// Returns the new caret position in newPos, or leaves it if there
- /// was no action.
+ /**
+ Deletes content if there is a selection, e.g. when pressing a key.
+ Returns the new caret position in @e newPos, or leaves it if there
+ was no action. This is undoable.
+
+ @beginWxPerlOnly
+ In wxPerl this method takes no arguments and returns a 2-element
+ list (ok, newPos).
+ @endWxPerlOnly
+ */
bool DeleteSelectedContent(long* newPos= NULL);
- /// Transform logical to physical
+ /**
+ Transforms logical (unscrolled) position to physical window position.
+ */
wxPoint GetPhysicalPoint(const wxPoint& ptLogical) const;
- /// Transform physical to logical
+ /**
+ Transforms physical window position to logical (unscrolled) position.
+ */
wxPoint GetLogicalPoint(const wxPoint& ptPhysical) const;
- /// Finds the caret position for the next word. Direction
- /// is 1 (forward) or -1 (backwards).
+ /**
+ Helper function for finding the caret position for the next word.
+ Direction is 1 (forward) or -1 (backwards).
+ */
virtual long FindNextWordPosition(int direction = 1) const;
- /// Is the given position visible on the screen?
+ /**
+ Returns @true if the given position is visible on the screen.
+ */
bool IsPositionVisible(long pos) const;
- /// Returns the first visible position in the current view
+ /**
+ Returns the first visible position in the current view.
+ */
long GetFirstVisiblePosition() const;
- /// Returns the caret position since the default formatting was changed. As
- /// soon as this position changes, we no longer reflect the default style
- /// in the UI. A value of -2 means that we should only reflect the style of the
- /// content under the caret.
+ /**
+ Returns the caret position since the default formatting was changed. As
+ soon as this position changes, we no longer reflect the default style
+ in the UI. A value of -2 means that we should only reflect the style of the
+ content under the caret.
+ */
long GetCaretPositionForDefaultStyle() const { return m_caretPositionForDefaultStyle; }
- /// Set the caret position for the default style that the user is selecting.
+ /**
+ Set the caret position for the default style that the user is selecting.
+ */
void SetCaretPositionForDefaultStyle(long pos) { m_caretPositionForDefaultStyle = pos; }
- /// Should the UI reflect the default style chosen by the user, rather than the style under
- /// the caret?
+ /**
+ Returns @true if the user has recently set the default style without moving
+ the caret, and therefore the UI needs to reflect the default style and not
+ the style at the caret.
+
+ Below is an example of code that uses this function to determine whether the UI
+ should show that the current style is bold.
+
+ @see SetAndShowDefaultStyle().
+ */
bool IsDefaultStyleShowing() const { return m_caretPositionForDefaultStyle != -2; }
- /// Convenience function that tells the control to start reflecting the default
- /// style, since the user is changing it.
+ /**
+ Sets @a attr as the default style and tells the control that the UI should
+ reflect this attribute until the user moves the caret.
+
+ @see IsDefaultStyleShowing().
+ */
void SetAndShowDefaultStyle(const wxRichTextAttr& attr)
{
SetDefaultStyle(attr);
SetCaretPositionForDefaultStyle(GetCaretPosition());
}
- /// Get the first visible point in the window
+ /**
+ Returns the first visible point in the window.
+ */
wxPoint GetFirstVisiblePoint() const;
+#ifdef DOXYGEN
+ /**
+ Returns the content of the entire control as a string.
+ */
+ virtual wxString GetValue() const;
+
+ /**
+ Replaces existing content with the given text.
+ */
+ virtual void SetValue(const wxString& value);
+
+ /**
+ Call this function to prevent refresh and allow fast updates, and then Thaw() to
+ refresh the control.
+ */
+ void Freeze();
+
+ /**
+ Call this function to end a Freeze and refresh the display.
+ */
+ void Thaw();
+
+ /**
+ Returns @true if Freeze has been called without a Thaw.
+ */
+ bool IsFrozen() const;
+
+#endif
+
// Implementation
- /// Set up the caret for the given position and container, after a mouse click
+ /**
+ Sets up the caret for the given position and container, after a mouse click.
+ */
bool SetCaretPositionAfterClick(wxRichTextParagraphLayoutBox* container, long position, int hitTestFlags, bool extendSelection = false);
- /// Find the caret position for the combination of hit-test flags and character position.
- /// Returns the caret position and also an indication of where to place the caret (caretLineStart)
- /// since this is ambiguous (same position used for end of line and start of next).
+ /**
+ Find the caret position for the combination of hit-test flags and character position.
+ Returns the caret position and also an indication of where to place the caret (caretLineStart)
+ since this is ambiguous (same position used for end of line and start of next).
+ */
long FindCaretPositionForCharacterPosition(long position, int hitTestFlags, wxRichTextParagraphLayoutBox* container,
bool& caretLineStart);
- /// Font names take a long time to retrieve, so cache them (on demand)
+ /**
+ Font names take a long time to retrieve, so cache them (on demand).
+ */
static const wxArrayString& GetAvailableFontNames();
+
+ /**
+ Clears the cache of available font names.
+ */
static void ClearAvailableFontNames();
WX_FORWARD_TO_SCROLL_HELPER()
// Overrides
protected:
+ /**
+ Currently this simply returns @c wxSize(10, 10).
+ */
virtual wxSize DoGetBestSize() const ;
virtual void DoSetValue(const wxString& value, int flags = 0);
wxRichTextParagraphLayoutBox* m_focusObject;
};
-/*!
- * wxRichTextEvent - the event class for wxRichTextCtrl notifications
- */
+/**
+ @class wxRichTextEvent
+
+ This is the event class for wxRichTextCtrl notifications.
+
+ @beginEventTable{wxRichTextEvent}
+ @event{EVT_RICHTEXT_LEFT_CLICK(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_LEFT_CLICK event, generated when the user
+ releases the left mouse button over an object.
+ @event{EVT_RICHTEXT_RIGHT_CLICK(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_RIGHT_CLICK event, generated when the user
+ releases the right mouse button over an object.
+ @event{EVT_RICHTEXT_MIDDLE_CLICK(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_MIDDLE_CLICK event, generated when the user
+ releases the middle mouse button over an object.
+ @event{EVT_RICHTEXT_LEFT_DCLICK(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_DLEFT_CLICK event, generated when the user
+ double-clicks an object.
+ @event{EVT_RICHTEXT_RETURN(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_RETURN event, generated when the user
+ presses the return key. Valid event functions: GetFlags, GetPosition.
+ @event{EVT_RICHTEXT_CHARACTER(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_CHARACTER event, generated when the user
+ presses a character key. Valid event functions: GetFlags, GetPosition, GetCharacter.
+ @event{EVT_RICHTEXT_DELETE(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_DELETE event, generated when the user
+ presses the backspace or delete key. Valid event functions: GetFlags, GetPosition.
+ @event{EVT_RICHTEXT_RETURN(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_RETURN event, generated when the user
+ presses the return key. Valid event functions: GetFlags, GetPosition.
+ @event{EVT_RICHTEXT_STYLE_CHANGED(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_STYLE_CHANGED event, generated when
+ styling has been applied to the control. Valid event functions: GetPosition, GetRange.
+ @event{EVT_RICHTEXT_STYLESHEET_CHANGED(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING event, generated
+ when the control's stylesheet has changed, for example the user added,
+ edited or deleted a style. Valid event functions: GetRange, GetPosition.
+ @event{EVT_RICHTEXT_STYLESHEET_REPLACING(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACING event, generated
+ when the control's stylesheet is about to be replaced, for example when
+ a file is loaded into the control.
+ Valid event functions: Veto, GetOldStyleSheet, GetNewStyleSheet.
+ @event{EVT_RICHTEXT_STYLESHEET_REPLACED(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACED event, generated
+ when the control's stylesheet has been replaced, for example when a file
+ is loaded into the control.
+ Valid event functions: GetOldStyleSheet, GetNewStyleSheet.
+ @event{EVT_RICHTEXT_CONTENT_INSERTED(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_CONTENT_INSERTED event, generated when
+ content has been inserted into the control.
+ Valid event functions: GetPosition, GetRange.
+ @event{EVT_RICHTEXT_CONTENT_DELETED(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED event, generated when
+ content has been deleted from the control.
+ Valid event functions: GetPosition, GetRange.
+ @event{EVT_RICHTEXT_BUFFER_RESET(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_BUFFER_RESET event, generated when the
+ buffer has been reset by deleting all content.
+ You can use this to set a default style for the first new paragraph.
+ @event{EVT_RICHTEXT_SELECTION_CHANGED(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_SELECTION_CHANGED event, generated when the
+ selection range has changed.
+ @event{EVT_RICHTEXT_FOCUS_OBJECT_CHANGED(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_FOCUS_OBJECT_CHANGED event, generated when the
+ current focus object has changed.
+ @endEventTable
+
+ @library{wxrichtext}
+ @category{events,richtext}
+*/
class WXDLLIMPEXP_RICHTEXT wxRichTextEvent : public wxNotifyEvent
{
public:
+ /**
+ Constructor.
+
+ @param commandType
+ The type of the event.
+ @param id
+ Window identifier. The value @c wxID_ANY indicates a default value.
+ */
wxRichTextEvent(wxEventType commandType = wxEVT_NULL, int winid = 0)
: wxNotifyEvent(commandType, winid),
m_flags(0), m_position(-1), m_oldStyleSheet(NULL), m_newStyleSheet(NULL),
m_char((wxChar) 0), m_container(NULL), m_oldContainer(NULL)
{ }
+ /**
+ Copy constructor.
+ */
wxRichTextEvent(const wxRichTextEvent& event)
: wxNotifyEvent(event),
m_flags(event.m_flags), m_position(-1),
m_char((wxChar) 0), m_container(event.m_container), m_oldContainer(event.m_oldContainer)
{ }
+ /**
+ Returns the buffer position at which the event occured.
+ */
long GetPosition() const { return m_position; }
+
+ /**
+ Sets the buffer position variable.
+ */
void SetPosition(long pos) { m_position = pos; }
+ /**
+ Returns flags indicating modifier keys pressed.
+
+ Possible values are @c wxRICHTEXT_CTRL_DOWN, @c wxRICHTEXT_SHIFT_DOWN, and @c wxRICHTEXT_ALT_DOWN.
+ */
int GetFlags() const { return m_flags; }
+
+ /**
+ Sets flags indicating modifier keys pressed.
+
+ Possible values are @c wxRICHTEXT_CTRL_DOWN, @c wxRICHTEXT_SHIFT_DOWN, and @c wxRICHTEXT_ALT_DOWN.
+ */
void SetFlags(int flags) { m_flags = flags; }
+ /**
+ Returns the old style sheet.
+
+ Can be used in a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING or
+ @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED event handler.
+ */
wxRichTextStyleSheet* GetOldStyleSheet() const { return m_oldStyleSheet; }
+
+ /**
+ Sets the old style sheet variable.
+ */
void SetOldStyleSheet(wxRichTextStyleSheet* sheet) { m_oldStyleSheet = sheet; }
+ /**
+ Returns the new style sheet.
+
+ Can be used in a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING or
+ @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED event handler.
+ */
wxRichTextStyleSheet* GetNewStyleSheet() const { return m_newStyleSheet; }
+
+ /**
+ Sets the new style sheet variable.
+ */
void SetNewStyleSheet(wxRichTextStyleSheet* sheet) { m_newStyleSheet = sheet; }
+ /**
+ Gets the range for the current operation.
+ */
const wxRichTextRange& GetRange() const { return m_range; }
+
+ /**
+ Sets the range variable.
+ */
void SetRange(const wxRichTextRange& range) { m_range = range; }
+ /**
+ Returns the character pressed, within a @c wxEVT_COMMAND_RICHTEXT_CHARACTER event.
+ */
wxChar GetCharacter() const { return m_char; }
+
+ /**
+ Sets the character variable.
+ */
void SetCharacter(wxChar ch) { m_char = ch; }
+ /**
+ Returns the container for which the event is relevant.
+ */
wxRichTextParagraphLayoutBox* GetContainer() const { return m_container; }
+
+ /**
+ Sets the container for which the event is relevant.
+ */
void SetContainer(wxRichTextParagraphLayoutBox* container) { m_container = container; }
+ /**
+ Returns the old container, for a focus change event.
+ */
wxRichTextParagraphLayoutBox* GetOldContainer() const { return m_oldContainer; }
+
+ /**
+ Sets the old container, for a focus change event.
+ */
void SetOldContainer(wxRichTextParagraphLayoutBox* container) { m_oldContainer = container; }
virtual wxEvent *Clone() const { return new wxRichTextEvent(*this); }
/////////////////////////////////////////////////////////////////////////////
-// Name: richtext/richtextbuffer.h
-// Purpose: interface of wxRichTextBuffer
-// Author: wxWidgets team
+// Name: wx/richtext/richtextbuffer.h
+// Purpose: Buffer for wxRichTextCtrl
+// Author: Julian Smart
+// Modified by:
+// Created: 2005-09-30
// RCS-ID: $Id$
+// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
+#ifndef _WX_RICHTEXTBUFFER_H_
+#define _WX_RICHTEXTBUFFER_H_
+/*
+
+ Data structures
+ ===============
+
+ Data is represented by a hierarchy of objects, all derived from
+ wxRichTextObject.
+
+ The top of the hierarchy is the buffer, a kind of wxRichTextParagraphLayoutBox.
+ These boxes will allow flexible placement of text boxes on a page, but
+ for now there is a single box representing the document, and this box is
+ a wxRichTextParagraphLayoutBox which contains further wxRichTextParagraph
+ objects, each of which can include text and images.
+
+ Each object maintains a range (start and end position) measured
+ from the start of the main parent box.
+ A paragraph object knows its range, and a text fragment knows its range
+ too. So, a character or image in a page has a position relative to the
+ start of the document, and a character in an embedded text box has
+ a position relative to that text box. For now, we will not be dealing with
+ embedded objects but it's something to bear in mind for later.
+
+ Note that internally, a range (5,5) represents a range of one character.
+ In the public wx[Rich]TextCtrl API, this would be passed to e.g. SetSelection
+ as (5,6). A paragraph with one character might have an internal range of (0, 1)
+ since the end of the paragraph takes up one position.
+
+ Layout
+ ======
+
+ When Layout is called on an object, it is given a size which the object
+ must limit itself to, or one or more flexible directions (vertical
+ or horizontal). So for example a centered paragraph is given the page
+ width to play with (minus any margins), but can extend indefinitely
+ in the vertical direction. The implementation of Layout can then
+ cache the calculated size and position within the parent.
+
+ */
/*!
- * File types in wxRichText context.
+ * Includes
+ */
+
+#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"
+#include "wx/variant.h"
+
+#if wxUSE_DATAOBJ
+#include "wx/dataobj.h"
+#endif
+
+// Compatibility
+//#define wxRichTextAttr wxTextAttr
+#define wxTextAttrEx wxTextAttr
+
+// Setting wxRICHTEXT_USE_OWN_CARET to 1 implements a
+// caret reliably without using wxClientDC in case there
+// are platform-specific problems with the generic caret.
+#if defined(__WXGTK__) || defined(__WXMAC__)
+#define wxRICHTEXT_USE_OWN_CARET 1
+#else
+#define wxRICHTEXT_USE_OWN_CARET 0
+#endif
+
+// Switch off for binary compatibility, on for faster drawing
+// Note: this seems to be buggy (overzealous use of extents) so
+// don't use for now
+#define wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING 0
+
+// The following two symbols determine whether an output implementation
+// is present. To switch the relevant one on, set wxRICHTEXT_USE_XMLDOCUMENT_OUTPUT in
+// richtextxml.cpp. By default, the faster direct output implementation is used.
+
+// Include the wxXmlDocument implementation for output
+#define wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT 1
+
+// Include the faster, direct implementation for output
+#define wxRICHTEXT_HAVE_DIRECT_OUTPUT 1
+
+/**
+ The line break character that can be embedded in content.
+ */
+
+extern WXDLLIMPEXP_RICHTEXT const wxChar wxRichTextLineBreakChar;
+
+/**
+ File types in wxRichText context.
*/
enum wxRichTextFileType
{
wxRICHTEXT_TYPE_PDF
};
-/*!
- * Flags determining the available space, passed to Layout
+/*
+ * Forward declarations
+ */
+
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCtrl;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextObject;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextImage;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCacheObject;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextObjectList;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextLine;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextParagraph;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextFileHandler;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextStyleSheet;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextListStyleDefinition;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextEvent;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextRenderer;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextBuffer;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextXMLHandler;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextParagraphLayoutBox;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextImageBlock;
+class WXDLLIMPEXP_FWD_XML wxXmlNode;
+class wxRichTextFloatCollector;
+class WXDLLIMPEXP_FWD_BASE wxDataInputStream;
+class WXDLLIMPEXP_FWD_BASE wxDataOutputStream;
+
+/**
+ Flags determining the available space, passed to Layout.
*/
#define wxRICHTEXT_FIXED_WIDTH 0x01
// the rect passed to Layout.
#define wxRICHTEXT_LAYOUT_SPECIFIED_RECT 0x10
-/*!
- * Flags to pass to Draw
+/**
+ Flags to pass to Draw
*/
// Ignore paragraph cache optimization, e.g. for printing purposes
// where one line may be drawn higher (on the next page) compared
// with the previous line
#define wxRICHTEXT_DRAW_IGNORE_CACHE 0x01
+#define wxRICHTEXT_DRAW_SELECTED 0x02
+#define wxRICHTEXT_DRAW_PRINT 0x04
+#define wxRICHTEXT_DRAW_GUIDELINES 0x08
-/*!
- * Flags returned from hit-testing
+/**
+ Flags returned from hit-testing, or passed to hit-test function.
*/
enum wxRichTextHitTestFlags
{
- /// The point was not on this object
+ // The point was not on this object
wxRICHTEXT_HITTEST_NONE = 0x01,
- /// The point was before the position returned from HitTest
+ // The point was before the position returned from HitTest
wxRICHTEXT_HITTEST_BEFORE = 0x02,
- /// The point was after the position returned from HitTest
+ // The point was after the position returned from HitTest
wxRICHTEXT_HITTEST_AFTER = 0x04,
- /// The point was on the position returned from HitTest
+ // The point was on the position returned from HitTest
wxRICHTEXT_HITTEST_ON = 0x08,
- /// The point was on space outside content
- wxRICHTEXT_HITTEST_OUTSIDE = 0x10
+ // The point was on space outside content
+ wxRICHTEXT_HITTEST_OUTSIDE = 0x10,
+
+ // Only do hit-testing at the current level (don't traverse into top-level objects)
+ wxRICHTEXT_HITTEST_NO_NESTED_OBJECTS = 0x20,
+
+ // Ignore floating objects
+ wxRICHTEXT_HITTEST_NO_FLOATING_OBJECTS = 0x40
};
-/*!
- * Flags for GetRangeSize
+/**
+ Flags for GetRangeSize.
*/
#define wxRICHTEXT_FORMATTED 0x01
#define wxRICHTEXT_CACHE_SIZE 0x04
#define wxRICHTEXT_HEIGHT_ONLY 0x08
-/*!
- * Flags for SetStyle/SetListStyle
+/**
+ Flags for SetStyle/SetListStyle.
*/
#define wxRICHTEXT_SETSTYLE_NONE 0x00
// Removes the given style instead of applying it
#define wxRICHTEXT_SETSTYLE_REMOVE 0x80
-/*!
- * Flags for text insertion
+/**
+ Flags for object insertion.
*/
#define wxRICHTEXT_INSERT_NONE 0x00
// flag to InsertFragment and DeleteRange to indicate the appropriate mode.
#define wxTEXT_ATTR_KEEP_FIRST_PARA_STYLE 0x10000000
-/*!
- * Default superscript/subscript font multiplication factor
+/**
+ Default superscript/subscript font multiplication factor.
*/
#define wxSCRIPT_MUL_FACTOR 1.5
+/**
+ The type for wxTextAttrDimension flags.
+ */
+typedef unsigned short wxTextAttrDimensionFlags;
/**
- @class wxRichTextBuffer
+ Miscellaneous text box flags
+ */
+enum wxTextBoxAttrFlags
+{
+ wxTEXT_BOX_ATTR_FLOAT = 0x00000001,
+ wxTEXT_BOX_ATTR_CLEAR = 0x00000002,
+ wxTEXT_BOX_ATTR_COLLAPSE_BORDERS = 0x00000004,
+ wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT = 0x00000008
+};
+
+/**
+ Whether a value is present, used in dimension flags.
+ */
+enum wxTextAttrValueFlags
+{
+ wxTEXT_ATTR_VALUE_VALID = 0x1000,
+ wxTEXT_ATTR_VALUE_VALID_MASK = 0x1000
+};
+
+/**
+ Units, included in the dimension value.
+ */
+enum wxTextAttrUnits
+{
+ wxTEXT_ATTR_UNITS_TENTHS_MM = 0x0001,
+ wxTEXT_ATTR_UNITS_PIXELS = 0x0002,
+ wxTEXT_ATTR_UNITS_PERCENTAGE = 0x0004,
+ wxTEXT_ATTR_UNITS_POINTS = 0x0008,
+
+ wxTEXT_ATTR_UNITS_MASK = 0x000F
+};
+
+/**
+ Position alternatives, included in the dimension flags.
+ */
+enum wxTextBoxAttrPosition
+{
+ wxTEXT_BOX_ATTR_POSITION_STATIC = 0x0000, // Default is static, i.e. as per normal layout
+ wxTEXT_BOX_ATTR_POSITION_RELATIVE = 0x0010, // Relative to the relevant edge
+ wxTEXT_BOX_ATTR_POSITION_ABSOLUTE = 0x0020,
+
+ wxTEXT_BOX_ATTR_POSITION_MASK = 0x00F0
+};
- This class represents the whole buffer associated with a wxRichTextCtrl.
+/**
+ @class wxTextAttrDimension
+
+ A class representing a rich text dimension, including units and position.
@library{wxrichtext}
@category{richtext}
- @see wxTextAttr, wxRichTextCtrl
+ @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimensions
*/
-class wxRichTextBuffer : public wxRichTextParagraphLayoutBox
+
+class WXDLLIMPEXP_RICHTEXT wxTextAttrDimension
{
public:
/**
Default constructor.
*/
- wxRichTextBuffer();
-
+ wxTextAttrDimension() { Reset(); }
/**
- Copy ctor.
+ Constructor taking value and units flag.
*/
- wxRichTextBuffer(const wxRichTextBuffer& obj);
+ wxTextAttrDimension(int value, wxTextAttrUnits units = wxTEXT_ATTR_UNITS_TENTHS_MM) { m_value = value; m_flags = units|wxTEXT_ATTR_VALUE_VALID; }
/**
- Destructor.
+ Resets the dimension value and flags.
*/
- virtual ~wxRichTextBuffer();
+ void Reset() { m_value = 0; m_flags = 0; }
/**
- Adds an event handler to the buffer's list of handlers.
-
- A buffer associated with a control has the control as the only event handler,
- but the application is free to add more if further notification is required.
- All handlers are notified of an event originating from the buffer, such as
- the replacement of a style sheet during loading.
-
- The buffer never deletes any of the event handlers, unless RemoveEventHandler()
- is called with @true as the second argument.
+ Partial equality test.
*/
- bool AddEventHandler(wxEvtHandler* handler);
+ bool EqPartial(const wxTextAttrDimension& dim) const;
- /**
- Adds a file handler.
+ /** Apply the dimension, but not those identical to @a compareWith if present.
*/
- static void AddHandler(wxRichTextFileHandler* handler);
+ bool Apply(const wxTextAttrDimension& dim, const wxTextAttrDimension* compareWith = NULL);
- /**
- Adds a paragraph of text.
+ /** 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.
*/
- virtual wxRichTextRange AddParagraph(const wxString& text,
- wxTextAttr* paraStyle = 0);
+ void CollectCommonAttributes(const wxTextAttrDimension& attr, wxTextAttrDimension& clashingAttr, wxTextAttrDimension& absentAttr);
/**
- Returns @true if the buffer is currently collapsing commands into a single
- notional command.
+ Equality operator.
*/
- virtual bool BatchingUndo() const;
+ bool operator==(const wxTextAttrDimension& dim) const { return m_value == dim.m_value && m_flags == dim.m_flags; }
/**
- Begins using alignment.
+ Returns the integer value of the dimension.
*/
- bool BeginAlignment(wxTextAttrAlignment alignment);
+ int GetValue() const { return m_value; }
/**
- Begins collapsing undo/redo commands. Note that this may not work properly
- if combining commands that delete or insert content, changing ranges for
- subsequent actions.
-
- @a cmdName should be the name of the combined command that will appear
- next to Undo and Redo in the edit menu.
- */
- virtual bool BeginBatchUndo(const wxString& cmdName);
+ Returns the floating-pointing value of the dimension in mm.
- /**
- Begin applying bold.
*/
- bool BeginBold();
+ float GetValueMM() const { return float(m_value) / 10.0; }
/**
- Begins applying the named character style.
+ Sets the value of the dimension in mm.
*/
- bool BeginCharacterStyle(const wxString& characterStyle);
+ void SetValueMM(float value) { m_value = (int) ((value * 10.0) + 0.5); m_flags |= wxTEXT_ATTR_VALUE_VALID; }
/**
- Begins using this font.
+ Sets the integer value of the dimension.
*/
- bool BeginFont(const wxFont& font);
+ void SetValue(int value) { m_value = value; m_flags |= wxTEXT_ATTR_VALUE_VALID; }
/**
- Begins using the given point size.
+ Sets the integer value of the dimension, passing dimension flags.
*/
- bool BeginFontSize(int pointSize);
+ void SetValue(int value, wxTextAttrDimensionFlags flags) { SetValue(value); m_flags = flags; }
/**
- Begins using italic.
+ Sets the integer value and units.
*/
- bool BeginItalic();
+ void SetValue(int value, wxTextAttrUnits units) { m_value = value; m_flags = units | wxTEXT_ATTR_VALUE_VALID; }
/**
- Begin using @a leftIndent for the left indent, and optionally @a leftSubIndent for
- the sub-indent. Both are expressed in tenths of a millimetre.
-
- The sub-indent is an offset from the left of the paragraph, and is used for all
- but the first line in a paragraph. A positive value will cause the first line to appear
- to the left of the subsequent lines, and a negative value will cause the first line to be
- indented relative to the subsequent lines.
+ Sets the dimension.
*/
- bool BeginLeftIndent(int leftIndent, int leftSubIndent = 0);
+ void SetValue(const wxTextAttrDimension& dim) { (*this) = dim; }
/**
- Begins line spacing using the specified value. @e spacing is a multiple, where
- 10 means single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
-
- The ::wxTextAttrLineSpacing enumeration values are defined for convenience.
+ Gets the units of the dimension.
*/
- bool BeginLineSpacing(int lineSpacing);
+ wxTextAttrUnits GetUnits() const { return (wxTextAttrUnits) (m_flags & wxTEXT_ATTR_UNITS_MASK); }
/**
- Begins using a specified list style.
- Optionally, you can also pass a level and a number.
+ Sets the units of the dimension.
*/
- bool BeginListStyle(const wxString& listStyle, int level = 1,
- int number = 1);
+ void SetUnits(wxTextAttrUnits units) { m_flags &= ~wxTEXT_ATTR_UNITS_MASK; m_flags |= units; }
/**
- Begins a numbered bullet.
-
- This call will be needed for each item in the list, and the
- application should take care of incrementing the numbering.
-
- @a bulletNumber is a number, usually starting with 1.
- @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
- @a bulletStyle is a bitlist of the following values:
-
- wxRichTextBuffer uses indentation to render a bulleted item.
- The left indent is the distance between the margin and the bullet.
- The content of the paragraph, including the first line, starts
- at leftMargin + leftSubIndent.
- So the distance between the left edge of the bullet and the
- left of the actual paragraph is leftSubIndent.
+ Gets the position flags.
*/
- bool BeginNumberedBullet(int bulletNumber, int leftIndent,
- int leftSubIndent,
- int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_ARABIC|wxTEXT_ATTR_BULLET_STYLE_PERIOD);
+ wxTextBoxAttrPosition GetPosition() const { return (wxTextBoxAttrPosition) (m_flags & wxTEXT_BOX_ATTR_POSITION_MASK); }
/**
- Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
- in tenths of a millimetre.
+ Sets the position flags.
*/
- bool BeginParagraphSpacing(int before, int after);
+ void SetPosition(wxTextBoxAttrPosition pos) { m_flags &= ~wxTEXT_BOX_ATTR_POSITION_MASK; m_flags |= pos; }
/**
- Begins applying the named paragraph style.
+ Returns @true if the dimension is valid.
*/
- bool BeginParagraphStyle(const wxString& paragraphStyle);
+ bool IsValid() const { return (m_flags & wxTEXT_ATTR_VALUE_VALID) != 0; }
/**
- Begins a right indent, specified in tenths of a millimetre.
+ Sets the valid flag.
*/
- bool BeginRightIndent(int rightIndent);
+ void SetValid(bool b) { m_flags &= ~wxTEXT_ATTR_VALUE_VALID_MASK; m_flags |= (b ? wxTEXT_ATTR_VALUE_VALID : 0); }
/**
- Begins applying a standard bullet, using one of the standard bullet names
- (currently @c standard/circle or @c standard/square.
-
- See BeginNumberedBullet() for an explanation of how indentation is used to
- render the bulleted paragraph.
+ Gets the dimension flags.
*/
- bool BeginStandardBullet(const wxString& bulletName,
- int leftIndent,
- int leftSubIndent,
- int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_STANDARD);
+ wxTextAttrDimensionFlags GetFlags() const { return m_flags; }
/**
- Begins using a specified style.
+ Sets the dimension flags.
*/
- virtual bool BeginStyle(const wxTextAttr& style);
+ void SetFlags(wxTextAttrDimensionFlags flags) { m_flags = flags; }
- /**
- Begins suppressing undo/redo commands. The way undo is suppressed may be
- implemented differently by each command.
- If not dealt with by a command implementation, then it will be implemented
- automatically by not storing the command in the undo history when the
- action is submitted to the command processor.
- */
- virtual bool BeginSuppressUndo();
+ int m_value;
+ wxTextAttrDimensionFlags m_flags;
+};
- /**
- Begins applying a symbol bullet, using a character from the current font.
+/**
+ @class wxTextAttrDimensions
+ A class for left, right, top and bottom dimensions.
- See BeginNumberedBullet() for an explanation of how indentation is used
- to render the bulleted paragraph.
- */
- bool BeginSymbolBullet(const wxString& symbol, int leftIndent,
- int leftSubIndent,
- int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_SYMBOL);
+ @library{wxrichtext}
+ @category{richtext}
- /**
- Begins using the specified text foreground colour.
- */
- bool BeginTextColour(const wxColour& colour);
+ @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
+*/
+class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensions
+{
+public:
/**
- Begins applying wxTEXT_ATTR_URL to the content.
-
- Pass a URL and optionally, a character style to apply, since it is common
- to mark a URL with a familiar style such as blue text with underlining.
+ Default constructor.
*/
- bool BeginURL(const wxString& url,
- const wxString& characterStyle = wxEmptyString);
+ wxTextAttrDimensions() {}
/**
- Begins using underline.
+ Resets the value and flags for all dimensions.
*/
- bool BeginUnderline();
+ void Reset() { m_left.Reset(); m_top.Reset(); m_right.Reset(); m_bottom.Reset(); }
/**
- Returns @true if content can be pasted from the clipboard.
+ Equality operator.
*/
- virtual bool CanPasteFromClipboard() const;
+ 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; }
/**
- Cleans up the file handlers.
- */
- static void CleanUpHandlers();
+ Partial equality test.
- /**
- Clears the buffer.
*/
- virtual void Clear();
+ bool EqPartial(const wxTextAttrDimensions& dims) const;
/**
- Clears the list style from the given range, clearing list-related attributes
- and applying any named paragraph style associated with each paragraph.
-
- @a flags is a bit list of the following:
- - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
-
- @see SetListStyle(), PromoteList(), NumberList()
- */
- virtual bool ClearListStyle(const wxRichTextRange& range,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
+ Apply border to 'this', but not if the same as @a compareWith.
- /**
- Clears the style stack.
*/
- virtual void ClearStyleStack();
+ bool Apply(const wxTextAttrDimensions& dims, const wxTextAttrDimensions* compareWith = NULL);
/**
- Clones the object.
- */
- virtual wxRichTextObject* Clone() const;
+ 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.
- /**
- Copies the given buffer.
*/
- void Copy(const wxRichTextBuffer& obj);
+ void CollectCommonAttributes(const wxTextAttrDimensions& attr, wxTextAttrDimensions& clashingAttr, wxTextAttrDimensions& absentAttr);
/**
- Copy the given range to the clipboard.
+ Remove specified attributes from this object.
*/
- virtual bool CopyToClipboard(const wxRichTextRange& range);
+ bool RemoveStyle(const wxTextAttrDimensions& attr);
/**
- Submits a command to delete the given range.
+ Gets the left dimension.
*/
- bool DeleteRangeWithUndo(const wxRichTextRange& range,
- wxRichTextCtrl* ctrl);
+ const wxTextAttrDimension& GetLeft() const { return m_left; }
+ wxTextAttrDimension& GetLeft() { return m_left; }
- //@{
/**
- Dumps the contents of the buffer for debugging purposes.
- */
- void Dump();
- void Dump(wxTextOutputStream& stream);
- //@}
+ Gets the right dimension.
- /**
- Ends alignment.
*/
- bool EndAlignment();
+ const wxTextAttrDimension& GetRight() const { return m_right; }
+ wxTextAttrDimension& GetRight() { return m_right; }
/**
- Ends all styles that have been started with a Begin... command.
- */
- virtual bool EndAllStyles();
+ Gets the top dimension.
- /**
- Ends collapsing undo/redo commands, and submits the combined command.
*/
- virtual bool EndBatchUndo();
+ const wxTextAttrDimension& GetTop() const { return m_top; }
+ wxTextAttrDimension& GetTop() { return m_top; }
/**
- Ends using bold.
- */
- bool EndBold();
+ Gets the bottom dimension.
- /**
- Ends using the named character style.
*/
- bool EndCharacterStyle();
+ const wxTextAttrDimension& GetBottom() const { return m_bottom; }
+ wxTextAttrDimension& GetBottom() { return m_bottom; }
- /**
- Ends using a font.
- */
- bool EndFont();
+ wxTextAttrDimension m_left;
+ wxTextAttrDimension m_top;
+ wxTextAttrDimension m_right;
+ wxTextAttrDimension m_bottom;
+};
- /**
- Ends using a point size.
- */
- bool EndFontSize();
+/**
+ @class wxTextAttrSize
+ A class for representing width and height.
- /**
- Ends using italic.
- */
- bool EndItalic();
+ @library{wxrichtext}
+ @category{richtext}
- /**
- Ends using a left indent.
- */
- bool EndLeftIndent();
+ @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
+*/
+class WXDLLIMPEXP_RICHTEXT wxTextAttrSize
+{
+public:
/**
- Ends using a line spacing.
+ Default constructor.
*/
- bool EndLineSpacing();
+ wxTextAttrSize() {}
/**
- Ends using a specified list style.
+ Resets the width and height dimensions.
*/
- bool EndListStyle();
+ void Reset() { m_width.Reset(); m_height.Reset(); }
/**
- Ends a numbered bullet.
+ Equality operator.
*/
- bool EndNumberedBullet();
+ bool operator==(const wxTextAttrSize& size) const { return m_width == size.m_width && m_height == size.m_height ; }
/**
- Ends paragraph spacing.
+ Partial equality test.
*/
- bool EndParagraphSpacing();
+ bool EqPartial(const wxTextAttrSize& dims) const;
/**
- Ends applying a named character style.
+ Apply border to this object, but not if the same as @a compareWith.
*/
- bool EndParagraphStyle();
+ bool Apply(const wxTextAttrSize& dims, const wxTextAttrSize* compareWith = NULL);
/**
- Ends using a right indent.
+ 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.
*/
- bool EndRightIndent();
+ void CollectCommonAttributes(const wxTextAttrSize& attr, wxTextAttrSize& clashingAttr, wxTextAttrSize& absentAttr);
/**
- Ends using a standard bullet.
+ Removes the specified attributes from this object.
*/
- bool EndStandardBullet();
+ bool RemoveStyle(const wxTextAttrSize& attr);
/**
- Ends the current style.
+ Returns the width.
*/
- virtual bool EndStyle();
+ wxTextAttrDimension& GetWidth() { return m_width; }
+ const wxTextAttrDimension& GetWidth() const { return m_width; }
/**
- Ends suppressing undo/redo commands.
+ Sets the width.
*/
- virtual bool EndSuppressUndo();
-
+ void SetWidth(int value, wxTextAttrDimensionFlags flags) { m_width.SetValue(value, flags); }
/**
- Ends using a symbol bullet.
+ Sets the width.
*/
- bool EndSymbolBullet();
-
+ void SetWidth(int value, wxTextAttrUnits units) { m_width.SetValue(value, units); }
/**
- Ends using a text foreground colour.
+ Sets the width.
*/
- bool EndTextColour();
+ void SetWidth(const wxTextAttrDimension& dim) { m_width.SetValue(dim); }
/**
- Ends applying a URL.
+ Gets the height.
*/
- bool EndURL();
+ wxTextAttrDimension& GetHeight() { return m_height; }
+ const wxTextAttrDimension& GetHeight() const { return m_height; }
/**
- Ends using underline.
+ Sets the height.
*/
- bool EndUnderline();
-
+ void SetHeight(int value, wxTextAttrDimensionFlags flags) { m_height.SetValue(value, flags); }
/**
- Finds a handler by type.
+ Sets the height.
*/
- static wxRichTextFileHandler* FindHandler(wxRichTextFileType imageType);
-
+ void SetHeight(int value, wxTextAttrUnits units) { m_height.SetValue(value, units); }
/**
- Finds a handler by extension and type.
+ Sets the height.
*/
- static wxRichTextFileHandler* FindHandler(const wxString& extension, wxRichTextFileType imageType);
+ void SetHeight(const wxTextAttrDimension& dim) { m_height.SetValue(dim); }
- /**
- Finds a handler by name.
- */
- static wxRichTextFileHandler* FindHandler(const wxString& name);
+ wxTextAttrDimension m_width;
+ wxTextAttrDimension m_height;
+};
- /**
- Finds a handler by filename or, if supplied, type.
- */
- static wxRichTextFileHandler* FindHandlerFilenameOrType(const wxString& filename, wxRichTextFileType imageType);
+/**
+ @class wxTextAttrDimensionConverter
+ A class to make it easier to convert dimensions.
- /**
- Gets the basic (overall) style.
+ @library{wxrichtext}
+ @category{richtext}
- This is the style of the whole buffer before further styles are applied,
- unlike the default style, which only affects the style currently being
- applied (for example, setting the default style to bold will cause
- subsequently inserted text to be bold).
- */
- virtual const wxTextAttr& GetBasicStyle() const;
+ @see wxRichTextAttr, wxRichTextCtrl, wxTextAttrDimension
+*/
+class WXDLLIMPEXP_RICHTEXT wxTextAttrDimensionConverter
+{
+public:
/**
- Gets the collapsed command.
+ Constructor.
*/
- virtual wxRichTextCommand* GetBatchedCommand() const;
-
+ wxTextAttrDimensionConverter(wxDC& dc, double scale = 1.0, const wxSize& parentSize = wxDefaultSize);
/**
- Gets the command processor.
- A text buffer always creates its own command processor when it is initialized.
+ Constructor.
*/
- wxCommandProcessor* GetCommandProcessor() const;
+ wxTextAttrDimensionConverter(int ppi, double scale = 1.0, const wxSize& parentSize = wxDefaultSize);
/**
- Returns the current default style, affecting the style currently being applied
- (for example, setting the default style to bold will cause subsequently
- inserted text to be bold).
+ Gets the pixel size for the given dimension.
*/
- virtual const wxTextAttr& GetDefaultStyle() const;
-
+ int GetPixels(const wxTextAttrDimension& dim, int direction = wxHORIZONTAL) const;
/**
- Gets a wildcard incorporating all visible handlers.
- If @a types is present, it 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.
+ Gets the mm size for the given dimension.
*/
- static wxString GetExtWildcard(bool combine = false, bool save = false,
- wxArrayInt* types = NULL);
+ int GetTenthsMM(const wxTextAttrDimension& dim) const;
/**
- Returns the list of file handlers.
+ Converts tenths of a mm to pixels.
*/
- static wxList& GetHandlers();
-
+ int ConvertTenthsMMToPixels(int units) const;
/**
- Returns the object to be used to render certain aspects of the content, such as
- bullets.
+ Converts pixels to tenths of a mm.
*/
- static wxRichTextRenderer* GetRenderer();
-
- /**
- Gets the attributes at the given position.
+ int ConvertPixelsToTenthsMM(int pixels) const;
- This function gets the combined style - that is, the style you see on the
- screen as a result of combining base style, paragraph style and character
- style attributes. To get the character or paragraph style alone,
- use GetUncombinedStyle().
- */
- virtual bool GetStyle(long position, wxTextAttr& style);
+ int m_ppi;
+ double m_scale;
+ wxSize m_parentSize;
+};
- /**
- This function gets a style representing the common, combined attributes in the
+/**
+ Border styles, used with wxTextAttrBorder.
+ */
+enum wxTextAttrBorderStyle
+{
+ wxTEXT_BOX_ATTR_BORDER_NONE = 0,
+ wxTEXT_BOX_ATTR_BORDER_SOLID = 1,
+ wxTEXT_BOX_ATTR_BORDER_DOTTED = 2,
+ wxTEXT_BOX_ATTR_BORDER_DASHED = 3,
+ wxTEXT_BOX_ATTR_BORDER_DOUBLE = 4,
+ wxTEXT_BOX_ATTR_BORDER_GROOVE = 5,
+ wxTEXT_BOX_ATTR_BORDER_RIDGE = 6,
+ wxTEXT_BOX_ATTR_BORDER_INSET = 7,
+ wxTEXT_BOX_ATTR_BORDER_OUTSET = 8
+};
+
+/**
+ Border style presence flags, used with wxTextAttrBorder.
+ */
+enum wxTextAttrBorderFlags
+{
+ wxTEXT_BOX_ATTR_BORDER_STYLE = 0x0001,
+ wxTEXT_BOX_ATTR_BORDER_COLOUR = 0x0002
+};
+
+/**
+ Border width symbols for qualitative widths, used with wxTextAttrBorder.
+ */
+enum wxTextAttrBorderWidth
+{
+ wxTEXT_BOX_ATTR_BORDER_THIN = -1,
+ wxTEXT_BOX_ATTR_BORDER_MEDIUM = -2,
+ wxTEXT_BOX_ATTR_BORDER_THICK = -3
+};
+
+/**
+ Float styles.
+ */
+enum wxTextBoxAttrFloatStyle
+{
+ wxTEXT_BOX_ATTR_FLOAT_NONE = 0,
+ wxTEXT_BOX_ATTR_FLOAT_LEFT = 1,
+ wxTEXT_BOX_ATTR_FLOAT_RIGHT = 2
+};
+
+/**
+ Clear styles.
+ */
+enum wxTextBoxAttrClearStyle
+{
+ wxTEXT_BOX_ATTR_CLEAR_NONE = 0,
+ wxTEXT_BOX_ATTR_CLEAR_LEFT = 1,
+ wxTEXT_BOX_ATTR_CLEAR_RIGHT = 2,
+ wxTEXT_BOX_ATTR_CLEAR_BOTH = 3
+};
+
+/**
+ Collapse mode styles. TODO: can they be switched on per side?
+ */
+enum wxTextBoxAttrCollapseMode
+{
+ wxTEXT_BOX_ATTR_COLLAPSE_NONE = 0,
+ wxTEXT_BOX_ATTR_COLLAPSE_FULL = 1
+};
+
+/**
+ Vertical alignment values.
+ */
+enum wxTextBoxAttrVerticalAlignment
+{
+ wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_NONE = 0,
+ wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_TOP = 1,
+ wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_CENTRE = 2,
+ wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_BOTTOM = 3
+};
+
+/**
+ @class wxTextAttrBorder
+ A class representing a rich text object border.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorders
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxTextAttrBorder
+{
+public:
+ /**
+ Default constructor.
+ */
+ wxTextAttrBorder() { Reset(); }
+
+ /**
+ Equality operator.
+ */
+ bool operator==(const wxTextAttrBorder& border) const
+ {
+ return m_flags == border.m_flags && m_borderStyle == border.m_borderStyle &&
+ m_borderColour == border.m_borderColour && m_borderWidth == border.m_borderWidth;
+ }
+
+ /**
+ Resets the border style, colour, width and flags.
+ */
+ void Reset() { m_borderStyle = 0; m_borderColour = 0; m_flags = 0; m_borderWidth.Reset(); }
+
+ /**
+ Partial equality test.
+ */
+ bool EqPartial(const wxTextAttrBorder& border) const;
+
+ /**
+ Applies the border to this object, but not if the same as @a compareWith.
+
+ */
+ bool Apply(const wxTextAttrBorder& border, const wxTextAttrBorder* compareWith = NULL);
+
+ /**
+ Removes the specified attributes from this object.
+ */
+ bool RemoveStyle(const wxTextAttrBorder& attr);
+
+ /**
+ 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.
+ */
+ void CollectCommonAttributes(const wxTextAttrBorder& attr, wxTextAttrBorder& clashingAttr, wxTextAttrBorder& absentAttr);
+
+ /**
+ Sets the border style.
+ */
+ void SetStyle(int style) { m_borderStyle = style; m_flags |= wxTEXT_BOX_ATTR_BORDER_STYLE; }
+
+ /**
+ Gets the border style.
+
+ */
+ int GetStyle() const { return m_borderStyle; }
+
+ /**
+ Sets the border colour.
+ */
+ void SetColour(unsigned long colour) { m_borderColour = colour; m_flags |= wxTEXT_BOX_ATTR_BORDER_COLOUR; }
+
+ /**
+ Sets the border colour.
+ */
+ void SetColour(const wxColour& colour) { m_borderColour = colour.GetRGB(); m_flags |= wxTEXT_BOX_ATTR_BORDER_COLOUR; }
+
+ /**
+ Gets the colour as a long.
+ */
+ unsigned long GetColourLong() const { return m_borderColour; }
+
+ /**
+ Gets the colour.
+ */
+ wxColour GetColour() const { return wxColour(m_borderColour); }
+
+ /**
+ Gets the border width.
+ */
+ wxTextAttrDimension& GetWidth() { return m_borderWidth; }
+ const wxTextAttrDimension& GetWidth() const { return m_borderWidth; }
+
+ /**
+ Sets the border width.
+ */
+ void SetWidth(const wxTextAttrDimension& width) { m_borderWidth = width; }
+ /**
+ Sets the border width.
+ */
+ void SetWidth(int value, wxTextAttrUnits units = wxTEXT_ATTR_UNITS_TENTHS_MM) { SetWidth(wxTextAttrDimension(value, units)); }
+
+ /**
+ True if the border has a valid style.
+ */
+ bool HasStyle() const { return (m_flags & wxTEXT_BOX_ATTR_BORDER_STYLE) != 0; }
+
+ /**
+ True if the border has a valid colour.
+ */
+ bool HasColour() const { return (m_flags & wxTEXT_BOX_ATTR_BORDER_COLOUR) != 0; }
+
+ /**
+ True if the border has a valid width.
+ */
+ bool HasWidth() const { return m_borderWidth.IsValid(); }
+
+ /**
+ True if the border is valid.
+ */
+ bool IsValid() const { return HasWidth(); }
+
+ /**
+ Set the valid flag for this border.
+ */
+ void MakeValid() { m_borderWidth.SetValid(true); }
+
+ /**
+ Returns the border flags.
+ */
+ int GetFlags() const { return m_flags; }
+
+ /**
+ Sets the border flags.
+ */
+ void SetFlags(int flags) { m_flags = flags; }
+
+ /**
+ Adds a border flag.
+ */
+ void AddFlag(int flag) { m_flags |= flag; }
+
+ /**
+ Removes a border flag.
+ */
+ void RemoveFlag(int flag) { m_flags &= ~flag; }
+
+ int m_borderStyle;
+ unsigned long m_borderColour;
+ wxTextAttrDimension m_borderWidth;
+ int m_flags;
+};
+
+/**
+ @class wxTextAttrBorders
+ A class representing a rich text object's borders.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextAttr, wxRichTextCtrl, wxRichTextAttrBorder
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxTextAttrBorders
+{
+public:
+ /**
+ Default constructor.
+ */
+ wxTextAttrBorders() { }
+
+ /**
+ Equality operator.
+ */
+ bool operator==(const wxTextAttrBorders& borders) const
+ {
+ return m_left == borders.m_left && m_right == borders.m_right &&
+ m_top == borders.m_top && m_bottom == borders.m_bottom;
+ }
+
+ /**
+ Sets the style of all borders.
+ */
+ void SetStyle(int style);
+
+ /**
+ Sets colour of all borders.
+ */
+ void SetColour(unsigned long colour);
+
+ /**
+ Sets the colour for all borders.
+ */
+ void SetColour(const wxColour& colour);
+
+ /**
+ Sets the width of all borders.
+ */
+ void SetWidth(const wxTextAttrDimension& width);
+
+ /**
+ Sets the width of all borders.
+ */
+ void SetWidth(int value, wxTextAttrUnits units = wxTEXT_ATTR_UNITS_TENTHS_MM) { SetWidth(wxTextAttrDimension(value, units)); }
+
+ /**
+ Resets all borders.
+ */
+ void Reset() { m_left.Reset(); m_right.Reset(); m_top.Reset(); m_bottom.Reset(); }
+
+ /**
+ Partial equality test.
+ */
+ bool EqPartial(const wxTextAttrBorders& borders) const;
+
+ /**
+ Applies border to this object, but not if the same as @a compareWith.
+ */
+ bool Apply(const wxTextAttrBorders& borders, const wxTextAttrBorders* compareWith = NULL);
+
+ /**
+ Removes the specified attributes from this object.
+ */
+ bool RemoveStyle(const wxTextAttrBorders& attr);
+
+ /**
+ 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.
+ */
+ void CollectCommonAttributes(const wxTextAttrBorders& attr, wxTextAttrBorders& clashingAttr, wxTextAttrBorders& absentAttr);
+
+ /**
+ Returns @true if all borders are valid.
+ */
+ bool IsValid() const { return m_left.IsValid() || m_right.IsValid() || m_top.IsValid() || m_bottom.IsValid(); }
+
+ /**
+ Returns the left border.
+ */
+ const wxTextAttrBorder& GetLeft() const { return m_left; }
+ wxTextAttrBorder& GetLeft() { return m_left; }
+
+ /**
+ Returns the right border.
+ */
+ const wxTextAttrBorder& GetRight() const { return m_right; }
+ wxTextAttrBorder& GetRight() { return m_right; }
+
+ /**
+ Returns the top border.
+ */
+ const wxTextAttrBorder& GetTop() const { return m_top; }
+ wxTextAttrBorder& GetTop() { return m_top; }
+
+ /**
+ Returns the bottom border.
+ */
+ const wxTextAttrBorder& GetBottom() const { return m_bottom; }
+ wxTextAttrBorder& GetBottom() { return m_bottom; }
+
+ wxTextAttrBorder m_left, m_right, m_top, m_bottom;
+
+};
+
+/**
+ @class wxTextBoxAttr
+ A class representing the box attributes of a rich text object.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextAttr, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxTextBoxAttr
+{
+public:
+ /**
+ Default constructor.
+ */
+ wxTextBoxAttr() { Init(); }
+
+ /**
+ Copy constructor.
+ */
+ wxTextBoxAttr(const wxTextBoxAttr& attr) { Init(); (*this) = attr; }
+
+ /**
+ Initialises this object.
+ */
+ void Init() { Reset(); }
+
+ /**
+ Resets this object.
+ */
+ void Reset();
+
+ // Copy. Unnecessary since we let it do a binary copy
+ //void Copy(const wxTextBoxAttr& attr);
+
+ // Assignment
+ //void operator= (const wxTextBoxAttr& attr);
+
+ /**
+ Equality test.
+ */
+ bool operator== (const wxTextBoxAttr& attr) const;
+
+ /**
+ Partial equality test, ignoring unset attributes.
+
+ */
+ bool EqPartial(const wxTextBoxAttr& attr) const;
+
+ /**
+ Merges the given attributes. If @a compareWith is non-NULL, then it will be used
+ to mask out those attributes that are the same in style and @a compareWith, for
+ situations where we don't want to explicitly set inherited attributes.
+ */
+ bool Apply(const wxTextBoxAttr& style, const wxTextBoxAttr* compareWith = NULL);
+
+ /**
+ 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.
+ */
+ void CollectCommonAttributes(const wxTextBoxAttr& attr, wxTextBoxAttr& clashingAttr, wxTextBoxAttr& absentAttr);
+
+ /**
+ Removes the specified attributes from this object.
+ */
+ bool RemoveStyle(const wxTextBoxAttr& attr);
+
+ /**
+ Sets the flags.
+ */
+ void SetFlags(int flags) { m_flags = flags; }
+
+ /**
+ Returns the flags.
+ */
+ int GetFlags() const { return m_flags; }
+
+ /**
+ Is this flag present?
+ */
+ bool HasFlag(wxTextBoxAttrFlags flag) const { return (m_flags & flag) != 0; }
+
+ /**
+ Removes this flag.
+ */
+ void RemoveFlag(wxTextBoxAttrFlags flag) { m_flags &= ~flag; }
+
+ /**
+ Adds this flag.
+ */
+ void AddFlag(wxTextBoxAttrFlags flag) { m_flags |= flag; }
+
+ /**
+ Returns @true if no attributes are set.
+ */
+ bool IsDefault() const;
+
+ /**
+ Returns the float mode.
+ */
+ wxTextBoxAttrFloatStyle GetFloatMode() const { return m_floatMode; }
+
+ /**
+ Sets the float mode.
+ */
+ void SetFloatMode(wxTextBoxAttrFloatStyle mode) { m_floatMode = mode; m_flags |= wxTEXT_BOX_ATTR_FLOAT; }
+
+ /**
+ Returns @true if float mode is active.
+ */
+ bool HasFloatMode() const { return HasFlag(wxTEXT_BOX_ATTR_FLOAT); }
+
+ /**
+ Returns @true if this object is floating.
+ */
+ bool IsFloating() const { return HasFloatMode() && GetFloatMode() != wxTEXT_BOX_ATTR_FLOAT_NONE; }
+
+ /**
+ Returns the clear mode - whether to wrap text after object. Currently unimplemented.
+ */
+ wxTextBoxAttrClearStyle GetClearMode() const { return m_clearMode; }
+
+ /**
+ Set the clear mode. Currently unimplemented.
+ */
+ void SetClearMode(wxTextBoxAttrClearStyle mode) { m_clearMode = mode; m_flags |= wxTEXT_BOX_ATTR_CLEAR; }
+
+ /**
+ Returns @true if we have a clear flag.
+ */
+ bool HasClearMode() const { return HasFlag(wxTEXT_BOX_ATTR_CLEAR); }
+
+ /**
+ Returns the collapse mode - whether to collapse borders. Currently unimplemented.
+ */
+ wxTextBoxAttrCollapseMode GetCollapseBorders() const { return m_collapseMode; }
+
+ /**
+ Sets the collapse mode - whether to collapse borders. Currently unimplemented.
+ */
+ void SetCollapseBorders(wxTextBoxAttrCollapseMode collapse) { m_collapseMode = collapse; m_flags |= wxTEXT_BOX_ATTR_COLLAPSE_BORDERS; }
+
+ /**
+ Returns @true if the collapse borders flag is present.
+ */
+ bool HasCollapseBorders() const { return HasFlag(wxTEXT_BOX_ATTR_COLLAPSE_BORDERS); }
+
+ /**
+ Returns the vertical alignment.
+ */
+ wxTextBoxAttrVerticalAlignment GetVerticalAlignment() const { return m_verticalAlignment; }
+
+ /**
+ Sets the vertical alignment.
+ */
+ void SetVerticalAlignment(wxTextBoxAttrVerticalAlignment verticalAlignment) { m_verticalAlignment = verticalAlignment; m_flags |= wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT; }
+
+ /**
+ Returns @true if a vertical alignment flag is present.
+ */
+ bool HasVerticalAlignment() const { return HasFlag(wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT); }
+
+ /**
+ Returns the margin values.
+ */
+ wxTextAttrDimensions& GetMargins() { return m_margins; }
+ const wxTextAttrDimensions& GetMargins() const { return m_margins; }
+
+ /**
+ Returns the left margin.
+ */
+ wxTextAttrDimension& GetLeftMargin() { return m_margins.m_left; }
+ const wxTextAttrDimension& GetLeftMargin() const { return m_margins.m_left; }
+
+ /**
+ Returns the right margin.
+ */
+ wxTextAttrDimension& GetRightMargin() { return m_margins.m_right; }
+ const wxTextAttrDimension& GetRightMargin() const { return m_margins.m_right; }
+
+ /**
+ Returns the top margin.
+ */
+ wxTextAttrDimension& GetTopMargin() { return m_margins.m_top; }
+ const wxTextAttrDimension& GetTopMargin() const { return m_margins.m_top; }
+
+ /**
+ Returns the bottom margin.
+ */
+ wxTextAttrDimension& GetBottomMargin() { return m_margins.m_bottom; }
+ const wxTextAttrDimension& GetBottomMargin() const { return m_margins.m_bottom; }
+
+ /**
+ Returns the position.
+ */
+ wxTextAttrDimensions& GetPosition() { return m_position; }
+ const wxTextAttrDimensions& GetPosition() const { return m_position; }
+
+ /**
+ Returns the left position.
+ */
+ wxTextAttrDimension& GetLeft() { return m_position.m_left; }
+ const wxTextAttrDimension& GetLeft() const { return m_position.m_left; }
+
+ /**
+ Returns the right position.
+ */
+ wxTextAttrDimension& GetRight() { return m_position.m_right; }
+ const wxTextAttrDimension& GetRight() const { return m_position.m_right; }
+
+ /**
+ Returns the top position.
+ */
+ wxTextAttrDimension& GetTop() { return m_position.m_top; }
+ const wxTextAttrDimension& GetTop() const { return m_position.m_top; }
+
+ /**
+ Returns the bottom position.
+ */
+ wxTextAttrDimension& GetBottom() { return m_position.m_bottom; }
+ const wxTextAttrDimension& GetBottom() const { return m_position.m_bottom; }
+
+ /**
+ Returns the padding values.
+ */
+ wxTextAttrDimensions& GetPadding() { return m_padding; }
+ const wxTextAttrDimensions& GetPadding() const { return m_padding; }
+
+ /**
+ Returns the left padding value.
+ */
+ wxTextAttrDimension& GetLeftPadding() { return m_padding.m_left; }
+ const wxTextAttrDimension& GetLeftPadding() const { return m_padding.m_left; }
+
+ /**
+ Returns the right padding value.
+ */
+ wxTextAttrDimension& GetRightPadding() { return m_padding.m_right; }
+ const wxTextAttrDimension& GetRightPadding() const { return m_padding.m_right; }
+
+ /**
+ Returns the top padding value.
+ */
+ wxTextAttrDimension& GetTopPadding() { return m_padding.m_top; }
+ const wxTextAttrDimension& GetTopPadding() const { return m_padding.m_top; }
+
+ /**
+ Returns the bottom padding value.
+ */
+ wxTextAttrDimension& GetBottomPadding() { return m_padding.m_bottom; }
+ const wxTextAttrDimension& GetBottomPadding() const { return m_padding.m_bottom; }
+
+ /**
+ Returns the borders.
+ */
+ wxTextAttrBorders& GetBorder() { return m_border; }
+ const wxTextAttrBorders& GetBorder() const { return m_border; }
+
+ /**
+ Returns the left border.
+ */
+ wxTextAttrBorder& GetLeftBorder() { return m_border.m_left; }
+ const wxTextAttrBorder& GetLeftBorder() const { return m_border.m_left; }
+
+ /**
+ Returns the top border.
+ */
+ wxTextAttrBorder& GetTopBorder() { return m_border.m_top; }
+ const wxTextAttrBorder& GetTopBorder() const { return m_border.m_top; }
+
+ /**
+ Returns the right border.
+ */
+ wxTextAttrBorder& GetRightBorder() { return m_border.m_right; }
+ const wxTextAttrBorder& GetRightBorder() const { return m_border.m_right; }
+
+ /**
+ Returns the bottom border.
+ */
+ wxTextAttrBorder& GetBottomBorder() { return m_border.m_bottom; }
+ const wxTextAttrBorder& GetBottomBorder() const { return m_border.m_bottom; }
+
+ /**
+ Returns the outline.
+ */
+ wxTextAttrBorders& GetOutline() { return m_outline; }
+ const wxTextAttrBorders& GetOutline() const { return m_outline; }
+
+ /**
+ Returns the left outline.
+ */
+ wxTextAttrBorder& GetLeftOutline() { return m_outline.m_left; }
+ const wxTextAttrBorder& GetLeftOutline() const { return m_outline.m_left; }
+
+ /**
+ Returns the top outline.
+ */
+ wxTextAttrBorder& GetTopOutline() { return m_outline.m_top; }
+ const wxTextAttrBorder& GetTopOutline() const { return m_outline.m_top; }
+
+ /**
+ Returns the right outline.
+ */
+ wxTextAttrBorder& GetRightOutline() { return m_outline.m_right; }
+ const wxTextAttrBorder& GetRightOutline() const { return m_outline.m_right; }
+
+ /**
+ Returns the bottom outline.
+ */
+ wxTextAttrBorder& GetBottomOutline() { return m_outline.m_bottom; }
+ const wxTextAttrBorder& GetBottomOutline() const { return m_outline.m_bottom; }
+
+ /**
+ Returns the object size.
+ */
+ wxTextAttrSize& GetSize() { return m_size; }
+ const wxTextAttrSize& GetSize() const { return m_size; }
+
+ /**
+ Sets the object size.
+ */
+ void SetSize(const wxTextAttrSize& sz) { m_size = sz; }
+
+ /**
+ Returns the object width.
+ */
+ wxTextAttrDimension& GetWidth() { return m_size.m_width; }
+ const wxTextAttrDimension& GetWidth() const { return m_size.m_width; }
+
+ /**
+ Returns the object height.
+ */
+ wxTextAttrDimension& GetHeight() { return m_size.m_height; }
+ const wxTextAttrDimension& GetHeight() const { return m_size.m_height; }
+
+public:
+
+ int m_flags;
+
+ wxTextAttrDimensions m_margins;
+ wxTextAttrDimensions m_padding;
+ wxTextAttrDimensions m_position;
+
+ wxTextAttrSize m_size;
+
+ wxTextAttrBorders m_border;
+ wxTextAttrBorders m_outline;
+
+ wxTextBoxAttrFloatStyle m_floatMode;
+ wxTextBoxAttrClearStyle m_clearMode;
+ wxTextBoxAttrCollapseMode m_collapseMode;
+ wxTextBoxAttrVerticalAlignment m_verticalAlignment;
+};
+
+/**
+ @class wxRichTextAttr
+ A class representing enhanced attributes for rich text objects.
+ This adds a wxTextBoxAttr member to the basic wxTextAttr class.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextAttr, wxTextBoxAttr, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextAttr: public wxTextAttr
+{
+public:
+ /**
+ Constructor taking a wxTextAttr.
+ */
+ wxRichTextAttr(const wxTextAttr& attr) { wxTextAttr::Copy(attr); }
+
+ /**
+ Copy constructor.
+ */
+ wxRichTextAttr(const wxRichTextAttr& attr): wxTextAttr() { Copy(attr); }
+
+ /**
+ Default constructor.
+ */
+ wxRichTextAttr() {}
+
+ /**
+ Copy function.
+ */
+ void Copy(const wxRichTextAttr& attr);
+
+ /**
+ Assignment operator.
+ */
+ void operator=(const wxRichTextAttr& attr) { Copy(attr); }
+
+ /**
+ Assignment operator.
+ */
+ void operator=(const wxTextAttr& attr) { wxTextAttr::Copy(attr); }
+
+ /**
+ Equality test.
+ */
+ bool operator==(const wxRichTextAttr& attr) const;
+
+ /**
+ Partial equality test taking comparison object into account.
+ */
+ bool EqPartial(const wxRichTextAttr& attr) const;
+
+ /**
+ Merges the given attributes. If @a compareWith
+ is non-NULL, then it will be used to mask out those attributes that are the same in style
+ and @a compareWith, for situations where we don't want to explicitly set inherited attributes.
+ */
+ bool Apply(const wxRichTextAttr& style, const wxRichTextAttr* compareWith = NULL);
+
+ /**
+ 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.
+ */
+ void CollectCommonAttributes(const wxRichTextAttr& attr, wxRichTextAttr& clashingAttr, wxRichTextAttr& absentAttr);
+
+ /**
+ Removes the specified attributes from this object.
+ */
+ bool RemoveStyle(const wxRichTextAttr& attr);
+
+ /**
+ Returns the text box attributes.
+ */
+ wxTextBoxAttr& GetTextBoxAttr() { return m_textBoxAttr; }
+ const wxTextBoxAttr& GetTextBoxAttr() const { return m_textBoxAttr; }
+
+ /**
+ Set the text box attributes.
+ */
+ void SetTextBoxAttr(const wxTextBoxAttr& attr) { m_textBoxAttr = attr; }
+
+ wxTextBoxAttr m_textBoxAttr;
+};
+
+WX_DECLARE_USER_EXPORTED_OBJARRAY(wxVariant, wxRichTextVariantArray, WXDLLIMPEXP_RICHTEXT);
+
+/**
+ @class wxRichTextProperties
+ A simple property class using wxVariants. This is used to give each rich text object the
+ ability to store custom properties that can be used by the application.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextBuffer, wxRichTextObject, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextProperties: public wxObject
+{
+DECLARE_DYNAMIC_CLASS(wxRichTextProperties)
+public:
+
+ /**
+ Default constructor.
+ */
+ wxRichTextProperties() {}
+
+ /**
+ Copy constructor.
+ */
+ wxRichTextProperties(const wxRichTextProperties& props): wxObject() { Copy(props); }
+
+ /**
+ Assignment operator.
+ */
+ void operator=(const wxRichTextProperties& props) { Copy(props); }
+
+ /**
+ Equality operator.
+ */
+ bool operator==(const wxRichTextProperties& props) const;
+
+ /**
+ Copies from @a props.
+ */
+ void Copy(const wxRichTextProperties& props) { m_properties = props.m_properties; }
+
+ /**
+ Returns the variant at the given index.
+ */
+ const wxVariant& operator[](size_t idx) const { return m_properties[idx]; }
+
+ /**
+ Returns the variant at the given index.
+ */
+ wxVariant& operator[](size_t idx) { return m_properties[idx]; }
+
+ /**
+ Clears the properties.
+ */
+ void Clear() { m_properties.Clear(); }
+
+ /**
+ Returns the array of variants implementing the properties.
+ */
+ const wxRichTextVariantArray& GetProperties() const { return m_properties; }
+
+ /**
+ Returns the array of variants implementing the properties.
+ */
+ wxRichTextVariantArray& GetProperties() { return m_properties; }
+
+ /**
+ Sets the array of variants.
+ */
+ void SetProperties(const wxRichTextVariantArray& props) { m_properties = props; }
+
+ /**
+ Returns all the property names.
+ */
+ wxArrayString GetPropertyNames() const;
+
+ /**
+ Returns a count of the properties.
+ */
+ size_t GetCount() const { return m_properties.GetCount(); }
+
+ /**
+ Returns @true if the given property is found.
+ */
+ bool HasProperty(const wxString& name) const { return Find(name) != -1; }
+
+ /**
+ Finds the given property.
+ */
+ int Find(const wxString& name) const;
+
+ /**
+ Gets the property variant by name.
+ */
+ const wxVariant& GetProperty(const wxString& name) const;
+
+ /**
+ Finds or creates a property with the given name, returning a pointer to the variant.
+ */
+ wxVariant* FindOrCreateProperty(const wxString& name);
+
+ /**
+ Gets the value of the named property as a string.
+ */
+ wxString GetPropertyString(const wxString& name) const;
+
+ /**
+ Gets the value of the named property as a long integer.
+ */
+ long GetPropertyLong(const wxString& name) const;
+
+ /**
+ Gets the value of the named property as a boolean.
+ */
+ bool GetPropertyBool(const wxString& name) const;
+
+ /**
+ Gets the value of the named property as a double.
+ */
+ double GetPropertyDouble(const wxString& name) const;
+
+ /**
+ Sets the property by passing a variant which contains a name and value.
+ */
+ void SetProperty(const wxVariant& variant);
+
+ /**
+ Sets a property by name and variant.
+ */
+ void SetProperty(const wxString& name, const wxVariant& variant);
+
+ /**
+ Sets a property by name and string value.
+ */
+ void SetProperty(const wxString& name, const wxString& value);
+
+ /**
+ Sets property by name and long integer value.
+ */
+ void SetProperty(const wxString& name, long value);
+
+ /**
+ Sets property by name and double value.
+ */
+ void SetProperty(const wxString& name, double value);
+
+ /**
+ Sets property by name and boolean value.
+ */
+ void SetProperty(const wxString& name, bool value);
+
+protected:
+ wxRichTextVariantArray m_properties;
+};
+
+
+/**
+ @class wxRichTextFontTable
+ Manages quick access to a pool of fonts for rendering rich text.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextBuffer, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextFontTable: public wxObject
+{
+public:
+ /**
+ Default constructor.
+ */
+ wxRichTextFontTable();
+
+ /**
+ Copy constructor.
+ */
+ wxRichTextFontTable(const wxRichTextFontTable& table);
+ virtual ~wxRichTextFontTable();
+
+ /**
+ Returns @true if the font table is valid.
+ */
+ bool IsOk() const { return m_refData != NULL; }
+
+ /**
+ Finds a font for the given attribute object.
+ */
+ wxFont FindFont(const wxRichTextAttr& fontSpec);
+
+ /**
+ Clears the font table.
+ */
+ void Clear();
+
+ /**
+ Assignment operator.
+ */
+ void operator= (const wxRichTextFontTable& table);
+
+ /**
+ Equality operator.
+ */
+ bool operator == (const wxRichTextFontTable& table) const;
+
+ /**
+ Inequality operator.
+ */
+ bool operator != (const wxRichTextFontTable& table) const { return !(*this == table); }
+
+protected:
+
+ DECLARE_DYNAMIC_CLASS(wxRichTextFontTable)
+};
+
+/**
+ @class wxRichTextRange
+
+ This stores beginning and end positions for a range of data.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextBuffer, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextRange
+{
+public:
+// Constructors
+
+ /**
+ Default constructor.
+ */
+ wxRichTextRange() { m_start = 0; m_end = 0; }
+
+ /**
+ Constructor taking start and end positions.
+ */
+ wxRichTextRange(long start, long end) { m_start = start; m_end = end; }
+
+ /**
+ Copy constructor.
+ */
+ wxRichTextRange(const wxRichTextRange& range) { m_start = range.m_start; m_end = range.m_end; }
+ ~wxRichTextRange() {}
+
+ /**
+ Assigns @a range to this range.
+ */
+ void operator =(const wxRichTextRange& range) { m_start = range.m_start; m_end = range.m_end; }
+
+ /**
+ Equality operator. Returns @true if @a range is the same as this range.
+ */
+ bool operator ==(const wxRichTextRange& range) const { return (m_start == range.m_start && m_end == range.m_end); }
+
+ /**
+ Inequality operator.
+ */
+ bool operator !=(const wxRichTextRange& range) const { return (m_start != range.m_start || m_end != range.m_end); }
+
+ /**
+ Subtracts a range from this range.
+ */
+ wxRichTextRange operator -(const wxRichTextRange& range) const { return wxRichTextRange(m_start - range.m_start, m_end - range.m_end); }
+
+ /**
+ Adds a range to this range.
+ */
+ wxRichTextRange operator +(const wxRichTextRange& range) const { return wxRichTextRange(m_start + range.m_start, m_end + range.m_end); }
+
+ /**
+ Sets the range start and end positions.
+ */
+ void SetRange(long start, long end) { m_start = start; m_end = end; }
+
+ /**
+ Sets the start position.
+ */
+ void SetStart(long start) { m_start = start; }
+
+ /**
+ Returns the start position.
+ */
+ long GetStart() const { return m_start; }
+
+ /**
+ Sets the end position.
+ */
+ void SetEnd(long end) { m_end = end; }
+
+ /**
+ Gets the end position.
+ */
+ long GetEnd() const { return m_end; }
+
+ /**
+ Returns true if this range is completely outside @a range.
+ */
+ bool IsOutside(const wxRichTextRange& range) const { return range.m_start > m_end || range.m_end < m_start; }
+
+ /**
+ Returns true if this range is completely within @a range.
+ */
+ bool IsWithin(const wxRichTextRange& range) const { return m_start >= range.m_start && m_end <= range.m_end; }
+
+ /**
+ Returns true if @a pos was within the range. Does not match if the range is empty.
+ */
+ bool Contains(long pos) const { return pos >= m_start && pos <= m_end ; }
+
+ /**
+ Limit this range to be within @a range.
+ */
+ bool LimitTo(const wxRichTextRange& range) ;
+
+ /**
+ Gets the length of the range.
+ */
+ long GetLength() const { return m_end - m_start + 1; }
+
+ /**
+ Swaps the start and end.
+ */
+ void Swap() { long tmp = m_start; m_start = m_end; m_end = tmp; }
+
+ /**
+ Converts the API-standard range, whose end is one past the last character in
+ the range, to the internal form, which uses the first and last character
+ positions of the range. In other words, one is subtracted from the end position.
+ (n, n) is the range of a single character.
+ */
+ wxRichTextRange ToInternal() const { return wxRichTextRange(m_start, m_end-1); }
+
+ /**
+ Converts the internal range, which uses the first and last character positions
+ of the range, to the API-standard range, whose end is one past the last
+ character in the range. In other words, one is added to the end position.
+ (n, n+1) is the range of a single character.
+ */
+ wxRichTextRange FromInternal() const { return wxRichTextRange(m_start, m_end+1); }
+
+protected:
+ long m_start;
+ long m_end;
+};
+
+WX_DECLARE_USER_EXPORTED_OBJARRAY(wxRichTextRange, wxRichTextRangeArray, WXDLLIMPEXP_RICHTEXT);
+
+#define wxRICHTEXT_ALL wxRichTextRange(-2, -2)
+#define wxRICHTEXT_NONE wxRichTextRange(-1, -1)
+
+#define wxRICHTEXT_NO_SELECTION wxRichTextRange(-2, -2)
+
+/**
+ @class wxRichTextSelection
+
+ Stores selection information. The selection does not have to be contiguous, though currently non-contiguous
+ selections are only supported for a range of table cells (a geometric block of cells can consist
+ of a set of non-contiguous positions).
+
+ The selection consists of an array of ranges, and the container that is the context for the selection. It
+ follows that a single selection object can only represent ranges with the same parent container.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextBuffer, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextSelection
+{
+public:
+ /**
+ Copy constructor.
+ */
+ wxRichTextSelection(const wxRichTextSelection& sel) { Copy(sel); }
+
+ /**
+ Creates a selection from a range and a container.
+ */
+ wxRichTextSelection(const wxRichTextRange& range, wxRichTextParagraphLayoutBox* container) { m_ranges.Add(range); m_container = container; }
+
+ /**
+ Default constructor.
+ */
+ wxRichTextSelection() { Reset(); }
+
+ /**
+ Resets the selection.
+ */
+ void Reset() { m_ranges.Clear(); m_container = NULL; }
+
+ /**
+ Sets the selection.
+ */
+
+ void Set(const wxRichTextRange& range, wxRichTextParagraphLayoutBox* container)
+ { m_ranges.Clear(); m_ranges.Add(range); m_container = container; }
+
+ /**
+ Adds a range to the selection.
+ */
+ void Add(const wxRichTextRange& range)
+ { m_ranges.Add(range); }
+
+ /**
+ Sets the selections from an array of ranges and a container object.
+ */
+ void Set(const wxRichTextRangeArray& ranges, wxRichTextParagraphLayoutBox* container)
+ { m_ranges = ranges; m_container = container; }
+
+ /**
+ Copies from @a sel.
+ */
+ void Copy(const wxRichTextSelection& sel)
+ { m_ranges = sel.m_ranges; m_container = sel.m_container; }
+
+ /**
+ Assignment operator.
+ */
+ void operator=(const wxRichTextSelection& sel) { Copy(sel); }
+
+ /**
+ Equality operator.
+ */
+ bool operator==(const wxRichTextSelection& sel) const;
+
+ /**
+ Index operator.
+ */
+ wxRichTextRange operator[](size_t i) const { return GetRange(i); }
+
+ /**
+ Returns the selection ranges.
+ */
+ wxRichTextRangeArray& GetRanges() { return m_ranges; }
+
+ /**
+ Returns the selection ranges.
+ */
+ const wxRichTextRangeArray& GetRanges() const { return m_ranges; }
+
+ /**
+ Sets the selection ranges.
+ */
+ void SetRanges(const wxRichTextRangeArray& ranges) { m_ranges = ranges; }
+
+ /**
+ Returns the number of ranges in the selection.
+ */
+ size_t GetCount() const { return m_ranges.GetCount(); }
+
+ /**
+ Returns the range at the given index.
+
+ */
+ wxRichTextRange GetRange(size_t i) const { return m_ranges[i]; }
+
+ /**
+ Returns the first range if there is one, otherwise wxRICHTEXT_NO_SELECTION.
+ */
+ wxRichTextRange GetRange() const { return (m_ranges.GetCount() > 0) ? (m_ranges[0]) : wxRICHTEXT_NO_SELECTION; }
+
+ /**
+ Sets a single range.
+ */
+ void SetRange(const wxRichTextRange& range) { m_ranges.Clear(); m_ranges.Add(range); }
+
+ /**
+ Returns the container for which the selection is valid.
+ */
+ wxRichTextParagraphLayoutBox* GetContainer() const { return m_container; }
+
+ /**
+ Sets the container for which the selection is valid.
+ */
+ void SetContainer(wxRichTextParagraphLayoutBox* container) { m_container = container; }
+
+ /**
+ Returns @true if the selection is valid.
+ */
+ bool IsValid() const { return m_ranges.GetCount() > 0 && GetContainer(); }
+
+ /**
+ Returns the selection appropriate to the specified object, if any; returns an empty array if none
+ at the level of the object's container.
+ */
+ wxRichTextRangeArray GetSelectionForObject(wxRichTextObject* obj) const;
+
+ /**
+ Returns @true if the given position is within the selection.
+ */
+ bool WithinSelection(long pos, wxRichTextObject* obj) const;
+
+ /**
+ Returns @true if the given position is within the selection.
+
+ */
+ bool WithinSelection(long pos) const { return WithinSelection(pos, m_ranges); }
+
+ /**
+ Returns @true if the given position is within the selection range.
+ */
+ static bool WithinSelection(long pos, const wxRichTextRangeArray& ranges);
+
+ /**
+ Returns @true if the given range is within the selection range.
+ */
+ static bool WithinSelection(const wxRichTextRange& range, const wxRichTextRangeArray& ranges);
+
+ wxRichTextRangeArray m_ranges;
+ wxRichTextParagraphLayoutBox* m_container;
+};
+
+/**
+ @class wxRichTextObject
+
+ This is the base for drawable rich text objects.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextBuffer, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextObject: public wxObject
+{
+ DECLARE_CLASS(wxRichTextObject)
+public:
+ /**
+ Constructor, taking an optional parent pointer.
+ */
+ wxRichTextObject(wxRichTextObject* parent = NULL);
+
+ virtual ~wxRichTextObject();
+
+// Overridables
+
+ /**
+ 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, 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.
+ */
+ virtual bool Layout(wxDC& dc, const wxRect& rect, int style) = 0;
+
+ /**
+ Hit-testing: returns a flag indicating hit test details, plus
+ information about position. @a contextObj is returned to specify what object
+ position is relevant to, since otherwise there's an ambiguity.
+ @ obj might not be a child of @a contextObj, since we may be referring to the container itself
+ if we have no hit on a child - for example if we click outside an object.
+
+ The function puts the position in @a textPosition if one is found.
+ @a pt is in logical units (a zero y position is at the beginning of the buffer).
+
+ @return One of the ::wxRichTextHitTestFlags values.
+ */
+
+ virtual int HitTest(wxDC& dc, 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), long WXUNUSED(index), wxPoint& WXUNUSED(pt), int* WXUNUSED(height), bool WXUNUSED(forceLineStart)) { return false; }
+
+ /**
+ 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; }
+
+ /**
+ 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, int flags, wxPoint position = wxPoint(0,0), 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; }
+
+ /**
+ 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); }
+
+ /**
+ Deletes the given range.
+ */
+ virtual bool DeleteRange(const wxRichTextRange& WXUNUSED(range)) { return false; }
+
+ /**
+ Returns @true if the object is empty.
+ */
+ virtual bool IsEmpty() const { return false; }
+
+ /**
+ Returns @true if this class of object is floatable.
+ */
+ virtual bool IsFloatable() const { return false; }
+
+ /**
+ Returns @true if this object is currently floating.
+ */
+ virtual bool IsFloating() const { return GetAttributes().GetTextBoxAttr().IsFloating(); }
+
+ /**
+ Returns the floating direction.
+ */
+ virtual int GetFloatDirection() const { return GetAttributes().GetTextBoxAttr().GetFloatMode(); }
+
+ /**
+ Returns any text in this object for the given range.
+ */
+ virtual wxString GetTextForRange(const wxRichTextRange& WXUNUSED(range)) const { return wxEmptyString; }
+
+ /**
+ Returns @true if this object can merge itself with the given one.
+ */
+ virtual bool CanMerge(wxRichTextObject* WXUNUSED(object)) 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; }
+
+ /**
+ Dump object data to the given output stream for debugging.
+ */
+ virtual void Dump(wxTextOutputStream& stream);
+
+ /**
+ Returns @true if we can edit the object's properties via a GUI.
+ */
+ virtual bool CanEditProperties() const { return false; }
+
+ /**
+ Edits the object's properties via a GUI.
+ */
+ virtual bool EditProperties(wxWindow* WXUNUSED(parent), wxRichTextBuffer* WXUNUSED(buffer)) { return false; }
+
+ /**
+ Returns the label to be used for the properties context menu item.
+ */
+ virtual wxString GetPropertiesMenuLabel() const { return wxEmptyString; }
+
+ /**
+ 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; }
+
+#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
+ /**
+ Exports this object directly to the given stream, bypassing the creation of a wxXmlNode hierarchy.
+ This method is considerably faster than creating a tree first. However, both versions of ExportXML must be
+ implemented so that if the tree method is made efficient in the future, we can deprecate the
+ more verbose direct output method. Compiled only if wxRICHTEXT_HAVE_DIRECT_OUTPUT is defined (on by default).
+ */
+ virtual bool ExportXML(wxOutputStream& stream, int indent, wxRichTextXMLHandler* handler);
+#endif
+
+#if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
+ /**
+ Exports this object to the given parent node, usually creating at least one child node.
+ This method is less efficient than the direct-to-stream method but is retained to allow for
+ switching to this method if we make it more efficient. Compiled only if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT is defined
+ (on by default).
+ */
+ virtual bool ExportXML(wxXmlNode* parent, wxRichTextXMLHandler* handler);
+#endif
+
+ /**
+ Returns @true if this object takes note of paragraph attributes (text and image objects don't).
+ */
+ virtual bool UsesParagraphAttributes() const { return true; }
+
+ /**
+ 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"); }
+
+ /**
+ Invalidates the object at the given range. With no argument, invalidates the whole object.
+ */
+ virtual void Invalidate(const wxRichTextRange& invalidRange = wxRICHTEXT_ALL);
+
+ /**
+ 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; }
+
+ /**
+ 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(); }
+
+// Accessors
+
+ /**
+ Gets the cached object size as calculated by Layout.
+ */
+ virtual wxSize GetCachedSize() const { return m_size; }
+
+ /**
+ Sets the cached object size as calculated by Layout.
+ */
+ virtual void SetCachedSize(const wxSize& sz) { m_size = 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; }
+
+ /**
+ 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; }
+
+ /**
+ 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; }
+
+ /**
+ 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; }
+
+ /**
+ Gets the 'natural' size for an object. For an image, it would be the
+ image size.
+ */
+ virtual wxTextAttrSize GetNaturalSize() const { return wxTextAttrSize(); }
+
+ /**
+ Returns the object position in pixels.
+ */
+ virtual wxPoint GetPosition() const { return m_pos; }
+
+ /**
+ Sets the object position in pixels.
+ */
+ virtual void SetPosition(const wxPoint& pos) { m_pos = pos; }
+
+ /**
+ Returns the absolute object position, by traversing up the child/parent hierarchy.
+ TODO: may not be needed, if all object positions are in fact relative to the
+ top of the coordinate space.
+ */
+ virtual wxPoint GetAbsolutePosition() const;
+
+ /**
+ Returns the rectangle enclosing the object.
+ */
+ virtual wxRect GetRect() const { return wxRect(GetPosition(), GetCachedSize()); }
+
+ /**
+ Sets the object's range within its container.
+ */
+ void SetRange(const wxRichTextRange& range) { m_range = range; }
+
+ /**
+ Returns the object's range.
+ */
+ const wxRichTextRange& GetRange() const { return m_range; }
+
+ /**
+ Returns the object's range.
+ */
+ wxRichTextRange& GetRange() { return m_range; }
+
+ /**
+ Set the object's own range, for a top-level object with its own position space.
+ */
+ void SetOwnRange(const wxRichTextRange& range) { m_ownRange = range; }
+
+ /**
+ Returns the object's own range (valid if top-level).
+ */
+ const wxRichTextRange& GetOwnRange() const { return m_ownRange; }
+
+ /**
+ Returns the object's own range (valid if top-level).
+ */
+ wxRichTextRange& GetOwnRange() { return m_ownRange; }
+
+ /**
+ Returns the object's own range only if a top-level object.
+ */
+ wxRichTextRange GetOwnRangeIfTopLevel() const { return IsTopLevel() ? m_ownRange : m_range; }
+
+ /**
+ Returns @true if this object this composite.
+ */
+ virtual bool IsComposite() const { return false; }
+
+ /**
+ Returns a pointer to the parent object.
+ */
+ virtual wxRichTextObject* GetParent() const { return m_parent; }
+
+ /**
+ Sets the pointer to the parent object.
+ */
+ virtual void SetParent(wxRichTextObject* parent) { m_parent = parent; }
+
+ /**
+ Returns the top-level container of this object.
+ May return itself if it's a container; use GetParentContainer to return
+ a different container.
+ */
+ virtual wxRichTextParagraphLayoutBox* GetContainer() const;
+
+ /**
+ 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(); }
+
+ /**
+ Set the margin around the object, in pixels.
+ */
+ virtual void SetMargins(int margin);
+
+ /**
+ Set the margin around the object, in pixels.
+ */
+ virtual void SetMargins(int leftMargin, int rightMargin, int topMargin, int bottomMargin);
+
+ /**
+ Returns the left margin of the object, in pixels.
+ */
+ virtual int GetLeftMargin() const;
+
+ /**
+ Returns the right margin of the object, in pixels.
+ */
+ virtual int GetRightMargin() const;
+
+ /**
+ Returns the top margin of the object, in pixels.
+ */
+ virtual int GetTopMargin() const;
+
+ /**
+ Returns the bottom margin of the object, in pixels.
+ */
+ virtual int GetBottomMargin() const;
+
+ /**
+ Calculates the available content space in the given rectangle, given the
+ margins, border and padding specified in the object's attributes.
+ */
+ virtual wxRect GetAvailableContentArea(wxDC& dc, const wxRect& outerRect) const;
+
+ /**
+ Lays out the object first with a given amount of space, and then if no width was specified in attr,
+ lays out the object again using the minimum size
+ */
+ virtual bool LayoutToBestSize(wxDC& dc, wxRichTextBuffer* buffer,
+ const wxRichTextAttr& parentAttr, const wxRichTextAttr& attr, const wxRect& availableParentSpace, int style);
+
+ /**
+ Sets the object's attributes.
+ */
+ void SetAttributes(const wxRichTextAttr& attr) { m_attributes = attr; }
+
+ /**
+ Returns the object's attributes.
+ */
+ const wxRichTextAttr& GetAttributes() const { return m_attributes; }
+
+ /**
+ Returns the object's attributes.
+ */
+ wxRichTextAttr& GetAttributes() { return m_attributes; }
+
+ /**
+ Sets the object's properties.
+ */
+ wxRichTextProperties& GetProperties() { return m_properties; }
+
+ /**
+ Returns the object's properties.
+ */
+ const wxRichTextProperties& GetProperties() const { return m_properties; }
+
+ /**
+ Returns the object's properties.
+ */
+ void SetProperties(const wxRichTextProperties& props) { m_properties = props; }
+
+ /**
+ Sets the stored descent value.
+ */
+ void SetDescent(int descent) { m_descent = descent; }
+
+ /**
+ Returns the stored descent value.
+ */
+ int GetDescent() const { return m_descent; }
+
+ /**
+ Returns the containing buffer.
+ */
+ wxRichTextBuffer* GetBuffer() const;
+
+ /**
+ 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); }
+
+ /**
+ Returns the identifying name for this object from the properties, using the "name" key.
+ */
+ wxString GetName() const { return m_properties.GetPropertyString(wxT("name")); }
+
+ /**
+ 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; }
+
+ /**
+ Returns @true if the object will be shown, @false otherwise.
+ */
+ bool IsShown() const { return m_show; }
+
+// Operations
+
+ /**
+ 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; }
+
+ /**
+ Clones the object.
+ */
+ virtual wxRichTextObject* Clone() const { return NULL; }
+
+ /**
+ Copies the object.
+ */
+ void Copy(const wxRichTextObject& obj);
+
+ /**
+ Reference-counting allows us to use the same object in multiple
+ lists (not yet used).
+ */
+
+ void Reference() { m_refCount ++; }
+
+ /**
+ Reference-counting allows us to use the same object in multiple
+ lists (not yet used).
+ */
+ void Dereference();
+
+ /**
+ Moves the object recursively, by adding the offset from old to new.
+ */
+ virtual void Move(const wxPoint& pt);
+
+ /**
+ Converts units in tenths of a millimetre to device units.
+ */
+ int ConvertTenthsMMToPixels(wxDC& dc, int units) const;
+
+ /**
+ Converts units in tenths of a millimetre to device units.
+ */
+ static int ConvertTenthsMMToPixels(int ppi, int units, double scale = 1.0);
+
+ /**
+ Convert units in pixels to tenths of a millimetre.
+ */
+ int ConvertPixelsToTenthsMM(wxDC& dc, int pixels) const;
+
+ /**
+ Convert units in pixels to tenths of a millimetre.
+ */
+ static int ConvertPixelsToTenthsMM(int ppi, int pixels, double scale = 1.0);
+
+ /**
+ 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);
+
+ /**
+ Draws a border.
+ */
+ static bool DrawBorder(wxDC& dc, wxRichTextBuffer* buffer, const wxTextAttrBorders& attr, const wxRect& rect, int flags = 0);
+
+ /**
+ Returns the various rectangles of the box model in pixels. You can either specify @a contentRect (inner)
+ or @a marginRect (outer), and the other must be the default rectangle (no width or height).
+ 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);
+
+ /**
+ 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);
+
+ /**
+ Returns the rectangle which the child has available to it given restrictions specified in the
+ child attribute, e.g. 50% width of the parent, 400 pixels, x position 20% of the parent, etc.
+ */
+ static wxRect AdjustAvailableSpace(wxDC& dc, wxRichTextBuffer* buffer, const wxRichTextAttr& parentAttr, const wxRichTextAttr& childAttr, const wxRect& availableParentSpace);
+
+protected:
+ wxSize m_size;
+ wxSize m_maxSize;
+ wxSize m_minSize;
+ wxPoint m_pos;
+ int m_descent; // Descent for this object (if any)
+ int m_refCount;
+ bool m_show;
+ wxRichTextObject* m_parent;
+
+ // The range of this object (start position to end position)
+ wxRichTextRange m_range;
+
+ // The internal range of this object, if it's a top-level object with its own range space
+ wxRichTextRange m_ownRange;
+
+ // Attributes
+ wxRichTextAttr m_attributes;
+
+ // Properties
+ wxRichTextProperties m_properties;
+};
+
+WX_DECLARE_LIST_WITH_DECL( wxRichTextObject, wxRichTextObjectList, class WXDLLIMPEXP_RICHTEXT );
+
+/**
+ @class wxRichTextCompositeObject
+
+ Objects of this class can contain other objects.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextCompositeObject: public wxRichTextObject
+{
+ DECLARE_CLASS(wxRichTextCompositeObject)
+public:
+// Constructors
+
+ wxRichTextCompositeObject(wxRichTextObject* parent = NULL);
+ virtual ~wxRichTextCompositeObject();
+
+// Overridables
+
+ virtual int HitTest(wxDC& dc, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, wxRichTextObject** contextObj, int flags = 0);
+
+ virtual bool FindPosition(wxDC& dc, long index, wxPoint& pt, int* height, bool forceLineStart);
+
+ virtual void CalculateRange(long start, long& end);
+
+ virtual bool DeleteRange(const wxRichTextRange& range);
+
+ virtual wxString GetTextForRange(const wxRichTextRange& range) const;
+
+ virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const;
+
+ virtual void Dump(wxTextOutputStream& stream);
+
+ virtual void Invalidate(const wxRichTextRange& invalidRange = wxRICHTEXT_ALL);
+
+// Accessors
+
+ /**
+ Returns the children.
+ */
+ wxRichTextObjectList& GetChildren() { return m_children; }
+ /**
+ Returns the children.
+ */
+ const wxRichTextObjectList& GetChildren() const { return m_children; }
+
+ /**
+ Returns the number of children.
+ */
+ size_t GetChildCount() const ;
+
+ /**
+ Returns the nth child.
+ */
+ wxRichTextObject* GetChild(size_t n) const ;
+
+ /**
+ Returns @true if this object is composite.
+ */
+ virtual bool IsComposite() const { return true; }
+
+ /**
+ Returns true if the buffer is empty.
+ */
+ virtual bool IsEmpty() const { return GetChildCount() == 0; }
+
+ /**
+ Returns the child object at the given character position.
+ */
+ virtual wxRichTextObject* GetChildAtPosition(long pos) const;
+
+// Operations
+
+ void Copy(const wxRichTextCompositeObject& obj);
+
+ void operator= (const wxRichTextCompositeObject& obj) { Copy(obj); }
+
+ /**
+ Appends a child, returning the position.
+ */
+ size_t AppendChild(wxRichTextObject* child) ;
+
+ /**
+ Inserts the child in front of the given object, or at the beginning.
+ */
+ bool InsertChild(wxRichTextObject* child, wxRichTextObject* inFrontOf) ;
+
+ /**
+ Removes and optionally deletes the specified child.
+ */
+ bool RemoveChild(wxRichTextObject* child, bool deleteChild = false) ;
+
+ /**
+ Deletes all the children.
+ */
+ bool DeleteChildren() ;
+
+ /**
+ Recursively merges all pieces that can be merged.
+ */
+ bool Defragment(const wxRichTextRange& range = wxRICHTEXT_ALL);
+
+ /**
+ Moves the object recursively, by adding the offset from old to new.
+ */
+ virtual void Move(const wxPoint& pt);
+
+protected:
+ wxRichTextObjectList m_children;
+};
+
+/**
+ @class wxRichTextParagraphBox
+
+ This class knows how to lay out paragraphs.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextCompositeObject, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextParagraphLayoutBox: public wxRichTextCompositeObject
+{
+ DECLARE_DYNAMIC_CLASS(wxRichTextParagraphLayoutBox)
+public:
+// Constructors
+
+ wxRichTextParagraphLayoutBox(wxRichTextObject* parent = NULL);
+ wxRichTextParagraphLayoutBox(const wxRichTextParagraphLayoutBox& obj): wxRichTextCompositeObject() { Init(); Copy(obj); }
+ ~wxRichTextParagraphLayoutBox();
+
+// Overridables
+
+ virtual int HitTest(wxDC& dc, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, wxRichTextObject** contextObj, int flags = 0);
+
+ virtual bool Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextSelection& selection, const wxRect& rect, int descent, int style);
+
+ virtual bool Layout(wxDC& dc, const wxRect& rect, int style);
+
+ virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, int flags, wxPoint position = wxPoint(0,0), 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);
+#endif
+
+#if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
+ virtual bool ExportXML(wxXmlNode* parent, wxRichTextXMLHandler* handler);
+#endif
+
+ virtual wxString GetXMLNodeName() const { return wxT("paragraphlayout"); }
+
+ virtual bool AcceptsFocus() const { return true; }
+
+// Accessors
+
+ /**
+ Associates a control with the buffer, for operations that for example require refreshing the window.
+ */
+ void SetRichTextCtrl(wxRichTextCtrl* ctrl) { m_ctrl = ctrl; }
+
+ /**
+ Returns the associated control.
+ */
+ wxRichTextCtrl* GetRichTextCtrl() const { return m_ctrl; }
+
+ /**
+ Sets a flag indicating whether the last paragraph is partial or complete.
+ */
+ void SetPartialParagraph(bool partialPara) { m_partialParagraph = partialPara; }
+
+ /**
+ Returns a flag indicating whether the last paragraph is partial or complete.
+ */
+ bool GetPartialParagraph() const { return m_partialParagraph; }
+
+ /**
+ Returns the style sheet associated with the overall buffer.
+ */
+ virtual wxRichTextStyleSheet* GetStyleSheet() const;
+
+ virtual bool IsTopLevel() const { return true; }
+
+// Operations
+
+ /**
+ Submits a command to insert paragraphs.
+ */
+ bool InsertParagraphsWithUndo(long pos, const wxRichTextParagraphLayoutBox& paragraphs, wxRichTextCtrl* ctrl, wxRichTextBuffer* buffer, int flags = 0);
+
+ /**
+ Submits a command to insert the given text.
+ */
+ bool InsertTextWithUndo(long pos, const wxString& text, wxRichTextCtrl* ctrl, wxRichTextBuffer* buffer, int flags = 0);
+
+ /**
+ Submits a command to insert the given text.
+ */
+ bool InsertNewlineWithUndo(long pos, wxRichTextCtrl* ctrl, wxRichTextBuffer* buffer, int flags = 0);
+
+ /**
+ Submits a command to insert the given image.
+ */
+ bool InsertImageWithUndo(long pos, const wxRichTextImageBlock& imageBlock,
+ wxRichTextCtrl* ctrl, wxRichTextBuffer* buffer, int flags,
+ const wxRichTextAttr& textAttr);
+
+ /**
+ Returns the style that is appropriate for a new paragraph at this position.
+ If the previous paragraph has a paragraph style name, looks up the next-paragraph
+ style.
+ */
+ wxRichTextAttr GetStyleForNewParagraph(wxRichTextBuffer* buffer, long pos, bool caretPosition = false, bool lookUpNewParaStyle=false) const;
+
+ /**
+ Inserts an object.
+ */
+ wxRichTextObject* InsertObjectWithUndo(long pos, wxRichTextObject *object, wxRichTextCtrl* ctrl, wxRichTextBuffer* buffer, int flags = 0);
+
+ /**
+ Submits a command to delete this range.
+ */
+ bool DeleteRangeWithUndo(const wxRichTextRange& range, wxRichTextCtrl* ctrl, wxRichTextBuffer* buffer);
+
+ /**
+ Draws the floating objects in this buffer.
+ */
+ void DrawFloats(wxDC& dc, const wxRichTextRange& range, const wxRichTextSelection& selection, const wxRect& rect, int descent, int style);
+
+ /**
+ Moves an anchored object to another paragraph.
+ */
+ void MoveAnchoredObjectToParagraph(wxRichTextParagraph* from, wxRichTextParagraph* to, wxRichTextObject* obj);
+
+ /**
+ Initializes the object.
+ */
+ void Init();
+
+ /**
+ Clears all the children.
+ */
+ virtual void Clear();
+
+ /**
+ Clears and initializes with one blank paragraph.
+ */
+ virtual void Reset();
+
+ /**
+ Convenience function to add a paragraph of text.
+ */
+ virtual wxRichTextRange AddParagraph(const wxString& text, wxRichTextAttr* paraStyle = NULL);
+
+ /**
+ Convenience function to add an image.
+ */
+ virtual wxRichTextRange AddImage(const wxImage& image, wxRichTextAttr* paraStyle = NULL);
+
+ /**
+ Adds multiple paragraphs, based on newlines.
+ */
+ virtual wxRichTextRange AddParagraphs(const wxString& text, wxRichTextAttr* paraStyle = NULL);
+
+ /**
+ Returns the line at the given position. If @a caretPosition is true, the position is
+ a caret position, which is normally a smaller number.
+ */
+ virtual wxRichTextLine* GetLineAtPosition(long pos, bool caretPosition = false) const;
+
+ /**
+ Returns the line at the given y pixel position, or the last line.
+ */
+ virtual wxRichTextLine* GetLineAtYPosition(int y) const;
+
+ /**
+ Returns the paragraph at the given character or caret position.
+ */
+ virtual wxRichTextParagraph* GetParagraphAtPosition(long pos, bool caretPosition = false) const;
+
+ /**
+ Returns the line size at the given position.
+ */
+ virtual wxSize GetLineSizeAtPosition(long pos, bool caretPosition = false) const;
+
+ /**
+ Given a position, returns the number of the visible line (potentially many to a paragraph),
+ starting from zero at the start of the buffer. We also have to pass a bool (@a startOfLine)
+ that indicates whether the caret is being shown at the end of the previous line or at the start
+ of the next, since the caret can be shown at two visible positions for the same underlying
+ position.
+ */
+ virtual long GetVisibleLineNumber(long pos, bool caretPosition = false, bool startOfLine = false) const;
+
+ /**
+ Given a line number, returns the corresponding wxRichTextLine object.
+ */
+ virtual wxRichTextLine* GetLineForVisibleLineNumber(long lineNumber) const;
+
+ /**
+ Returns the leaf object in a paragraph at this position.
+ */
+ virtual wxRichTextObject* GetLeafObjectAtPosition(long position) const;
+
+ /**
+ Returns the paragraph by number.
+ */
+ virtual wxRichTextParagraph* GetParagraphAtLine(long paragraphNumber) const;
+
+ /**
+ Returns the paragraph for a given line.
+ */
+ virtual wxRichTextParagraph* GetParagraphForLine(wxRichTextLine* line) const;
+
+ /**
+ Returns the length of the paragraph.
+ */
+ virtual int GetParagraphLength(long paragraphNumber) const;
+
+ /**
+ Returns the number of paragraphs.
+ */
+ virtual int GetParagraphCount() const { return static_cast<int>(GetChildCount()); }
+
+ /**
+ Returns the number of visible lines.
+ */
+ virtual int GetLineCount() const;
+
+ /**
+ Returns the text of the paragraph.
+ */
+ virtual wxString GetParagraphText(long paragraphNumber) const;
+
+ /**
+ Converts zero-based line column and paragraph number to a position.
+ */
+ virtual long XYToPosition(long x, long y) const;
+
+ /**
+ Converts a zero-based position to line column and paragraph number.
+ */
+ virtual bool PositionToXY(long pos, long* x, long* y) const;
+
+ /**
+ Sets the attributes for the given range. Pass flags to determine how the
+ attributes are set.
+
+ The end point of range is specified as the last character position of the span
+ of text. So, for example, to set the style for a character at position 5,
+ use the range (5,5).
+ This differs from the wxRichTextCtrl API, where you would specify (5,6).
+
+ @a flags may contain a bit list of the following values:
+ - wxRICHTEXT_SETSTYLE_NONE: no style flag.
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
+ undoable.
+ - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
+ if the combined style at this point is already the style in question.
+ - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
+ applied to paragraphs, and not the content.
+ This allows content styling to be preserved independently from that
+ of e.g. a named paragraph style.
+ - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
+ applied to characters, and not the paragraph.
+ This allows content styling to be preserved independently from that
+ of e.g. a named paragraph style.
+ - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
+ the new style.
+ - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style.
+ Only the style flags are used in this operation.
+ */
+ virtual bool SetStyle(const wxRichTextRange& range, const wxRichTextAttr& style, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
+
+ /**
+ Sets the attributes for the given object only, for example the box attributes for a text box.
+ */
+ virtual void SetStyle(wxRichTextObject *obj, const wxRichTextAttr& textAttr, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
+
+ /**
+ Returns the combined text attributes for this position.
+
+ This function gets the @e uncombined style - that is, the attributes associated
+ with the paragraph or character content, and not necessarily the combined
+ attributes you see on the screen. To get the combined attributes, use GetStyle().
+ If you specify (any) paragraph attribute in @e style's flags, this function
+ will fetch the paragraph attributes.
+ Otherwise, it will return the character attributes.
+ */
+ virtual bool GetStyle(long position, wxRichTextAttr& style);
+
+ /**
+ Returns the content (uncombined) attributes for this position.
+ */
+ virtual bool GetUncombinedStyle(long position, wxRichTextAttr& style);
+
+ /**
+ Implementation helper for GetStyle. If combineStyles is true, combine base, paragraph and
+ context attributes.
+ */
+ virtual bool DoGetStyle(long position, wxRichTextAttr& style, bool combineStyles = true);
+
+ /**
+ This function gets a style representing the common, combined attributes in the
given range.
Attributes which have different values within the specified range will not be
included the style flags.
- The function is used to get the attributes to display in the formatting dialog:
- the user can edit the attributes common to the selection, and optionally specify the
- values of further attributes to be applied uniformly.
+ The function is used to get the attributes to display in the formatting dialog:
+ the user can edit the attributes common to the selection, and optionally specify the
+ values of further attributes to be applied uniformly.
+
+ To apply the edited attributes, you can use SetStyle() specifying
+ the wxRICHTEXT_SETSTYLE_OPTIMIZE flag, which will only apply attributes that
+ are different from the @e combined attributes within the range.
+ So, the user edits the effective, displayed attributes for the range,
+ but his choice won't be applied unnecessarily to content. As an example,
+ say the style for a paragraph specifies bold, but the paragraph text doesn't
+ specify a weight.
+ The combined style is bold, and this is what the user will see on-screen and
+ in the formatting dialog. The user now specifies red text, in addition to bold.
+ When applying with SetStyle(), the content font weight attributes won't be
+ changed to bold because this is already specified by the paragraph.
+ However the text colour attributes @e will be changed to show red.
+ */
+ virtual bool GetStyleForRange(const wxRichTextRange& range, wxRichTextAttr& style);
+
+ /**
+ Combines @a style with @a currentStyle for the purpose of summarising the attributes of a range of
+ content.
+ */
+ bool CollectStyle(wxRichTextAttr& currentStyle, const wxRichTextAttr& style, wxRichTextAttr& clashingAttr, wxRichTextAttr& absentAttr);
+
+ //@{
+ /**
+ Sets the list attributes for the given range, passing flags to determine how
+ the attributes are set.
+ Either the style definition or the name of the style definition (in the current
+ sheet) can be passed.
+
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+ - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
+ @a startFrom, otherwise existing attributes are used.
+ - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
+ as the level for all paragraphs, otherwise the current indentation will be used.
+
+ @see NumberList(), PromoteList(), ClearListStyle().
+ */
+ virtual bool SetListStyle(const wxRichTextRange& range, wxRichTextListStyleDefinition* def, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+ virtual bool SetListStyle(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+ //@}
+
+ /**
+ Clears the list style from the given range, clearing list-related attributes
+ and applying any named paragraph style associated with each paragraph.
+
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+
+ @see SetListStyle(), PromoteList(), NumberList()
+ */
+ virtual bool ClearListStyle(const wxRichTextRange& range, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
+
+ //@{
+ /**
+ Numbers the paragraphs in the given range.
+
+ Pass flags to determine how the attributes are set.
+ Either the style definition or the name of the style definition (in the current
+ sheet) can be passed.
+
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+ - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
+ @a startFrom, otherwise existing attributes are used.
+ - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
+ as the level for all paragraphs, otherwise the current indentation will be used.
+
+ @a def can be NULL to indicate that the existing list style should be used.
+
+ @see SetListStyle(), PromoteList(), ClearListStyle()
+ */
+ virtual bool NumberList(const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+ virtual bool NumberList(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+ //@}
+
+ //@{
+ /**
+ Promotes the list items within the given range.
+ A positive @a promoteBy produces a smaller indent, and a negative number
+ produces a larger indent. Pass flags to determine how the attributes are set.
+ Either the style definition or the name of the style definition (in the current
+ sheet) can be passed.
+
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+ - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
+ @a startFrom, otherwise existing attributes are used.
+ - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
+ as the level for all paragraphs, otherwise the current indentation will be used.
+
+ @see SetListStyle(), SetListStyle(), ClearListStyle()
+ */
+ virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1);
+ virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1);
+ //@}
+
+ /**
+ Helper for NumberList and PromoteList, that does renumbering and promotion simultaneously
+ @a def can be NULL/empty to indicate that the existing list style should be used.
+ */
+ virtual bool DoNumberList(const wxRichTextRange& range, const wxRichTextRange& promotionRange, int promoteBy, wxRichTextListStyleDefinition* def, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+
+ /**
+ Fills in the attributes for numbering a paragraph after previousParagraph.
+ */
+ virtual bool FindNextParagraphNumber(wxRichTextParagraph* previousParagraph, wxRichTextAttr& attr) const;
+
+ /**
+ 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
+ can use this to implement, for example, bold button updating. style must have
+ flags indicating which attributes are of interest.
+ */
+ virtual bool HasCharacterAttributes(const wxRichTextRange& range, const wxRichTextAttr& style) const;
+
+ /**
+ Test if this whole range has paragraph attributes of the specified kind. If any
+ of the attributes are different within the range, the test fails. You
+ can use this to implement, for example, centering button updating. style must have
+ flags indicating which attributes are of interest.
+ */
+ virtual bool HasParagraphAttributes(const wxRichTextRange& range, const wxRichTextAttr& style) const;
+
+ virtual wxRichTextObject* Clone() const { return new wxRichTextParagraphLayoutBox(*this); }
+
+ /**
+ Insert fragment into this box at the given position. If partialParagraph is true,
+ it is assumed that the last (or only) paragraph is just a piece of data with no paragraph
+ marker.
+ */
+ virtual bool InsertFragment(long position, wxRichTextParagraphLayoutBox& fragment);
+
+ /**
+ Make a copy of the fragment corresponding to the given range, putting it in @a fragment.
+ */
+ virtual bool CopyFragment(const wxRichTextRange& range, wxRichTextParagraphLayoutBox& fragment);
+
+ /**
+ Apply the style sheet to the buffer, for example if the styles have changed.
+ */
+ virtual bool ApplyStyleSheet(wxRichTextStyleSheet* styleSheet);
+
+ void Copy(const wxRichTextParagraphLayoutBox& obj);
+
+ void operator= (const wxRichTextParagraphLayoutBox& obj) { Copy(obj); }
+
+ /**
+ Calculate ranges.
+ */
+ virtual void UpdateRanges();
+
+ /**
+ Get all the text.
+ */
+ virtual wxString GetText() const;
+
+ /**
+ Sets the default style, affecting the style currently being applied
+ (for example, setting the default style to bold will cause subsequently
+ inserted text to be bold).
+
+ This is not cumulative - setting the default style will replace the previous
+ default style.
+
+ Setting it to a default attribute object makes new content take on the 'basic' style.
+ */
+ virtual bool SetDefaultStyle(const wxRichTextAttr& style);
+
+ /**
+ Returns the current default style, affecting the style currently being applied
+ (for example, setting the default style to bold will cause subsequently
+ inserted text to be bold).
+ */
+ virtual const wxRichTextAttr& GetDefaultStyle() const { return m_defaultAttributes; }
+
+ /**
+ Sets the basic (overall) style. This is the style of the whole
+ buffer before further styles are applied, unlike the default style, which
+ only affects the style currently being applied (for example, setting the default
+ style to bold will cause subsequently inserted text to be bold).
+ */
+ virtual void SetBasicStyle(const wxRichTextAttr& style) { m_attributes = style; }
+
+ /**
+ Returns the basic (overall) style.
+
+ This is the style of the whole buffer before further styles are applied,
+ unlike the default style, which only affects the style currently being
+ applied (for example, setting the default style to bold will cause
+ subsequently inserted text to be bold).
+ */
+ virtual const wxRichTextAttr& GetBasicStyle() const { return m_attributes; }
+
+ /**
+ Invalidates the buffer. With no argument, invalidates whole buffer.
+ */
+ virtual void Invalidate(const wxRichTextRange& invalidRange = wxRICHTEXT_ALL);
+
+ /**
+ Do the (in)validation for this object only.
+ */
+ virtual void DoInvalidate(const wxRichTextRange& invalidRange);
+
+ /**
+ Do the (in)validation both up and down the hierarchy.
+ */
+ virtual void InvalidateHierarchy(const wxRichTextRange& invalidRange = wxRICHTEXT_ALL);
+
+ /**
+ Gather information about floating objects. If untilObj is non-NULL,
+ will stop getting information if the current object is this, since we
+ will collect the rest later.
+ */
+ virtual bool UpdateFloatingObjects(const wxRect& availableRect, wxRichTextObject* untilObj = NULL);
+
+ /**
+ Get invalid range, rounding to entire paragraphs if argument is true.
+ */
+ wxRichTextRange GetInvalidRange(bool wholeParagraphs = false) const;
+
+ /**
+ Returns @true if this object needs layout.
+ */
+ bool IsDirty() const { return m_invalidRange != wxRICHTEXT_NONE; }
+
+ /**
+ Returns the wxRichTextFloatCollector of this object.
+ */
+ wxRichTextFloatCollector* GetFloatCollector() { return m_floatCollector; }
+
+ /**
+ Returns the number of floating objects at this level.
+ */
+ int GetFloatingObjectCount() const;
+
+ /**
+ Returns a list of floating objects.
+ */
+ bool GetFloatingObjects(wxRichTextObjectList& objects) const;
+
+protected:
+ wxRichTextCtrl* m_ctrl;
+ wxRichTextAttr m_defaultAttributes;
+
+ // The invalidated range that will need full layout
+ wxRichTextRange m_invalidRange;
+
+ // Is the last paragraph partial or complete?
+ bool m_partialParagraph;
+
+ // The floating layout state
+ wxRichTextFloatCollector* m_floatCollector;
+};
+
+/**
+ @class wxRichTextBox
+
+ This class implements a floating or inline text box, containing paragraphs.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextParagraphLayoutBox, wxRichTextObject, wxRichTextBuffer, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextBox: public wxRichTextParagraphLayoutBox
+{
+ DECLARE_DYNAMIC_CLASS(wxRichTextBox)
+public:
+// Constructors
+
+ /**
+ Default constructor; optionally pass the parent object.
+ */
+
+ wxRichTextBox(wxRichTextObject* parent = NULL);
+
+ /**
+ Copy constructor.
+ */
+
+ wxRichTextBox(const wxRichTextBox& obj): wxRichTextParagraphLayoutBox() { Copy(obj); }
+
+// Overridables
+
+ virtual bool Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextSelection& selection, const wxRect& rect, int descent, int style);
+
+ virtual wxString GetXMLNodeName() const { return wxT("textbox"); }
+
+ virtual bool CanEditProperties() const { return true; }
+
+ virtual bool EditProperties(wxWindow* parent, wxRichTextBuffer* buffer);
+
+ virtual wxString GetPropertiesMenuLabel() const { return _("&Box"); }
+
+// Accessors
+
+// Operations
+
+ virtual wxRichTextObject* Clone() const { return new wxRichTextBox(*this); }
+
+ void Copy(const wxRichTextBox& obj);
+
+protected:
+};
+
+/**
+ @class wxRichTextLine
+
+ This object represents a line in a paragraph, and stores
+ offsets from the start of the paragraph representing the
+ start and end positions of the line.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextBuffer, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextLine
+{
+public:
+// Constructors
+
+ wxRichTextLine(wxRichTextParagraph* parent);
+ wxRichTextLine(const wxRichTextLine& obj) { Init( NULL); Copy(obj); }
+ virtual ~wxRichTextLine() {}
+
+// Overridables
+
+// Accessors
+
+ /**
+ Sets the range associated with this line.
+ */
+ void SetRange(const wxRichTextRange& range) { m_range = range; }
+ /**
+ Sets the range associated with this line.
+ */
+ void SetRange(long from, long to) { m_range = wxRichTextRange(from, to); }
+
+ /**
+ Returns the parent paragraph.
+ */
+ wxRichTextParagraph* GetParent() { return m_parent; }
+
+ /**
+ Returns the range.
+ */
+ const wxRichTextRange& GetRange() const { return m_range; }
+ /**
+ Returns the range.
+ */
+ wxRichTextRange& GetRange() { return m_range; }
+
+ /**
+ Returns the absolute range.
+ */
+ wxRichTextRange GetAbsoluteRange() const;
+
+ /**
+ Returns the line size as calculated by Layout.
+ */
+ virtual wxSize GetSize() const { return m_size; }
+
+ /**
+ Sets the line size as calculated by Layout.
+ */
+ virtual void SetSize(const wxSize& sz) { m_size = sz; }
+
+ /**
+ Returns the object position relative to the parent.
+ */
+ virtual wxPoint GetPosition() const { return m_pos; }
+
+ /**
+ Sets the object position relative to the parent.
+ */
+ virtual void SetPosition(const wxPoint& pos) { m_pos = pos; }
+
+ /**
+ Returns the absolute object position.
+ */
+ virtual wxPoint GetAbsolutePosition() const;
+
+ /**
+ Returns the rectangle enclosing the line.
+ */
+ virtual wxRect GetRect() const { return wxRect(GetAbsolutePosition(), GetSize()); }
+
+ /**
+ Sets the stored descent.
+ */
+ void SetDescent(int descent) { m_descent = descent; }
+
+ /**
+ Returns the stored descent.
+ */
+ int GetDescent() const { return m_descent; }
+
+#if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
+ wxArrayInt& GetObjectSizes() { return m_objectSizes; }
+ const wxArrayInt& GetObjectSizes() const { return m_objectSizes; }
+#endif
+
+// Operations
+
+ /**
+ Initialises the object.
+ */
+ void Init(wxRichTextParagraph* parent);
+
+ /**
+ Copies from @a obj.
+ */
+ void Copy(const wxRichTextLine& obj);
+
+ virtual wxRichTextLine* Clone() const { return new wxRichTextLine(*this); }
+
+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
+ wxPoint m_pos;
+ wxSize m_size;
+
+ // Maximum descent for this line (location of text baseline)
+ int m_descent;
+
+ // The parent object
+ wxRichTextParagraph* m_parent;
+
+#if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING
+ wxArrayInt m_objectSizes;
+#endif
+};
+
+WX_DECLARE_LIST_WITH_DECL( wxRichTextLine, wxRichTextLineList , class WXDLLIMPEXP_RICHTEXT );
+
+/**
+ @class wxRichTextParagraph
+
+ This object represents a single paragraph containing various objects such as text content, images, and further paragraph layout objects.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextBuffer, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextParagraph: public wxRichTextCompositeObject
+{
+ DECLARE_DYNAMIC_CLASS(wxRichTextParagraph)
+public:
+// Constructors
+
+ /**
+ Constructor taking a parent and style.
+ */
+ wxRichTextParagraph(wxRichTextObject* parent = NULL, wxRichTextAttr* style = NULL);
+ /**
+ Constructor taking a text string, a parent and paragraph and character attributes.
+ */
+ wxRichTextParagraph(const wxString& text, wxRichTextObject* parent = NULL, wxRichTextAttr* paraStyle = NULL, wxRichTextAttr* charStyle = NULL);
+ virtual ~wxRichTextParagraph();
+ wxRichTextParagraph(const wxRichTextParagraph& obj): wxRichTextCompositeObject() { Copy(obj); }
+
+// Overridables
+
+ virtual bool Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextSelection& selection, const wxRect& rect, int descent, int style);
+
+ virtual bool Layout(wxDC& dc, const wxRect& rect, int style);
+
+ virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const;
+
+ virtual bool FindPosition(wxDC& dc, long index, wxPoint& pt, int* height, bool forceLineStart);
+
+ virtual int HitTest(wxDC& dc, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, wxRichTextObject** contextObj, int flags = 0);
+
+ virtual void CalculateRange(long start, long& end);
+
+ virtual wxString GetXMLNodeName() const { return wxT("paragraph"); }
+
+// Accessors
+
+ /**
+ Returns the cached lines.
+ */
+ wxRichTextLineList& GetLines() { return m_cachedLines; }
+
+// Operations
+
+ /**
+ Copies the object.
+ */
+ void Copy(const wxRichTextParagraph& obj);
+
+ virtual wxRichTextObject* Clone() const { return new wxRichTextParagraph(*this); }
+
+ /**
+ Clears the cached lines.
+ */
+ void ClearLines();
+
+// Implementation
+
+ /**
+ Applies paragraph styles such as centering to the wrapped lines.
+ */
+ virtual void ApplyParagraphStyle(wxRichTextLine* line, const wxRichTextAttr& attr, const wxRect& rect, wxDC& dc);
+
+ /**
+ Inserts text at the given position.
+ */
+ virtual bool InsertText(long pos, const wxString& text);
+
+ /**
+ Splits an object at this position if necessary, and returns
+ the previous object, or NULL if inserting at the beginning.
+ */
+ virtual wxRichTextObject* SplitAt(long pos, wxRichTextObject** previousObject = NULL);
+
+ /**
+ Moves content to a list from this point.
+ */
+ virtual void MoveToList(wxRichTextObject* obj, wxList& list);
+
+ /**
+ Adds content back from a list.
+ */
+ virtual void MoveFromList(wxList& list);
+
+ /**
+ Returns the plain text searching from the start or end of the range.
+ The resulting string may be shorter than the range given.
+ */
+ bool GetContiguousPlainText(wxString& text, const wxRichTextRange& range, bool fromStart = true);
+
+ /**
+ Finds a suitable wrap position. @a wrapPosition is the last position in the line to the left
+ of the split.
+ */
+ bool FindWrapPosition(const wxRichTextRange& range, wxDC& dc, int availableSpace, long& wrapPosition, wxArrayInt* partialExtents);
+
+ /**
+ Finds the object at the given position.
+ */
+ wxRichTextObject* FindObjectAtPosition(long position);
+
+ /**
+ Returns the bullet text for this paragraph.
+ */
+ wxString GetBulletText();
+
+ /**
+ Allocates or reuses a line object.
+ */
+ wxRichTextLine* AllocateLine(int pos);
+
+ /**
+ Clears remaining unused line objects, if any.
+ */
+ bool ClearUnusedLines(int lineCount);
+
+ /**
+ Returns combined attributes of the base style, paragraph style and character style. We use this to dynamically
+ retrieve the actual style.
+ */
+ wxRichTextAttr GetCombinedAttributes(const wxRichTextAttr& contentStyle, bool includingBoxAttr = false) const;
+
+ /**
+ Returns the combined attributes of the base style and paragraph style.
+ */
+ wxRichTextAttr GetCombinedAttributes(bool includingBoxAttr = false) const;
+
+ /**
+ Returns the first position from pos that has a line break character.
+ */
+ long GetFirstLineBreakPosition(long pos);
+
+ /**
+ Creates a default tabstop array.
+ */
+ static void InitDefaultTabs();
+
+ /**
+ Clears the default tabstop array.
+ */
+ static void ClearDefaultTabs();
+
+ /**
+ Returns the default tabstop array.
+ */
+ static const wxArrayInt& GetDefaultTabs() { return sm_defaultTabs; }
+
+ /**
+ Lays out the floating objects.
+ */
+ void LayoutFloat(wxDC& dc, const wxRect& rect, int style, wxRichTextFloatCollector* floatCollector);
+
+protected:
+
+ // The lines that make up the wrapped paragraph
+ wxRichTextLineList m_cachedLines;
+
+ // Default tabstops
+ static wxArrayInt sm_defaultTabs;
+
+friend class wxRichTextFloatCollector;
+};
+
+/**
+ @class wxRichTextPlainText
+
+ This object represents a single piece of text.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextBuffer, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextPlainText: public wxRichTextObject
+{
+ DECLARE_DYNAMIC_CLASS(wxRichTextPlainText)
+public:
+// Constructors
+
+ /**
+ Constructor.
+ */
+ wxRichTextPlainText(const wxString& text = wxEmptyString, wxRichTextObject* parent = NULL, wxRichTextAttr* style = NULL);
+
+ /**
+ Copy constructor.
+ */
+ wxRichTextPlainText(const wxRichTextPlainText& obj): wxRichTextObject() { Copy(obj); }
+
+// Overridables
+
+ virtual bool Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextSelection& selection, const wxRect& rect, int descent, int style);
+
+ virtual bool Layout(wxDC& dc, const wxRect& rect, int style);
+
+ virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const;
+
+ virtual wxString GetTextForRange(const wxRichTextRange& range) const;
+
+ virtual wxRichTextObject* DoSplit(long pos);
+
+ virtual void CalculateRange(long start, long& end);
+
+ virtual bool DeleteRange(const wxRichTextRange& range);
+
+ virtual bool IsEmpty() const { return m_text.empty(); }
+
+ virtual bool CanMerge(wxRichTextObject* object) const;
+
+ virtual bool Merge(wxRichTextObject* object);
+
+ virtual void Dump(wxTextOutputStream& stream);
+
+ /**
+ Get the first position from pos that has a line break character.
+ */
+ long GetFirstLineBreakPosition(long pos);
+
+ /// 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);
+#endif
+
+#if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
+ virtual bool ExportXML(wxXmlNode* parent, wxRichTextXMLHandler* handler);
+#endif
+
+ virtual wxString GetXMLNodeName() const { return wxT("text"); }
+
+// Accessors
+
+ /**
+ Returns the text.
+ */
+ const wxString& GetText() const { return m_text; }
+
+ /**
+ Sets the text.
+ */
+ void SetText(const wxString& text) { m_text = text; }
+
+// Operations
+
+ // Copies the text object,
+ void Copy(const wxRichTextPlainText& obj);
+
+ // Clones the text object.
+ virtual wxRichTextObject* Clone() const { return new wxRichTextPlainText(*this); }
+
+private:
+ bool DrawTabbedString(wxDC& dc, const wxRichTextAttr& attr, const wxRect& rect, wxString& str, wxCoord& x, wxCoord& y, bool selected);
+
+protected:
+ wxString m_text;
+};
+
+/**
+ @class wxRichTextImageBlock
+
+ This class stores information about an image, in binary in-memory form.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextBuffer, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextImageBlock: public wxObject
+{
+public:
+ /**
+ Constructor.
+ */
+ wxRichTextImageBlock();
+
+ /**
+ Copy constructor.
+ */
+ wxRichTextImageBlock(const wxRichTextImageBlock& block);
+ virtual ~wxRichTextImageBlock();
+
+ /**
+ Initialises the block.
+ */
+ void Init();
+
+ /**
+ Clears the block.
+ */
+
+ void Clear();
+
+ /**
+ Load the original image into a memory block.
+ If the image is not a JPEG, we must convert it into a JPEG
+ to conserve space.
+ If it's not a JPEG we can make use of @a image, already scaled, so we don't have to
+ load the image a second time.
+ */
+ virtual bool MakeImageBlock(const wxString& filename, wxBitmapType imageType,
+ wxImage& image, bool convertToJPEG = true);
+
+ /**
+ Make an image block from the wxImage in the given
+ format.
+ */
+ virtual bool MakeImageBlock(wxImage& image, wxBitmapType imageType, int quality = 80);
+
+ /**
+ Uses a const wxImage for efficiency, but can't set quality (only relevant for JPEG)
+ */
+ virtual bool MakeImageBlockDefaultQuality(const wxImage& image, wxBitmapType imageType);
+
+ /**
+ Makes the image block.
+ */
+ virtual bool DoMakeImageBlock(const wxImage& image, wxBitmapType imageType);
+
+ /**
+ Writes the block to a file.
+ */
+ bool Write(const wxString& filename);
+
+ /**
+ Writes the data in hex to a stream.
+ */
+ bool WriteHex(wxOutputStream& stream);
+
+ /**
+ Reads the data in hex from a stream.
+ */
+ bool ReadHex(wxInputStream& stream, int length, wxBitmapType imageType);
+
+ /**
+ Copy from @a block.
+ */
+ void Copy(const wxRichTextImageBlock& block);
+
+ // Load a wxImage from the block
+ /**
+ */
+ bool Load(wxImage& image);
+
+// Operators
+
+ /**
+ Assignment operation.
+ */
+ void operator=(const wxRichTextImageBlock& block);
+
+// Accessors
+
+ /**
+ Returns the raw data.
+ */
+ unsigned char* GetData() const { return m_data; }
+
+ /**
+ Returns the data size in bytes.
+ */
+ size_t GetDataSize() const { return m_dataSize; }
+
+ /**
+ Returns the image type.
+ */
+ wxBitmapType GetImageType() const { return m_imageType; }
+
+ /**
+ */
+ void SetData(unsigned char* image) { m_data = image; }
+
+ /**
+ Sets the data size.
+ */
+ void SetDataSize(size_t size) { m_dataSize = size; }
+
+ /**
+ Sets the image type.
+ */
+ void SetImageType(wxBitmapType imageType) { m_imageType = imageType; }
+
+ /**
+ Returns @true if the data is non-NULL.
+ */
+ bool IsOk() const { return GetData() != NULL; }
+ bool Ok() const { return IsOk(); }
+
+ /**
+ Gets the extension for the block's type.
+ */
+ wxString GetExtension() const;
+
+/// Implementation
+
+ /**
+ Allocates and reads from a stream as a block of memory.
+ */
+ static unsigned char* ReadBlock(wxInputStream& stream, size_t size);
+
+ /**
+ Allocates and reads from a file as a block of memory.
+ */
+ static unsigned char* ReadBlock(const wxString& filename, size_t size);
+
+ /**
+ Writes a memory block to stream.
+ */
+ static bool WriteBlock(wxOutputStream& stream, unsigned char* block, size_t size);
+
+ /**
+ Writes a memory block to a file.
+ */
+ static bool WriteBlock(const wxString& filename, unsigned char* block, size_t size);
+
+protected:
+ // Size in bytes of the image stored.
+ // This is in the raw, original form such as a JPEG file.
+ unsigned char* m_data;
+ size_t m_dataSize;
+ wxBitmapType m_imageType;
+};
+
+/**
+ @class wxRichTextImage
+
+ This class implements a graphic object.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextBuffer, wxRichTextCtrl, wxRichTextImageBlock
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextImage: public wxRichTextObject
+{
+ DECLARE_DYNAMIC_CLASS(wxRichTextImage)
+public:
+// Constructors
+
+ /**
+ Default constructor.
+ */
+ wxRichTextImage(wxRichTextObject* parent = NULL): wxRichTextObject(parent) { }
+
+ /**
+ Creates a wxRichTextImage from a wxImage.
+ */
+ wxRichTextImage(const wxImage& image, wxRichTextObject* parent = NULL, wxRichTextAttr* charStyle = NULL);
+
+ /**
+ Creates a wxRichTextImage from an image block.
+ */
+ wxRichTextImage(const wxRichTextImageBlock& imageBlock, wxRichTextObject* parent = NULL, wxRichTextAttr* charStyle = NULL);
+
+ /**
+ Copy constructor.
+ */
+ wxRichTextImage(const wxRichTextImage& obj): wxRichTextObject(obj) { Copy(obj); }
+
+// Overridables
+
+ virtual bool Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextSelection& selection, const wxRect& rect, int descent, int style);
+
+ virtual bool Layout(wxDC& dc, const wxRect& rect, int style);
+
+ virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const;
+
+ /**
+ Returns the 'natural' size for this object - the image size.
+ */
+ virtual wxTextAttrSize GetNaturalSize() const;
+
+ virtual bool IsEmpty() const { return false; /* !m_imageBlock.IsOk(); */ }
+
+ virtual bool CanEditProperties() const { return true; }
+
+ virtual bool EditProperties(wxWindow* parent, wxRichTextBuffer* buffer);
+
+ virtual wxString GetPropertiesMenuLabel() const { return _("&Picture"); }
+
+ 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);
+#endif
+
+#if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
+ virtual bool ExportXML(wxXmlNode* parent, wxRichTextXMLHandler* handler);
+#endif
+
+ // Images can be floatable (optionally).
+ virtual bool IsFloatable() const { return true; }
+
+ virtual wxString GetXMLNodeName() const { return wxT("image"); }
+
+// Accessors
+
+ /**
+ Returns the image cache (a scaled bitmap).
+ */
+ const wxBitmap& GetImageCache() const { return m_imageCache; }
+
+ /**
+ Sets the image cache.
+ */
+ void SetImageCache(const wxBitmap& bitmap) { m_imageCache = bitmap; }
+
+ /**
+ Resets the image cache.
+ */
+ void ResetImageCache() { m_imageCache = wxNullBitmap; }
+
+ /**
+ Returns the image block containing the raw data.
+ */
+ wxRichTextImageBlock& GetImageBlock() { return m_imageBlock; }
+
+// Operations
+
+ /**
+ Copies the image object.
+ */
+ void Copy(const wxRichTextImage& obj);
+
+ /**
+ Clones the image object.
+ */
+ virtual wxRichTextObject* Clone() const { return new wxRichTextImage(*this); }
+
+ /**
+ Creates a cached image at the required size.
+ */
+ virtual bool LoadImageCache(wxDC& dc, bool resetCache = false);
+
+protected:
+ wxRichTextImageBlock m_imageBlock;
+ wxBitmap m_imageCache;
+};
+
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCommand;
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction;
+
+/**
+ @class wxRichTextBuffer
+
+ This is a kind of paragraph layout box, used to represent the whole buffer.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextParagraphLayoutBox, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextBuffer: public wxRichTextParagraphLayoutBox
+{
+ DECLARE_DYNAMIC_CLASS(wxRichTextBuffer)
+public:
+// Constructors
+
+ /**
+ Default constructor.
+ */
+ wxRichTextBuffer() { Init(); }
+
+ /**
+ Copy constructor.
+ */
+ wxRichTextBuffer(const wxRichTextBuffer& obj): wxRichTextParagraphLayoutBox() { Init(); Copy(obj); }
+
+ virtual ~wxRichTextBuffer() ;
+
+// Accessors
+
+ /**
+ Returns the command processor.
+ A text buffer always creates its own command processor when it is initialized.
+ */
+ wxCommandProcessor* GetCommandProcessor() const { return m_commandProcessor; }
+
+ /**
+ Sets style sheet, if any. This will allow the application to use named character and paragraph
+ styles found in the style sheet.
+
+ Neither the buffer nor the control owns the style sheet so must be deleted by the application.
+ */
+ void SetStyleSheet(wxRichTextStyleSheet* styleSheet) { m_styleSheet = styleSheet; }
+
+ /**
+ Returns the style sheet.
+ */
+ virtual wxRichTextStyleSheet* GetStyleSheet() const { return m_styleSheet; }
+
+ /**
+ Sets the style sheet and sends a notification of the change.
+ */
+ bool SetStyleSheetAndNotify(wxRichTextStyleSheet* sheet);
+
+ /**
+ Pushes the style sheet to the top of the style sheet stack.
+ */
+ bool PushStyleSheet(wxRichTextStyleSheet* styleSheet);
+
+ /**
+ Pops the style sheet from the top of the style sheet stack.
+ */
+ wxRichTextStyleSheet* PopStyleSheet();
+
+ /**
+ Returns the table storing fonts, for quick access and font reuse.
+ */
+ wxRichTextFontTable& GetFontTable() { return m_fontTable; }
+
+ /**
+ Returns the table storing fonts, for quick access and font reuse.
+ */
+ const wxRichTextFontTable& GetFontTable() const { return m_fontTable; }
+
+ /**
+ Sets table storing fonts, for quick access and font reuse.
+ */
+ void SetFontTable(const wxRichTextFontTable& table) { m_fontTable = table; }
+
+// Operations
+
+ /**
+ Initialisation.
+ */
+ void Init();
+
+ /**
+ Clears the buffer, adds an empty paragraph, and clears the command processor.
+ */
+ virtual void ResetAndClearCommands();
+
+ //@{
+ /**
+ Loads content from a stream or file.
+ Not all handlers will implement file loading.
+ */
+ virtual bool LoadFile(const wxString& filename, wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
+ virtual bool LoadFile(wxInputStream& stream, wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
+ //@}
+
+ //@{
+ /**
+ Saves content to a stream or file.
+ Not all handlers will implement file saving.
+ */
+ virtual bool SaveFile(const wxString& filename, wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
+ virtual bool SaveFile(wxOutputStream& stream, wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
+ //@}
+
+ /**
+ Sets the handler flags, controlling loading and saving.
+ */
+ void SetHandlerFlags(int flags) { m_handlerFlags = flags; }
+
+ /**
+ Gets the handler flags, controlling loading and saving.
+ */
+ int GetHandlerFlags() const { return m_handlerFlags; }
+
+ /**
+ Convenience function to add a paragraph of text.
+ */
+ virtual wxRichTextRange AddParagraph(const wxString& text, wxRichTextAttr* paraStyle = NULL) { Modify(); return wxRichTextParagraphLayoutBox::AddParagraph(text, paraStyle); }
+
+ /**
+ Begin collapsing undo/redo commands. Note that this may not work properly
+ if combining commands that delete or insert content, changing ranges for
+ subsequent actions.
+
+ @a cmdName should be the name of the combined command that will appear
+ next to Undo and Redo in the edit menu.
+ */
+ virtual bool BeginBatchUndo(const wxString& cmdName);
+
+ /**
+ End collapsing undo/redo commands.
+ */
+ virtual bool EndBatchUndo();
+
+ /**
+ Returns @true if we are collapsing commands.
+ */
+ virtual bool BatchingUndo() const { return m_batchedCommandDepth > 0; }
+
+ /**
+ Submit the action immediately, or delay according to whether collapsing is on.
+ */
+ virtual bool SubmitAction(wxRichTextAction* action);
+
+ /**
+ Returns the collapsed command.
+ */
+ virtual wxRichTextCommand* GetBatchedCommand() const { return m_batchedCommand; }
+
+ /**
+ Begin suppressing undo/redo commands. The way undo is suppressed may be implemented
+ differently by each command. If not dealt with by a command implementation, then
+ it will be implemented automatically by not storing the command in the undo history
+ when the action is submitted to the command processor.
+ */
+ virtual bool BeginSuppressUndo();
+
+ /**
+ End suppressing undo/redo commands.
+ */
+ virtual bool EndSuppressUndo();
+
+ /**
+ Are we suppressing undo??
+ */
+ virtual bool SuppressingUndo() const { return m_suppressUndo > 0; }
+
+ /**
+ Copy the range to the clipboard.
+ */
+ virtual bool CopyToClipboard(const wxRichTextRange& range);
+
+ /**
+ Paste the clipboard content to the buffer.
+ */
+ virtual bool PasteFromClipboard(long position);
+
+ /**
+ Returns @true if we can paste from the clipboard.
+ */
+ virtual bool CanPasteFromClipboard() const;
+
+ /**
+ Begin using a style.
+ */
+ virtual bool BeginStyle(const wxRichTextAttr& style);
+
+ /**
+ End the style.
+ */
+ virtual bool EndStyle();
+
+ /**
+ End all styles.
+ */
+ virtual bool EndAllStyles();
+
+ /**
+ Clears the style stack.
+ */
+ virtual void ClearStyleStack();
+
+ /**
+ Returns the size of the style stack, for example to check correct nesting.
+ */
+ virtual size_t GetStyleStackSize() const { return m_attributeStack.GetCount(); }
+
+ /**
+ Begins using bold.
+ */
+ bool BeginBold();
+
+ /**
+ Ends using bold.
+ */
+ bool EndBold() { return EndStyle(); }
+
+ /**
+ Begins using italic.
+ */
+ bool BeginItalic();
+
+ /**
+ Ends using italic.
+ */
+ bool EndItalic() { return EndStyle(); }
+
+ /**
+ Begins using underline.
+ */
+ bool BeginUnderline();
+
+ /**
+ Ends using underline.
+ */
+ bool EndUnderline() { return EndStyle(); }
+
+ /**
+ Begins using point size.
+ */
+ bool BeginFontSize(int pointSize);
+
+ /**
+ Ends using point size.
+ */
+ bool EndFontSize() { return EndStyle(); }
+
+ /**
+ Begins using this font.
+ */
+ bool BeginFont(const wxFont& font);
+
+ /**
+ Ends using a font.
+ */
+ bool EndFont() { return EndStyle(); }
+
+ /**
+ Begins using this colour.
+ */
+ bool BeginTextColour(const wxColour& colour);
+
+ /**
+ Ends using a colour.
+ */
+ bool EndTextColour() { return EndStyle(); }
+
+ /**
+ Begins using alignment.
+ */
+ bool BeginAlignment(wxTextAttrAlignment alignment);
+
+ /**
+ Ends alignment.
+ */
+ bool EndAlignment() { return EndStyle(); }
+
+ /**
+ Begins using @a leftIndent for the left indent, and optionally @a leftSubIndent for
+ the sub-indent. Both are expressed in tenths of a millimetre.
+
+ The sub-indent is an offset from the left of the paragraph, and is used for all
+ but the first line in a paragraph. A positive value will cause the first line to appear
+ to the left of the subsequent lines, and a negative value will cause the first line to be
+ indented relative to the subsequent lines.
+ */
+ bool BeginLeftIndent(int leftIndent, int leftSubIndent = 0);
+
+ /**
+ Ends left indent.
+ */
+ bool EndLeftIndent() { return EndStyle(); }
+
+ /**
+ Begins a right indent, specified in tenths of a millimetre.
+ */
+ bool BeginRightIndent(int rightIndent);
+
+ /**
+ Ends right indent.
+ */
+ bool EndRightIndent() { return EndStyle(); }
+
+ /**
+ Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
+ in tenths of a millimetre.
+ */
+ bool BeginParagraphSpacing(int before, int after);
+
+ /**
+ Ends paragraph spacing.
+ */
+ bool EndParagraphSpacing() { return EndStyle(); }
+
+ /**
+ Begins line spacing using the specified value. @e spacing is a multiple, where
+ 10 means single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
+
+ The ::wxTextAttrLineSpacing enumeration values are defined for convenience.
+ */
+ bool BeginLineSpacing(int lineSpacing);
+
+ /**
+ Ends line spacing.
+ */
+ bool EndLineSpacing() { return EndStyle(); }
+
+ /**
+ Begins numbered bullet.
+
+ This call will be needed for each item in the list, and the
+ application should take care of incrementing the numbering.
+
+ @a bulletNumber is a number, usually starting with 1.
+ @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
+ @a bulletStyle is a bitlist of the following values:
+
+ wxRichTextBuffer uses indentation to render a bulleted item.
+ The left indent is the distance between the margin and the bullet.
+ The content of the paragraph, including the first line, starts
+ at leftMargin + leftSubIndent.
+ So the distance between the left edge of the bullet and the
+ left of the actual paragraph is leftSubIndent.
+ */
+ bool BeginNumberedBullet(int bulletNumber, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_ARABIC|wxTEXT_ATTR_BULLET_STYLE_PERIOD);
+
+ /**
+ Ends numbered bullet.
+ */
+ bool EndNumberedBullet() { return EndStyle(); }
+
+ /**
+ Begins applying a symbol bullet, using a character from the current font.
+
+ See BeginNumberedBullet() for an explanation of how indentation is used
+ to render the bulleted paragraph.
+ */
+ bool BeginSymbolBullet(const wxString& symbol, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_SYMBOL);
+
+ /**
+ Ends symbol bullet.
+ */
+ bool EndSymbolBullet() { return EndStyle(); }
+
+ /**
+ Begins applying a standard bullet, using one of the standard bullet names
+ (currently @c standard/circle or @c standard/square.
+
+ See BeginNumberedBullet() for an explanation of how indentation is used to
+ render the bulleted paragraph.
+ */
+ bool BeginStandardBullet(const wxString& bulletName, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_STANDARD);
+
+ /**
+ Ends standard bullet.
+ */
+ bool EndStandardBullet() { return EndStyle(); }
+
+ /**
+ Begins named character style.
+ */
+ bool BeginCharacterStyle(const wxString& characterStyle);
+
+ /**
+ Ends named character style.
+ */
+ bool EndCharacterStyle() { return EndStyle(); }
+
+ /**
+ Begins named paragraph style.
+ */
+ bool BeginParagraphStyle(const wxString& paragraphStyle);
+
+ /**
+ Ends named character style.
+ */
+ bool EndParagraphStyle() { return EndStyle(); }
+
+ /**
+ Begins named list style.
+
+ Optionally, you can also pass a level and a number.
+ */
+ bool BeginListStyle(const wxString& listStyle, int level = 1, int number = 1);
+
+ /**
+ Ends named character style.
+ */
+ bool EndListStyle() { return EndStyle(); }
+
+ /**
+ Begins applying wxTEXT_ATTR_URL to the content.
+
+ Pass a URL and optionally, a character style to apply, since it is common
+ to mark a URL with a familiar style such as blue text with underlining.
+ */
+ bool BeginURL(const wxString& url, const wxString& characterStyle = wxEmptyString);
+
+ /**
+ Ends URL.
+ */
+ bool EndURL() { return EndStyle(); }
+
+// Event handling
+
+ /**
+ Adds an event handler.
+
+ A buffer associated with a control has the control as the only event handler,
+ but the application is free to add more if further notification is required.
+ All handlers are notified of an event originating from the buffer, such as
+ the replacement of a style sheet during loading.
+
+ The buffer never deletes any of the event handlers, unless RemoveEventHandler()
+ is called with @true as the second argument.
+ */
+ bool AddEventHandler(wxEvtHandler* handler);
+
+ /**
+ Removes an event handler from the buffer's list of handlers, deleting the
+ object if @a deleteHandler is @true.
+ */
+ bool RemoveEventHandler(wxEvtHandler* handler, bool deleteHandler = false);
+
+ /**
+ Clear event handlers.
+ */
+ void ClearEventHandlers();
+
+ /**
+ Send event to event handlers. If sendToAll is true, will send to all event handlers,
+ otherwise will stop at the first successful one.
+ */
+ bool SendEvent(wxEvent& event, bool sendToAll = true);
+
+// Implementation
+
+ virtual int HitTest(wxDC& dc, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, wxRichTextObject** contextObj, int flags = 0);
+
+ /**
+ Copies the buffer.
+ */
+ void Copy(const wxRichTextBuffer& obj);
+
+ /**
+ Assignment operator.
+ */
+ void operator= (const wxRichTextBuffer& obj) { Copy(obj); }
+
+ /**
+ Clones the buffer.
+ */
+ virtual wxRichTextObject* Clone() const { return new wxRichTextBuffer(*this); }
+
+ /**
+ Submits a command to insert paragraphs.
+ */
+ bool InsertParagraphsWithUndo(long pos, const wxRichTextParagraphLayoutBox& paragraphs, wxRichTextCtrl* ctrl, int flags = 0);
+
+ /**
+ Submits a command to insert the given text.
+ */
+ bool InsertTextWithUndo(long pos, const wxString& text, wxRichTextCtrl* ctrl, int flags = 0);
+
+ /**
+ Submits a command to insert a newline.
+ */
+ bool InsertNewlineWithUndo(long pos, wxRichTextCtrl* ctrl, int flags = 0);
+
+ /**
+ Submits a command to insert the given image.
+ */
+ bool InsertImageWithUndo(long pos, const wxRichTextImageBlock& imageBlock, wxRichTextCtrl* ctrl, int flags = 0,
+ const wxRichTextAttr& textAttr = wxRichTextAttr());
+
+ /**
+ Submits a command to insert an object.
+ */
+ wxRichTextObject* InsertObjectWithUndo(long pos, wxRichTextObject *object, wxRichTextCtrl* ctrl, int flags);
+
+ /**
+ Submits a command to delete this range.
+ */
+ bool DeleteRangeWithUndo(const wxRichTextRange& range, wxRichTextCtrl* ctrl);
+
+ /**
+ Mark modified.
+ */
+ void Modify(bool modify = true) { m_modified = modify; }
+
+ /**
+ Returns @true if the buffer was modified.
+ */
+ bool IsModified() const { return m_modified; }
+
+ //@{
+ /**
+ Dumps contents of buffer for debugging purposes.
+ */
+ virtual void Dump();
+ virtual void Dump(wxTextOutputStream& stream) { wxRichTextParagraphLayoutBox::Dump(stream); }
+ //@}
+
+ /**
+ Returns the file handlers.
+ */
+ static wxList& GetHandlers() { return sm_handlers; }
+
+ /**
+ Adds a file handler to the end.
+ */
+ static void AddHandler(wxRichTextFileHandler *handler);
+
+ /**
+ Inserts a file handler at the front.
+ */
+ static void InsertHandler(wxRichTextFileHandler *handler);
+
+ /**
+ Removes a file handler.
+ */
+ static bool RemoveHandler(const wxString& name);
+
+ /**
+ Finds a file handler by name.
+ */
+ static wxRichTextFileHandler *FindHandler(const wxString& name);
+
+ /**
+ Finds a file handler by extension and type.
+ */
+ static wxRichTextFileHandler *FindHandler(const wxString& extension, wxRichTextFileType imageType);
+
+ /**
+ Finds a handler by filename or, if supplied, type.
+ */
+ static wxRichTextFileHandler *FindHandlerFilenameOrType(const wxString& filename,
+ wxRichTextFileType imageType);
+
+ /**
+ Finds a handler by type.
+ */
+ static wxRichTextFileHandler *FindHandler(wxRichTextFileType imageType);
+
+ /**
+ Gets a wildcard incorporating all visible handlers. If @a types is present,
+ it 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 file handlers.
+ */
+ static void CleanUpHandlers();
+
+ /**
+ Initialise the standard file handlers.
+ Currently, only the plain text loading/saving handler is initialised by default.
+ */
+ static void InitStandardHandlers();
+
+ /**
+ Returns the renderer object.
+ */
+ static wxRichTextRenderer* GetRenderer() { return sm_renderer; }
+
+ /**
+ Sets @a renderer as the object to be used to render certain aspects of the
+ content, such as bullets.
+
+ You can override default rendering by deriving a new class from
+ wxRichTextRenderer or wxRichTextStdRenderer, overriding one or more
+ virtual functions, and setting an instance of the class using this function.
+ */
+ static void SetRenderer(wxRichTextRenderer* renderer);
+
+ /**
+ Returns the minimum margin between bullet and paragraph in 10ths of a mm.
+ */
+ static int GetBulletRightMargin() { return sm_bulletRightMargin; }
+
+ /**
+ Sets the minimum margin between bullet and paragraph in 10ths of a mm.
+ */
+ static void SetBulletRightMargin(int margin) { sm_bulletRightMargin = margin; }
+
+ /**
+ Returns the factor to multiply by character height to get a reasonable bullet size.
+ */
+ static float GetBulletProportion() { return sm_bulletProportion; }
+
+ /**
+ Sets the factor to multiply by character height to get a reasonable bullet size.
+ */
+ static void SetBulletProportion(float prop) { sm_bulletProportion = prop; }
- To apply the edited attributes, you can use SetStyle() specifying
- the wxRICHTEXT_SETSTYLE_OPTIMIZE flag, which will only apply attributes that
- are different from the @e combined attributes within the range.
- So, the user edits the effective, displayed attributes for the range,
- but his choice won't be applied unnecessarily to content. As an example,
- say the style for a paragraph specifies bold, but the paragraph text doesn't
- specify a weight.
- The combined style is bold, and this is what the user will see on-screen and
- in the formatting dialog. The user now specifies red text, in addition to bold.
- When applying with SetStyle(), the content font weight attributes won't be
- changed to bold because this is already specified by the paragraph.
- However the text colour attributes @e will be changed to show red.
+ /**
+ Returns the scale factor for calculating dimensions.
*/
- virtual bool GetStyleForRange(const wxRichTextRange& range,
- wxTextAttr& style);
+ double GetScale() const { return m_scale; }
/**
- Returns the current style sheet associated with the buffer, if any.
+ Sets the scale factor for calculating dimensions.
*/
- virtual wxRichTextStyleSheet* GetStyleSheet() const;
+ void SetScale(double scale) { m_scale = scale; }
+
+protected:
+
+ /// Command processor
+ wxCommandProcessor* m_commandProcessor;
+
+ /// Table storing fonts
+ wxRichTextFontTable m_fontTable;
+
+ /// Has been modified?
+ bool m_modified;
+
+ /// Collapsed command stack
+ int m_batchedCommandDepth;
+
+ /// Name for collapsed command
+ wxString m_batchedCommandsName;
+
+ /// Current collapsed command accumulating actions
+ wxRichTextCommand* m_batchedCommand;
+
+ /// Whether to suppress undo
+ int m_suppressUndo;
+
+ /// Style sheet, if any
+ wxRichTextStyleSheet* m_styleSheet;
+
+ /// List of event handlers that will be notified of events
+ wxList m_eventHandlers;
+
+ /// Stack of attributes for convenience functions
+ wxList m_attributeStack;
+
+ /// Flags to be passed to handlers
+ int m_handlerFlags;
+
+ /// File handlers
+ static wxList sm_handlers;
+
+ /// Renderer
+ static wxRichTextRenderer* sm_renderer;
+
+ /// Minimum margin between bullet and paragraph in 10ths of a mm
+ static int sm_bulletRightMargin;
+
+ /// Factor to multiply by character height to get a reasonable bullet size
+ static float sm_bulletProportion;
+
+ /// Scaling factor in use: needed to calculate correct dimensions when printing
+ double m_scale;
+};
+
+/**
+ @class wxRichTextCell
+
+ wxRichTextCell is the cell in a table.
+ */
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextCell: public wxRichTextBox
+{
+ DECLARE_DYNAMIC_CLASS(wxRichTextCell)
+public:
+// Constructors
+
+ /**
+ Default constructor; optionally pass the parent object.
+ */
+
+ wxRichTextCell(wxRichTextObject* parent = NULL);
+
+ /**
+ Copy constructor.
+ */
+
+ wxRichTextCell(const wxRichTextCell& obj): wxRichTextBox() { Copy(obj); }
+
+// Overridables
+
+ virtual bool Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextSelection& selection, const wxRect& rect, int descent, int style);
+
+ virtual wxString GetXMLNodeName() const { return wxT("cell"); }
+
+ virtual bool CanEditProperties() const { return true; }
+
+ virtual bool EditProperties(wxWindow* parent, wxRichTextBuffer* buffer);
+
+ virtual wxString GetPropertiesMenuLabel() const { return _("&Cell"); }
+
+// Accessors
+
+// Operations
+
+ virtual wxRichTextObject* Clone() const { return new wxRichTextCell(*this); }
+
+ void Copy(const wxRichTextCell& obj);
+
+protected:
+};
+
+/**
+ @class wxRichTextTable
+
+ wxRichTextTable represents a table with arbitrary columns and rows.
+ */
+
+WX_DEFINE_ARRAY_PTR(wxRichTextObject*, wxRichTextObjectPtrArray);
+WX_DECLARE_OBJARRAY(wxRichTextObjectPtrArray, wxRichTextObjectPtrArrayArray);
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextTable: public wxRichTextBox
+{
+ DECLARE_DYNAMIC_CLASS(wxRichTextTable)
+public:
+
+// Constructors
+
+ /**
+ Default constructor; optionally pass the parent object.
+ */
+
+ wxRichTextTable(wxRichTextObject* parent = NULL);
+
+ /**
+ Copy constructor.
+ */
+
+ wxRichTextTable(const wxRichTextTable& obj): wxRichTextBox() { Copy(obj); }
+
+// Overridables
+
+ virtual bool Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextSelection& selection, const wxRect& rect, int descent, int style);
+
+ virtual wxString GetXMLNodeName() const { return wxT("table"); }
+
+ virtual bool Layout(wxDC& dc, const wxRect& rect, int style);
+
+ virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, int flags, wxPoint position = wxPoint(0,0), 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);
+#endif
+
+#if wxRICHTEXT_HAVE_XMLDOCUMENT_OUTPUT
+ virtual bool ExportXML(wxXmlNode* parent, wxRichTextXMLHandler* handler);
+#endif
+
+ virtual bool FindPosition(wxDC& dc, long index, wxPoint& pt, int* height, bool forceLineStart);
+
+ virtual void CalculateRange(long start, long& end);
+
+ // Can this object handle the selections of its children? FOr example, a table.
+ virtual bool HandlesChildSelections() const { return true; }
+
+ /// 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 start, long end) const;
+
+ virtual bool CanEditProperties() const { return true; }
+
+ virtual bool EditProperties(wxWindow* parent, wxRichTextBuffer* buffer);
+
+ virtual wxString GetPropertiesMenuLabel() const { return _("&Table"); }
+
+ // 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; }
+
+// Accessors
+
+ /**
+ Returns the cells array.
+ */
+ const wxRichTextObjectPtrArrayArray& GetCells() const { return m_cells; }
+
+ /**
+ Returns the cells array.
+ */
+ wxRichTextObjectPtrArrayArray& GetCells() { return m_cells; }
+
+ /**
+ Returns the row count.
+ */
+ int GetRowCount() const { return m_rowCount; }
+
+ /**
+ Returns the column count.
+ */
+ int GetColumnCount() const { return m_colCount; }
+
+ /**
+ Returns the cell at the given row/column position.
+ */
+ virtual wxRichTextCell* GetCell(int row, int col) const;
+
+ /**
+ Returns the cell at the given character position (in the range of the table).
+ */
+ virtual wxRichTextCell* GetCell(long pos) const;
+
+ /**
+ Returns the row/column for a given character position.
+ */
+ virtual bool GetCellRowColumnPosition(long pos, int& row, int& col) const;
+
+// Operations
+
+ /**
+ Clears the table.
+ */
+
+ virtual void ClearTable();
+
+ /**
+ Creates a table of the given dimensions.
+ */
+
+ virtual bool CreateTable(int rows, int cols);
+
+ /**
+ Sets the attributes for the cells specified by the selection.
+ */
+
+ virtual bool SetCellStyle(const wxRichTextSelection& selection, const wxRichTextAttr& style, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
+
+ /**
+ Deletes rows from the given row position.
+ */
+
+ virtual bool DeleteRows(int startRow, int noRows = 1);
+
+ /**
+ Deletes columns from the given column position.
+ */
+
+ virtual bool DeleteColumns(int startCol, int noCols = 1);
+
+ /**
+ Adds rows from the given row position.
+ */
+
+ virtual bool AddRows(int startRow, int noRows = 1, const wxRichTextAttr& attr = wxRichTextAttr());
+
+ /**
+ Adds columns from the given column position.
+ */
+
+ virtual bool AddColumns(int startCol, int noCols = 1, const wxRichTextAttr& attr = wxRichTextAttr());
+
+ // Makes a clone of this object.
+ virtual wxRichTextObject* Clone() const { return new wxRichTextTable(*this); }
+
+ // Copies this object.
+ void Copy(const wxRichTextTable& obj);
+
+protected:
+
+ int m_rowCount;
+ int m_colCount;
+
+ // An array of rows, each of which is a wxRichTextObjectPtrArray containing
+ // the cell objects. The cell objects are also children of this object.
+ // Problem: if boxes are immediate children of a box, this will cause problems
+ // with wxRichTextParagraphLayoutBox functions (and functions elsewhere) that
+ // expect to find just paragraphs. May have to adjust the way we handle the
+ // hierarchy to accept non-paragraph objects in a paragraph layout box.
+ // We'll be overriding much wxRichTextParagraphLayoutBox functionality so this
+ // may not be such a problem. Perhaps the table should derive from a different
+ // class?
+ wxRichTextObjectPtrArrayArray m_cells;
+};
+
+
+/**
+ The command identifiers for Do/Undo.
+*/
+
+enum wxRichTextCommandId
+{
+ wxRICHTEXT_INSERT,
+ wxRICHTEXT_DELETE,
+ wxRICHTEXT_CHANGE_ATTRIBUTES,
+ wxRICHTEXT_CHANGE_STYLE,
+ wxRICHTEXT_CHANGE_OBJECT
+};
+
+/**
+ @class wxRichTextObjectAddress
+
+ A class for specifying an object anywhere in an object hierarchy,
+ without using a pointer, necessary since wxRTC commands may delete
+ and recreate sub-objects so physical object addresses change. An array
+ of positions (one per hierarchy level) is used.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextCommand
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextObjectAddress
+{
+public:
+ /**
+ Creates the address given a container and an object.
+ */
+ wxRichTextObjectAddress(wxRichTextParagraphLayoutBox* topLevelContainer, wxRichTextObject* obj) { Create(topLevelContainer, obj); }
+ /**
+ */
+ wxRichTextObjectAddress() { Init(); }
+ /**
+ */
+ wxRichTextObjectAddress(const wxRichTextObjectAddress& address) { Copy(address); }
+
+ void Init() {}
+
+ /**
+ Copies the address.
+ */
+ void Copy(const wxRichTextObjectAddress& address) { m_address = address.m_address; }
+
+ /**
+ Assignment operator.
+ */
+ void operator=(const wxRichTextObjectAddress& address) { Copy(address); }
+
+ /**
+ Returns the object specified by the address, given a top level container.
+ */
+ wxRichTextObject* GetObject(wxRichTextParagraphLayoutBox* topLevelContainer) const;
+
+ /**
+ Creates the address given a container and an object.
+ */
+ bool Create(wxRichTextParagraphLayoutBox* topLevelContainer, wxRichTextObject* obj);
+
+ /**
+ Returns the array of integers representing the object address.
+ */
+ wxArrayInt& GetAddress() { return m_address; }
+
+ /**
+ Returns the array of integers representing the object address.
+ */
+ const wxArrayInt& GetAddress() const { return m_address; }
+
+ /**
+ Sets the address from an array of integers.
+ */
+ void SetAddress(const wxArrayInt& address) { m_address = address; }
+
+protected:
+
+ wxArrayInt m_address;
+};
+
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction;
+
+/**
+ @class wxRichTextCommand
+
+ Implements a command on the undo/redo stack. A wxRichTextCommand object contains one or more wxRichTextAction
+ objects, allowing aggregation of a number of operations into one command.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextAction
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextCommand: public wxCommand
+{
+public:
+ /**
+ Constructor for one action.
+ */
+ wxRichTextCommand(const wxString& name, wxRichTextCommandId id, wxRichTextBuffer* buffer,
+ wxRichTextParagraphLayoutBox* container, wxRichTextCtrl* ctrl, bool ignoreFirstTime = false);
/**
- Get the size of the style stack, for example to check correct nesting.
+ Constructor for multiple actions.
+ */
+ wxRichTextCommand(const wxString& name);
+
+ virtual ~wxRichTextCommand();
+
+ /**
+ Performs the command.
+ */
+ bool Do();
+
+ /**
+ Undoes the command.
+ */
+ bool Undo();
+
+ /**
+ Adds an action to the action list.
+ */
+ void AddAction(wxRichTextAction* action);
+
+ /**
+ Clears the action list.
+ */
+ void ClearActions();
+
+ /**
+ Returns the action list.
+ */
+ wxList& GetActions() { return m_actions; }
+
+protected:
+
+ wxList m_actions;
+};
+
+/**
+ @class wxRichTextAction
+
+ Implements a part of a command.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextCommand
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextAction: public wxObject
+{
+public:
+ /**
+ Constructor. @a buffer is the top-level buffer, while @a container is the object within
+ which the action is taking place. In the simplest case, they are the same.
*/
- virtual size_t GetStyleStackSize() const;
+ wxRichTextAction(wxRichTextCommand* cmd, const wxString& name, wxRichTextCommandId id,
+ wxRichTextBuffer* buffer, wxRichTextParagraphLayoutBox* container,
+ wxRichTextCtrl* ctrl, bool ignoreFirstTime = false);
- /**
- Gets the attributes at the given position.
+ virtual ~wxRichTextAction();
- This function gets the @e uncombined style - that is, the attributes associated
- with the paragraph or character content, and not necessarily the combined
- attributes you see on the screen. To get the combined attributes, use GetStyle().
- If you specify (any) paragraph attribute in @e style's flags, this function
- will fetch the paragraph attributes.
- Otherwise, it will return the character attributes.
+ /**
+ Performs the action.
*/
- virtual bool GetUncombinedStyle(long position, wxTextAttr& style);
+ bool Do();
/**
- Finds the text position for the given position, putting the position in
- @a textPosition if one is found.
- @a pt is in logical units (a zero y position is at the beginning of the buffer).
-
- @return One of the ::wxRichTextHitTestFlags values.
+ Undoes the action.
*/
- virtual int HitTest(wxDC& dc, const wxPoint& pt, long& textPosition);
+ bool Undo();
/**
- Initialisation.
+ Updates the control appearance, optimizing if possible given information from the call to Layout.
*/
- void Init();
+ void UpdateAppearance(long caretPosition, bool sendUpdateEvent = false,
+ wxArrayInt* optimizationLineCharPositions = NULL, wxArrayInt* optimizationLineYPositions = NULL, bool isDoCmd = true);
/**
- Initialises the standard handlers.
- Currently, only the plain text loading/saving handler is initialised by default.
+ Replaces the buffer paragraphs with the given fragment.
*/
- static void InitStandardHandlers();
+ void ApplyParagraphs(const wxRichTextParagraphLayoutBox& fragment);
/**
- Inserts a handler at the front of the list.
+ Returns the new fragments.
*/
- static void InsertHandler(wxRichTextFileHandler* handler);
+ wxRichTextParagraphLayoutBox& GetNewParagraphs() { return m_newParagraphs; }
/**
- Submits a command to insert the given image.
+ Returns the old fragments.
*/
- bool InsertImageWithUndo(long pos, const wxRichTextImageBlock& imageBlock,
- wxRichTextCtrl* ctrl, int flags = 0);
+ wxRichTextParagraphLayoutBox& GetOldParagraphs() { return m_oldParagraphs; }
/**
- Submits a command to insert a newline.
+ Returns the attributes, for single-object commands.
*/
- bool InsertNewlineWithUndo(long pos, wxRichTextCtrl* ctrl, int flags = 0);
+ wxRichTextAttr& GetAttributes() { return m_attributes; }
/**
- Submits a command to insert the given text.
+ Returns the object to replace the one at the position defined by the container address
+ and the action's range start position.
*/
- bool InsertTextWithUndo(long pos, const wxString& text,
- wxRichTextCtrl* ctrl, int flags = 0);
+ wxRichTextObject* GetObject() const { return m_object; }
/**
- Returns @true if the buffer has been modified.
+ Sets the object to replace the one at the position defined by the container address
+ and the action's range start position.
*/
- bool IsModified() const;
+ void SetObject(wxRichTextObject* obj) { m_object = obj; m_objectAddress.Create(m_buffer, m_object); }
/**
- Loads content from a stream.
+ Makes an address from the given object.
*/
- virtual bool LoadFile(wxInputStream& stream,
- wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
+ void MakeObject(wxRichTextObject* obj) { m_objectAddress.Create(m_buffer, obj); }
/**
- Loads content from a file.
+ Calculate arrays for refresh optimization.
*/
- virtual bool LoadFile(const wxString& filename,
- wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
+ void CalculateRefreshOptimizations(wxArrayInt& optimizationLineCharPositions, wxArrayInt& optimizationLineYPositions);
/**
- Marks the buffer as modified or unmodified.
+ Sets the position used for e.g. insertion.
*/
- void Modify(bool modify = true);
+ void SetPosition(long pos) { m_position = pos; }
- //@{
/**
- Numbers the paragraphs in the given range.
-
- Pass flags to determine how the attributes are set.
- Either the style definition or the name of the style definition (in the current
- sheet) can be passed.
-
- @a flags is a bit list of the following:
- - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
- - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
- @a startFrom, otherwise existing attributes are used.
- - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
- as the level for all paragraphs, otherwise the current indentation will be used.
-
- @see SetListStyle(), PromoteList(), ClearListStyle()
+ Returns the position used for e.g. insertion.
*/
- bool NumberList(const wxRichTextRange& range,
- const wxRichTextListStyleDefinition* style,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO,
- int startFrom = -1,
- int listLevel = -1);
- bool Number(const wxRichTextRange& range,
- const wxString& styleName,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO,
- int startFrom = -1,
- int listLevel = -1);
- //@}
+ long GetPosition() const { return m_position; }
/**
- Pastes the clipboard content to the buffer at the given position.
+ Sets the range for e.g. deletion.
*/
- virtual bool PasteFromClipboard(long position);
+ void SetRange(const wxRichTextRange& range) { m_range = range; }
- //@{
/**
- Promotes or demotes the paragraphs in the given range.
-
- A positive @a promoteBy produces a smaller indent, and a negative number
- produces a larger indent. Pass flags to determine how the attributes are set.
- Either the style definition or the name of the style definition (in the current
- sheet) can be passed.
-
- @a flags is a bit list of the following:
- - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
- - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
- @a startFrom, otherwise existing attributes are used.
- - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
- as the level for all paragraphs, otherwise the current indentation will be used.
-
- @see SetListStyle(), SetListStyle(), ClearListStyle()
+ Returns the range for e.g. deletion.
*/
- bool PromoteList(int promoteBy, const wxRichTextRange& range,
- const wxRichTextListStyleDefinition* style,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO,
- int listLevel = -1);
- bool PromoteList(int promoteBy, const wxRichTextRange& range,
- const wxString& styleName,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO,
- int listLevel = -1);
- //@}
+ const wxRichTextRange& GetRange() const { return m_range; }
/**
- Removes an event handler from the buffer's list of handlers, deleting the
- object if @a deleteHandler is @true.
+ Returns the address (nested position) of the container within the buffer being manipulated.
*/
- bool RemoveEventHandler(wxEvtHandler* handler,
- bool deleteHandler = false);
+ wxRichTextObjectAddress& GetContainerAddress() { return m_containerAddress; }
/**
- Removes a handler.
+ Returns the address (nested position) of the container within the buffer being manipulated.
*/
- static bool RemoveHandler(const wxString& name);
+ const wxRichTextObjectAddress& GetContainerAddress() const { return m_containerAddress; }
/**
- Clears the buffer, adds a new blank paragraph, and clears the command history.
+ Sets the address (nested position) of the container within the buffer being manipulated.
*/
- virtual void ResetAndClearCommands();
+ void SetContainerAddress(const wxRichTextObjectAddress& address) { m_containerAddress = address; }
/**
- Saves content to a stream.
+ Sets the address (nested position) of the container within the buffer being manipulated.
*/
- virtual bool SaveFile(wxOutputStream& stream,
- wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
+ void SetContainerAddress(wxRichTextParagraphLayoutBox* container, wxRichTextObject* obj) { m_containerAddress.Create(container, obj); }
/**
- Saves content to a file.
+ Returns the container that this action refers to, using the container address and top-level buffer.
*/
- virtual bool SaveFile(const wxString& filename,
- wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
+ wxRichTextParagraphLayoutBox* GetContainer() const;
/**
- Sets the basic (overall) style. This is the style of the whole
- buffer before further styles are applied, unlike the default style, which
- only affects the style currently being applied (for example, setting the default
- style to bold will cause subsequently inserted text to be bold).
+ Returns the action name.
*/
- virtual void SetBasicStyle(const wxTextAttr& style);
+ const wxString& GetName() const { return m_name; }
- /**
- Sets the default style, affecting the style currently being applied
- (for example, setting the default style to bold will cause subsequently
- inserted text to be bold).
+protected:
+ // Action name
+ wxString m_name;
- This is not cumulative - setting the default style will replace the previous
- default style.
- */
- virtual bool SetDefaultStyle(const wxTextAttr& style);
+ // Buffer
+ wxRichTextBuffer* m_buffer;
- //@{
- /**
- Sets the list attributes for the given range, passing flags to determine how
- the attributes are set.
- Either the style definition or the name of the style definition (in the current
- sheet) can be passed.
+ // The address (nested position) of the container being manipulated.
+ // This is necessary because objects are deleted, and we can't
+ // therefore store actual pointers.
+ wxRichTextObjectAddress m_containerAddress;
- @a flags is a bit list of the following:
- - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
- - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
- @a startFrom, otherwise existing attributes are used.
- - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
- as the level for all paragraphs, otherwise the current indentation will be used.
+ // Control
+ wxRichTextCtrl* m_ctrl;
- @see NumberList(), PromoteList(), ClearListStyle().
- */
- bool SetListStyle(const wxRichTextRange& range,
- const wxRichTextListStyleDefinition* style,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO,
- int startFrom = -1,
- int listLevel = -1);
- bool SetListStyle(const wxRichTextRange& range,
- const wxString& styleName,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO,
- int startFrom = -1,
- int listLevel = -1);
- //@}
+ // Stores the new paragraphs
+ wxRichTextParagraphLayoutBox m_newParagraphs;
- /**
- Sets @a renderer as the object to be used to render certain aspects of the
- content, such as bullets.
+ // Stores the old paragraphs
+ wxRichTextParagraphLayoutBox m_oldParagraphs;
- You can override default rendering by deriving a new class from
- wxRichTextRenderer or wxRichTextStdRenderer, overriding one or more
- virtual functions, and setting an instance of the class using this function.
- */
- static void SetRenderer(wxRichTextRenderer* renderer);
+ // Stores an object to replace the one at the position
+ // defined by the container address and the action's range start position.
+ wxRichTextObject* m_object;
- /**
- Sets the attributes for the given range. Pass flags to determine how the
- attributes are set.
+ // Stores the attributes
+ wxRichTextAttr m_attributes;
- The end point of range is specified as the last character position of the span
- of text. So, for example, to set the style for a character at position 5,
- use the range (5,5).
- This differs from the wxRichTextCtrl API, where you would specify (5,6).
+ // The address of the object being manipulated (used for changing an individual object or its attributes)
+ wxRichTextObjectAddress m_objectAddress;
- @a flags may contain a bit list of the following values:
- - wxRICHTEXT_SETSTYLE_NONE: no style flag.
- - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
- undoable.
- - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
- if the combined style at this point is already the style in question.
- - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
- applied to paragraphs, and not the content.
- This allows content styling to be preserved independently from that
- of e.g. a named paragraph style.
- - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
- applied to characters, and not the paragraph.
- This allows content styling to be preserved independently from that
- of e.g. a named paragraph style.
- - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
- the new style.
- - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style.
- Only the style flags are used in this operation.
- */
- virtual bool SetStyle(const wxRichTextRange& range, const wxTextAttr& style,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
+ // Stores the old attributes
+ // wxRichTextAttr m_oldAttributes;
- /**
- Sets the current style sheet, if any.
+ // The affected range
+ wxRichTextRange m_range;
- This will allow the application to use named character and paragraph
- styles found in the style sheet.
- */
- void SetStyleSheet(wxRichTextStyleSheet* styleSheet);
+ // The insertion point for this command
+ long m_position;
- /**
- Submit an action immediately, or delay it according to whether collapsing is on.
- */
- virtual bool SubmitAction(wxRichTextAction* action);
+ // Ignore 1st 'Do' operation because we already did it
+ bool m_ignoreThis;
- /**
- Returns @true if undo suppression is currently on.
- */
- virtual bool SuppressingUndo() const;
+ // The command identifier
+ wxRichTextCommandId m_cmdId;
};
+/*!
+ * Handler flags
+ */
+
+// Include style sheet when loading and saving
+#define wxRICHTEXT_HANDLER_INCLUDE_STYLESHEET 0x0001
+
+// Save images to memory file system in HTML handler
+#define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_MEMORY 0x0010
+
+// Save images to files in HTML handler
+#define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_FILES 0x0020
+// Save images as inline base64 data in HTML handler
+#define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_BASE64 0x0040
+
+// Don't write header and footer (or BODY), so we can include the fragment
+// in a larger document
+#define wxRICHTEXT_HANDLER_NO_HEADER_FOOTER 0x0080
+
+// Convert the more common face names to names that will work on the current platform
+// in a larger document
+#define wxRICHTEXT_HANDLER_CONVERT_FACENAMES 0x0100
/**
@class wxRichTextFileHandler
- This is the base class for file handlers, for loading and/or saving content
- associated with a wxRichTextBuffer.
+ The base class for file handlers.
@library{wxrichtext}
@category{richtext}
+
+ @see wxRichTextBuffer, wxRichTextCtrl
*/
-class wxRichTextFileHandler : public wxObject
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextFileHandler: public wxObject
{
+ DECLARE_CLASS(wxRichTextFileHandler)
public:
/**
- Constructor.
+ Creates a file handler object.
*/
- wxRichTextFileHandler(const wxString& name = wxEmptyString,
- const wxString& ext = wxEmptyString,
- int type = 0);
+ wxRichTextFileHandler(const wxString& name = wxEmptyString, const wxString& ext = wxEmptyString, int type = 0)
+ : m_name(name), m_extension(ext), m_type(type), m_flags(0), m_visible(true)
+ { }
+#if wxUSE_STREAMS
/**
- Override this function and return @true if this handler can we handle
- @a filename.
+ Loads the buffer from a stream.
+ Not all handlers will implement file loading.
+ */
+ bool LoadFile(wxRichTextBuffer *buffer, wxInputStream& stream)
+ { return DoLoadFile(buffer, stream); }
- By default, this function checks the extension.
+ /**
+ Saves the buffer to a stream.
+ Not all handlers will implement file saving.
*/
- virtual bool CanHandle(const wxString& filename) const;
+ bool SaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream)
+ { return DoSaveFile(buffer, stream); }
+#endif
+#if wxUSE_FFILE && wxUSE_STREAMS
/**
- Override and return @true if this handler can load content.
+ Loads the buffer from a file.
*/
- virtual bool CanLoad() const;
+ virtual bool LoadFile(wxRichTextBuffer *buffer, const wxString& filename);
/**
- Override and return @true if this handler can save content.
+ Saves the buffer to a file.
*/
- virtual bool CanSave() const;
+ virtual bool SaveFile(wxRichTextBuffer *buffer, const wxString& filename);
+#endif // wxUSE_STREAMS && wxUSE_STREAMS
/**
- Returns the encoding associated with the handler (if any).
+ Returns @true if we handle this filename (if using files). By default, checks the extension.
*/
- const wxString& GetEncoding() const;
+ virtual bool CanHandle(const wxString& filename) const;
/**
- Returns the extension associated with the handler.
+ Returns @true if we can save using this handler.
*/
- wxString GetExtension() const;
+ virtual bool CanSave() const { return false; }
/**
- Returns flags that change the behaviour of loading or saving.
+ Returns @true if we can load using this handler.
+ */
+ virtual bool CanLoad() const { return false; }
- See the documentation for each handler class to see what flags are
- relevant for each handler.
+ /**
+ Returns @true if this handler should be visible to the user.
*/
- int GetFlags() const;
+ virtual bool IsVisible() const { return m_visible; }
/**
- Returns the name of the handler.
+ Sets whether the handler should be visible to the user (via the application's
+ load and save dialogs).
*/
- wxString GetName() const;
+ virtual void SetVisible(bool visible) { m_visible = visible; }
/**
- Returns the type of the handler.
+ Sets the name of the nandler.
*/
- int GetType() const;
+ void SetName(const wxString& name) { m_name = name; }
/**
- Returns @true if this handler should be visible to the user.
+ Returns the name of the nandler.
*/
- virtual bool IsVisible() const;
+ wxString GetName() const { return m_name; }
- //@{
/**
- Loads content from a stream or file.
- Not all handlers will implement file loading.
+ Sets the default extension to recognise.
*/
- bool LoadFile(wxRichTextBuffer* buffer, wxInputStream& stream);
- bool LoadFile(wxRichTextBuffer* buffer, const wxString& filename);
- //@}
+ void SetExtension(const wxString& ext) { m_extension = ext; }
- //@{
/**
- Saves content to a stream or file.
- Not all handlers will implement file saving.
+ Returns the default extension to recognise.
*/
- bool SaveFile(wxRichTextBuffer* buffer, wxOutputStream& stream);
- bool SaveFile(wxRichTextBuffer* buffer, const wxString& filename);
- //@}
+ wxString GetExtension() const { return m_extension; }
/**
- Sets the encoding to use when saving a file.
- If empty, a suitable encoding is chosen.
+ Sets the handler type.
*/
- void SetEncoding(const wxString& encoding);
+ void SetType(int type) { m_type = type; }
/**
- Sets the default extension to recognise.
+ Returns the handler type.
*/
- void SetExtension(const wxString& ext);
+ int GetType() const { return m_type; }
/**
Sets flags that change the behaviour of loading or saving.
Or, you can call the control or buffer's SetHandlerFlags function to set
the flags that will be used for subsequent load and save operations.
*/
- void SetFlags(int flags);
+ void SetFlags(int flags) { m_flags = flags; }
/**
- Sets the name of the handler.
+ Returns flags controlling how loading and saving is done.
*/
- void SetName(const wxString& name);
+ int GetFlags() const { return m_flags; }
/**
- Sets the handler type.
+ Sets the encoding to use when saving a file. If empty, a suitable encoding is chosen.
*/
- void SetType(int type);
+ void SetEncoding(const wxString& encoding) { m_encoding = encoding; }
/**
- Sets whether the handler should be visible to the user (via the application's
- load and save dialogs).
+ Returns the encoding to use when saving a file. If empty, a suitable encoding is chosen.
*/
- virtual void SetVisible(bool visible);
+ const wxString& GetEncoding() const { return m_encoding; }
protected:
+
+#if wxUSE_STREAMS
/**
Override to load content from @a stream into @a buffer.
*/
- virtual bool DoLoadFile(wxRichTextBuffer* buffer,
- wxInputStream& stream) = 0;
+ virtual bool DoLoadFile(wxRichTextBuffer *buffer, wxInputStream& stream) = 0;
/**
Override to save content to @a stream from @a buffer.
*/
- virtual bool DoSaveFile(wxRichTextBuffer* buffer,
- wxOutputStream& stream) = 0;
+ virtual bool DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream) = 0;
+#endif
+
+ wxString m_name;
+ wxString m_encoding;
+ wxString m_extension;
+ int m_type;
+ int m_flags;
+ bool m_visible;
};
+/**
+ @class wxRichTextPlainTextHandler
+
+ Implements saving a buffer to plain text.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextFileHandler, wxRichTextBuffer, wxRichTextCtrl
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextPlainTextHandler: public wxRichTextFileHandler
+{
+ DECLARE_CLASS(wxRichTextPlainTextHandler)
+public:
+ wxRichTextPlainTextHandler(const wxString& name = wxT("Text"),
+ const wxString& ext = wxT("txt"),
+ wxRichTextFileType type = wxRICHTEXT_TYPE_TEXT)
+ : wxRichTextFileHandler(name, ext, type)
+ { }
+
+ // Can we save using this handler?
+ virtual bool CanSave() const { return true; }
+
+ // Can we load using this handler?
+ virtual bool CanLoad() const { return true; }
+
+protected:
+
+#if wxUSE_STREAMS
+ virtual bool DoLoadFile(wxRichTextBuffer *buffer, wxInputStream& stream);
+ virtual bool DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream);
+#endif
+
+};
+#if wxUSE_DATAOBJ
/**
- @class wxRichTextRange
+ @class wxRichTextBufferDataObject
- This class stores beginning and end positions for a range of data.
+ Implements a rich text data object for clipboard transfer.
@library{wxrichtext}
@category{richtext}
+
+ @see wxDataObjectSimple, wxRichTextBuffer, wxRichTextCtrl
*/
-class wxRichTextRange
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextBufferDataObject: public wxDataObjectSimple
{
public:
- //@{
/**
- Constructors.
+ The constructor doesn't copy the pointer, so it shouldn't go away while this object
+ is alive.
*/
- wxRichTextRange(long start, long end);
- wxRichTextRange(const wxRichTextRange& range);
- wxRichTextRange();
- //@}
+ wxRichTextBufferDataObject(wxRichTextBuffer* richTextBuffer = NULL);
+ virtual ~wxRichTextBufferDataObject();
/**
- Destructor.
+ After a call to this function, the buffer is owned by the caller and it
+ is responsible for deleting it.
*/
- ~wxRichTextRange();
+ wxRichTextBuffer* GetRichTextBuffer();
/**
- Returns @true if the given position is within this range.
- Does not match if the range is empty.
+ Returns the id for the new data format.
*/
- bool Contains(long pos) const;
+ static const wxChar* GetRichTextBufferFormatId() { return ms_richTextBufferFormatId; }
- /**
- Converts the internal range, which uses the first and last character positions
- of the range, to the API-standard range, whose end is one past the last
- character in the range.
- In other words, one is added to the end position.
- */
- wxRichTextRange FromInternal() const;
+ // base class pure virtuals
- /**
- Returns the end position.
- */
- long GetEnd() const;
+ virtual wxDataFormat GetPreferredFormat(Direction dir) const;
+ virtual size_t GetDataSize() const;
+ virtual bool GetDataHere(void *pBuf) const;
+ virtual bool SetData(size_t len, const void *buf);
- /**
- Returns the length of the range.
- */
- long GetLength() const;
+ // prevent warnings
- /**
- Returns the start of the range.
- */
- long GetStart() const;
+ virtual size_t GetDataSize(const wxDataFormat&) const { return GetDataSize(); }
+ virtual bool GetDataHere(const wxDataFormat&, void *buf) const { return GetDataHere(buf); }
+ virtual bool SetData(const wxDataFormat&, size_t len, const void *buf) { return SetData(len, buf); }
- /**
- Returns @true if this range is completely outside @e range.
- */
- bool IsOutside(const wxRichTextRange& range) const;
+private:
+ wxDataFormat m_formatRichTextBuffer; // our custom format
+ wxRichTextBuffer* m_richTextBuffer; // our data
+ static const wxChar* ms_richTextBufferFormatId; // our format id
+};
- /**
- Returns @true if this range is completely within @e range.
- */
- bool IsWithin(const wxRichTextRange& range) const;
+#endif
- /**
- Limits this range to be within @e range.
- */
- bool LimitTo(const wxRichTextRange& range);
+/**
+ @class wxRichTextRenderer
- /**
- Sets the end of the range.
- */
- void SetEnd(long end);
+ This class isolates some common drawing functionality.
- /**
- Sets the range.
- */
- void SetRange(long start, long end);
+ @library{wxrichtext}
+ @category{richtext}
- /**
- Sets the start of the range.
- */
- void SetStart(long start);
+ @see wxRichTextBuffer, wxRichTextCtrl
+*/
+class WXDLLIMPEXP_RICHTEXT wxRichTextRenderer: public wxObject
+{
+public:
/**
- Swaps the start and end.
+ Constructor.
*/
- void Swap();
+ wxRichTextRenderer() {}
+ virtual ~wxRichTextRenderer() {}
/**
- Converts the API-standard range, whose end is one past the last character in
- the range, to the internal form, which uses the first and last character
- positions of the range.
- In other words, one is subtracted from the end position.
+ Draws a standard bullet, as specified by the value of GetBulletName. This function should be overridden.
*/
- wxRichTextRange ToInternal() const;
+ virtual bool DrawStandardBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxRichTextAttr& attr, const wxRect& rect) = 0;
/**
- Adds @a range to this range.
+ Draws a bullet that can be described by text, such as numbered or symbol bullets. This function should be overridden.
*/
- wxRichTextRange operator+(const wxRichTextRange& range) const;
+ virtual bool DrawTextBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxRichTextAttr& attr, const wxRect& rect, const wxString& text) = 0;
/**
- Subtracts @a range from this range.
+ Draws a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName. This function should be overridden.
*/
- wxRichTextRange operator-(const wxRichTextRange& range) const;
+ virtual bool DrawBitmapBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxRichTextAttr& attr, const wxRect& rect) = 0;
/**
- Assigns @a range to this range.
+ Enumerate the standard bullet names currently supported. This function should be overridden.
*/
- void operator=(const wxRichTextRange& range);
+ virtual bool EnumerateStandardBulletNames(wxArrayString& bulletNames) = 0;
+};
+
+/**
+ @class wxRichTextStdRenderer
+
+ The standard renderer for drawing bullets.
+
+ @library{wxrichtext}
+ @category{richtext}
+
+ @see wxRichTextRenderer, wxRichTextBuffer, wxRichTextCtrl
+*/
+class WXDLLIMPEXP_RICHTEXT wxRichTextStdRenderer: public wxRichTextRenderer
+{
+public:
/**
- Returns @true if @a range is the same as this range.
+ Constructor.
*/
- bool operator==(const wxRichTextRange& range) const;
+ wxRichTextStdRenderer() {}
+
+ // Draw a standard bullet, as specified by the value of GetBulletName
+ virtual bool DrawStandardBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxRichTextAttr& attr, const wxRect& rect);
+
+ // Draw a bullet that can be described by text, such as numbered or symbol bullets
+ virtual bool DrawTextBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxRichTextAttr& attr, const wxRect& rect, const wxString& text);
+
+ // Draw a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName
+ virtual bool DrawBitmapBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxRichTextAttr& attr, const wxRect& rect);
+
+ // Enumerate the standard bullet names currently supported
+ virtual bool EnumerateStandardBulletNames(wxArrayString& bulletNames);
};
+/*!
+ * Utilities
+ *
+ */
+
+inline bool wxRichTextHasStyle(int flags, int style)
+{
+ return ((flags & style) == 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);
+
+/// Apply one style to another
+WXDLLIMPEXP_RICHTEXT bool wxRichTextApplyStyle(wxRichTextAttr& destStyle, const wxRichTextAttr& style, wxRichTextAttr* compareWith = NULL);
+
+// Remove attributes
+WXDLLIMPEXP_RICHTEXT bool wxRichTextRemoveStyle(wxRichTextAttr& destStyle, const wxRichTextAttr& style);
+
+/// Combine two bitlists
+WXDLLIMPEXP_RICHTEXT bool wxRichTextCombineBitlists(int& valueA, int valueB, int& flagsA, int flagsB);
+
+/// Compare two bitlists
+WXDLLIMPEXP_RICHTEXT 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);
+
+/// Compare tabs
+WXDLLIMPEXP_RICHTEXT bool wxRichTextTabsEq(const wxArrayInt& tabs1, const wxArrayInt& tabs2);
+
+/// Convert a decimal to Roman numerals
+WXDLLIMPEXP_RICHTEXT 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);
+
+WXDLLIMPEXP_RICHTEXT void wxRichTextModuleInit();
+
+#endif
+ // wxUSE_RICHTEXT
+
+#endif
+ // _WX_RICHTEXTBUFFER_H_
+
/////////////////////////////////////////////////////////////////////////////
-// Name: richtext/richtextctrl.h
-// Purpose: interface of wxRichTextCtrl and wxRichTextEvent
-// Author: wxWidgets team
+// Name: wx/richtext/richtextctrl.h
+// Purpose: A rich edit control
+// Author: Julian Smart
+// Modified by:
+// Created: 2005-09-30
// RCS-ID: $Id$
+// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
+#ifndef _WX_RICHTEXTCTRL_H_
+#define _WX_RICHTEXTCTRL_H_
+
+#include "wx/richtext/richtextbuffer.h"
+
+#if wxUSE_RICHTEXT
+
+#include "wx/scrolwin.h"
+#include "wx/caret.h"
+
+#include "wx/textctrl.h"
+
+#if !defined(__WXGTK__) && !defined(__WXMAC__)
+#define wxRICHTEXT_BUFFERED_PAINTING 1
+#else
+#define wxRICHTEXT_BUFFERED_PAINTING 0
+#endif
+
+class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextStyleDefinition;
+
+/*
+ * Styles and flags
+ */
+
/**
- @class wxRichTextEvent
+ Styles
+*/
- This is the event class for wxRichTextCtrl notifications.
+#define wxRE_READONLY 0x0010
+#define wxRE_MULTILINE 0x0020
+#define wxRE_CENTRE_CARET 0x8000
+#define wxRE_CENTER_CARET wxRE_CENTRE_CARET
- @beginEventTable{wxRichTextEvent}
- @event{EVT_RICHTEXT_CHARACTER(id, func)}
- Process a @c wxEVT_COMMAND_RICHTEXT_CHARACTER event, generated when the user
- presses a character key. Valid event functions: GetFlags, GetPosition, GetCharacter.
- @event{EVT_RICHTEXT_DELETE(id, func)}
- Process a @c wxEVT_COMMAND_RICHTEXT_DELETE event, generated when the user
- presses the backspace or delete key. Valid event functions: GetFlags, GetPosition.
- @event{EVT_RICHTEXT_RETURN(id, func)}
- Process a @c wxEVT_COMMAND_RICHTEXT_RETURN event, generated when the user
- presses the return key. Valid event functions: GetFlags, GetPosition.
- @event{EVT_RICHTEXT_STYLE_CHANGED(id, func)}
- Process a @c wxEVT_COMMAND_RICHTEXT_STYLE_CHANGED event, generated when
- styling has been applied to the control. Valid event functions: GetPosition, GetRange.
- @event{EVT_RICHTEXT_STYLESHEET_CHANGED(id, func)}
- Process a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING event, generated
- when the control's stylesheet has changed, for example the user added,
- edited or deleted a style. Valid event functions: GetRange, GetPosition.
- @event{EVT_RICHTEXT_STYLESHEET_REPLACING(id, func)}
- Process a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACING event, generated
- when the control's stylesheet is about to be replaced, for example when
- a file is loaded into the control.
- Valid event functions: Veto, GetOldStyleSheet, GetNewStyleSheet.
- @event{EVT_RICHTEXT_STYLESHEET_REPLACED(id, func)}
- Process a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACED event, generated
- when the control's stylesheet has been replaced, for example when a file
- is loaded into the control.
- Valid event functions: GetOldStyleSheet, GetNewStyleSheet.
- @event{EVT_RICHTEXT_CONTENT_INSERTED(id, func)}
- Process a @c wxEVT_COMMAND_RICHTEXT_CONTENT_INSERTED event, generated when
- content has been inserted into the control.
- Valid event functions: GetPosition, GetRange.
- @event{EVT_RICHTEXT_CONTENT_DELETED(id, func)}
- Process a @c wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED event, generated when
- content has been deleted from the control.
- Valid event functions: GetPosition, GetRange.
- @event{EVT_RICHTEXT_BUFFER_RESET(id, func)}
- Process a @c wxEVT_COMMAND_RICHTEXT_BUFFER_RESET event, generated when the
- buffer has been reset by deleting all content.
- You can use this to set a default style for the first new paragraph.
- @endEventTable
+/**
+ Flags
+*/
- @library{wxrichtext}
- @category{events,richtext}
+#define wxRICHTEXT_SHIFT_DOWN 0x01
+#define wxRICHTEXT_CTRL_DOWN 0x02
+#define wxRICHTEXT_ALT_DOWN 0x04
+
+/**
+ Extra flags
+*/
+
+// Don't draw guide lines around boxes and tables
+#define wxRICHTEXT_EX_NO_GUIDELINES 0x00000100
+
+
+/*
+ Defaults
*/
-class wxRichTextEvent : public wxNotifyEvent
+
+#define wxRICHTEXT_DEFAULT_OVERALL_SIZE wxSize(-1, -1)
+#define wxRICHTEXT_DEFAULT_IMAGE_SIZE wxSize(80, 80)
+#define wxRICHTEXT_DEFAULT_SPACING 3
+#define wxRICHTEXT_DEFAULT_MARGIN 3
+#define wxRICHTEXT_DEFAULT_UNFOCUSSED_BACKGROUND wxColour(175, 175, 175)
+#define wxRICHTEXT_DEFAULT_FOCUSSED_BACKGROUND wxColour(140, 140, 140)
+#define wxRICHTEXT_DEFAULT_UNSELECTED_BACKGROUND wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)
+#define wxRICHTEXT_DEFAULT_TYPE_COLOUR wxColour(0, 0, 200)
+#define wxRICHTEXT_DEFAULT_FOCUS_RECT_COLOUR wxColour(100, 80, 80)
+#define wxRICHTEXT_DEFAULT_CARET_WIDTH 2
+// Minimum buffer size before delayed layout kicks in
+#define wxRICHTEXT_DEFAULT_DELAYED_LAYOUT_THRESHOLD 20000
+// Milliseconds before layout occurs after resize
+#define wxRICHTEXT_DEFAULT_LAYOUT_INTERVAL 50
+
+/* Identifiers
+ */
+#define wxID_RICHTEXT_PROPERTIES1 (wxID_HIGHEST + 1)
+#define wxID_RICHTEXT_PROPERTIES2 (wxID_HIGHEST + 2)
+#define wxID_RICHTEXT_PROPERTIES3 (wxID_HIGHEST + 3)
+
+/*
+ Normal selection occurs initially and as user drags within one container.
+ Common ancestor selection occurs when the user starts dragging across containers
+ that have a common ancestor, for example the cells in a table.
+ */
+
+enum wxRichTextCtrlSelectionState
{
-public:
- /**
- Copy constructor.
- */
- wxRichTextEvent(const wxRichTextEvent& event);
+ wxRichTextCtrlSelectionState_Normal,
+ wxRichTextCtrlSelectionState_CommonAncestor
+};
+
+/**
+ @class wxRichTextContextMenuPropertiesInfo
+
+ wxRichTextContextMenuPropertiesInfo keeps track of objects that appear in the context menu,
+ whose properties are available to be edited.
+ */
+class WXDLLIMPEXP_RICHTEXT wxRichTextContextMenuPropertiesInfo
+{
+public:
/**
Constructor.
-
- @param commandType
- The type of the event.
- @param id
- Window identifier. The value @c wxID_ANY indicates a default value.
*/
- wxRichTextEvent(wxEventType commandType = wxEVT_NULL, int id = 0);
+ wxRichTextContextMenuPropertiesInfo() { Init(); }
+
+// Operations
/**
- Returns the character pressed, within a @c wxEVT_COMMAND_RICHTEXT_CHARACTER event.
+ Initialisation.
*/
- wxChar GetCharacter() const;
+ void Init() {}
/**
- Returns flags indicating modifier keys pressed.
-
- Possible values are @c wxRICHTEXT_CTRL_DOWN, @c wxRICHTEXT_SHIFT_DOWN, and @c wxRICHTEXT_ALT_DOWN.
+ Adds an item.
*/
- int GetFlags() const;
+ bool AddItem(const wxString& label, wxRichTextObject* obj);
/**
- Returns the new style sheet.
-
- Can be used in a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING or
- @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED event handler.
+ Returns the number of menu items that were added.
*/
- wxRichTextStyleSheet* GetNewStyleSheet() const;
+ int AddMenuItems(wxMenu* menu, int startCmd = wxID_RICHTEXT_PROPERTIES1) const;
/**
- Returns the old style sheet.
-
- Can be used in a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING or
- @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED event handler.
+ Adds appropriate menu items for the current container and clicked on object
+ (and container's parent, if appropriate).
*/
- wxRichTextStyleSheet* GetOldStyleSheet() const;
+ int AddItems(wxRichTextObject* container, wxRichTextObject* obj);
/**
- Returns the buffer position at which the event occured.
+ Clears the items.
*/
- long GetPosition() const;
+ void Clear() { m_objects.Clear(); m_labels.Clear(); }
+
+// Accessors
/**
- Gets the range for the current operation.
+ Returns the nth label.
*/
- const wxRichTextRange& GetRange() const;
+ wxString GetLabel(int n) const { return m_labels[n]; }
/**
- Sets the character variable.
+ Returns the nth object.
*/
- void SetCharacter(wxChar ch);
+ wxRichTextObject* GetObject(int n) const { return m_objects[n]; }
/**
- Sets flags indicating modifier keys pressed.
-
- Possible values are @c wxRICHTEXT_CTRL_DOWN, @c wxRICHTEXT_SHIFT_DOWN, and @c wxRICHTEXT_ALT_DOWN.
+ Returns the array of objects.
*/
- void SetFlags(int flags);
+ wxRichTextObjectPtrArray& GetObjects() { return m_objects; }
/**
- Sets the new style sheet variable.
+ Returns the array of objects.
*/
- void SetNewStyleSheet(wxRichTextStyleSheet* sheet);
+ const wxRichTextObjectPtrArray& GetObjects() const { return m_objects; }
/**
- Sets the old style sheet variable.
+ Returns the array of labels.
*/
- void SetOldStyleSheet(wxRichTextStyleSheet* sheet);
+ wxArrayString& GetLabels() { return m_labels; }
/**
- Sets the buffer position variable.
+ Returns the array of labels.
*/
- void SetPosition(long pos);
+ const wxArrayString& GetLabels() const { return m_labels; }
/**
- Sets the range variable.
+ Returns the number of items.
*/
- void SetRange(const wxRichTextRange& range);
-};
-
+ int GetCount() const { return m_objects.GetCount(); }
+ wxRichTextObjectPtrArray m_objects;
+ wxArrayString m_labels;
+};
/**
@class wxRichTextCtrl
@library{wxrichtext}
@category{richtext}
@appearance{richtextctrl.png}
-*/
-class wxRichTextCtrl
+
+ */
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextCtrl : public wxControl,
+ public wxTextCtrlIface,
+ public wxScrollHelper
{
+ DECLARE_CLASS( wxRichTextCtrl )
+ DECLARE_EVENT_TABLE()
+
public:
+// Constructors
+
/**
- Default Constructor.
+ Default constructor.
*/
- wxRichTextCtrl();
+ wxRichTextCtrl( );
/**
Constructor, creating and showing a rich text control.
@see Create(), wxValidator
*/
- wxRichTextCtrl(wxWindow* parent, wxWindowID id = wxID_ANY,
- const wxString& value = wxEmptyString,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxRE_MULTILINE,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxTextCtrlNameStr);
+ wxRichTextCtrl( wxWindow* parent, wxWindowID id = -1, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
+ long style = wxRE_MULTILINE, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxTextCtrlNameStr);
/**
Destructor.
*/
- virtual ~wxRichTextCtrl();
+ virtual ~wxRichTextCtrl( );
+
+// Operations
/**
- Adds an image to the control's buffer.
+ Creates the underlying window.
*/
- virtual wxRichTextRange AddImage(const wxImage& image);
+ bool Create( wxWindow* parent, wxWindowID id = -1, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
+ long style = wxRE_MULTILINE, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxTextCtrlNameStr );
/**
- Adds a new paragraph of text to the end of the buffer.
+ Initialises the members of the control.
*/
- virtual wxRichTextRange AddParagraph(const wxString& text);
+ void Init();
+
+// Accessors
/**
- Sets the insertion point to the end of the buffer and writes the text.
+ Gets the text for the given range.
+ The end point of range is specified as the last character position of
+ the span of text, plus one.
*/
- virtual void AppendText(const wxString& text);
+ virtual wxString GetRange(long from, long to) const;
/**
- Applies the given alignment to the selection (undoable).
- For alignment values, see wxTextAttr.
+ Returns the length of the specified line in characters.
*/
- virtual bool ApplyAlignmentToSelection(wxTextAttrAlignment alignment);
+ virtual int GetLineLength(long lineNo) const ;
/**
- Apples bold to the selection (undoable).
+ Returns the text for the given line.
*/
- virtual bool ApplyBoldToSelection();
+ virtual wxString GetLineText(long lineNo) const ;
/**
- Applies italic to the selection (undoable).
+ Returns the number of lines in the buffer.
*/
- virtual bool ApplyItalicToSelection();
+ virtual int GetNumberOfLines() const ;
/**
- Applies the given style to the selection.
+ Returns @true if the buffer has been modified.
*/
- virtual bool ApplyStyle(wxRichTextStyleDefinition* def);
+ virtual bool IsModified() const ;
/**
- Applies the style sheet to the buffer, matching paragraph styles in the sheet
- against named styles in the buffer.
-
- This might be useful if the styles have changed.
- If @a sheet is @NULL, the sheet set with SetStyleSheet() is used.
- Currently this applies paragraph styles only.
+ Returns @true if the control is editable.
*/
- bool ApplyStyleSheet(wxRichTextStyleSheet* sheet = NULL);
+ virtual bool IsEditable() const ;
/**
- Applies underline to the selection (undoable).
+ Returns @true if the control is single-line.
+ Currently wxRichTextCtrl does not support single-line editing.
*/
- virtual bool ApplyUnderlineToSelection();
+ bool IsSingleLine() const { return !HasFlag(wxRE_MULTILINE); }
/**
- Returns @true if undo commands are being batched.
+ Returns @true if the control is multiline.
*/
- virtual bool BatchingUndo() const;
+ bool IsMultiLine() const { return !IsSingleLine(); }
+ //@{
/**
- Begins using alignment.
- For alignment values, see wxTextAttr.
+ Returns the range of the current selection.
+ The end point of range is specified as the last character position of the span
+ of text, plus one.
+ If the return values @a from and @a to are the same, there is no selection.
*/
- bool BeginAlignment(wxTextAttrAlignment alignment);
+ virtual void GetSelection(long* from, long* to) const;
+ const wxRichTextSelection& GetSelection() const { return m_selection; }
+ wxRichTextSelection& GetSelection() { return m_selection; }
+ //@}
/**
- Starts batching undo history for commands.
+ Returns the text within the current selection range, if any.
*/
- virtual bool BeginBatchUndo(const wxString& cmdName);
+ virtual wxString GetStringSelection() const;
/**
- Begins using bold.
+ Gets the current filename associated with the control.
*/
- bool BeginBold();
+ wxString GetFilename() const { return m_filename; }
/**
- Begins using the named character style.
+ Sets the current filename.
*/
- bool BeginCharacterStyle(const wxString& characterStyle);
+ void SetFilename(const wxString& filename) { m_filename = filename; }
/**
- Begins using this font.
+ Sets the size of the buffer beyond which layout is delayed during resizing.
+ This optimizes sizing for large buffers. The default is 20000.
*/
- bool BeginFont(const wxFont& font);
+ void SetDelayedLayoutThreshold(long threshold) { m_delayedLayoutThreshold = threshold; }
/**
- Begins using the given point size.
+ Gets the size of the buffer beyond which layout is delayed during resizing.
+ This optimizes sizing for large buffers. The default is 20000.
*/
- bool BeginFontSize(int pointSize);
+ long GetDelayedLayoutThreshold() const { return m_delayedLayoutThreshold; }
/**
- Begins using italic.
*/
- bool BeginItalic();
+ bool GetFullLayoutRequired() const { return m_fullLayoutRequired; }
/**
- Begins applying a left indent and subindent in tenths of a millimetre.
- The subindent is an offset from the left edge of the paragraph, and is
- used for all but the first line in a paragraph. A positive value will
- cause the first line to appear to the left of the subsequent lines, and
- a negative value will cause the first line to be indented to the right
- of the subsequent lines.
-
- wxRichTextBuffer uses indentation to render a bulleted item. The
- content of the paragraph, including the first line, starts at the
- @a leftIndent plus the @a leftSubIndent.
-
- @param leftIndent
- The distance between the margin and the bullet.
- @param leftSubIndent
- The distance between the left edge of the bullet and the left edge
- of the actual paragraph.
*/
- bool BeginLeftIndent(int leftIndent, int leftSubIndent = 0);
+ void SetFullLayoutRequired(bool b) { m_fullLayoutRequired = b; }
/**
- Begins appling line spacing. @e spacing is a multiple, where 10 means
- single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
-
- The ::wxTextAttrLineSpacing constants are defined for convenience.
*/
- bool BeginLineSpacing(int lineSpacing);
+ wxLongLong GetFullLayoutTime() const { return m_fullLayoutTime; }
/**
- Begins using a specified list style.
- Optionally, you can also pass a level and a number.
*/
- bool BeginListStyle(const wxString& listStyle, int level = 1,
- int number = 1);
+ void SetFullLayoutTime(wxLongLong t) { m_fullLayoutTime = t; }
/**
- Begins a numbered bullet.
-
- This call will be needed for each item in the list, and the
- application should take care of incrementing the numbering.
-
- @a bulletNumber is a number, usually starting with 1.
- @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
- @a bulletStyle is a bitlist of the ::wxTextAttrBulletStyle values.
-
- wxRichTextBuffer uses indentation to render a bulleted item.
- The left indent is the distance between the margin and the bullet.
- The content of the paragraph, including the first line, starts
- at leftMargin + leftSubIndent.
- So the distance between the left edge of the bullet and the
- left of the actual paragraph is leftSubIndent.
*/
- bool BeginNumberedBullet(int bulletNumber, int leftIndent,
- int leftSubIndent,
- int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_ARABIC|wxTEXT_ATTR_BULLET_STYLE_PERIOD);
+ long GetFullLayoutSavedPosition() const { return m_fullLayoutSavedPosition; }
/**
- Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
- in tenths of a millimetre.
*/
- bool BeginParagraphSpacing(int before, int after);
+ void SetFullLayoutSavedPosition(long p) { m_fullLayoutSavedPosition = p; }
+ // Force any pending layout due to large buffer
/**
- Begins applying the named paragraph style.
*/
- bool BeginParagraphStyle(const wxString& paragraphStyle);
+ void ForceDelayedLayout();
/**
- Begins a right indent, specified in tenths of a millimetre.
+ Sets the text (normal) cursor.
*/
- bool BeginRightIndent(int rightIndent);
+ void SetTextCursor(const wxCursor& cursor ) { m_textCursor = cursor; }
/**
- Begins applying a style.
+ Returns the text (normal) cursor.
*/
- virtual bool BeginStyle(const wxTextAttr& style);
+ wxCursor GetTextCursor() const { return m_textCursor; }
/**
- Starts suppressing undo history for commands.
+ Sets the cursor to be used over URLs.
*/
- virtual bool BeginSuppressUndo();
+ void SetURLCursor(const wxCursor& cursor ) { m_urlCursor = cursor; }
/**
- Begins applying a symbol bullet, using a character from the current font.
- See BeginNumberedBullet() for an explanation of how indentation is used
- to render the bulleted paragraph.
+ Returns the cursor to be used over URLs.
*/
- bool BeginSymbolBullet(const wxString& symbol, int leftIndent,
- int leftSubIndent,
- int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_SYMBOL);
+ wxCursor GetURLCursor() const { return m_urlCursor; }
/**
- Begins using this colour.
+ Returns @true if we are showing the caret position at the start of a line
+ instead of at the end of the previous one.
*/
- bool BeginTextColour(const wxColour& colour);
+ bool GetCaretAtLineStart() const { return m_caretAtLineStart; }
/**
- Begins applying wxTEXT_ATTR_URL to the content.
-
- Pass a URL and optionally, a character style to apply, since it is common
- to mark a URL with a familiar style such as blue text with underlining.
+ Sets a flag to remember that we are showing the caret position at the start of a line
+ instead of at the end of the previous one.
*/
- bool BeginURL(const wxString& url,
- const wxString& characterStyle = wxEmptyString);
+ void SetCaretAtLineStart(bool atStart) { m_caretAtLineStart = atStart; }
/**
- Begins using underlining.
+ Returns @true if we are dragging a selection.
*/
- bool BeginUnderline();
+ bool GetDragging() const { return m_dragging; }
/**
- Returns @true if selected content can be copied to the clipboard.
+ Sets a flag to remember if we are dragging a selection.
*/
- virtual bool CanCopy() const;
+ void SetDragging(bool dragging) { m_dragging = dragging; }
/**
- Returns @true if selected content can be copied to the clipboard and deleted.
+ Returns the drag start position.
*/
- virtual bool CanCut() const;
+ const wxPoint& GetDragStart() const { return m_dragStart; }
/**
- Returns @true if selected content can be deleted.
+ Sets the drag start position.
*/
- virtual bool CanDeleteSelection() const;
+ void SetDragStart(const wxPoint& pt) { m_dragStart = pt; }
+#if wxRICHTEXT_BUFFERED_PAINTING
+ //@{
/**
- Returns @true if the clipboard content can be pasted to the buffer.
+ Returns the buffer bitmap if using buffered painting.
*/
- virtual bool CanPaste() const;
+ const wxBitmap& GetBufferBitmap() const { return m_bufferBitmap; }
+ wxBitmap& GetBufferBitmap() { return m_bufferBitmap; }
+ //@}
+#endif
/**
- Returns @true if there is a command in the command history that can be redone.
+ Returns the current context menu.
*/
- virtual bool CanRedo() const;
+ wxMenu* GetContextMenu() const { return m_contextMenu; }
/**
- Returns @true if there is a command in the command history that can be undone.
+ Sets the current context menu.
*/
- virtual bool CanUndo() const;
+ void SetContextMenu(wxMenu* menu);
/**
- Clears the buffer content, leaving a single empty paragraph. Cannot be undone.
+ Returns an anchor so we know how to extend the selection.
+ It's a caret position since it's between two characters.
*/
- virtual void Clear();
+ long GetSelectionAnchor() const { return m_selectionAnchor; }
/**
- Clears the list style from the given range, clearing list-related attributes
- and applying any named paragraph style associated with each paragraph.
-
- @a flags is a bit list of the following:
- - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
-
- @see SetListStyle(), PromoteList(), NumberList().
+ Sets an anchor so we know how to extend the selection.
+ It's a caret position since it's between two characters.
*/
- virtual bool ClearListStyle(const wxRichTextRange& range,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
+ void SetSelectionAnchor(long anchor) { m_selectionAnchor = anchor; }
/**
- Sends the event to the control.
+ Returns the anchor object if selecting multiple containers.
*/
- virtual void Command(wxCommandEvent& event);
+ wxRichTextObject* GetSelectionAnchorObject() const { return m_selectionAnchorObject; }
/**
- Copies the selected content (if any) to the clipboard.
+ Sets the anchor object if selecting multiple containers.
*/
- virtual void Copy();
+ void SetSelectionAnchorObject(wxRichTextObject* anchor) { m_selectionAnchorObject = anchor; }
+ //@{
/**
- Creates the underlying window.
+ Returns an object that stores information about context menu property item(s),
+ in order to communicate between the context menu event handler and the code
+ that responds to it. The wxRichTextContextMenuPropertiesInfo stores one
+ item for each object that could respond to a property-editing event. If
+ objects are nested, several might be editable.
*/
- bool Create(wxWindow* parent, wxWindowID id = wxID_ANY,
- const wxString& value = wxEmptyString,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxRE_MULTILINE,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxTextCtrlNameStr);
+ wxRichTextContextMenuPropertiesInfo& GetContextMenuPropertiesInfo() { return m_contextMenuPropertiesInfo; }
+ const wxRichTextContextMenuPropertiesInfo& GetContextMenuPropertiesInfo() const { return m_contextMenuPropertiesInfo; }
+ //@}
/**
- Copies the selected content (if any) to the clipboard and deletes the selection.
- This is undoable.
+ Returns the wxRichTextObject object that currently has the editing focus.
+ If there are no composite objects, this will be the top-level buffer.
*/
- virtual void Cut();
+ wxRichTextParagraphLayoutBox* GetFocusObject() const { return m_focusObject; }
/**
- Deletes the content within the given range.
+ Sets the wxRichTextObject object that currently has the editing focus.
*/
- virtual bool Delete(const wxRichTextRange& range);
-
- /**
- Deletes content if there is a selection, e.g. when pressing a key.
- Returns the new caret position in @e newPos, or leaves it if there
- was no action. This is undoable.
+ bool SetFocusObject(wxRichTextParagraphLayoutBox* obj, bool setCaretPosition = true);
- @beginWxPerlOnly
- In wxPerl this method takes no arguments and returns a 2-element
- list (ok, newPos).
- @endWxPerlOnly
- */
- bool DeleteSelectedContent(long* newPos = NULL);
+// Operations
/**
- Deletes the content in the selection, if any. This is undoable.
+ Invalidates the whole buffer to trigger painting later.
*/
- virtual void DeleteSelection();
+ void Invalidate() { GetBuffer().Invalidate(wxRICHTEXT_ALL); }
/**
- Sets the buffer's modified status to @false, and clears the buffer's command
- history.
+ Clears the buffer content, leaving a single empty paragraph. Cannot be undone.
*/
- virtual void DiscardEdits();
+ virtual void Clear();
/**
- Ends alignment.
+ Replaces the content in the specified range with the string specified by
+ @a value.
*/
- bool EndAlignment();
+ virtual void Replace(long from, long to, const wxString& value);
/**
- Ends application of all styles in the current style stack.
+ Removes the content in the specified range.
*/
- virtual bool EndAllStyles();
+ virtual void Remove(long from, long to);
+#ifdef DOXYGEN
/**
- Ends batching undo command history.
- */
- virtual bool EndBatchUndo();
+ Loads content into the control's buffer using the given type.
- /**
- Ends using bold.
- */
- bool EndBold();
+ If the specified type is wxRICHTEXT_TYPE_ANY, the type is deduced from
+ the filename extension.
- /**
- Ends application of a named character style.
+ This function looks for a suitable wxRichTextFileHandler object.
*/
- bool EndCharacterStyle();
+ bool LoadFile(const wxString& file,
+ int type = wxRICHTEXT_TYPE_ANY);
+#endif
/**
- Ends using a font.
- */
- bool EndFont();
+ Helper function for LoadFile(). Loads content into the control's buffer using the given type.
- /**
- Ends using a point size.
- */
- bool EndFontSize();
+ If the specified type is wxRICHTEXT_TYPE_ANY, the type is deduced from
+ the filename extension.
- /**
- Ends using italic.
+ This function looks for a suitable wxRichTextFileHandler object.
*/
- bool EndItalic();
+ virtual bool DoLoadFile(const wxString& file, int fileType);
+#ifdef DOXYGEN
/**
- Ends left indent.
- */
- bool EndLeftIndent();
+ Saves the buffer content using the given type.
- /**
- Ends line spacing.
- */
- bool EndLineSpacing();
+ If the specified type is wxRICHTEXT_TYPE_ANY, the type is deduced from
+ the filename extension.
- /**
- Ends using a specified list style.
+ This function looks for a suitable wxRichTextFileHandler object.
*/
- bool EndListStyle();
+ bool SaveFile(const wxString& file = wxEmptyString,
+ int type = wxRICHTEXT_TYPE_ANY);
+#endif
/**
- Ends application of a numbered bullet.
- */
- bool EndNumberedBullet();
+ Helper function for SaveFile(). Saves the buffer content using the given type.
- /**
- Ends paragraph spacing.
- */
- bool EndParagraphSpacing();
+ If the specified type is wxRICHTEXT_TYPE_ANY, the type is deduced from
+ the filename extension.
- /**
- Ends application of a named character style.
+ This function looks for a suitable wxRichTextFileHandler object.
*/
- bool EndParagraphStyle();
+ virtual bool DoSaveFile(const wxString& file = wxEmptyString,
+ int fileType = wxRICHTEXT_TYPE_ANY);
/**
- Ends right indent.
- */
- bool EndRightIndent();
+ Sets flags that change the behaviour of loading or saving.
- /**
- Ends the current style.
+ See the documentation for each handler class to see what flags are
+ relevant for each handler.
*/
- virtual bool EndStyle();
+ void SetHandlerFlags(int flags) { GetBuffer().SetHandlerFlags(flags); }
/**
- Ends suppressing undo command history.
+ Returns flags that change the behaviour of loading or saving.
+ See the documentation for each handler class to see what flags are
+ relevant for each handler.
*/
- virtual bool EndSuppressUndo();
+ int GetHandlerFlags() const { return GetBuffer().GetHandlerFlags(); }
/**
- Ends applying a symbol bullet.
+ Marks the buffer as modified.
*/
- bool EndSymbolBullet();
+ virtual void MarkDirty();
/**
- Ends applying a text colour.
+ Sets the buffer's modified status to @false, and clears the buffer's command
+ history.
*/
- bool EndTextColour();
+ virtual void DiscardEdits();
/**
- Ends applying a URL.
+ Sets the maximum number of characters that may be entered in a single line
+ text control. For compatibility only; currently does nothing.
*/
- bool EndURL();
+ virtual void SetMaxLength(unsigned long WXUNUSED(len)) { }
/**
- End applying underlining.
+ Writes text at the current position.
*/
- bool EndUnderline();
+ virtual void WriteText(const wxString& text);
/**
- Helper function for extending the selection, returning @true if the selection
- was changed. Selections are in caret positions.
+ Sets the insertion point to the end of the buffer and writes the text.
*/
- virtual bool ExtendSelection(long oldPosition, long newPosition, int flags);
+ virtual void AppendText(const wxString& text);
+ //@{
/**
- Helper function for finding the caret position for the next word.
- Direction is 1 (forward) or -1 (backwards).
+ Gets the attributes at the given position.
+ This function gets the combined style - that is, the style you see on the
+ screen as a result of combining base style, paragraph style and character
+ style attributes.
+
+ To get the character or paragraph style alone, use GetUncombinedStyle().
+
+ @beginWxPerlOnly
+ In wxPerl this method is implemented as GetStyle(@a position)
+ returning a 2-element list (ok, attr).
+ @endWxPerlOnly
*/
- virtual long FindNextWordPosition(int direction = 1) const;
+ virtual bool GetStyle(long position, wxTextAttr& style);
+ virtual bool GetStyle(long position, wxRichTextAttr& style);
+ virtual bool GetStyle(long position, wxRichTextAttr& style, wxRichTextParagraphLayoutBox* container);
+ //@}
+ //@{
/**
- Call this function to prevent refresh and allow fast updates, and then Thaw() to
- refresh the control.
+ Sets the attributes for the given range.
+ The end point of range is specified as the last character position of the span
+ of text, plus one.
+
+ So, for example, to set the style for a character at position 5, use the range
+ (5,6).
*/
- void Freeze();
+ virtual bool SetStyle(long start, long end, const wxTextAttr& style);
+ virtual bool SetStyle(long start, long end, const wxRichTextAttr& style);
+ virtual bool SetStyle(const wxRichTextRange& range, const wxTextAttr& style);
+ virtual bool SetStyle(const wxRichTextRange& range, const wxRichTextAttr& style);
+ //@}
/**
- Gets the basic (overall) style.
-
- This is the style of the whole buffer before further styles are applied,
- unlike the default style, which only affects the style currently being
- applied (for example, setting the default style to bold will cause
- subsequently inserted text to be bold).
+ Sets the attributes for a single object
*/
- virtual const wxTextAttr& GetBasicStyle() const;
+ virtual void SetStyle(wxRichTextObject *obj, const wxRichTextAttr& textAttr);
//@{
/**
- Returns the buffer associated with the control.
+ Gets the attributes common to the specified range.
+ Attributes that differ in value within the range will not be included
+ in @a style flags.
+
+ @beginWxPerlOnly
+ In wxPerl this method is implemented as GetStyleForRange(@a position)
+ returning a 2-element list (ok, attr).
+ @endWxPerlOnly
*/
- const wxRichTextBuffer GetBuffer();
- const wxRichTextBuffer& GetBuffer();
+ virtual bool GetStyleForRange(const wxRichTextRange& range, wxTextAttr& style);
+ virtual bool GetStyleForRange(const wxRichTextRange& range, wxRichTextAttr& style);
+ virtual bool GetStyleForRange(const wxRichTextRange& range, wxRichTextAttr& style, wxRichTextParagraphLayoutBox* container);
//@}
/**
- Returns the current caret position.
+ Sets the attributes for the given range, passing flags to determine how the
+ attributes are set.
+
+ The end point of range is specified as the last character position of the span
+ of text, plus one. So, for example, to set the style for a character at
+ position 5, use the range (5,6).
+
+ @a flags may contain a bit list of the following values:
+ - wxRICHTEXT_SETSTYLE_NONE: no style flag.
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
+ undoable.
+ - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
+ if the combined style at this point is already the style in question.
+ - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
+ applied to paragraphs, and not the content.
+ This allows content styling to be preserved independently from that
+ of e.g. a named paragraph style.
+ - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
+ applied to characters, and not the paragraph.
+ This allows content styling to be preserved independently from that
+ of e.g. a named paragraph style.
+ - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
+ the new style.
+ - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style. Only the style flags
+ are used in this operation.
*/
- long GetCaretPosition() const;
+ virtual bool SetStyleEx(const wxRichTextRange& range, const wxRichTextAttr& style, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
+ //@{
/**
- Returns the caret height and position for the given character position.
+ Gets the attributes at the given position.
+ This function gets the @e uncombined style - that is, the attributes associated
+ with the paragraph or character content, and not necessarily the combined
+ attributes you see on the screen.
+ To get the combined attributes, use GetStyle().
+
+ If you specify (any) paragraph attribute in @e style's flags, this function
+ will fetch the paragraph attributes.
+ Otherwise, it will return the character attributes.
@beginWxPerlOnly
- In wxPerl this method is implemented as
- GetCaretPositionForIndex(@a position) returning a
- 2-element list (ok, rect).
+ In wxPerl this method is implemented as GetUncombinedStyle(@a position)
+ returning a 2-element list (ok, attr).
@endWxPerlOnly
*/
- bool GetCaretPositionForIndex(long position, wxRect& rect);
+ virtual bool GetUncombinedStyle(long position, wxRichTextAttr& style);
+ virtual bool GetUncombinedStyle(long position, wxRichTextAttr& style, wxRichTextParagraphLayoutBox* container);
+ //@}
+ //@{
/**
- Gets the command processor associated with the control's buffer.
+ Sets the current default style, which can be used to change how subsequently
+ inserted text is displayed.
*/
- wxCommandProcessor* GetCommandProcessor() const;
+ virtual bool SetDefaultStyle(const wxTextAttr& style);
+ virtual bool SetDefaultStyle(const wxRichTextAttr& style);
+ //@}
/**
Returns the current default style, which can be used to change how subsequently
inserted text is displayed.
*/
- virtual const wxTextAttr& GetDefaultStyle() const;
+ virtual const wxRichTextAttr& GetDefaultStyleEx() const;
- /**
- Gets the size of the buffer beyond which layout is delayed during resizing.
- This optimizes sizing for large buffers. The default is 20000.
- */
- long GetDelayedLayoutThreshold() const;
+ //virtual const wxTextAttr& GetDefaultStyle() const;
+ //@{
/**
- Gets the current filename associated with the control.
- */
- wxString GetFilename() const;
+ Sets the list attributes for the given range, passing flags to determine how
+ the attributes are set.
- /**
- Returns the first visible position in the current view.
- */
- long GetFirstVisiblePosition() const;
+ Either the style definition or the name of the style definition (in the current
+ sheet) can be passed.
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+ - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
+ @a startFrom, otherwise existing attributes are used.
+ - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
+ as the level for all paragraphs, otherwise the current indentation will be used.
- /**
- Returns flags that change the behaviour of loading or saving.
- See the documentation for each handler class to see what flags are
- relevant for each handler.
+ @see NumberList(), PromoteList(), ClearListStyle().
*/
- int GetHandlerFlags() const;
+ virtual bool SetListStyle(const wxRichTextRange& range, wxRichTextListStyleDefinition* def, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+ virtual bool SetListStyle(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+ //@}
/**
- Returns the current insertion point.
- */
- virtual long GetInsertionPoint() const;
+ Clears the list style from the given range, clearing list-related attributes
+ and applying any named paragraph style associated with each paragraph.
- /**
- Returns the last position in the buffer.
- */
- virtual wxTextPos GetLastPosition() const;
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
- /**
- Returns the length of the specified line in characters.
+ @see SetListStyle(), PromoteList(), NumberList().
*/
- virtual int GetLineLength(long lineNo) const;
+ virtual bool ClearListStyle(const wxRichTextRange& range, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
+ //@{
/**
- Returns the text for the given line.
- */
- virtual wxString GetLineText(long lineNo) const;
+ Numbers the paragraphs in the given range.
+ Pass flags to determine how the attributes are set.
- /**
- Transforms physical window position to logical (unscrolled) position.
- */
- wxPoint GetLogicalPoint(const wxPoint& ptPhysical) const;
+ Either the style definition or the name of the style definition (in the current
+ sheet) can be passed.
- /**
- Returns the number of lines in the buffer.
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+ - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
+ @a startFrom, otherwise existing attributes are used.
+ - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
+ as the level for all paragraphs, otherwise the current indentation will be used.
+
+ @see SetListStyle(), PromoteList(), ClearListStyle().
*/
- virtual int GetNumberOfLines() const;
+ virtual bool NumberList(const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+ virtual bool NumberList(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
+ //@}
+ //@{
/**
- Transforms logical (unscrolled) position to physical window position.
+ Promotes or demotes the paragraphs in the given range.
+ A positive @a promoteBy produces a smaller indent, and a negative number
+ produces a larger indent. Pass flags to determine how the attributes are set.
+ Either the style definition or the name of the style definition (in the current
+ sheet) can be passed.
+
+ @a flags is a bit list of the following:
+ - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
+ - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
+ @a startFrom, otherwise existing attributes are used.
+ - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
+ as the level for all paragraphs, otherwise the current indentation will be used.
+
+ @see SetListStyle(), @see SetListStyle(), ClearListStyle().
*/
- wxPoint GetPhysicalPoint(const wxPoint& ptLogical) const;
+ virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1);
+ virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1);
+ //@}
/**
- Gets the text for the given range.
- The end point of range is specified as the last character position of
- the span of text, plus one.
+ Deletes the content within the given range.
*/
- virtual wxString GetRange(long from, long to) const;
+ virtual bool Delete(const wxRichTextRange& range);
/**
- Returns the range of the current selection.
- The end point of range is specified as the last character position of the span
- of text, plus one.
- If the return values @a from and @a to are the same, there is no selection.
+ Translates from column and line number to position.
*/
- virtual void GetSelection(long* from, long* to) const;
+ virtual long XYToPosition(long x, long y) const;
/**
- Returns the selection range in character positions. -1, -1 means no selection.
+ Converts a text position to zero-based column and line numbers.
*/
- wxRichTextRange GetSelectionRange() const;
+ virtual bool PositionToXY(long pos, long *x, long *y) const;
/**
- Returns the text within the current selection range, if any.
+ Scrolls the buffer so that the given position is in view.
*/
- virtual wxString GetStringSelection() const;
+ virtual void ShowPosition(long pos);
+ //@{
/**
- Gets the attributes at the given position.
- This function gets the combined style - that is, the style you see on the
- screen as a result of combining base style, paragraph style and character
- style attributes.
+ Finds the character at the given position in pixels.
+ @a pt is in device coords (not adjusted for the client area origin nor for
+ scrolling).
+ */
+ virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, long *pos) const;
+ virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt,
+ wxTextCoord *col,
+ wxTextCoord *row) const;
+ //@}
- To get the character or paragraph style alone, use GetUncombinedStyle().
+// Clipboard operations
- @beginWxPerlOnly
- In wxPerl this method is implemented as GetStyle(@a position)
- returning a 2-element list (ok, attr).
- @endWxPerlOnly
+ /**
+ Copies the selected content (if any) to the clipboard.
*/
- virtual bool GetStyle(long position, wxTextAttr& style);
+ virtual void Copy();
/**
- Gets the attributes common to the specified range.
- Attributes that differ in value within the range will not be included
- in @a style flags.
-
- @beginWxPerlOnly
- In wxPerl this method is implemented as GetStyleForRange(@a position)
- returning a 2-element list (ok, attr).
- @endWxPerlOnly
+ Copies the selected content (if any) to the clipboard and deletes the selection.
+ This is undoable.
*/
- virtual bool GetStyleForRange(const wxRichTextRange& range,
- wxTextAttr& style);
+ virtual void Cut();
/**
- Returns the style sheet associated with the control, if any.
- A style sheet allows named character and paragraph styles to be applied.
+ Pastes content from the clipboard to the buffer.
*/
- wxRichTextStyleSheet* GetStyleSheet() const;
+ virtual void Paste();
/**
- Gets the attributes at the given position.
- This function gets the @e uncombined style - that is, the attributes associated
- with the paragraph or character content, and not necessarily the combined
- attributes you see on the screen.
- To get the combined attributes, use GetStyle().
-
- If you specify (any) paragraph attribute in @e style's flags, this function
- will fetch the paragraph attributes.
- Otherwise, it will return the character attributes.
-
- @beginWxPerlOnly
- In wxPerl this method is implemented as GetUncombinedStyle(@a position)
- returning a 2-element list (ok, attr).
- @endWxPerlOnly
+ Deletes the content in the selection, if any. This is undoable.
*/
- virtual bool GetUncombinedStyle(long position, wxTextAttr& style);
+ virtual void DeleteSelection();
/**
- Returns the content of the entire control as a string.
+ Returns @true if selected content can be copied to the clipboard.
*/
- virtual wxString GetValue() const;
+ virtual bool CanCopy() const;
/**
- Internal helper function returning the line for the visible caret position.
- If the caret is shown at the very end of the line, it means the next character
- is actually on the following line.
- So this function gets the line we're expecting to find if this is the case.
+ Returns @true if selected content can be copied to the clipboard and deleted.
*/
- wxRichTextLine* GetVisibleLineForCaretPosition(long caretPosition) const;
+ virtual bool CanCut() const;
/**
- 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.
+ Returns @true if the clipboard content can be pasted to the buffer.
+ */
+ virtual bool CanPaste() const;
- You can use this to implement, for example, bold button updating.
- @a style must have flags indicating which attributes are of interest.
+ /**
+ Returns @true if selected content can be deleted.
*/
- virtual bool HasCharacterAttributes(const wxRichTextRange& range,
- const wxTextAttr& style) const;
+ virtual bool CanDeleteSelection() const;
/**
- Test if this whole range has paragraph attributes of the specified kind.
- If any of the attributes are different within the range, the test fails.
- You can use this to implement, for example, centering button updating.
- @a style must have flags indicating which attributes are of interest.
+ Undoes the command at the top of the command history, if there is one.
*/
- virtual bool HasParagraphAttributes(const wxRichTextRange& range,
- const wxTextAttr& style) const;
+ virtual void Undo();
/**
- Returns @true if there is a selection.
+ Redoes the current command.
*/
- virtual bool HasSelection() const;
+ virtual void Redo();
- //@{
/**
- Finds the character at the given position in pixels.
- @a pt is in device coords (not adjusted for the client area origin nor for
- scrolling).
+ Returns @true if there is a command in the command history that can be undone.
*/
- wxTextCtrlHitTestResult HitTest(const wxPoint& pt, long* pos) const;
- const wxTextCtrlHitTestResult HitTest(const wxPoint& pt,
- wxTextCoord* col,
- wxTextCoord* row) const;
- //@}
+ virtual bool CanUndo() const;
/**
- Initialises the members of the control.
+ Returns @true if there is a command in the command history that can be redone.
*/
- void Init();
+ virtual bool CanRedo() const;
/**
- Returns @true if the user has recently set the default style without moving
- the caret, and therefore the UI needs to reflect the default style and not
- the style at the caret.
+ Sets the insertion point and causes the current editing style to be taken from
+ the new position (unlike wxRichTextCtrl::SetCaretPosition).
+ */
+ virtual void SetInsertionPoint(long pos);
- Below is an example of code that uses this function to determine whether the UI
- should show that the current style is bold.
+ /**
+ Sets the insertion point to the end of the text control.
+ */
+ virtual void SetInsertionPointEnd();
- @see SetAndShowDefaultStyle().
+ /**
+ Returns the current insertion point.
*/
- bool IsDefaultStyleShowing() const;
+ virtual long GetInsertionPoint() const;
/**
- Returns @true if the control is editable.
+ Returns the last position in the buffer.
*/
- virtual bool IsEditable() const;
+ virtual wxTextPos GetLastPosition() const;
+ //@{
/**
- Returns @true if Freeze has been called without a Thaw.
+ Sets the selection to the given range.
+ The end point of range is specified as the last character position of the span
+ of text, plus one.
+
+ So, for example, to set the selection for a character at position 5, use the
+ range (5,6).
*/
- bool IsFrozen() const;
+ virtual void SetSelection(long from, long to);
+ void SetSelection(const wxRichTextSelection& sel) { m_selection = sel; }
+ //@}
+
/**
- Returns @true if the buffer has been modified.
+ Selects all the text in the buffer.
*/
- virtual bool IsModified() const;
+ virtual void SelectAll();
/**
- Returns @true if the control is multiline.
+ Makes the control editable, or not.
*/
- bool IsMultiLine() const;
+ virtual void SetEditable(bool editable);
/**
- Returns @true if the given position is visible on the screen.
+ Returns @true if there is a selection and the object containing the selection
+ was the same as the current focus object.
*/
- bool IsPositionVisible(long pos) const;
+ virtual bool HasSelection() const;
/**
- Returns @true if all of the selection is aligned according to the specified flag.
+ Returns @true if there was a selection, whether or not the current focus object
+ is the same as the selection's container object.
*/
- virtual bool IsSelectionAligned(wxTextAttrAlignment alignment);
+ virtual bool HasUnfocusedSelection() const;
+ //@{
/**
- Returns @true if all of the selection is bold.
+ Write a bitmap or image at the current insertion point.
+ Supply an optional type to use for internal and file storage of the raw data.
*/
- virtual bool IsSelectionBold();
+ virtual bool WriteImage(const wxImage& image, wxBitmapType bitmapType = wxBITMAP_TYPE_PNG,
+ const wxRichTextAttr& textAttr = wxRichTextAttr());
+
+ virtual bool WriteImage(const wxBitmap& bitmap, wxBitmapType bitmapType = wxBITMAP_TYPE_PNG,
+ const wxRichTextAttr& textAttr = wxRichTextAttr());
+ //@}
/**
- Returns @true if all of the selection is italic.
+ Loads an image from a file and writes it at the current insertion point.
*/
- virtual bool IsSelectionItalics();
+ virtual bool WriteImage(const wxString& filename, wxBitmapType bitmapType,
+ const wxRichTextAttr& textAttr = wxRichTextAttr());
/**
- Returns @true if all of the selection is underlined.
+ Writes an image block at the current insertion point.
*/
- virtual bool IsSelectionUnderlined();
+ virtual bool WriteImage(const wxRichTextImageBlock& imageBlock,
+ const wxRichTextAttr& textAttr = wxRichTextAttr());
/**
- Returns @true if the control is single-line.
- Currently wxRichTextCtrl does not support single-line editing.
+ Write a text box at the current insertion point, returning the text box.
+ You can then call SetFocusObject() to set the focus to the new object.
*/
- bool IsSingleLine() const;
+ virtual wxRichTextBox* WriteTextBox(const wxRichTextAttr& textAttr = wxRichTextAttr());
/**
- Helper function implementing keyboard navigation.
+ Write a table at the current insertion point, returning the table.
+ You can then call SetFocusObject() to set the focus to the new object.
*/
- virtual bool KeyboardNavigate(int keyCode, int flags);
+ virtual wxRichTextTable* WriteTable(int rows, int cols, const wxRichTextAttr& tableAttr = wxRichTextAttr(), const wxRichTextAttr& cellAttr = wxRichTextAttr());
/**
- Lays out the buffer, which must be done before certain operations, such as
- setting the caret position.
- This function should not normally be required by the application.
+ Inserts a new paragraph at the current insertion point. @see LineBreak().
*/
- virtual bool LayoutContent(bool onlyVisibleRect = false);
+ virtual bool Newline();
/**
Inserts a line break at the current insertion point.
virtual bool LineBreak();
/**
- Loads content into the control's buffer using the given type.
-
- If the specified type is wxRICHTEXT_TYPE_ANY, the type is deduced from
- the filename extension.
+ Sets the basic (overall) style.
- This function looks for a suitable wxRichTextFileHandler object.
+ This is the style of the whole buffer before further styles are applied,
+ unlike the default style, which only affects the style currently being
+ applied (for example, setting the default style to bold will cause
+ subsequently inserted text to be bold).
*/
- bool LoadFile(const wxString& file,
- int type = wxRICHTEXT_TYPE_ANY);
+ virtual void SetBasicStyle(const wxRichTextAttr& style) { GetBuffer().SetBasicStyle(style); }
/**
- Marks the buffer as modified.
+ Gets the basic (overall) style.
+
+ This is the style of the whole buffer before further styles are applied,
+ unlike the default style, which only affects the style currently being
+ applied (for example, setting the default style to bold will cause
+ subsequently inserted text to be bold).
*/
- virtual void MarkDirty();
+ virtual const wxRichTextAttr& GetBasicStyle() const { return GetBuffer().GetBasicStyle(); }
/**
- Move the caret to the given character position.
-
- Please note that this does not update the current editing style
- from the new position; to do that, call wxRichTextCtrl::SetInsertionPoint instead.
+ Begins applying a style.
*/
- virtual bool MoveCaret(long pos, bool showAtLineStart = false);
+ virtual bool BeginStyle(const wxRichTextAttr& style) { return GetBuffer().BeginStyle(style); }
/**
- Move the caret one visual step forward: this may mean setting a flag
- and keeping the same position if we're going from the end of one line
- to the start of the next, which may be the exact same caret position.
+ Ends the current style.
*/
- void MoveCaretBack(long oldPosition);
+ virtual bool EndStyle() { return GetBuffer().EndStyle(); }
/**
- Move the caret one visual step forward: this may mean setting a flag
- and keeping the same position if we're going from the end of one line
- to the start of the next, which may be the exact same caret position.
+ Ends application of all styles in the current style stack.
*/
- void MoveCaretForward(long oldPosition);
+ virtual bool EndAllStyles() { return GetBuffer().EndAllStyles(); }
/**
- Moves the caret down.
+ Begins using bold.
*/
- virtual bool MoveDown(int noLines = 1, int flags = 0);
+ bool BeginBold() { return GetBuffer().BeginBold(); }
/**
- Moves to the end of the buffer.
+ Ends using bold.
*/
- virtual bool MoveEnd(int flags = 0);
+ bool EndBold() { return GetBuffer().EndBold(); }
/**
- Moves to the start of the buffer.
+ Begins using italic.
*/
- virtual bool MoveHome(int flags = 0);
+ bool BeginItalic() { return GetBuffer().BeginItalic(); }
/**
- Moves left.
+ Ends using italic.
*/
- virtual bool MoveLeft(int noPositions = 1, int flags = 0);
+ bool EndItalic() { return GetBuffer().EndItalic(); }
/**
- Moves right.
+ Begins using underlining.
*/
- virtual bool MoveRight(int noPositions = 1, int flags = 0);
+ bool BeginUnderline() { return GetBuffer().BeginUnderline(); }
/**
- Moves to the end of the line.
+ End applying underlining.
*/
- virtual bool MoveToLineEnd(int flags = 0);
+ bool EndUnderline() { return GetBuffer().EndUnderline(); }
/**
- Moves to the start of the line.
+ Begins using the given point size.
*/
- virtual bool MoveToLineStart(int flags = 0);
+ bool BeginFontSize(int pointSize) { return GetBuffer().BeginFontSize(pointSize); }
/**
- Moves to the end of the paragraph.
+ Ends using a point size.
*/
- virtual bool MoveToParagraphEnd(int flags = 0);
+ bool EndFontSize() { return GetBuffer().EndFontSize(); }
/**
- Moves to the start of the paragraph.
+ Begins using this font.
*/
- virtual bool MoveToParagraphStart(int flags = 0);
+ bool BeginFont(const wxFont& font) { return GetBuffer().BeginFont(font); }
/**
- Moves up.
+ Ends using a font.
*/
- virtual bool MoveUp(int noLines = 1, int flags = 0);
+ bool EndFont() { return GetBuffer().EndFont(); }
/**
- Inserts a new paragraph at the current insertion point. @see LineBreak().
+ Begins using this colour.
*/
- virtual bool Newline();
+ bool BeginTextColour(const wxColour& colour) { return GetBuffer().BeginTextColour(colour); }
- //@{
/**
- Numbers the paragraphs in the given range.
- Pass flags to determine how the attributes are set.
+ Ends applying a text colour.
+ */
+ bool EndTextColour() { return GetBuffer().EndTextColour(); }
- Either the style definition or the name of the style definition (in the current
- sheet) can be passed.
+ /**
+ Begins using alignment.
+ For alignment values, see wxTextAttr.
+ */
+ bool BeginAlignment(wxTextAttrAlignment alignment) { return GetBuffer().BeginAlignment(alignment); }
- @a flags is a bit list of the following:
- - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
- - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
- @a startFrom, otherwise existing attributes are used.
- - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
- as the level for all paragraphs, otherwise the current indentation will be used.
+ /**
+ Ends alignment.
+ */
+ bool EndAlignment() { return GetBuffer().EndAlignment(); }
- @see SetListStyle(), PromoteList(), ClearListStyle().
+ /**
+ Begins applying a left indent and subindent in tenths of a millimetre.
+ The subindent is an offset from the left edge of the paragraph, and is
+ used for all but the first line in a paragraph. A positive value will
+ cause the first line to appear to the left of the subsequent lines, and
+ a negative value will cause the first line to be indented to the right
+ of the subsequent lines.
+
+ wxRichTextBuffer uses indentation to render a bulleted item. The
+ content of the paragraph, including the first line, starts at the
+ @a leftIndent plus the @a leftSubIndent.
+
+ @param leftIndent
+ The distance between the margin and the bullet.
+ @param leftSubIndent
+ The distance between the left edge of the bullet and the left edge
+ of the actual paragraph.
*/
- bool NumberList(const wxRichTextRange& range,
- const wxRichTextListStyleDefinition* style,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO,
- int startFrom = -1,
- int listLevel = -1);
- bool Number(const wxRichTextRange& range,
- const wxString& styleName,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO,
- int startFrom = -1,
- int listLevel = -1);
- //@}
+ bool BeginLeftIndent(int leftIndent, int leftSubIndent = 0) { return GetBuffer().BeginLeftIndent(leftIndent, leftSubIndent); }
/**
- Standard handler for the wxID_CLEAR command.
+ Ends left indent.
*/
- void OnClear(wxCommandEvent& event);
+ bool EndLeftIndent() { return GetBuffer().EndLeftIndent(); }
/**
- Shows a standard context menu with undo, redo, cut, copy, paste, clear, and
- select all commands.
+ Begins a right indent, specified in tenths of a millimetre.
*/
- void OnContextMenu(wxContextMenuEvent& event);
+ bool BeginRightIndent(int rightIndent) { return GetBuffer().BeginRightIndent(rightIndent); }
/**
- Standard handler for the wxID_COPY command.
+ Ends right indent.
*/
- void OnCopy(wxCommandEvent& event);
+ bool EndRightIndent() { return GetBuffer().EndRightIndent(); }
/**
- Standard handler for the wxID_CUT command.
+ Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
+ in tenths of a millimetre.
*/
- void OnCut(wxCommandEvent& event);
+ bool BeginParagraphSpacing(int before, int after) { return GetBuffer().BeginParagraphSpacing(before, after); }
/**
- Loads the first dropped file.
+ Ends paragraph spacing.
*/
- void OnDropFiles(wxDropFilesEvent& event);
+ bool EndParagraphSpacing() { return GetBuffer().EndParagraphSpacing(); }
/**
- Standard handler for the wxID_PASTE command.
+ Begins appling line spacing. @e spacing is a multiple, where 10 means
+ single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
+
+ The ::wxTextAttrLineSpacing constants are defined for convenience.
*/
- void OnPaste(wxCommandEvent& event);
+ bool BeginLineSpacing(int lineSpacing) { return GetBuffer().BeginLineSpacing(lineSpacing); }
/**
- Standard handler for the wxID_REDO command.
+ Ends line spacing.
*/
- void OnRedo(wxCommandEvent& event);
+ bool EndLineSpacing() { return GetBuffer().EndLineSpacing(); }
/**
- Standard handler for the wxID_SELECTALL command.
+ Begins a numbered bullet.
+
+ This call will be needed for each item in the list, and the
+ application should take care of incrementing the numbering.
+
+ @a bulletNumber is a number, usually starting with 1.
+ @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
+ @a bulletStyle is a bitlist of the ::wxTextAttrBulletStyle values.
+
+ wxRichTextBuffer uses indentation to render a bulleted item.
+ The left indent is the distance between the margin and the bullet.
+ The content of the paragraph, including the first line, starts
+ at leftMargin + leftSubIndent.
+ So the distance between the left edge of the bullet and the
+ left of the actual paragraph is leftSubIndent.
*/
- void OnSelectAll(wxCommandEvent& event);
+ bool BeginNumberedBullet(int bulletNumber, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_ARABIC|wxTEXT_ATTR_BULLET_STYLE_PERIOD)
+ { return GetBuffer().BeginNumberedBullet(bulletNumber, leftIndent, leftSubIndent, bulletStyle); }
/**
- Standard handler for the wxID_UNDO command.
+ Ends application of a numbered bullet.
*/
- void OnUndo(wxCommandEvent& event);
+ bool EndNumberedBullet() { return GetBuffer().EndNumberedBullet(); }
/**
- Standard update handler for the wxID_CLEAR command.
+ Begins applying a symbol bullet, using a character from the current font.
+ See BeginNumberedBullet() for an explanation of how indentation is used
+ to render the bulleted paragraph.
*/
- void OnUpdateClear(wxUpdateUIEvent& event);
+ bool BeginSymbolBullet(const wxString& symbol, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_SYMBOL)
+ { return GetBuffer().BeginSymbolBullet(symbol, leftIndent, leftSubIndent, bulletStyle); }
/**
- Standard update handler for the wxID_COPY command.
+ Ends applying a symbol bullet.
*/
- void OnUpdateCopy(wxUpdateUIEvent& event);
+ bool EndSymbolBullet() { return GetBuffer().EndSymbolBullet(); }
/**
- Standard update handler for the wxID_CUT command.
+ Begins applying a symbol bullet.
*/
- void OnUpdateCut(wxUpdateUIEvent& event);
+ bool BeginStandardBullet(const wxString& bulletName, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_STANDARD)
+ { return GetBuffer().BeginStandardBullet(bulletName, leftIndent, leftSubIndent, bulletStyle); }
/**
- Standard update handler for the wxID_PASTE command.
+ Begins applying a standard bullet.
*/
- void OnUpdatePaste(wxUpdateUIEvent& event);
+ bool EndStandardBullet() { return GetBuffer().EndStandardBullet(); }
/**
- Standard update handler for the wxID_REDO command.
+ Begins using the named character style.
*/
- void OnUpdateRedo(wxUpdateUIEvent& event);
+ bool BeginCharacterStyle(const wxString& characterStyle) { return GetBuffer().BeginCharacterStyle(characterStyle); }
/**
- Standard update handler for the wxID_SELECTALL command.
+ Ends application of a named character style.
*/
- void OnUpdateSelectAll(wxUpdateUIEvent& event);
+ bool EndCharacterStyle() { return GetBuffer().EndCharacterStyle(); }
/**
- Standard update handler for the wxID_UNDO command.
+ Begins applying the named paragraph style.
*/
- void OnUpdateUndo(wxUpdateUIEvent& event);
+ bool BeginParagraphStyle(const wxString& paragraphStyle) { return GetBuffer().BeginParagraphStyle(paragraphStyle); }
/**
- Moves one or more pages down.
+ Ends application of a named paragraph style.
*/
- virtual bool PageDown(int noPages = 1, int flags = 0);
+ bool EndParagraphStyle() { return GetBuffer().EndParagraphStyle(); }
/**
- Moves one or more pages up.
+ Begins using a specified list style.
+ Optionally, you can also pass a level and a number.
*/
- virtual bool PageUp(int noPages = 1, int flags = 0);
+ bool BeginListStyle(const wxString& listStyle, int level = 1, int number = 1) { return GetBuffer().BeginListStyle(listStyle, level, number); }
/**
- Paints the background.
+ Ends using a specified list style.
*/
- virtual void PaintBackground(wxDC& dc);
+ bool EndListStyle() { return GetBuffer().EndListStyle(); }
/**
- Other user defined painting after everything else (i.e. all text) is painted.
+ Begins applying wxTEXT_ATTR_URL to the content.
- @since 2.9.1
+ Pass a URL and optionally, a character style to apply, since it is common
+ to mark a URL with a familiar style such as blue text with underlining.
*/
- virtual void PaintAboveContent(wxDC& dc);
+ bool BeginURL(const wxString& url, const wxString& characterStyle = wxEmptyString) { return GetBuffer().BeginURL(url, characterStyle); }
/**
- Pastes content from the clipboard to the buffer.
+ Ends applying a URL.
*/
- virtual void Paste();
+ bool EndURL() { return GetBuffer().EndURL(); }
/**
- Internal function to position the visible caret according to the current caret
- position.
+ Sets the default style to the style under the cursor.
*/
- virtual void PositionCaret();
+ bool SetDefaultStyleToCursorStyle();
/**
- Converts a text position to zero-based column and line numbers.
+ Cancels any selection.
*/
- virtual bool PositionToXY(long pos, long* x, long* y) const;
+ virtual void SelectNone();
- //@{
/**
- Promotes or demotes the paragraphs in the given range.
- A positive @a promoteBy produces a smaller indent, and a negative number
- produces a larger indent. Pass flags to determine how the attributes are set.
- Either the style definition or the name of the style definition (in the current
- sheet) can be passed.
-
- @a flags is a bit list of the following:
- - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
- - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
- @a startFrom, otherwise existing attributes are used.
- - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
- as the level for all paragraphs, otherwise the current indentation will be used.
-
- @see SetListStyle(), @see SetListStyle(), ClearListStyle().
+ Selects the word at the given character position.
*/
- bool PromoteList(int promoteBy, const wxRichTextRange& range,
- const wxRichTextListStyleDefinition* style,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO,
- int listLevel = -1);
- bool PromoteList(int promoteBy, const wxRichTextRange& range,
- const wxString& styleName,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO,
- int listLevel = -1);
- //@}
+ virtual bool SelectWord(long position);
/**
- Redoes the current command.
+ Returns the selection range in character positions. -1, -1 means no selection.
+
+ The range is in API convention, i.e. a single character selection is denoted
+ by (n, n+1)
*/
- virtual void Redo();
+ wxRichTextRange GetSelectionRange() const;
/**
- Removes the content in the specified range.
+ Sets the selection to the given range.
+ The end point of range is specified as the last character position of the span
+ of text, plus one.
+
+ So, for example, to set the selection for a character at position 5, use the
+ range (5,6).
*/
- virtual void Remove(long from, long to);
+ void SetSelectionRange(const wxRichTextRange& range);
/**
- Replaces the content in the specified range with the string specified by
- @a value.
+ Returns the selection range in character positions. -2, -2 means no selection
+ -1, -1 means select everything.
+ The range is in internal format, i.e. a single character selection is denoted
+ by (n, n)
*/
- virtual void Replace(long from, long to, const wxString& value);
+ wxRichTextRange GetInternalSelectionRange() const { return m_selection.GetRange(); }
/**
- Saves the buffer content using the given type.
-
- If the specified type is wxRICHTEXT_TYPE_ANY, the type is deduced from
- the filename extension.
-
- This function looks for a suitable wxRichTextFileHandler object.
+ Sets the selection range in character positions. -2, -2 means no selection
+ -1, -1 means select everything.
+ The range is in internal format, i.e. a single character selection is denoted
+ by (n, n)
*/
- bool SaveFile(const wxString& file = wxEmptyString,
- int type = wxRICHTEXT_TYPE_ANY);
+ void SetInternalSelectionRange(const wxRichTextRange& range) { m_selection.Set(range, GetFocusObject()); }
/**
- Scrolls @a position into view. This function takes a caret position.
+ Adds a new paragraph of text to the end of the buffer.
*/
- virtual bool ScrollIntoView(long position, int keyCode);
+ virtual wxRichTextRange AddParagraph(const wxString& text);
/**
- Selects all the text in the buffer.
+ Adds an image to the control's buffer.
*/
- virtual void SelectAll();
+ virtual wxRichTextRange AddImage(const wxImage& image);
/**
- Cancels any selection.
+ Lays out the buffer, which must be done before certain operations, such as
+ setting the caret position.
+ This function should not normally be required by the application.
*/
- virtual void SelectNone();
+ virtual bool LayoutContent(bool onlyVisibleRect = false);
/**
- Sets @a attr as the default style and tells the control that the UI should
- reflect this attribute until the user moves the caret.
+ Move the caret to the given character position.
- @see IsDefaultStyleShowing().
+ Please note that this does not update the current editing style
+ from the new position; to do that, call wxRichTextCtrl::SetInsertionPoint instead.
*/
- void SetAndShowDefaultStyle(const wxTextAttr& attr);
+ virtual bool MoveCaret(long pos, bool showAtLineStart = false, wxRichTextParagraphLayoutBox* container = NULL);
/**
- Sets the basic (overall) style.
-
- This is the style of the whole buffer before further styles are applied,
- unlike the default style, which only affects the style currently being
- applied (for example, setting the default style to bold will cause
- subsequently inserted text to be bold).
+ Moves right.
*/
- virtual void SetBasicStyle(const wxTextAttr& style);
+ virtual bool MoveRight(int noPositions = 1, int flags = 0);
/**
- Sets the caret position.
+ Moves left.
+ */
+ virtual bool MoveLeft(int noPositions = 1, int flags = 0);
- The caret position is the character position just before the caret.
- A value of -1 means the caret is at the start of the buffer.
- Please note that this does not update the current editing style
- from the new position or cause the actual caret to be refreshed; to do that,
- call wxRichTextCtrl::SetInsertionPoint instead.
+ /**
+ Moves to the start of the paragraph.
*/
- void SetCaretPosition(long position,
- bool showAtLineStart = false);
+ virtual bool MoveUp(int noLines = 1, int flags = 0);
/**
- Sets the current default style, which can be used to change how subsequently
- inserted text is displayed.
+ Moves the caret down.
*/
- virtual bool SetDefaultStyle(const wxTextAttr& style);
+ virtual bool MoveDown(int noLines = 1, int flags = 0);
/**
- Sets the default style to the style under the cursor.
+ Moves to the end of the line.
*/
- bool SetDefaultStyleToCursorStyle();
+ virtual bool MoveToLineEnd(int flags = 0);
/**
- Sets the size of the buffer beyond which layout is delayed during resizing.
- This optimizes sizing for large buffers. The default is 20000.
+ Moves to the start of the line.
*/
- void SetDelayedLayoutThreshold(long threshold);
+ virtual bool MoveToLineStart(int flags = 0);
/**
- Makes the control editable, or not.
+ Moves to the end of the paragraph.
*/
- virtual void SetEditable(bool editable);
+ virtual bool MoveToParagraphEnd(int flags = 0);
/**
- Sets the current filename.
+ Moves to the start of the paragraph.
*/
- void SetFilename(const wxString& filename);
+ virtual bool MoveToParagraphStart(int flags = 0);
/**
- Sets the font, and also the basic and default attributes
- (see wxRichTextCtrl::SetDefaultStyle).
+ Moves to the start of the buffer.
*/
- virtual bool SetFont(const wxFont& font);
+ virtual bool MoveHome(int flags = 0);
/**
- Sets flags that change the behaviour of loading or saving.
+ Moves to the end of the buffer.
+ */
+ virtual bool MoveEnd(int flags = 0);
- See the documentation for each handler class to see what flags are
- relevant for each handler.
+ /**
+ Moves one or more pages up.
*/
- void SetHandlerFlags(int flags);
+ virtual bool PageUp(int noPages = 1, int flags = 0);
/**
- Sets the insertion point and causes the current editing style to be taken from
- the new position (unlike wxRichTextCtrl::SetCaretPosition).
+ Moves one or more pages down.
*/
- virtual void SetInsertionPoint(long pos);
+ virtual bool PageDown(int noPages = 1, int flags = 0);
/**
- Sets the insertion point to the end of the text control.
+ Moves a number of words to the left.
*/
- virtual void SetInsertionPointEnd();
+ virtual bool WordLeft(int noPages = 1, int flags = 0);
- //@{
/**
- Sets the list attributes for the given range, passing flags to determine how
- the attributes are set.
-
- Either the style definition or the name of the style definition (in the current
- sheet) can be passed.
- @a flags is a bit list of the following:
- - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
- - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
- @a startFrom, otherwise existing attributes are used.
- - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
- as the level for all paragraphs, otherwise the current indentation will be used.
+ Move a nuber of words to the right.
+ */
+ virtual bool WordRight(int noPages = 1, int flags = 0);
- @see NumberList(), PromoteList(), ClearListStyle().
+ //@{
+ /**
+ Returns the buffer associated with the control.
*/
- bool SetListStyle(const wxRichTextRange& range,
- const wxRichTextListStyleDefinition* style,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO,
- int startFrom = -1,
- int listLevel = -1);
- bool SetListStyle(const wxRichTextRange& range,
- const wxString& styleName,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO,
- int startFrom = -1,
- int listLevel = -1);
+ wxRichTextBuffer& GetBuffer() { return m_buffer; }
+ const wxRichTextBuffer& GetBuffer() const { return m_buffer; }
//@}
/**
- Sets the selection to the given range.
- The end point of range is specified as the last character position of the span
- of text, plus one.
+ Starts batching undo history for commands.
+ */
+ virtual bool BeginBatchUndo(const wxString& cmdName) { return m_buffer.BeginBatchUndo(cmdName); }
- So, for example, to set the selection for a character at position 5, use the
- range (5,6).
+ /**
+ Ends batching undo command history.
*/
- virtual void SetSelection(long from, long to);
+ virtual bool EndBatchUndo() { return m_buffer.EndBatchUndo(); }
/**
- Sets the selection to the given range.
- The end point of range is specified as the last character position of the span
- of text, plus one.
+ Returns @true if undo commands are being batched.
+ */
+ virtual bool BatchingUndo() const { return m_buffer.BatchingUndo(); }
- So, for example, to set the selection for a character at position 5, use the
- range (5,6).
+ /**
+ Starts suppressing undo history for commands.
*/
- void SetSelectionRange(const wxRichTextRange& range);
+ virtual bool BeginSuppressUndo() { return m_buffer.BeginSuppressUndo(); }
- //@{
/**
- Sets the attributes for the given range.
- The end point of range is specified as the last character position of the span
- of text, plus one.
+ Ends suppressing undo command history.
+ */
+ virtual bool EndSuppressUndo() { return m_buffer.EndSuppressUndo(); }
- So, for example, to set the style for a character at position 5, use the range
- (5,6).
+ /**
+ Returns @true if undo history suppression is on.
*/
- bool SetStyle(const wxRichTextRange& range,
- const wxTextAttr& style);
- bool SetStyle(long start, long end, const wxTextAttr& style);
- //@}
+ virtual bool SuppressingUndo() const { return m_buffer.SuppressingUndo(); }
/**
- Sets the attributes for the given range, passing flags to determine how the
- attributes are set.
+ 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.
- The end point of range is specified as the last character position of the span
- of text, plus one. So, for example, to set the style for a character at
- position 5, use the range (5,6).
+ You can use this to implement, for example, bold button updating.
+ @a style must have flags indicating which attributes are of interest.
+ */
+ virtual bool HasCharacterAttributes(const wxRichTextRange& range, const wxRichTextAttr& style) const
+ {
+ return GetBuffer().HasCharacterAttributes(range.ToInternal(), style);
+ }
- @a flags may contain a bit list of the following values:
- - wxRICHTEXT_SETSTYLE_NONE: no style flag.
- - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
- undoable.
- - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
- if the combined style at this point is already the style in question.
- - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
- applied to paragraphs, and not the content.
- This allows content styling to be preserved independently from that
- of e.g. a named paragraph style.
- - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
- applied to characters, and not the paragraph.
- This allows content styling to be preserved independently from that
- of e.g. a named paragraph style.
- - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
- the new style.
- - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style. Only the style flags
- are used in this operation.
+ /**
+ Test if this whole range has paragraph attributes of the specified kind.
+ If any of the attributes are different within the range, the test fails.
+ You can use this to implement, for example, centering button updating.
+ @a style must have flags indicating which attributes are of interest.
+ */
+ virtual bool HasParagraphAttributes(const wxRichTextRange& range, const wxRichTextAttr& style) const
+ {
+ return GetBuffer().HasParagraphAttributes(range.ToInternal(), style);
+ }
+
+ /**
+ Returns @true if all of the selection is bold.
+ */
+ virtual bool IsSelectionBold();
+
+ /**
+ Returns @true if all of the selection is italic.
+ */
+ virtual bool IsSelectionItalics();
+
+ /**
+ Returns @true if all of the selection is underlined.
+ */
+ virtual bool IsSelectionUnderlined();
+
+ /**
+ Returns @true if all of the selection is aligned according to the specified flag.
+ */
+ virtual bool IsSelectionAligned(wxTextAttrAlignment alignment);
+
+ /**
+ Apples bold to the selection (undoable).
+ */
+ virtual bool ApplyBoldToSelection();
+
+ /**
+ Applies italic to the selection (undoable).
+ */
+ virtual bool ApplyItalicToSelection();
+
+ /**
+ Applies underline to the selection (undoable).
+ */
+ virtual bool ApplyUnderlineToSelection();
+
+ /**
+ Applies the given alignment to the selection (undoable).
+ For alignment values, see wxTextAttr.
+ */
+ virtual bool ApplyAlignmentToSelection(wxTextAttrAlignment alignment);
+
+ /**
+ Applies the style sheet to the buffer, matching paragraph styles in the sheet
+ against named styles in the buffer.
+
+ This might be useful if the styles have changed.
+ If @a sheet is @NULL, the sheet set with SetStyleSheet() is used.
+ Currently this applies paragraph styles only.
*/
- virtual bool SetStyleEx(const wxRichTextRange& range,
- const wxTextAttr& style,
- int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
+ virtual bool ApplyStyle(wxRichTextStyleDefinition* def);
/**
Sets the style sheet associated with the control.
A style sheet allows named character and paragraph styles to be applied.
*/
- void SetStyleSheet(wxRichTextStyleSheet* styleSheet);
+ void SetStyleSheet(wxRichTextStyleSheet* styleSheet) { GetBuffer().SetStyleSheet(styleSheet); }
/**
- Replaces existing content with the given text.
+ Returns the style sheet associated with the control, if any.
+ A style sheet allows named character and paragraph styles to be applied.
*/
- virtual void SetValue(const wxString& value);
+ wxRichTextStyleSheet* GetStyleSheet() const { return GetBuffer().GetStyleSheet(); }
/**
- A helper function setting up scrollbars, for example after a resize.
+ Push the style sheet to top of stack.
*/
- virtual void SetupScrollbars(bool atTop = false);
+ bool PushStyleSheet(wxRichTextStyleSheet* styleSheet) { return GetBuffer().PushStyleSheet(styleSheet); }
/**
- Scrolls the buffer so that the given position is in view.
+ Pops the style sheet from top of stack.
*/
- virtual void ShowPosition(long pos);
+ wxRichTextStyleSheet* PopStyleSheet() { return GetBuffer().PopStyleSheet(); }
/**
- Returns @true if undo history suppression is on.
+ Applies the style sheet to the buffer, for example if the styles have changed.
*/
- virtual bool SuppressingUndo() const;
+ bool ApplyStyleSheet(wxRichTextStyleSheet* styleSheet = NULL);
+
+// Command handlers
/**
- Call this function to end a Freeze and refresh the display.
+ Sends the event to the control.
*/
- void Thaw();
+ void Command(wxCommandEvent& event);
/**
- Undoes the command at the top of the command history, if there is one.
+ Loads the first dropped file.
*/
- virtual void Undo();
+ void OnDropFiles(wxDropFilesEvent& event);
+
+ void OnCaptureLost(wxMouseCaptureLostEvent& event);
+ void OnSysColourChanged(wxSysColourChangedEvent& event);
/**
- Moves a number of words to the left.
+ Standard handler for the wxID_CUT command.
*/
- virtual bool WordLeft(int noWords = 1, int flags = 0);
+ void OnCut(wxCommandEvent& event);
/**
- Move a nuber of words to the right.
+ Standard handler for the wxID_COPY command.
*/
- virtual bool WordRight(int noWords = 1, int flags = 0);
+ void OnCopy(wxCommandEvent& event);
/**
- Loads an image from a file and writes it at the current insertion point.
+ Standard handler for the wxID_PASTE command.
*/
- virtual bool WriteImage(const wxString& filename, wxBitmapType bitmapType);
+ void OnPaste(wxCommandEvent& event);
/**
- Writes an image block at the current insertion point.
+ Standard handler for the wxID_UNDO command.
*/
- virtual bool WriteImage(const wxRichTextImageBlock& imageBlock);
+ void OnUndo(wxCommandEvent& event);
- //@{
/**
- Write a bitmap or image at the current insertion point.
- Supply an optional type to use for internal and file storage of the raw data.
+ Standard handler for the wxID_REDO command.
*/
- bool WriteImage(const wxBitmap& bitmap,
- int bitmapType = wxBITMAP_TYPE_PNG);
- bool WriteImage(const wxImage& image,
- int bitmapType = wxBITMAP_TYPE_PNG);
- //@}
+ void OnRedo(wxCommandEvent& event);
/**
- Writes text at the current position.
+ Standard handler for the wxID_SELECTALL command.
*/
- virtual void WriteText(const wxString& text);
+ void OnSelectAll(wxCommandEvent& event);
/**
- Translates from column and line number to position.
+ Standard handler for property commands.
*/
- virtual long XYToPosition(long x, long y) const;
+ void OnProperties(wxCommandEvent& event);
-protected:
+ /**
+ Standard handler for the wxID_CLEAR command.
+ */
+ void OnClear(wxCommandEvent& event);
/**
- Currently this simply returns @c wxSize(10, 10).
+ Standard update handler for the wxID_CUT command.
+ */
+ void OnUpdateCut(wxUpdateUIEvent& event);
+
+ /**
+ Standard update handler for the wxID_COPY command.
+ */
+ void OnUpdateCopy(wxUpdateUIEvent& event);
+
+ /**
+ Standard update handler for the wxID_PASTE command.
+ */
+ void OnUpdatePaste(wxUpdateUIEvent& event);
+
+ /**
+ Standard update handler for the wxID_UNDO command.
+ */
+ void OnUpdateUndo(wxUpdateUIEvent& event);
+
+ /**
+ Standard update handler for the wxID_REDO command.
+ */
+ void OnUpdateRedo(wxUpdateUIEvent& event);
+
+ /**
+ Standard update handler for the wxID_SELECTALL command.
+ */
+ void OnUpdateSelectAll(wxUpdateUIEvent& event);
+
+ /**
+ Standard update handler for property commands.
+ */
+
+ void OnUpdateProperties(wxUpdateUIEvent& event);
+
+ /**
+ Standard update handler for the wxID_CLEAR command.
+ */
+ void OnUpdateClear(wxUpdateUIEvent& event);
+
+ /**
+ Shows a standard context menu with undo, redo, cut, copy, paste, clear, and
+ select all commands.
+ */
+ void OnContextMenu(wxContextMenuEvent& event);
+
+// Event handlers
+
+ // Painting
+ void OnPaint(wxPaintEvent& event);
+ void OnEraseBackground(wxEraseEvent& event);
+
+ // Left-click
+ void OnLeftClick(wxMouseEvent& event);
+
+ // Left-up
+ void OnLeftUp(wxMouseEvent& event);
+
+ // Motion
+ void OnMoveMouse(wxMouseEvent& event);
+
+ // Left-double-click
+ void OnLeftDClick(wxMouseEvent& event);
+
+ // Middle-click
+ void OnMiddleClick(wxMouseEvent& event);
+
+ // Right-click
+ void OnRightClick(wxMouseEvent& event);
+
+ // Key press
+ void OnChar(wxKeyEvent& event);
+
+ // Sizing
+ void OnSize(wxSizeEvent& event);
+
+ // Setting/losing focus
+ void OnSetFocus(wxFocusEvent& event);
+ void OnKillFocus(wxFocusEvent& event);
+
+ // Idle-time processing
+ void OnIdle(wxIdleEvent& event);
+
+ // Scrolling
+ void OnScroll(wxScrollWinEvent& event);
+
+ /**
+ Sets the font, and also the basic and default attributes
+ (see wxRichTextCtrl::SetDefaultStyle).
*/
- virtual wxSize DoGetBestSize() const;
+ virtual bool SetFont(const wxFont& font);
+
+ /**
+ A helper function setting up scrollbars, for example after a resize.
+ */
+ virtual void SetupScrollbars(bool atTop = false);
+
+ /**
+ Helper function implementing keyboard navigation.
+ */
+ virtual bool KeyboardNavigate(int keyCode, int flags);
/**
- Initialises the command event.
+ Paints the background.
*/
- void InitCommandEvent(wxCommandEvent& event) const;
+ virtual void PaintBackground(wxDC& dc);
+
+ /**
+ Other user defined painting after everything else (i.e. all text) is painted.
+
+ @since 2.9.1
+ */
+ virtual void PaintAboveContent(wxDC& WXUNUSED(dc)) {}
+
+#if wxRICHTEXT_BUFFERED_PAINTING
+ /**
+ Recreates the buffer bitmap if necessary.
+ */
+ virtual bool RecreateBuffer(const wxSize& size = wxDefaultSize);
+#endif
+
+ // Write text
+ virtual void DoWriteText(const wxString& value, int flags = 0);
+
+ // Should we inherit colours?
+ virtual bool ShouldInheritColours() const { return false; }
+
+ /**
+ Internal function to position the visible caret according to the current caret
+ position.
+ */
+ virtual void PositionCaret(wxRichTextParagraphLayoutBox* container = NULL);
+
+ /**
+ Helper function for extending the selection, returning @true if the selection
+ was changed. Selections are in caret positions.
+ */
+ virtual bool ExtendSelection(long oldPosition, long newPosition, int flags);
+
+ /**
+ Scrolls @a position into view. This function takes a caret position.
+ */
+ virtual bool ScrollIntoView(long position, int keyCode);
+
+ /**
+ Refreshes the area affected by a selection change.
+ */
+ bool RefreshForSelectionChange(const wxRichTextSelection& oldSelection, const wxRichTextSelection& newSelection);
+
+ /**
+ Sets the caret position.
+
+ The caret position is the character position just before the caret.
+ A value of -1 means the caret is at the start of the buffer.
+ Please note that this does not update the current editing style
+ from the new position or cause the actual caret to be refreshed; to do that,
+ call wxRichTextCtrl::SetInsertionPoint instead.
+ */
+ void SetCaretPosition(long position, bool showAtLineStart = false) ;
+
+ /**
+ Returns the current caret position.
+ */
+ long GetCaretPosition() const { return m_caretPosition; }
+
+ /**
+ The adjusted caret position is the character position adjusted to take
+ into account whether we're at the start of a paragraph, in which case
+ style information should be taken from the next position, not current one.
+ */
+ long GetAdjustedCaretPosition(long caretPos) const;
+
+ /**
+ Move the caret one visual step forward: this may mean setting a flag
+ and keeping the same position if we're going from the end of one line
+ to the start of the next, which may be the exact same caret position.
+ */
+ void MoveCaretForward(long oldPosition) ;
+
+ /**
+ Move the caret one visual step forward: this may mean setting a flag
+ and keeping the same position if we're going from the end of one line
+ to the start of the next, which may be the exact same caret position.
+ */
+ void MoveCaretBack(long oldPosition) ;
+
+ /**
+ Returns the caret height and position for the given character position.
+ If container is null, the current focus object will be used.
+
+ @beginWxPerlOnly
+ In wxPerl this method is implemented as
+ GetCaretPositionForIndex(@a position) returning a
+ 2-element list (ok, rect).
+ @endWxPerlOnly
+ */
+ bool GetCaretPositionForIndex(long position, wxRect& rect, wxRichTextParagraphLayoutBox* container = NULL);
+
+ /**
+ Internal helper function returning the line for the visible caret position.
+ If the caret is shown at the very end of the line, it means the next character
+ is actually on the following line.
+ So this function gets the line we're expecting to find if this is the case.
+ */
+ wxRichTextLine* GetVisibleLineForCaretPosition(long caretPosition) const;
+
+ /**
+ Gets the command processor associated with the control's buffer.
+ */
+ wxCommandProcessor* GetCommandProcessor() const { return GetBuffer().GetCommandProcessor(); }
+
+ /**
+ Deletes content if there is a selection, e.g. when pressing a key.
+ Returns the new caret position in @e newPos, or leaves it if there
+ was no action. This is undoable.
+
+ @beginWxPerlOnly
+ In wxPerl this method takes no arguments and returns a 2-element
+ list (ok, newPos).
+ @endWxPerlOnly
+ */
+ bool DeleteSelectedContent(long* newPos= NULL);
+
+ /**
+ Transforms logical (unscrolled) position to physical window position.
+ */
+ wxPoint GetPhysicalPoint(const wxPoint& ptLogical) const;
+
+ /**
+ Transforms physical window position to logical (unscrolled) position.
+ */
+ wxPoint GetLogicalPoint(const wxPoint& ptPhysical) const;
+
+ /**
+ Helper function for finding the caret position for the next word.
+ Direction is 1 (forward) or -1 (backwards).
+ */
+ virtual long FindNextWordPosition(int direction = 1) const;
+
+ /**
+ Returns @true if the given position is visible on the screen.
+ */
+ bool IsPositionVisible(long pos) const;
+
+ /**
+ Returns the first visible position in the current view.
+ */
+ long GetFirstVisiblePosition() const;
+
+ /**
+ Returns the caret position since the default formatting was changed. As
+ soon as this position changes, we no longer reflect the default style
+ in the UI. A value of -2 means that we should only reflect the style of the
+ content under the caret.
+ */
+ long GetCaretPositionForDefaultStyle() const { return m_caretPositionForDefaultStyle; }
+
+ /**
+ Set the caret position for the default style that the user is selecting.
+ */
+ void SetCaretPositionForDefaultStyle(long pos) { m_caretPositionForDefaultStyle = pos; }
+
+ /**
+ Returns @true if the user has recently set the default style without moving
+ the caret, and therefore the UI needs to reflect the default style and not
+ the style at the caret.
+
+ Below is an example of code that uses this function to determine whether the UI
+ should show that the current style is bold.
+
+ @see SetAndShowDefaultStyle().
+ */
+ bool IsDefaultStyleShowing() const { return m_caretPositionForDefaultStyle != -2; }
+
+ /**
+ Sets @a attr as the default style and tells the control that the UI should
+ reflect this attribute until the user moves the caret.
+
+ @see IsDefaultStyleShowing().
+ */
+ void SetAndShowDefaultStyle(const wxRichTextAttr& attr)
+ {
+ SetDefaultStyle(attr);
+ SetCaretPositionForDefaultStyle(GetCaretPosition());
+ }
+
+ /**
+ Returns the first visible point in the window.
+ */
+ wxPoint GetFirstVisiblePoint() const;
+
+#ifdef DOXYGEN
+ /**
+ Returns the content of the entire control as a string.
+ */
+ virtual wxString GetValue() const;
+
+ /**
+ Replaces existing content with the given text.
+ */
+ virtual void SetValue(const wxString& value);
+
+ /**
+ Call this function to prevent refresh and allow fast updates, and then Thaw() to
+ refresh the control.
+ */
+ void Freeze();
+
+ /**
+ Call this function to end a Freeze and refresh the display.
+ */
+ void Thaw();
+
+ /**
+ Returns @true if Freeze has been called without a Thaw.
+ */
+ bool IsFrozen() const;
+
+#endif
+
+// Implementation
+
+ /**
+ Sets up the caret for the given position and container, after a mouse click.
+ */
+ bool SetCaretPositionAfterClick(wxRichTextParagraphLayoutBox* container, long position, int hitTestFlags, bool extendSelection = false);
+
+ /**
+ Find the caret position for the combination of hit-test flags and character position.
+ Returns the caret position and also an indication of where to place the caret (caretLineStart)
+ since this is ambiguous (same position used for end of line and start of next).
+ */
+ long FindCaretPositionForCharacterPosition(long position, int hitTestFlags, wxRichTextParagraphLayoutBox* container,
+ bool& caretLineStart);
+
+ /**
+ Font names take a long time to retrieve, so cache them (on demand).
+ */
+ static const wxArrayString& GetAvailableFontNames();
+
+ /**
+ Clears the cache of available font names.
+ */
+ static void ClearAvailableFontNames();
+
+ WX_FORWARD_TO_SCROLL_HELPER()
+
+ // implement wxTextEntry methods
+ virtual wxString DoGetValue() const;
+
+protected:
+ // implement the wxTextEntry pure virtual method
+ virtual wxWindow *GetEditableWindow() { return this; }
+
+ // margins functions
+ virtual bool DoSetMargins(const wxPoint& pt);
+ virtual wxPoint DoGetMargins() const;
+
+ // FIXME: this does not work, it allows this code to compile but will fail
+ // during run-time
+#ifndef __WXUNIVERSAL__
+#ifdef __WXMSW__
+ virtual WXHWND GetEditHWND() const { return GetHWND(); }
+#endif
+#ifdef __WXMOTIF__
+ virtual WXWidget GetTextWidget() const { return NULL; }
+#endif
+#ifdef __WXGTK20__
+ virtual GtkEditable *GetEditable() const { return NULL; }
+ virtual GtkEntry *GetEntry() const { return NULL; }
+#endif
+#endif // !__WXUNIVERSAL__
+
+// Overrides
+protected:
+
+ /**
+ Currently this simply returns @c wxSize(10, 10).
+ */
+ virtual wxSize DoGetBestSize() const ;
+
+ virtual void DoSetValue(const wxString& value, int flags = 0);
+
+ virtual void DoThaw();
+
+
+// Data members
+private:
+#if wxRICHTEXT_BUFFERED_PAINTING
+ /// Buffer bitmap
+ wxBitmap m_bufferBitmap;
+#endif
+
+ /// Text buffer
+ wxRichTextBuffer m_buffer;
+
+ wxMenu* m_contextMenu;
+
+ /// Caret position (1 less than the character position, so -1 is the
+ /// first caret position).
+ long m_caretPosition;
+
+ /// Caret position when the default formatting has been changed. As
+ /// soon as this position changes, we no longer reflect the default style
+ /// in the UI.
+ long m_caretPositionForDefaultStyle;
+
+ /// Selection range in character positions. -2, -2 means no selection.
+ wxRichTextSelection m_selection;
+
+ wxRichTextCtrlSelectionState m_selectionState;
+
+ /// Anchor so we know how to extend the selection
+ /// It's a caret position since it's between two characters.
+ long m_selectionAnchor;
+
+ /// Anchor object if selecting multiple container objects, such as grid cells.
+ wxRichTextObject* m_selectionAnchorObject;
+
+ /// Are we editable?
+ bool m_editable;
+
+ /// Are we showing the caret position at the start of a line
+ /// instead of at the end of the previous one?
+ bool m_caretAtLineStart;
+
+ /// Are we dragging a selection?
+ bool m_dragging;
+
+ /// Start position for drag
+ wxPoint m_dragStart;
+
+ /// Do we need full layout in idle?
+ bool m_fullLayoutRequired;
+ wxLongLong m_fullLayoutTime;
+ long m_fullLayoutSavedPosition;
+
+ /// Threshold for doing delayed layout
+ long m_delayedLayoutThreshold;
+
+ /// Cursors
+ wxCursor m_textCursor;
+ wxCursor m_urlCursor;
+
+ static wxArrayString sm_availableFontNames;
+
+ wxRichTextContextMenuPropertiesInfo m_contextMenuPropertiesInfo;
+
+ /// The object that currently has the editing focus
+ wxRichTextParagraphLayoutBox* m_focusObject;
+};
+
+/**
+ @class wxRichTextEvent
+
+ This is the event class for wxRichTextCtrl notifications.
+
+ @beginEventTable{wxRichTextEvent}
+ @event{EVT_RICHTEXT_LEFT_CLICK(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_LEFT_CLICK event, generated when the user
+ releases the left mouse button over an object.
+ @event{EVT_RICHTEXT_RIGHT_CLICK(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_RIGHT_CLICK event, generated when the user
+ releases the right mouse button over an object.
+ @event{EVT_RICHTEXT_MIDDLE_CLICK(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_MIDDLE_CLICK event, generated when the user
+ releases the middle mouse button over an object.
+ @event{EVT_RICHTEXT_LEFT_DCLICK(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_DLEFT_CLICK event, generated when the user
+ double-clicks an object.
+ @event{EVT_RICHTEXT_RETURN(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_RETURN event, generated when the user
+ presses the return key. Valid event functions: GetFlags, GetPosition.
+ @event{EVT_RICHTEXT_CHARACTER(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_CHARACTER event, generated when the user
+ presses a character key. Valid event functions: GetFlags, GetPosition, GetCharacter.
+ @event{EVT_RICHTEXT_DELETE(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_DELETE event, generated when the user
+ presses the backspace or delete key. Valid event functions: GetFlags, GetPosition.
+ @event{EVT_RICHTEXT_RETURN(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_RETURN event, generated when the user
+ presses the return key. Valid event functions: GetFlags, GetPosition.
+ @event{EVT_RICHTEXT_STYLE_CHANGED(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_STYLE_CHANGED event, generated when
+ styling has been applied to the control. Valid event functions: GetPosition, GetRange.
+ @event{EVT_RICHTEXT_STYLESHEET_CHANGED(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING event, generated
+ when the control's stylesheet has changed, for example the user added,
+ edited or deleted a style. Valid event functions: GetRange, GetPosition.
+ @event{EVT_RICHTEXT_STYLESHEET_REPLACING(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACING event, generated
+ when the control's stylesheet is about to be replaced, for example when
+ a file is loaded into the control.
+ Valid event functions: Veto, GetOldStyleSheet, GetNewStyleSheet.
+ @event{EVT_RICHTEXT_STYLESHEET_REPLACED(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACED event, generated
+ when the control's stylesheet has been replaced, for example when a file
+ is loaded into the control.
+ Valid event functions: GetOldStyleSheet, GetNewStyleSheet.
+ @event{EVT_RICHTEXT_CONTENT_INSERTED(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_CONTENT_INSERTED event, generated when
+ content has been inserted into the control.
+ Valid event functions: GetPosition, GetRange.
+ @event{EVT_RICHTEXT_CONTENT_DELETED(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED event, generated when
+ content has been deleted from the control.
+ Valid event functions: GetPosition, GetRange.
+ @event{EVT_RICHTEXT_BUFFER_RESET(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_BUFFER_RESET event, generated when the
+ buffer has been reset by deleting all content.
+ You can use this to set a default style for the first new paragraph.
+ @event{EVT_RICHTEXT_SELECTION_CHANGED(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_SELECTION_CHANGED event, generated when the
+ selection range has changed.
+ @event{EVT_RICHTEXT_FOCUS_OBJECT_CHANGED(id, func)}
+ Process a @c wxEVT_COMMAND_RICHTEXT_FOCUS_OBJECT_CHANGED event, generated when the
+ current focus object has changed.
+ @endEventTable
+
+ @library{wxrichtext}
+ @category{events,richtext}
+*/
+
+class WXDLLIMPEXP_RICHTEXT wxRichTextEvent : public wxNotifyEvent
+{
+public:
+ /**
+ Constructor.
+
+ @param commandType
+ The type of the event.
+ @param id
+ Window identifier. The value @c wxID_ANY indicates a default value.
+ */
+ wxRichTextEvent(wxEventType commandType = wxEVT_NULL, int winid = 0)
+ : wxNotifyEvent(commandType, winid),
+ m_flags(0), m_position(-1), m_oldStyleSheet(NULL), m_newStyleSheet(NULL),
+ m_char((wxChar) 0), m_container(NULL), m_oldContainer(NULL)
+ { }
+
+ /**
+ Copy constructor.
+ */
+ wxRichTextEvent(const wxRichTextEvent& event)
+ : wxNotifyEvent(event),
+ m_flags(event.m_flags), m_position(-1),
+ m_oldStyleSheet(event.m_oldStyleSheet), m_newStyleSheet(event.m_newStyleSheet),
+ m_char((wxChar) 0), m_container(event.m_container), m_oldContainer(event.m_oldContainer)
+ { }
+
+ /**
+ Returns the buffer position at which the event occured.
+ */
+ long GetPosition() const { return m_position; }
+
+ /**
+ Sets the buffer position variable.
+ */
+ void SetPosition(long pos) { m_position = pos; }
+
+ /**
+ Returns flags indicating modifier keys pressed.
+
+ Possible values are @c wxRICHTEXT_CTRL_DOWN, @c wxRICHTEXT_SHIFT_DOWN, and @c wxRICHTEXT_ALT_DOWN.
+ */
+ int GetFlags() const { return m_flags; }
+
+ /**
+ Sets flags indicating modifier keys pressed.
+
+ Possible values are @c wxRICHTEXT_CTRL_DOWN, @c wxRICHTEXT_SHIFT_DOWN, and @c wxRICHTEXT_ALT_DOWN.
+ */
+ void SetFlags(int flags) { m_flags = flags; }
+
+ /**
+ Returns the old style sheet.
+
+ Can be used in a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING or
+ @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED event handler.
+ */
+ wxRichTextStyleSheet* GetOldStyleSheet() const { return m_oldStyleSheet; }
+
+ /**
+ Sets the old style sheet variable.
+ */
+ void SetOldStyleSheet(wxRichTextStyleSheet* sheet) { m_oldStyleSheet = sheet; }
+
+ /**
+ Returns the new style sheet.
+
+ Can be used in a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING or
+ @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED event handler.
+ */
+ wxRichTextStyleSheet* GetNewStyleSheet() const { return m_newStyleSheet; }
+
+ /**
+ Sets the new style sheet variable.
+ */
+ void SetNewStyleSheet(wxRichTextStyleSheet* sheet) { m_newStyleSheet = sheet; }
+
+ /**
+ Gets the range for the current operation.
+ */
+ const wxRichTextRange& GetRange() const { return m_range; }
+
+ /**
+ Sets the range variable.
+ */
+ void SetRange(const wxRichTextRange& range) { m_range = range; }
+
+ /**
+ Returns the character pressed, within a @c wxEVT_COMMAND_RICHTEXT_CHARACTER event.
+ */
+ wxChar GetCharacter() const { return m_char; }
+
+ /**
+ Sets the character variable.
+ */
+ void SetCharacter(wxChar ch) { m_char = ch; }
+
+ /**
+ Returns the container for which the event is relevant.
+ */
+ wxRichTextParagraphLayoutBox* GetContainer() const { return m_container; }
+
+ /**
+ Sets the container for which the event is relevant.
+ */
+ void SetContainer(wxRichTextParagraphLayoutBox* container) { m_container = container; }
+
+ /**
+ Returns the old container, for a focus change event.
+ */
+ wxRichTextParagraphLayoutBox* GetOldContainer() const { return m_oldContainer; }
+
+ /**
+ Sets the old container, for a focus change event.
+ */
+ void SetOldContainer(wxRichTextParagraphLayoutBox* container) { m_oldContainer = container; }
+
+ virtual wxEvent *Clone() const { return new wxRichTextEvent(*this); }
+
+protected:
+ int m_flags;
+ long m_position;
+ wxRichTextStyleSheet* m_oldStyleSheet;
+ wxRichTextStyleSheet* m_newStyleSheet;
+ wxRichTextRange m_range;
+ wxChar m_char;
+ wxRichTextParagraphLayoutBox* m_container;
+ wxRichTextParagraphLayoutBox* m_oldContainer;
+
+private:
+ DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxRichTextEvent)
};
+/*!
+ * wxRichTextCtrl events
+ */
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_LEFT_CLICK, wxRichTextEvent );
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_RIGHT_CLICK, wxRichTextEvent );
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_MIDDLE_CLICK, wxRichTextEvent );
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_LEFT_DCLICK, wxRichTextEvent );
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_RETURN, wxRichTextEvent );
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_CHARACTER, wxRichTextEvent );
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_DELETE, wxRichTextEvent );
+
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING, wxRichTextEvent );
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED, wxRichTextEvent );
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACING, wxRichTextEvent );
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACED, wxRichTextEvent );
+
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_CONTENT_INSERTED, wxRichTextEvent );
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED, wxRichTextEvent );
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_STYLE_CHANGED, wxRichTextEvent );
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_SELECTION_CHANGED, wxRichTextEvent );
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_BUFFER_RESET, wxRichTextEvent );
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_FOCUS_OBJECT_CHANGED, wxRichTextEvent );
+
+typedef void (wxEvtHandler::*wxRichTextEventFunction)(wxRichTextEvent&);
+
+#define wxRichTextEventHandler(func) \
+ wxEVENT_HANDLER_CAST(wxRichTextEventFunction, func)
+
+#define EVT_RICHTEXT_LEFT_CLICK(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_LEFT_CLICK, id, -1, wxRichTextEventHandler( fn ), NULL ),
+#define EVT_RICHTEXT_RIGHT_CLICK(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_RIGHT_CLICK, id, -1, wxRichTextEventHandler( fn ), NULL ),
+#define EVT_RICHTEXT_MIDDLE_CLICK(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_MIDDLE_CLICK, id, -1, wxRichTextEventHandler( fn ), NULL ),
+#define EVT_RICHTEXT_LEFT_DCLICK(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_LEFT_DCLICK, id, -1, wxRichTextEventHandler( fn ), NULL ),
+#define EVT_RICHTEXT_RETURN(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_RETURN, id, -1, wxRichTextEventHandler( fn ), NULL ),
+#define EVT_RICHTEXT_CHARACTER(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_CHARACTER, id, -1, wxRichTextEventHandler( fn ), NULL ),
+#define EVT_RICHTEXT_DELETE(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_DELETE, id, -1, wxRichTextEventHandler( fn ), NULL ),
+
+#define EVT_RICHTEXT_STYLESHEET_CHANGING(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING, id, -1, wxRichTextEventHandler( fn ), NULL ),
+#define EVT_RICHTEXT_STYLESHEET_CHANGED(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED, id, -1, wxRichTextEventHandler( fn ), NULL ),
+#define EVT_RICHTEXT_STYLESHEET_REPLACING(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACING, id, -1, wxRichTextEventHandler( fn ), NULL ),
+#define EVT_RICHTEXT_STYLESHEET_REPLACED(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACED, id, -1, wxRichTextEventHandler( fn ), NULL ),
+
+#define EVT_RICHTEXT_CONTENT_INSERTED(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_CONTENT_INSERTED, id, -1, wxRichTextEventHandler( fn ), NULL ),
+#define EVT_RICHTEXT_CONTENT_DELETED(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED, id, -1, wxRichTextEventHandler( fn ), NULL ),
+#define EVT_RICHTEXT_STYLE_CHANGED(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_STYLE_CHANGED, id, -1, wxRichTextEventHandler( fn ), NULL ),
+#define EVT_RICHTEXT_SELECTION_CHANGED(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_SELECTION_CHANGED, id, -1, wxRichTextEventHandler( fn ), NULL ),
+#define EVT_RICHTEXT_BUFFER_RESET(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_BUFFER_RESET, id, -1, wxRichTextEventHandler( fn ), NULL ),
+
+#endif
+ // wxUSE_RICHTEXT
+
+#endif
+ // _WX_RICHTEXTCTRL_H_