Hi,
could you be a bit more specific with your requirements? Should the combination of (multiple) selections be stored in history? Or do you need a multiple entry widget with auto updating suggestions?
Here is an example for the latter using Tk::EntrySet. It is a bit hacky - I did not write it for a history use-case. Just type into the entry and hit return, then watch the suggestions drop-down grow:
use strict;
use warnings;
use Tk;
use Data::Dumper;
my $mw = tkinit;
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;
$mbe = $mw->EntrySet(-entryclass => 'BrowseEntry',
-getter => $getter,
-valuelist => [],
# -entryoptions => [-choices => []],
-setter => $setter,
-callback_installer => $inst,
-changed_command => sub{mbe_changed( $mbe )},
)->pack(-fill => 'both',
-expand => 1);
$mw->Button(-text => 'dump value',
-command => sub{print Dumper $mbe->valuelist},
)->pack;
MainLoop;
{
my @choices;
sub mbe_changed{
my $mbe = shift;
my %seen;
my @valuelist = @{$mbe->valuelist};
for my $item ( @choices, @valuelist) {
$seen{ $item } = 1;
}
@choices = sort keys %seen;
my @e = (@{$mbe->{_EntrySet}{entry_pool}},
@{$mbe->{_EntrySet}{entries}});
for my $entry ( @e ) {
$entry->configure(-choices => \@choices);
}
$mbe->valuelist(\@valuelist);
}
}
Update: It should be perfectly possible to specify -entryclass => 'Tk::HistEntry' for Tk::EntrySet and sync the history of the entry instances in analogy to the example above.
Cheers, Chris
|