
wxRichTextCtrl To-Do List
=========================


BUGS:
=====

- Setting selection with mouse sometimes causes negative selection
  lengths. See wxRichTextCtrl::ExtendSelection.
- Word forward can miss first word on line.
- Doesn't correctly undo deletion of bulleted paragraphs.
- Sizing doesn't restore the scroll position correctly (related
  to the use of buffer layout optimization and OnIdle full layout.)


IMPROVEMENTS:
=============

- Add bakefiles, choose location for further development - wxCode or wxWidgets.
- Document.
- Rework scrolling code so (a) can scroll one line at a time (uneven
  scroll increments and (b) can derive from wxTextCtrl if this is desirable.
- Implement auto-scroll when selecting.
- Implement auto-wrap option (currently it's always on) with option for
  horizontal scrollbars.
- Implement overwrite mode.
- Collapse multiple keystrokes into single undo command.
- Unicode adaptation (e.g. in OnChar).
- Implement "Paste Special".
- Pass wxRichTextDrawContext to Draw and Layout with data such as
  selection colour.
- Have virtual functions for customisation, e.g. CreateTextObject, CreateImageObject,
  CreateParagraph object. Should be a separate factory object that can be
  plugged in.
- Implement more event generation.
- Implement roman numerals in bullet points.
- Make as wxTextCtrl-compatible as possible.
- Allow use as single-line edit control, so potentially the class can
  replace both wxUniversal wxTextCtrl implementations.
- Adjust behaviour on each platform to conform to native standards.
  This might be a run-time option.
- Custom attributes (simply add an integer field to wxRichTextAttr and
  maybe wxTextAttrEx).
- Improve image support: margins, resizing, storage of image as native format
  data (e.g. JPEG) so no lossiness.
- Ensure read-only mode works.
- Don't store whole paragraph in Undo stack if just changing the paragraph's style.
- Use binary chop to find character position for (x,y).
- Allow specification of word separators, and whether hyphenation will be done
  (language-dependent).


API ISSUES:
===========

- Consider whether to merge wxTextAttrEx with wxTextAttr.
- Implementation-independent API for traversing rich text controls, e.g. getting spans
  of text, retrieving images, etc.
- FindString: search for a substring within a range, returning a range. Will make it
  easy to add styles to text you just added.
- WriteString, WriteImage should really return a range. However, can query insertion point.
- Bullets: suggest we are able to specify symbols in a specific named font
  (maybe keep mapping from name to actual symbol font in style manager).
  We wouldn't want to store a wxFont with each paragraph, just for the symbol,
  since this will be inefficient. If no font is specified, use the font
  for this paragraph.
  Also allow bitmaps to be specified for bullets.
- For adding floating text boxes and images, suggest e.g.
  bool wxRichTextBuffer::AddFloatingImage(long paragraphPosition, const wxImage& image);


FEATURES:
=========

- XML I/O (a prototype implementation done, maybe the syntax/verbosity could be improved)
- HTML (I)/O and clipboard support
- RTF (I)/O and clipboard support
- OpenOffice.org I/O
- C++ output, i.e. generate set of buffer commands from a buffer
  so that the data can be included in an app, possibly with translation.
- Line breaks. How will we implement these? Suggest special non-ASCII code.
- Hard (non-breaking) spaces. Insert special code in text string. Shift-Return.
- Borders on paragraphs, with special attention to how they join up.
- Bitmap bullets.
- Tab stops, with ruler display.
- Rules (lines).
- Hyperlinks.
- Ready-made find and replace implementation
- Ready-made toolbars, standard identifiers.
- Floating text boxes and images, with appropriate wrapping: have a separate list of
  these, and when formatting each line, simply restrict the available space accordingly.
  Boxes can optionally be tied to a paragraph so they move relative to it (may need to introduce
  paragraph identifiers for that).
- Set of convenience controls and dialogs including wxRichTextStyleListBox,
  wxRichTextParagraphFormattingDialog, wxRichTextStyleEditorDialog,
  wxRichTextBulletDialog, wxRichTextInsertSymbolDialog, wxRichTextTabsDialog
  (also displayed as a page on wxRichTextParagraphFormattingDialog),
- Template manager.

- ADVANCED: Implement tables. This is a kind of paragraph that knows how to lay
            out a 2D grid of paragraph layout boxes. A few assumptions
            about the hierarchy will need correcting but in general, paragraph
            layout is self-contained and should just work within table cells.
- ADVANCED: Implement printing, including headers and footers.
- ADVANCED: Implement page view mode where pagination is shown while editing.
- ADVANCED: Field codes that can be hidden/shown: for example, cross-references,
            HTML links, page number, heading number, etc.
- ADVANCED: Implement justification, by distributing space over the line (draw one
            word at a time but store in the usual way).
- ADVANCED: Implement headings.
- ADVANCED: Zoom.
- ADVANCED: Versioning and markup facility (for e.g. collaboration).
- ADVANCED: Columns.
- ADVANCED: Table of contents, index.
- ADVANCED: Autocorrect.


DEMO:
=====

- Drop-down lists for style, face, font size.
- Rework formatting icons.

