Files
wxWidgets/samples/richtext
Vadim Zeitlin 0a6523c4d9
Unix builds / Ubuntu 18.04 wxGTK 3 compatible 3.0 (push) Has been cancelled
Unix builds / Ubuntu 24.04 wxGTK ASAN not compatible (push) Has been cancelled
Unix builds / Ubuntu 18.04 wxGTK UTF-8 (push) Has been cancelled
Unix builds / Ubuntu 18.04 wxQt (push) Has been cancelled
Unix builds / Ubuntu 18.04 wxX11 (push) Has been cancelled
Unix builds / Ubuntu 20.04 wxGTK 3 with clang (push) Has been cancelled
Unix builds / Ubuntu 22.04 wxGTK with wx containers (push) Has been cancelled
Unix builds / Ubuntu 24.04 wxGTK UBSAN (push) Has been cancelled
Unix builds / Ubuntu 18.04 wxDFB (push) Has been cancelled
Unix builds / Ubuntu 18.04 wxGTK 3 static with gcc 4.8 (push) Has been cancelled
Unix builds / Ubuntu 18.04 wxGTK 2 (push) Has been cancelled
CMake builds / Ubuntu 22.04 wxGTK 3 (push) Has been cancelled
CMake builds / MSW/MSVC wxMSW (push) Has been cancelled
CMake builds / MSW/Clang wxMSW (push) Has been cancelled
CMake builds / macOS latest wxOSX Ninja (push) Has been cancelled
CMake builds / macOS 14 wxOSX Xcode (push) Has been cancelled
CMake builds / macOS 14 wxIOS (push) Has been cancelled
CMake builds / MSW/MSVC wxQt 5.15 (push) Has been cancelled
CMake builds / MSW/MSVC wxQt 6.10 (push) Has been cancelled
Mac builds / wxMac ARM ASAN not compatible (push) Has been cancelled
Mac builds / wxMac Universal C++14 (push) Has been cancelled
Mac builds / wxiOS Simulator on Silicon Mac (push) Has been cancelled
Mac builds / wxiOS (push) Has been cancelled
Mac builds / wxMac Intel C++17 (push) Has been cancelled
Mac Xcode builds / iOS Simulator static (push) Has been cancelled
Mac Xcode builds / macOS dynamic Release (push) Has been cancelled
Mac Xcode builds / iOS static Debug (push) Has been cancelled
MSW builds / wxMSW vs2022 DLL Debug x64 (push) Has been cancelled
MSW builds / wxMSW vs2022 DLL Release x64 (push) Has been cancelled
MSW builds / wxMSW vs2022 Debug Win32 (push) Has been cancelled
MSW builds / wxMSW vs2022 Release arm64 (push) Has been cancelled
MSW cross-builds / wxMSW 64 bits not compatible (push) Has been cancelled
MSW cross-builds / wxMSW/Univ (push) Has been cancelled
MSW cross-builds / wxMSW 32 bits (push) Has been cancelled
Code Checks / Check Spelling (push) Has been cancelled
Code Checks / Check Whitespace (push) Has been cancelled
Code Checks / Check Mixed EOL (push) Has been cancelled
Code Checks / Check C++ Style (push) Has been cancelled
Code Checks / Check All Headers In allheaders.h (push) Has been cancelled
Update Documentation / Update Online Documentation (push) Has been cancelled
No Response / no-response (push) Has been cancelled
Update copyright years to 2025
Just run misc/scripts/inc_year and commit the results.

See #18690.
2026-01-01 17:40:18 +01:00
..
2025-05-10 18:22:27 +02:00
2026-01-01 17:40:18 +01:00
2025-05-10 18:22:27 +02:00
2025-05-10 18:06:41 +02:00

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