| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- 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
|