plucky (3) widgetPlus.3tk.gz

Provided by: tklib_0.9-1_all bug

NAME

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

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 <<Selection>> 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.

       Command-Line Switch:    -inactiveselectbackground
       Database Name:          inactiveSelectBackground
       Database Class:         Foreground

              Specifies  the  color  to  use for the selection when the window does not have the input focus. If
              empty,  {},  then  no  selection  is  shown  when  the  window  does  not  have  the  focus.   The
              -inactiveselectbackground  option  has  no  effect  on  the  Ttk  (themed)  widgets  ttkEntryPlus,
              ttkSpinboxPlus, and ttkComboboxPlus.

       Command-Line Switch:    -maxundo
       Database Name:          maxUndo
       Database Class:         MaxUndo

              Specifies the maximum number of compound undo actions on the undo stack.  A  zero  or  a  negative
              value imply an unlimited undo stack.

       Command-Line Switch:    -undo
       Database Name:          undo
       Database Class:         Undo

              Specifies a boolean that says whether the undo mechanism is active or not.

COMMANDS

       widgetPlus::entryPlus ?create? pathName
              Create an entryPlus widget; or convert an existing entry widget into an entryPlus.

       widgetPlus::spinboxPlus ?create? pathName
              Create a spinboxPlus widget; or convert an existing spinbox widget into a spinboxPlus.

       widgetPlus::ttkEntryPlus ?create? pathName
              Create a ttkEntryPlus widget; or convert an existing ttk::entry widget into a ttkEntryPlus.

       widgetPlus::ttkSpinboxPlus ?create? pathName
              Create a ttkSpinboxPlus widget; or convert an existing ttk::spinbox widget into a ttkSpinboxPlus.

       widgetPlus::ttkComboboxPlus ?create? pathName
              Create   a   ttkComboboxPlus   widget;   or  convert  an  existing  ttk::combobox  widget  into  a
              ttkComboboxPlus.

       widgetPlus::EnableBWidget
              Enable widgetPlus to modify BWidget Entry  widgets  and  their  compounds  (such  as  the  BWidget
              ComboBox).   The  command  creates  a  bindtag BwEntryPlus to replace the default bindtag BwEntry.
              This operation is not performed when the package is loaded  because  it  requires  BWidget  to  be
              loaded first.  This command is not exported from namespace ::widgetPlus.

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:

       pathName edit ?arg arg ...?
              This command controls the undo mechanism and the modified flag. The exact behavior of the  command
              depends  on the option argument that follows the edit argument. The following forms of the command
              are currently supported:

       pathName edit canredo
              Returns a boolean true if redo is possible, i.e. when the  redo  stack  is  not  empty.  Otherwise
              returns false.

       pathName edit canundo
              Returns  a  boolean  true  if  undo  is possible, i.e. when the undo stack is not empty. Otherwise
              returns false.

       pathName edit modified ?boolean?
              If boolean is not specified, returns the modified flag of the widget.  The  insert,  delete,  edit
              undo  and  edit  redo commands, or (by using this command) the user, can set or clear the modified
              flag. If boolean is specified, sets the modified flag of the widget to boolean.

       pathName edit redo
              When the -undo option is true, reapplies the last undone edits provided no other edits  were  done
              since then. Generates an error when the redo stack is empty. Does nothing when the -undo option is
              false.

       pathName edit reset
              Clears the undo stack and redo stack.

       pathName edit separator
              Included for completeness, but has no effect.

              (N.B. An implicit separator is added to the undo stack for each call to  a  widget  command  (e.g.
              insert  or  delete)  that  changes  the widget contents.  These therefore separate the addition or
              removal of individual characters by typing, except that cut or paste operations are discrete.)

       pathName edit undo
              Undoes the last edit action when the -undo option is true. An edit action is defined as  a  single
              insert  or  delete  command  that  is recorded on the undo stack. Generates an error when the undo
              stack is empty. Does nothing when the -undo option is false.

BINDINGS

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

       •      entry           uses Entryspinbox         uses Spinboxttk::entry      uses TEntryttk::spinbox    uses TSpinboxttk::combobox   uses TComboboxentryPlus       uses EntryPlusspinboxPlus     uses SpinboxPlusttkEntryPlus    uses TEntryPlusttkSpinboxPlus  uses TSpinboxPlusttkComboboxPlus uses TComboboxPlus

   UNDO AND REDO
       The <<Undo>> and <<Redo>> virtual events are mapped to these keyboard events:

       •      On X11 systems (Linux®, BSD®, Solaris®, etc):

              •      <<Undo>> is mapped to <Control-z><<Redo>> is mapped to <Control-Shift-z>

       •      On Windows® systems:

              •      <<Undo>> is mapped to <Control-z><<Redo>> is mapped to <Control-y>

       •      On Aqua® systems (i.e. Apple® macOS® or OS X®):

              •      <<Undo>> is mapped to <Command-z><<Redo>> is mapped to <Command-Shift-z>

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

       •      New bindings to <<Undo>> and <<Redo>>.

       •      An adjustment to the <<Paste>> binding, so that it behaves  the  same  way  on  X11  as  on  other
              windowing systems (i.e. it deletes the existing selection, if any exists).

       •      The removal of the antiquated <Insert> binding.

       •      New   bindings   to   <FocusIn>   and   <FocusOut>,   to  facilitate  the  implementation  of  the
              -inactiveselectbackground option.

   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:

       •      New bindings to <<Undo>> and <<Redo>>.

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

       •      New bindings to <<Undo>> and <<Redo>>.

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

       •      New bindings to <<Undo>> and <<Redo>>.

VIRTUAL EVENT <<SELECTION>>

       Each  widgetPlus  widget  generates  a  virtual  event  <<Selection>> 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

       •      Undo and Redo do not sync the value of the modified flag - they always set the  value  to  boolean
              true.

       •      Undo and Redo do not sync the position of the insertion cursor.

       •      The <<Modified>> event is not generated.

       •      Undo/Redo  separators,  and  the  -autoseparators  option,  as  found  in the text widget, are not
              implemented. An implicit separator is added for each call to a  widget  command  (e.g.  insert  or
              delete)  that  changes  the widget contents.  The edit separator command has no effect.  Separator
              functionality would be less useful for widgets such as entryPlus than it is for a text widget.

       •      Add an overwrite mode, toggled by <Insert> on non-macOS® systems.

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
       [http://core.tcl.tk/tklib/reportlist].

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 [http://core.tcl.tk/tklib/reportlist].
       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