Tk Library Source Code

Documentation
Login
Bounty program for improvements to Tcl and certain Tcl packages.


[ Main Table Of Contents | Table Of Contents | Keyword Index | Categories | Modules | Applications ]

NAME

widgetPlus - Enhanced Entry, Spinbox, and Combobox Widgets with Undo/Redo and other useful features

Table Of Contents

SYNOPSIS

package require Tcl 8.5
package require Tk 8.5
package require snit
package require widgetPlus ?1.0?

widgetPlus::entryPlus ?create? pathName
widgetPlus::spinboxPlus ?create? pathName
widgetPlus::ttkEntryPlus ?create? pathName
widgetPlus::ttkSpinboxPlus ?create? pathName
widgetPlus::ttkComboboxPlus ?create? pathName
widgetPlus::EnableBWidget
pathName edit ?arg arg ...?
pathName edit canredo
pathName edit canundo
pathName edit modified ?boolean?
pathName edit redo
pathName edit reset
pathName edit separator
pathName edit undo

DESCRIPTION

The widgetPlus package adds new features to the widgets _entry_, _spinbox_, _ttk::entry_, _ttk::spinbox_, and _ttk::combobox_.

The new features are Undo and Redo operations, a <> event, and for the Tk (unthemed) widgets an -inactiveselectbackground option, and some minor fixes to bindings. The new facilities closely follow those of the _text_ widget.

The revised _entry_, _spinbox_, _ttk::entry_, _ttk::spinbox_, and _ttk::combobox_ widgets are created by the commands widgetPlus::entryPlus, widgetPlus::spinboxPlus, widgetPlus::ttkEntryPlus, widgetPlus::ttkSpinboxPlus, and widgetPlus::ttkComboboxPlus respectively.

For example, the widgetPlus::entryPlus widget is implemented as a Snit snit::widgetadaptor that wraps a Tk _entry_ widget. Its winfo class is Entry, and it uses a binding tag EntryPlus that replaces the Entry binding tag. The other widgets are implemented in a similar way.

The package uses the namespace ::widgetPlus, which exports (only) the five commands defined below that begin with a lower-case letter (EnableBWidget is not exported). These commands can be imported into the global namespace, and for simplicity, descriptive text in this manual will henceforth omit the namespace qualifier.

namespace import ::widgetPlus::*

WIDGET OPTIONS

In addition to the usual options of the _entry_, _spinbox_, _ttk::entry_, _ttk::spinbox_, and _ttk::combobox_ widgets, the wrappers _entryPlus_, _spinboxPlus_, _ttkEntryPlus_, _ttkSpinboxPlus_, and _ttkComboboxPlus_ provide the options below.

COMMANDS

WIDGET COMMANDS

In addition to the usual commands of the _entry_, _spinbox_, _ttk::entry_, _ttk::spinbox_, and _ttk::combobox_ widgets, the wrappers _entryPlus_, _ttkEntryPlus_, _spinboxPlus_, _ttkSpinboxPlus_, and _ttkComboboxPlus_ provide:

BINDINGS

Class Bindings

The class binding tag for different widgets has these default values:

Undo and Redo

The <> and <> virtual events are mapped to these keyboard events:

EntryPlus

The EntryPlus bindings are based on those of the Entry bindtag, with these changes:

SpinboxPlus

The SpinboxPlus bindings are based on those of the Spinbox bindtag, with the same changes as are made when converting Entry to EntryPlus.

TEntryPlus

The TEntryPlus bindings are based on those of the TEntry bindtag, with these changes:

TSpinboxPlus

The TSpinboxPlus bindings are based on those of the TSpinbox bindtag, with these changes:

TComboboxPlus

The TComboboxPlus bindings are based on those of the TCombobox bindtag, with these changes:

VIRTUAL EVENT <>

Each widgetPlus widget generates a virtual event <> whenever the value of its selection changes. This allows other Tcl code, for example the package persistentSelection, to monitor the selection in these widgets.

USE WITH MEGAWIDGETS

When an _entry_, _spinbox_, _ttk::entry_, _ttk::spinbox_, or _ttk::combobox_ is a component of a megawidget, it is often possible to apply widgetPlus to that component without modifying the megawidget code.

combobox (by Bryan Oakley)

A _combobox_ with path $w includes an _entry_ widget $w.entry, which uses the Entry binding tag. Thus widgetPlus can be applied to the _combobox_ after creation, using the command (see EXAMPLES)

entryPlus $w.entry -undo 1 -maxundo 0

ComboBox (BWidget)

A BWidget ComboBox with path $w includes an _entry_ widget $w.e, which uses the BwEntry binding tag in place of the default tag Entry.

Package widgetPlus provides a replacement bindtag BwEntryPlus, but this is not computed when the package is loaded because it requires BWidget to be loaded first. The command ::widgetPlus::EnableBWidget must be called to provide BwEntryPlus, and then the BWidget ComboBox can be modified (see EXAMPLES)

::widgetPlus::EnableBWidget
entryPlus $w.e -undo 1 -maxundo 0

TO DO

BUGS

This version of widgetPlus is intended to be compatible with all releases of Tk 8.5 and 8.6, and with the branches core-8-5-branch, core-8-6-branch, and trunk in the source code repository for Tk. Any incompatibility with any of these versions, for any Tk windowing system, should be reported as a bug. Please report such in the category widgetPlus of the Tklib Trackers.

EXAMPLES

To create and map an _entryPlus_ widget .ep with an unlimited Undo/Redo stack:

package require widgetPlus
widgetPlus::entryPlus .ep -undo 1 -maxundo 0
pack .ep

The same but using namespace import:

package require widgetPlus
namespace import widgetPlus::*
entryPlus .ep -undo 1 -maxundo 0
pack .ep

To convert an existing _entry_ widget .ee into an _entryPlus_ with an unlimited Undo/Redo stack:

entry .ee

    .
    .
    .

package require widgetPlus
widgetPlus::entryPlus .ee -undo 1 -maxundo 0

The same but using namespace import:

entry .ee

    .
    .
    .

package require widgetPlus
namespace import widgetPlus::*
entryPlus .ee -undo 1 -maxundo 0

Apply widgetPlus to a Bryan Oakley _combobox_:

package require combobox
combobox::combobox .cb

    .
    .
    .

package require widgetPlus
namespace import widgetPlus::*
entryPlus .cb.entry -undo 1 -maxundo 0

Apply widgetPlus to a BWidget _ComboBox_. The command ::widgetPlus::EnableBWidget must be called first.

package require BWidget
ComboBox .cb

    .
    .
    .

package require widgetPlus
::widgetPlus::EnableBWidget
namespace import widgetPlus::*

entryPlus .cb.e -undo 1 -maxundo 0

Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such in the category widgetPlus of the Tklib Trackers. Please also report any ideas for enhancements you may have for either package and/or documentation.

SEE ALSO

BWidget, ComboBox, Entry, entry, persistentSelection, spinbox, text, ttk::combobox, ttk::entry, ttk::spinbox