On Wed, 10 Apr 2024 21:25:10 GMT, Andy Goryachev <ango...@openjdk.org> wrote:

>> Adds **Labeled.textTruncated** property which indicates when the text is 
>> visually truncated (and the ellipsis string is inserted) in order to fit the 
>> available width.
>> 
>> The new property reacts to changes in the following properties:
>> - ellipsisString
>> - font
>> - height
>> - text
>> - width
>> - wrapText
>> 
>> I don't think it's worth creating a headful test (headless won't work) due 
>> to relative simplicity of the code.
>> 
>> **Alternative**
>> 
>> The desired functionality can be just as easily achieved on an application 
>> level, by adding a similar property to a subclass.  What is the benefit of 
>> adding this functionality to the core?
>> 
>> UPDATE 2024/03/07: turns out Labeled in a TableView (in a TreeTableView as 
>> well) lives by different rules (TableCellSkinBase:152, 
>> TreeTableCellSkin:126).  The consequence of this is that the new 
>> functionality **cannot** be fully implemented with the public APIs alone.
>> 
>> **See Also**
>> 
>> * [JDK-8327483](https://bugs.openjdk.org/browse/JDK-8327483) TreeView: Allow 
>> for tooltip when cell text is truncated
>> * [JDK-8205211](https://bugs.openjdk.org/browse/JDK-8205211) Ability to show 
>> Tooltip only when text is shown with ellipsis (...)
>
> Andy Goryachev has updated the pull request with a new target base due to a 
> merge or a rebase. The pull request now contains 15 commits:
> 
>  - missing )
>  - review comments
>  - Merge branch 'master' into 8092102.truncated
>  - add exports
>  - added unit tests
>  - Merge remote-tracking branch 'origin/master' into 8092102.truncated
>  - test
>  - Merge remote-tracking branch 'origin/master' into 8092102.truncated
>  - Merge branch 'master' into 8092102.truncated
>  - labeled helper
>  - ... and 5 more: https://git.openjdk.org/jfx/compare/0eb4d719...aa28eb4e

The API changes look good. I left a couple comments on the API docs.

I also left a couple questions / comments on the fix and test. I haven't tested 
it yet.

modules/javafx.controls/src/main/java/com/sun/javafx/scene/control/LabeledHelper.java
 line 33:

> 31:  * Labeled Helper.
> 32:  */
> 33: public class LabeledHelper {

You might consider making `LabeledHelper` a subclass of `ControlHelper`, which 
is the usual pattern for helper classes of nodes, although it may not matter 
here (and could be done later if there was a need).

modules/javafx.controls/src/main/java/com/sun/javafx/scene/control/LabeledHelper.java
 line 62:

> 60:      * @return true to use the actual content width, false to delegate to 
> the parent
> 61:      */
> 62:     public static boolean isUseActualContentWidth() {

If you make the `useActualContentWidth` flag an instance variable of `Labeled` 
(see my comment in that class), then you would need to add the `Labeled` as an 
argument to this method (here and in the accessor method).

modules/javafx.controls/src/main/java/javafx/scene/control/Labeled.java line 
114:

> 112:      * by itself looks rather weird.
> 113:      */
> 114:     private static boolean useActualContentWidth;

Even given your comment about why it's safe to use a global variable, wouldn't 
it be cleaner to make it an instance variable? I suppose it might be OK to keep 
it global, but only if you can show that there are no issues with reentrancy.

modules/javafx.controls/src/main/java/javafx/scene/control/Labeled.java line 
848:

> 846:     /**
> 847:      * Indicates whether the text has been truncated
> 848:      * when it cannot fit into the available width.

"when" --> "because"

modules/javafx.controls/src/main/java/javafx/scene/control/Labeled.java line 
850:

> 848:      * when it cannot fit into the available width.
> 849:      * <p>
> 850:      * When truncated, the {@link #ellipsisStringProperty() ellipsis 
> string}

I recommend either using `@linkplain` or changing the text to `ellipsisString`, 
matching the name of the property.

modules/javafx.controls/src/test/java/test/javafx/scene/control/LabeledTruncatedTest.java
 line 45:

> 43:  * in their skins to different code paths.
> 44:  */
> 45: public class LabeledTruncatedTest {

It might be worth adding a test for `Button`.

modules/javafx.controls/src/test/java/test/javafx/scene/control/LabeledTruncatedTest.java
 line 93:

> 91:         firePulse();
> 92: 
> 93:         assertFalse(control.isTextTruncated());

Can you add a test for the case where we are wrapping and the preferred height 
is exceeded?

-------------

PR Review: https://git.openjdk.org/jfx/pull/1389#pullrequestreview-2036421013
PR Review Comment: https://git.openjdk.org/jfx/pull/1389#discussion_r1588087048
PR Review Comment: https://git.openjdk.org/jfx/pull/1389#discussion_r1588090900
PR Review Comment: https://git.openjdk.org/jfx/pull/1389#discussion_r1588033608
PR Review Comment: https://git.openjdk.org/jfx/pull/1389#discussion_r1588065486
PR Review Comment: https://git.openjdk.org/jfx/pull/1389#discussion_r1588067300
PR Review Comment: https://git.openjdk.org/jfx/pull/1389#discussion_r1588112499
PR Review Comment: https://git.openjdk.org/jfx/pull/1389#discussion_r1588113855

Reply via email to