#!/usr/bin/perl -w
my
$main
= MainWindow->new;
my
@alist
= (
'an item'
,
'another'
,
'and another'
,
'yet another'
,
'and so on'
);
my
@blist
=
qw(A-item B-item C-item D-item E-item)
;
my
@clist
= (0..24);
my
%listlist
= (
' alist'
=> \
@alist
,
' blist'
=> \
@blist
,
' clist'
=> \
@clist
,
);
my
%addlist
= (
' alist'
=> [
'and so forth'
,
'and somesuch'
,
'so and so'
],
' blist'
=> [
qw(F-item G-item H-item)
],
' clist'
=> [ (25..28) ],
);
my
$leftframe
=
$main
->Frame()->
pack
(
'-side'
=>
'left'
);
my
$leftlabel
=
$leftframe
->Label(
-text
=>
"First select a\nlist to begin with:"
)->
pack
(
-fill
=>
'x'
);
my
$left_list
=
$leftframe
->Listbox(
);
for
(
sort
(
keys
%listlist
)) {
$left_list
-> insert(
'end'
,
$_
);
}
$left_list
->
pack
();
my
$mlframe
=
$main
->Frame(
-relief
=>
'raised'
,
-borderwidth
=>
'1'
,
)->
pack
(
'-fill'
=>
'y'
,
'-expand'
=>
'1'
,
-ipadx
=> 1,
-ipady
=> 1,
'-side'
=>
'left'
,
);
my
$midframe
=
$main
->Frame()->
pack
(
'-side'
=>
'left'
);
my
$midlabel
=
$midframe
->Label(
-text
=>
"This is the Listbox\nunder construction:"
)->
pack
(
-fill
=>
'x'
);
my
$midlistframe
=
$midframe
->Frame()->
pack
();
my
$mid_scroll
=
$midlistframe
->Scrollbar->
pack
(
-side
=>
'right'
,
-fill
=>
'y'
,
);
my
$mid_list
=
$midlistframe
->Listbox(
-yscrollcommand
=> [
$mid_scroll
=>
'set'
],
-exportselection
=> 0,
);
$mid_scroll
->configure(
-command
=> [
$mid_list
=>
'yview'
]);
$mid_list
->
pack
(
-side
=>
'left'
,
-expand
=>
'yes'
,
-fill
=>
'both'
,
);
$mid_list
->
bind
(
'<Double-1>'
=>
sub
{ printit(
$mid_list
) }
);
my
$midprint_button
=
$midframe
->Button(
-text
=>
"print selection"
,
-command
=>
sub
{ printthem(
$mid_list
) }
)->
pack
;
my
$rem_button
=
$midframe
->Button(
-text
=>
"delete selection"
,
-command
=>
sub
{
$mid_list
->
delete
(
'active'
)
},
)->
pack
;
my
$del_button
=
$midframe
->Button(
-text
=>
"delete list"
,
-command
=> [
sub
{
shift
->SetList(())},
$mid_list
],
)->
pack
;
$mlframe
=
$main
->Frame(
-relief
=>
'raised'
,
-borderwidth
=>
'1'
,
)->
pack
(
'-fill'
=>
'y'
,
'-expand'
=>
'1'
,
-ipadx
=> 1,
-ipady
=> 1,
'-side'
=>
'left'
,
);
my
$rightframe
=
$main
->Frame()->
pack
();
my
$right_list
=
$rightframe
->Listbox(
-selectmode
=>
'multiple'
,
-exportselection
=> 0,
)->
pack
;
my
$rtadd_button
=
$rightframe
->Button(
-text
=>
"add to top"
,
-command
=>
sub
{
$mid_list
->insert( 0 ,
$right_list
->get(
'active'
))
},
)->
pack
;
my
$rsadd_button
=
$rightframe
->Button(
-text
=>
"add before selection"
,
-command
=>
sub
{
$mid_list
->insert(
'active'
,
$right_list
->get(
'active'
))
},
)->
pack
;
my
$rsadd_button
=
$rightframe
->Button(
-text
=>
"add to bottom"
,
-command
=>
sub
{
$mid_list
->insert(
'end'
,
$right_list
->get(
'active'
))
},
)->
pack
;
my
$rightprint_button
=
$rightframe
->Button(
-text
=>
"print selection"
,
-command
=>
sub
{ printthem(
$right_list
) }
)->
pack
;
my
$rdel_button
=
$rightframe
->Button(
-text
=>
"delete this list"
,
-command
=>
sub
{
$right_list
->
delete
(0,
'end'
)
},
)->
pack
;
my
$ladd_button
=
$leftframe
->Button(
-text
=>
"OK"
,
-command
=> [
sub
{
$mid_list
->SetList(@{
$listlist
{
$left_list
->get(
'active'
)}});
$right_list
->SetList(@{
$addlist
{
$left_list
->get(
'active'
)}});
}
],
)->
pack
();
my
$quit_button
=
$leftframe
->Button(
-text
=>
"quit program"
,
-command
=>
sub
{
exit
},
)->
pack
();
MainLoop;
sub
printit {
my
$list
=
shift
;
my
$entry
=
$list
->get(
'active'
);
print
"$entry\n"
;
}
sub
printthem {
my
$list
=
shift
;
my
@entries
=
$list
->curselection;
for
(
@entries
) {
print
$list
-> get(
$_
),
"\n"
;}
}