> ### Summary > > This PR adds support for controlling tab stops: the `TAB_STOPS` paragraph > attribute and the `defaultTabStops` property in the `RichTextModel`. > > While adding the paragraph attribute is a trivial process, adding a > model-wide property requires adding of a mechanism to support document > properties (something that was originally omitted in the first incubating > release). Using the document properties, we can now persist not only the > default tab stops, but also provide the version umber for the storage format > provided by the `RichTextFormatHandler`, which will enable support the format > evolution in the future [0]. > > To showcase the feature, the `RichEditorDemoApp` gains a visual ruler and > additional dialogs and menus. > > <img width="822" height="381" alt="Screenshot 2026-03-04 at 14 00 30" > src="https://github.com/user-attachments/assets/32251846-f11a-4e87-b74a-44c21d629550" > /> > > > ### Paragraph Attribute > > Paragraph-specific tab stops are enabled by: > > - `StyleAttributeMap.TAB_STOPS` constant > - `StyleAttributeMap.Builder.setTabStops(double ... positions)` > > ### Default Tab Stops > > After the last paragraph tab stop, or when no paragraph tab stops is set, the > document provides a way to set default tab stops via the model's > `defaultTabStops` property: > > These changes support the new property and other document properties: > > - document-wide properties support in the `StyledTextModel` base class > - `defaultTabStops` property in the `RichTextModel` and > `RichTextFormatHandler` > - document properties `VERSION` and `DEFAULT_TAB_STOPS` > - `StyledSegment`: `ofDocumentProperties()` factory, `getDocumentProperties()` > > ### Other Improvements > > A number of other improvements were made along with the tab stop related > changes: > > - `character()`, `paragraph()`, and `document()` factory methods in the > `StyleAttribute` class > - `isCharacterAttribute()`, `isParagraphAttribute()`, and > `isDocumentAttribute()` methods in the `StyleAttribute` class > - `RichTextArea`: `documentArea` read-only property > > ### Dependencies > > https://bugs.openjdk.org/browse/JDK-8373936 > > ### Questions to the Reviewers > > - should the informational note [0] be added to the repo, and where? maybe > under `doc-files/controls/RichTextArea` ? > > ### References > > [0] [Rich Text Area (Incubator) Data Format Version > 2](https://github.com/andy-goryachev-oracle/jfx/blob/8356042.ruler/doc-files/controls/RichTextArea/RichTextArea_DataFormat_v2.md)
Andy Goryachev has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 168 commits: - doc - change listener - Merge branch 'master' into 8356042.ruler - new document - file - doc - Merge branch 'master' into 8356042.ruler - review comments - Merge branch 'master' into 8356042.ruler - Merge branch 'master' into 8356042.ruler - ... and 158 more: https://git.openjdk.org/jfx/compare/9c0228bb...be8cc538 ------------- Changes: https://git.openjdk.org/jfx/pull/1800/files Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1800&range=05 Stats: 2075 lines in 34 files changed: 1879 ins; 74 del; 122 mod Patch: https://git.openjdk.org/jfx/pull/1800.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/1800/head:pull/1800 PR: https://git.openjdk.org/jfx/pull/1800
