57bf907d8e
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57991 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
1170 lines
35 KiB
Objective-C
1170 lines
35 KiB
Objective-C
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: richtext/richtextbuffer.h
|
|
// Purpose: interface of wxRichTextBuffer
|
|
// Author: wxWidgets team
|
|
// RCS-ID: $Id$
|
|
// Licence: wxWindows license
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
/*!
|
|
* File types in wxRichText context.
|
|
*/
|
|
enum wxRichTextFileType
|
|
{
|
|
wxRICHTEXT_TYPE_ANY = 0,
|
|
wxRICHTEXT_TYPE_TEXT,
|
|
wxRICHTEXT_TYPE_XML,
|
|
wxRICHTEXT_TYPE_HTML,
|
|
wxRICHTEXT_TYPE_RTF,
|
|
wxRICHTEXT_TYPE_PDF
|
|
};
|
|
|
|
/*!
|
|
* Flags determining the available space, passed to Layout
|
|
*/
|
|
|
|
#define wxRICHTEXT_FIXED_WIDTH 0x01
|
|
#define wxRICHTEXT_FIXED_HEIGHT 0x02
|
|
#define wxRICHTEXT_VARIABLE_WIDTH 0x04
|
|
#define wxRICHTEXT_VARIABLE_HEIGHT 0x08
|
|
|
|
// Only lay out the part of the buffer that lies within
|
|
// the rect passed to Layout.
|
|
#define wxRICHTEXT_LAYOUT_SPECIFIED_RECT 0x10
|
|
|
|
/*!
|
|
* Flags 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
|
|
|
|
/*!
|
|
* Flags returned from hit-testing
|
|
*/
|
|
enum wxRichTextHitTestFlags
|
|
{
|
|
/// The point was not on this object
|
|
wxRICHTEXT_HITTEST_NONE = 0x01,
|
|
|
|
/// The point was before the position returned from HitTest
|
|
wxRICHTEXT_HITTEST_BEFORE = 0x02,
|
|
|
|
/// The point was after the position returned from HitTest
|
|
wxRICHTEXT_HITTEST_AFTER = 0x04,
|
|
|
|
/// The point was on the position returned from HitTest
|
|
wxRICHTEXT_HITTEST_ON = 0x08,
|
|
|
|
/// The point was on space outside content
|
|
wxRICHTEXT_HITTEST_OUTSIDE = 0x10
|
|
};
|
|
|
|
/*!
|
|
* Flags for GetRangeSize
|
|
*/
|
|
|
|
#define wxRICHTEXT_FORMATTED 0x01
|
|
#define wxRICHTEXT_UNFORMATTED 0x02
|
|
#define wxRICHTEXT_CACHE_SIZE 0x04
|
|
#define wxRICHTEXT_HEIGHT_ONLY 0x08
|
|
|
|
/*!
|
|
* Flags for SetStyle/SetListStyle
|
|
*/
|
|
|
|
#define wxRICHTEXT_SETSTYLE_NONE 0x00
|
|
|
|
// Specifies that this operation should be undoable
|
|
#define wxRICHTEXT_SETSTYLE_WITH_UNDO 0x01
|
|
|
|
// Specifies that the style should not be applied if the
|
|
// combined style at this point is already the style in question.
|
|
#define wxRICHTEXT_SETSTYLE_OPTIMIZE 0x02
|
|
|
|
// 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.
|
|
#define wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY 0x04
|
|
|
|
// 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.
|
|
#define wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY 0x08
|
|
|
|
// For SetListStyle only: specifies starting from the given number, otherwise
|
|
// deduces number from existing attributes
|
|
#define wxRICHTEXT_SETSTYLE_RENUMBER 0x10
|
|
|
|
// For SetListStyle only: specifies the list level for all paragraphs, otherwise
|
|
// the current indentation will be used
|
|
#define wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL 0x20
|
|
|
|
// Resets the existing style before applying the new style
|
|
#define wxRICHTEXT_SETSTYLE_RESET 0x40
|
|
|
|
// Removes the given style instead of applying it
|
|
#define wxRICHTEXT_SETSTYLE_REMOVE 0x80
|
|
|
|
/*!
|
|
* Flags for text insertion
|
|
*/
|
|
|
|
#define wxRICHTEXT_INSERT_NONE 0x00
|
|
#define wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE 0x01
|
|
#define wxRICHTEXT_INSERT_INTERACTIVE 0x02
|
|
|
|
// A special flag telling the buffer to keep the first paragraph style
|
|
// as-is, when deleting a paragraph marker. In future we might pass a
|
|
// flag to InsertFragment and DeleteRange to indicate the appropriate mode.
|
|
#define wxTEXT_ATTR_KEEP_FIRST_PARA_STYLE 0x10000000
|
|
|
|
/*!
|
|
* Default superscript/subscript font multiplication factor
|
|
*/
|
|
|
|
#define wxSCRIPT_MUL_FACTOR 1.5
|
|
|
|
|
|
/**
|
|
@class wxRichTextBuffer
|
|
|
|
This class represents the whole buffer associated with a wxRichTextCtrl.
|
|
|
|
@library{wxrichtext}
|
|
@category{richtext}
|
|
|
|
@see wxTextAttr, wxRichTextCtrl
|
|
*/
|
|
class wxRichTextBuffer : public wxRichTextParagraphLayoutBox
|
|
{
|
|
public:
|
|
/**
|
|
Default constructor.
|
|
*/
|
|
wxRichTextBuffer();
|
|
|
|
/**
|
|
Copy ctor.
|
|
*/
|
|
wxRichTextBuffer(const wxRichTextBuffer& obj);
|
|
|
|
/**
|
|
Destructor.
|
|
*/
|
|
virtual ~wxRichTextBuffer();
|
|
|
|
/**
|
|
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.
|
|
*/
|
|
bool AddEventHandler(wxEvtHandler* handler);
|
|
|
|
/**
|
|
Adds a file handler.
|
|
*/
|
|
static void AddHandler(wxRichTextFileHandler* handler);
|
|
|
|
/**
|
|
Adds a paragraph of text.
|
|
*/
|
|
virtual wxRichTextRange AddParagraph(const wxString& text,
|
|
wxTextAttr* paraStyle = 0);
|
|
|
|
/**
|
|
Returns @true if the buffer is currently collapsing commands into a single
|
|
notional command.
|
|
*/
|
|
virtual bool BatchingUndo() const;
|
|
|
|
/**
|
|
Begins using alignment.
|
|
*/
|
|
bool BeginAlignment(wxTextAttrAlignment alignment);
|
|
|
|
/**
|
|
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);
|
|
|
|
/**
|
|
Begin applying bold.
|
|
*/
|
|
bool BeginBold();
|
|
|
|
/**
|
|
Begins applying the named character style.
|
|
*/
|
|
bool BeginCharacterStyle(const wxString& characterStyle);
|
|
|
|
/**
|
|
Begins using this font.
|
|
*/
|
|
bool BeginFont(const wxFont& font);
|
|
|
|
/**
|
|
Begins using the given point size.
|
|
*/
|
|
bool BeginFontSize(int pointSize);
|
|
|
|
/**
|
|
Begins using italic.
|
|
*/
|
|
bool BeginItalic();
|
|
|
|
/**
|
|
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.
|
|
*/
|
|
bool BeginLeftIndent(int leftIndent, int leftSubIndent = 0);
|
|
|
|
/**
|
|
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);
|
|
|
|
/**
|
|
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);
|
|
|
|
/**
|
|
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.
|
|
*/
|
|
bool BeginNumberedBullet(int bulletNumber, int leftIndent,
|
|
int leftSubIndent,
|
|
int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_ARABIC|wxTEXT_ATTR_BULLET_STYLE_PERIOD);
|
|
|
|
/**
|
|
Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
|
|
in tenths of a millimetre.
|
|
*/
|
|
bool BeginParagraphSpacing(int before, int after);
|
|
|
|
/**
|
|
Begins applying the named paragraph style.
|
|
*/
|
|
bool BeginParagraphStyle(const wxString& paragraphStyle);
|
|
|
|
/**
|
|
Begins a right indent, specified in tenths of a millimetre.
|
|
*/
|
|
bool BeginRightIndent(int rightIndent);
|
|
|
|
/**
|
|
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);
|
|
|
|
/**
|
|
Begins using a specified style.
|
|
*/
|
|
virtual bool BeginStyle(const wxTextAttr& style);
|
|
|
|
/**
|
|
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();
|
|
|
|
/**
|
|
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);
|
|
|
|
/**
|
|
Begins using the specified text foreground colour.
|
|
*/
|
|
bool BeginTextColour(const wxColour& colour);
|
|
|
|
/**
|
|
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);
|
|
|
|
/**
|
|
Begins using underline.
|
|
*/
|
|
bool BeginUnderline();
|
|
|
|
/**
|
|
Returns @true if content can be pasted from the clipboard.
|
|
*/
|
|
virtual bool CanPasteFromClipboard() const;
|
|
|
|
/**
|
|
Cleans up the file handlers.
|
|
*/
|
|
static void CleanUpHandlers();
|
|
|
|
/**
|
|
Clears the buffer.
|
|
*/
|
|
virtual void Clear();
|
|
|
|
/**
|
|
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()
|
|
*/
|
|
bool ClearListStyle(const wxRichTextRange& range,
|
|
int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
|
|
|
|
/**
|
|
Clears the style stack.
|
|
*/
|
|
virtual void ClearStyleStack();
|
|
|
|
/**
|
|
Clones the object.
|
|
*/
|
|
virtual wxRichTextObject* Clone() const;
|
|
|
|
/**
|
|
Copies the given buffer.
|
|
*/
|
|
void Copy(const wxRichTextBuffer& obj);
|
|
|
|
/**
|
|
Copy the given range to the clipboard.
|
|
*/
|
|
virtual bool CopyToClipboard(const wxRichTextRange& range);
|
|
|
|
/**
|
|
Submits a command to delete the given range.
|
|
*/
|
|
bool DeleteRangeWithUndo(const wxRichTextRange& range,
|
|
wxRichTextCtrl* ctrl);
|
|
|
|
//@{
|
|
/**
|
|
Dumps the contents of the buffer for debugging purposes.
|
|
*/
|
|
void Dump();
|
|
void Dump(wxTextOutputStream& stream);
|
|
//@}
|
|
|
|
/**
|
|
Ends alignment.
|
|
*/
|
|
bool EndAlignment();
|
|
|
|
/**
|
|
Ends all styles that have been started with a Begin... command.
|
|
*/
|
|
virtual bool EndAllStyles();
|
|
|
|
/**
|
|
Ends collapsing undo/redo commands, and submits the combined command.
|
|
*/
|
|
virtual bool EndBatchUndo();
|
|
|
|
/**
|
|
Ends using bold.
|
|
*/
|
|
bool EndBold();
|
|
|
|
/**
|
|
Ends using the named character style.
|
|
*/
|
|
bool EndCharacterStyle();
|
|
|
|
/**
|
|
Ends using a font.
|
|
*/
|
|
bool EndFont();
|
|
|
|
/**
|
|
Ends using a point size.
|
|
*/
|
|
bool EndFontSize();
|
|
|
|
/**
|
|
Ends using italic.
|
|
*/
|
|
bool EndItalic();
|
|
|
|
/**
|
|
Ends using a left indent.
|
|
*/
|
|
bool EndLeftIndent();
|
|
|
|
/**
|
|
Ends using a line spacing.
|
|
*/
|
|
bool EndLineSpacing();
|
|
|
|
/**
|
|
Ends using a specified list style.
|
|
*/
|
|
bool EndListStyle();
|
|
|
|
/**
|
|
Ends a numbered bullet.
|
|
*/
|
|
bool EndNumberedBullet();
|
|
|
|
/**
|
|
Ends paragraph spacing.
|
|
*/
|
|
bool EndParagraphSpacing();
|
|
|
|
/**
|
|
Ends applying a named character style.
|
|
*/
|
|
bool EndParagraphStyle();
|
|
|
|
/**
|
|
Ends using a right indent.
|
|
*/
|
|
bool EndRightIndent();
|
|
|
|
/**
|
|
Ends using a standard bullet.
|
|
*/
|
|
bool EndStandardBullet();
|
|
|
|
/**
|
|
Ends the current style.
|
|
*/
|
|
virtual bool EndStyle();
|
|
|
|
/**
|
|
Ends suppressing undo/redo commands.
|
|
*/
|
|
virtual bool EndSuppressUndo();
|
|
|
|
/**
|
|
Ends using a symbol bullet.
|
|
*/
|
|
bool EndSymbolBullet();
|
|
|
|
/**
|
|
Ends using a text foreground colour.
|
|
*/
|
|
bool EndTextColour();
|
|
|
|
/**
|
|
Ends applying a URL.
|
|
*/
|
|
bool EndURL();
|
|
|
|
/**
|
|
Ends using underline.
|
|
*/
|
|
bool EndUnderline();
|
|
|
|
/**
|
|
Finds a handler by type.
|
|
*/
|
|
static wxRichTextFileHandler* FindHandler(wxRichTextFileType imageType);
|
|
|
|
/**
|
|
Finds a handler by extension and type.
|
|
*/
|
|
static wxRichTextFileHandler* FindHandler(const wxString& extension, wxRichTextFileType imageType);
|
|
|
|
/**
|
|
Finds a handler by name.
|
|
*/
|
|
static wxRichTextFileHandler* FindHandler(const wxString& name);
|
|
|
|
/**
|
|
Finds a handler by filename or, if supplied, type.
|
|
*/
|
|
static wxRichTextFileHandler* FindHandlerFilenameOrType(const wxString& filename, wxRichTextFileType imageType);
|
|
|
|
/**
|
|
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 wxTextAttr& GetBasicStyle() const;
|
|
|
|
/**
|
|
Gets the collapsed command.
|
|
*/
|
|
virtual wxRichTextCommand* GetBatchedCommand() const;
|
|
|
|
/**
|
|
Gets the command processor.
|
|
A text buffer always creates its own command processor when it is initialized.
|
|
*/
|
|
wxCommandProcessor* GetCommandProcessor() const;
|
|
|
|
/**
|
|
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 wxTextAttr& GetDefaultStyle() 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.
|
|
*/
|
|
static wxString GetExtWildcard(bool combine = false, bool save = false,
|
|
wxArrayInt* types = NULL);
|
|
|
|
/**
|
|
Returns the list of file handlers.
|
|
*/
|
|
static wxList& GetHandlers();
|
|
|
|
/**
|
|
Returns the object to be used to render certain aspects of the content, such as
|
|
bullets.
|
|
*/
|
|
static wxRichTextRenderer* GetRenderer();
|
|
|
|
/**
|
|
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().
|
|
*/
|
|
virtual bool GetStyle(long position, wxTextAttr& style);
|
|
|
|
/**
|
|
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,
|
|
wxTextAttr& style);
|
|
|
|
/**
|
|
Returns the current style sheet associated with the buffer, if any.
|
|
*/
|
|
virtual wxRichTextStyleSheet* GetStyleSheet() const;
|
|
|
|
/**
|
|
Get the size of the style stack, for example to check correct nesting.
|
|
*/
|
|
virtual size_t GetStyleStackSize() const;
|
|
|
|
/**
|
|
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.
|
|
*/
|
|
virtual bool GetUncombinedStyle(long position, wxTextAttr& style);
|
|
|
|
/**
|
|
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.
|
|
*/
|
|
virtual int HitTest(wxDC& dc, const wxPoint& pt, long& textPosition);
|
|
|
|
/**
|
|
Initialisation.
|
|
*/
|
|
void Init();
|
|
|
|
/**
|
|
Initialises the standard handlers.
|
|
Currently, only the plain text loading/saving handler is initialised by default.
|
|
*/
|
|
static void InitStandardHandlers();
|
|
|
|
/**
|
|
Inserts a handler at the front of the list.
|
|
*/
|
|
static void InsertHandler(wxRichTextFileHandler* handler);
|
|
|
|
/**
|
|
Submits a command to insert the given image.
|
|
*/
|
|
bool InsertImageWithUndo(long pos, const wxRichTextImageBlock& imageBlock,
|
|
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 text.
|
|
*/
|
|
bool InsertTextWithUndo(long pos, const wxString& text,
|
|
wxRichTextCtrl* ctrl, int flags = 0);
|
|
|
|
/**
|
|
Returns @true if the buffer has been modified.
|
|
*/
|
|
bool IsModified() const;
|
|
|
|
/**
|
|
Loads content from a stream.
|
|
*/
|
|
virtual bool LoadFile(wxInputStream& stream,
|
|
wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
|
|
|
|
/**
|
|
Loads content from a file.
|
|
*/
|
|
virtual bool LoadFile(const wxString& filename,
|
|
wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
|
|
|
|
/**
|
|
Marks the buffer as modified or unmodified.
|
|
*/
|
|
void Modify(bool modify = true);
|
|
|
|
//@{
|
|
/**
|
|
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()
|
|
*/
|
|
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);
|
|
//@}
|
|
|
|
/**
|
|
Pastes the clipboard content to the buffer at the given position.
|
|
*/
|
|
virtual bool PasteFromClipboard(long 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(), SetListStyle(), ClearListStyle()
|
|
*/
|
|
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);
|
|
//@}
|
|
|
|
/**
|
|
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);
|
|
|
|
/**
|
|
Removes a handler.
|
|
*/
|
|
static bool RemoveHandler(const wxString& name);
|
|
|
|
/**
|
|
Clears the buffer, adds a new blank paragraph, and clears the command history.
|
|
*/
|
|
virtual void ResetAndClearCommands();
|
|
|
|
/**
|
|
Saves content to a stream.
|
|
*/
|
|
virtual bool SaveFile(wxOutputStream& stream,
|
|
wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
|
|
|
|
/**
|
|
Saves content to a file.
|
|
*/
|
|
virtual bool SaveFile(const wxString& filename,
|
|
wxRichTextFileType type = wxRICHTEXT_TYPE_ANY);
|
|
|
|
/**
|
|
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 wxTextAttr& 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.
|
|
*/
|
|
virtual bool SetDefaultStyle(const wxTextAttr& 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().
|
|
*/
|
|
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);
|
|
//@}
|
|
|
|
/**
|
|
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);
|
|
|
|
/**
|
|
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 wxTextAttr& style,
|
|
int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
|
|
|
|
/**
|
|
Sets the current style sheet, if any.
|
|
|
|
This will allow the application to use named character and paragraph
|
|
styles found in the style sheet.
|
|
*/
|
|
void SetStyleSheet(wxRichTextStyleSheet* styleSheet);
|
|
|
|
/**
|
|
Submit an action immediately, or delay it according to whether collapsing is on.
|
|
*/
|
|
virtual bool SubmitAction(wxRichTextAction* action);
|
|
|
|
/**
|
|
Returns @true if undo suppression is currently on.
|
|
*/
|
|
virtual bool SuppressingUndo() const;
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
@class wxRichTextFileHandler
|
|
|
|
This is the base class for file handlers, for loading and/or saving content
|
|
associated with a wxRichTextBuffer.
|
|
|
|
@library{wxrichtext}
|
|
@category{richtext}
|
|
*/
|
|
class wxRichTextFileHandler : public wxObject
|
|
{
|
|
public:
|
|
/**
|
|
Constructor.
|
|
*/
|
|
wxRichTextFileHandler(const wxString& name = wxEmptyString,
|
|
const wxString& ext = wxEmptyString,
|
|
int type = 0);
|
|
|
|
/**
|
|
Override this function and return @true if this handler can we handle
|
|
@a filename.
|
|
|
|
By default, this function checks the extension.
|
|
*/
|
|
virtual bool CanHandle(const wxString& filename) const;
|
|
|
|
/**
|
|
Override and return @true if this handler can load content.
|
|
*/
|
|
virtual bool CanLoad() const;
|
|
|
|
/**
|
|
Override and return @true if this handler can save content.
|
|
*/
|
|
virtual bool CanSave() const;
|
|
|
|
/**
|
|
Returns the encoding associated with the handler (if any).
|
|
*/
|
|
const wxString& GetEncoding() const;
|
|
|
|
/**
|
|
Returns the extension associated with the handler.
|
|
*/
|
|
wxString GetExtension() const;
|
|
|
|
/**
|
|
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 GetFlags() const;
|
|
|
|
/**
|
|
Returns the name of the handler.
|
|
*/
|
|
wxString GetName() const;
|
|
|
|
/**
|
|
Returns the type of the handler.
|
|
*/
|
|
int GetType() const;
|
|
|
|
/**
|
|
Returns @true if this handler should be visible to the user.
|
|
*/
|
|
virtual bool IsVisible() const;
|
|
|
|
//@{
|
|
/**
|
|
Loads content from a stream or file.
|
|
Not all handlers will implement file loading.
|
|
*/
|
|
bool LoadFile(wxRichTextBuffer* buffer, wxInputStream& stream);
|
|
bool LoadFile(wxRichTextBuffer* buffer, const wxString& filename);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
Saves content to a stream or file.
|
|
Not all handlers will implement file saving.
|
|
*/
|
|
bool SaveFile(wxRichTextBuffer* buffer, wxOutputStream& stream);
|
|
bool SaveFile(wxRichTextBuffer* buffer, const wxString& filename);
|
|
//@}
|
|
|
|
/**
|
|
Sets the encoding to use when saving a file.
|
|
If empty, a suitable encoding is chosen.
|
|
*/
|
|
void SetEncoding(const wxString& encoding);
|
|
|
|
/**
|
|
Sets the default extension to recognise.
|
|
*/
|
|
void SetExtension(const wxString& ext);
|
|
|
|
/**
|
|
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);
|
|
|
|
/**
|
|
Sets the name of the handler.
|
|
*/
|
|
void SetName(const wxString& name);
|
|
|
|
/**
|
|
Sets the handler type.
|
|
*/
|
|
void SetType(int type);
|
|
|
|
/**
|
|
Sets whether the handler should be visible to the user (via the application's
|
|
load and save dialogs).
|
|
*/
|
|
virtual void SetVisible(bool visible);
|
|
|
|
protected:
|
|
/**
|
|
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;
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
@class wxRichTextRange
|
|
|
|
This class stores beginning and end positions for a range of data.
|
|
|
|
@library{wxrichtext}
|
|
@category{richtext}
|
|
*/
|
|
class wxRichTextRange
|
|
{
|
|
public:
|
|
//@{
|
|
/**
|
|
Constructors.
|
|
*/
|
|
wxRichTextRange(long start, long end);
|
|
wxRichTextRange(const wxRichTextRange& range);
|
|
wxRichTextRange();
|
|
//@}
|
|
|
|
/**
|
|
Destructor.
|
|
*/
|
|
~wxRichTextRange();
|
|
|
|
/**
|
|
Returns @true if the given position is within this range.
|
|
Does not match if the range is empty.
|
|
*/
|
|
bool Contains(long pos) const;
|
|
|
|
/**
|
|
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;
|
|
|
|
/**
|
|
Returns the end position.
|
|
*/
|
|
long GetEnd() const;
|
|
|
|
/**
|
|
Returns the length of the range.
|
|
*/
|
|
long GetLength() const;
|
|
|
|
/**
|
|
Returns the start of the range.
|
|
*/
|
|
long GetStart() const;
|
|
|
|
/**
|
|
Returns @true if this range is completely outside @e range.
|
|
*/
|
|
bool IsOutside(const wxRichTextRange& range) const;
|
|
|
|
/**
|
|
Returns @true if this range is completely within @e range.
|
|
*/
|
|
bool IsWithin(const wxRichTextRange& range) const;
|
|
|
|
/**
|
|
Limits this range to be within @e range.
|
|
*/
|
|
bool LimitTo(const wxRichTextRange& range);
|
|
|
|
/**
|
|
Sets the end of the range.
|
|
*/
|
|
void SetEnd(long end);
|
|
|
|
/**
|
|
Sets the range.
|
|
*/
|
|
void SetRange(long start, long end);
|
|
|
|
/**
|
|
Sets the start of the range.
|
|
*/
|
|
void SetStart(long start);
|
|
|
|
/**
|
|
Swaps the start and end.
|
|
*/
|
|
void Swap();
|
|
|
|
/**
|
|
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.
|
|
*/
|
|
wxRichTextRange ToInternal() const;
|
|
|
|
/**
|
|
Adds @a range to this range.
|
|
*/
|
|
wxRichTextRange operator+(const wxRichTextRange& range) const;
|
|
|
|
/**
|
|
Subtracts @a range from this range.
|
|
*/
|
|
wxRichTextRange operator-(const wxRichTextRange& range) const;
|
|
|
|
/**
|
|
Assigns @a range to this range.
|
|
*/
|
|
void operator=(const wxRichTextRange& range);
|
|
|
|
/**
|
|
Returns @true if @a range is the same as this range.
|
|
*/
|
|
bool operator==(const wxRichTextRange& range) const;
|
|
};
|
|
|