TIP 553: Ellipses: the Alternative to Scrolling and Wrapping

Login
Bounty program for improvements to Tcl and certain Tcl packages.
    Author:         Donal K. Fellows <[email protected]>
    State:          Draft
    Type:           Project
    Vote:           Pending
    Created:        07-Nov-2019
    Post-History:
    Tcl-Version:    8.7
    Keywords:       Tk, label, listbox, entry

Abstract

This TIP proposes a mechanism for getting Tk widgets to insert an ellipsis instead of wrapping or scrolling (in widgets where this makes sense) a line of text.

Rationale

Adding an ellipsis when a piece of text is too wide to be shown in its entirety is a common modern GUI idiom, and one that is relatively easily implemented in Tcl/Tk as is. However, we do this in general by measuring the text (with font measure) by hand and determining where the ellipsis should be inserted, and then modifying the text itself to insert the ellipsis. This makes it difficult to make the position of the ellipsis change as the width of the widget changes, as we have to add code that observes the change to the View (via a <Configure> event on the widget) and update the Model in response, despite the true underlying Model not changing at all.

Instead, we should have the widgets do the work for us, so that we can just indicate what the true text is and tell Tk that it should insert ellipses as and where required without further user intervention.

Specification

When a widget supports applying an ellipsis, it will take a new option, -ellipsis, that will allow the specification of an ellipsis (as a string; there are multiple ways of expressing an ellipsis, and the right choice depends on other features of the interface) that gives a symbol to use after trimming off the text at a character boundary in order for the text including the ellipsis to fit inside the widget's width.

For label-based widgets (i.e., labels, buttons, checkbuttons, radiobuttons) the existing -wraplength will be used as the limit width for ellipsis insertion, where defined. Otherwise the width of the text part of the widget (based on the widget width and the impact of any compound images) will be used.

For the entry-based and listbox-based widgets (including spinboxes and comboboxes) the widget width will be used.

Note that the ellipsis insertion code will always use the font set in the widget, and widgets that are so narrow that they cannot display the ellipsis itself may look strange.

Implementation

To be done.

Copyright

This document is placed in public domain.