git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57992 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()
 | |
|     */
 | |
|     virtual 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;
 | |
| };
 | |
| 
 |