The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Tk::EntrySet - display/edit a list of values in a Set of Widgets.

SYNOPSIS

  require Tk::EntrySet;

  my $valuelist = [];
  my $instance = $main_window->EntrySet()->pack;
  $instance->configure(-valuelist_variable => \$valuelist);
  $instance->valuelist([qw/foo bar baz/]);

DESCRIPTION

Tk::EntrySet creates a Set of widgets to display/edit a list of values. The widget class is configurable. Tk::EntrySet adds/removes widgets to match the size of the valuelist. If a user deletes an entrywidgets content, the value is deleted from the valuelist and the entry is removed from the set on view update. View updates are by default bound to <Return> events. This is configurable through the -callback_installer option. The last widget in the Set is always empty to allow users to append values to the list. Tk::EntrySet is a Tk::Frame derived widget.

METHODS

Tk::EntrySet supports the following methods:

valuelist([qw/a list of values/])

Get/Set the valuelist (arrayref)

OPTIONS

Tk::EntrySet supports the following options:

-entryclass

A Tk widget class to be used for the entrywidgets. Defaults to 'Entry'.

-entryoptions

Options to be passed to each entry on creation (arrayref).

-getter

A coderef which is used by Tk::EntrySet to read the Entrywidgets content. It gets passed the Entrywidget instance and is expected to return its content. Defaults to sub{ $_[0]->get }, which is suitable for Tk::Entry.

-setter

A coderef which is used by Tk::EntrySet to write the Entrywidgets content. It gets passed the Entrywidget instance and the new value. Defaults to sub{ $_[0]->delete(0,'end'); $_[0]->insert('end',$_[1]) }, which is suitable for Tk::Entry.

-callback_installer

A coderef which is called after each Entrywidgets instantiation. The callback_installer gets passed the Entrywidget and a coderef that will update the Tk::EntrySet view when called. Defaults to sub{$_[0]->bind('<Key-Return>',$_[1])}.

-empty_is_undef

If set to true (default) empty strings will be treated like undef. Undef elements will be removed from the list and from the EntrySet on view updates.

-unique_values

If set to true (default) duplicate elements will be removed on view updates.

-valuelist

Get/Set the list of values (arrayref).

-valuelist_variable

Ties a variable (scalarref) to the -valuelist atribute. This is a Scalar Tie only.

-changed_command

A Callback that is called after the valuelist is updated on user interaction. By default -changed_command is triggered if the user hits <Return> in any of the Entries. (See -callback_installer above if you want to change that.)

Examples

  use strict;
  use warnings;

  use Tk;

  my $mw = MainWindow->new ;
  require Tk::EntrySet;

  my $valuelist = [];
  my $entryset = $mw->EntrySet()->pack;
  $entryset->configure(-valuelist_variable => \$valuelist);
  $entryset->valuelist([qw/foo bar baz/]);

  # use another entryclass:

  my $num_set = $mw->EntrySet(-entryclass => 'NumEntry')->pack;
  $num_set->valuelist([3,15,42]);

  # use a BrowseEntry  with custom get/set/callback_installer:

  my $getter = sub{ $_[0]->Subwidget('entry')->get};
  my $setter = sub{my $e = $_[0]->Subwidget('entry');
                   $e->delete(0,'end');
                   $e->insert('end', $_[1]);
              };
  my $inst = sub{$_[0]->bind('<Key-Return>' ,$_[1]);
                 $_[0]->configure(-browsecmd => $_[1]);
           };
  my $mbe = $mw->EntrySet(-entryclass   => 'BrowseEntry',
                          -entryoptions => [-choices => [qw/ a b c d /]],
                          -getter       => $getter,
                          -setter       => $setter,
                          -callback_installer => $inst,
                        )->pack(-fill   => 'both',
                                -expand => 1);
  $mbe->valuelist([qw/a c/]);

  MainLoop;

AUTHOR

Christoph Lamprecht, ch.l.ngre@online.de

COPYRIGHT AND LICENSE

Copyright (C) 2008 by Christoph Lamprecht

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.7 or, at your option, any later version of Perl 5 you may have available.