fe5aa22c17
sheet classes. Now merges base, paragraph and content styles dynamically on display or layout so that we can distinguish between them. This means appling a paragraph style that has character formatting doesn't wipe out the original content formatting. The old-style static method can be enabled by setting wxRICHTEXT_USE_DYNAMIC_STYLES to 0 in richtextbuffer.h. The default style is initially empty, so that adding text reflects the base and paragraph styles. Setting the default style doesn't merge with the previous setting, but BeginStyle does. Adding new paragraphs is now sensitive to the previous paragraph's style and also whether its style has a next-paragraph style indication. Added wxRichTextCtrl::ApplyStyleSheet which reapplies styles to paragraphs with named styles. Added style application command to sample to demonstrate how styles can be changed and reapplied without affecting content character formatting. Fixed some range bugs in UI feedback and clipboard copying and pasting. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41501 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 |
||
---|---|---|
.. | ||
bitmaps | ||
makefile.bcc | ||
makefile.gcc | ||
Makefile.in | ||
makefile.vc | ||
makefile.wat | ||
readme.txt | ||
richtext.bkl | ||
richtext.cpp | ||
richtext.dsp | ||
todo.txt |
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