git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35949 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			101 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
| wxRichTextCtrl README
 | |
| =====================
 | |
| 
 | |
| Welcome to wxRichTextCtrl. It includes the following functionality:
 | |
| 
 | |
| * Text entry, paragraph wrapping
 | |
| 
 | |
| * Scrolling, keyboard navigation
 | |
| 
 | |
| * Application of character styles:
 | |
| 
 | |
|   bold, italic, underlined, font face, text colour
 | |
| 
 | |
| * Application of paragraph styles:
 | |
| 
 | |
|   left/right indentation, sub-indentation (first-line indent),
 | |
|   paragraph spacing (before and after), line spacing,
 | |
|   left/centre/right alignment, numbered bullets
 | |
| 
 | |
| * Insertion of images
 | |
| 
 | |
| * Copy/paste
 | |
| 
 | |
| * Undo/Redo with optional batching and undo history suppression
 | |
| 
 | |
| * Named paragraph and character styles management and application
 | |
| 
 | |
| * File handlers allow addition of file formats
 | |
| 
 | |
| * Text saving and loading, XML saving and loading, HTML saving (unfinished)
 | |
| 
 | |
| Sorry, this is a Windows-only demo for now but the code should
 | |
| compile on other platforms.
 | |
| 
 | |
| Design
 | |
| ======
 | |
| 
 | |
| 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 will be a single box representing the document,
 | |
| and this box will 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.
 | |
| 
 | |
| Before display, a changed buffer must have Layout() called on it,
 | |
| to do wrapping, alignment etc. Ranges representing wrapped lines are stored
 | |
| with each paragraph.
 | |
| 
 | |
| Since wxRichTextBuffer is separate from wxRichTextCtrl, the storage
 | |
| and rendering facilities can be used by other controls.
 | |
| 
 | |
| API
 | |
| ===
 | |
| 
 | |
| It's basically the wxTextCtrl with some additions. There is a new
 | |
| wxTextAttrEx class deriving from wxTextAttr, to accomodate new
 | |
| style attributes. This could be merged with wxTextAttr. There
 | |
| is also a wxRichTextAttr which is similar to wxTextAttrEx but
 | |
| doesn't store the font as a wxFont: this allows much more
 | |
| efficient operations, especially when querying styles in a
 | |
| UI update handler. We would not want to create several new wxFonts
 | |
| when querying for italics, bold, etc. every few milliseconds.
 | |
| 
 | |
| See "Functionality specific to wxRichTextCtrl" section in richtextctrl.h.
 | |
| 
 | |
| One addition is Set/GetBasicStyle, which is needed in addition to
 | |
| Set/GetDefaultStyle to get the overall style for the buffer
 | |
| from which content will inherit (after apply the default style).
 | |
| 
 | |
| wxRichTextRange is a new class representing start and end positions.
 | |
| It's used in the implementation so that pieces of content
 | |
| know their range, and also in the API in preference to using
 | |
| two positions.
 | |
| 
 | |
| What next?
 | |
| ==========
 | |
| 
 | |
| - Decision about where to put it: wxCode, wxWidgets
 | |
| - Makefiles/bakefiles
 | |
| - Refining the API
 | |
| - Documentation
 | |
| - Bug fixing/improvements
 | |
| 
 | |
| 
 | |
| See todo.txt for a list of bugs, improvements and features,
 | |
| and also TODO throughout the source.
 | |
| 
 | |
| ==
 | |
| Julian Smart, October 18th 2005
 |