Home > Archive > PerlTk > November 2004 > Drag & Drop in a HList
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Drag & Drop in a HList
|
|
|
| Hi Folks,
has anyone a little code snippet, that demonstrates how i can move a HList
Entry per Drag & Drop in another HList ??
Thanks
Pit
| |
| zentara 2004-11-19, 3:58 pm |
| On Fri, 19 Nov 2004 05:14:57 -0500, "Pit" <pharrendorf@am-soft.de>
wrote:
>Hi Folks,
>
>has anyone a little code snippet, that demonstrates how i can move a HList
>Entry per Drag & Drop in another HList ??
>
>Thanks
>Pit
Here is an example I have working, adapted from an example I
saw on groups.google.
#!/usr/bin/perl -w
use Tk;
use Tk::DragDrop;
use Tk::DropSite;
use Tk::HList;
use strict;
use vars qw($top $f $lb_src $lb_dest $dnd_token $drag_entry);
$top = new MainWindow;
$top->Label( -text => "Drag items from the left HList to the right one"
)->pack;
$f = $top->Frame->pack;
$lb_src = $f->Scrolled(
'HList',
-scrollbars => "osoe",
-selectmode => 'dragdrop'
)->pack( -side => "left" );
$lb_dest = $f->Scrolled(
'HList',
-scrollbars => "osoe",
-selectmode => 'dragdrop'
)->pack( -side => "left" );
my $i = 0;
foreach ( sort keys %ENV ) {
$lb_src->add( $i++, -text => $_ );
}
# Define the source for drags.
# Drags are started while pressing the left mouse button and moving the
# mouse. Then the StartDrag callback is executed.
$dnd_token = $lb_src->DragDrop(
-event => '<B1-Motion>',
-sitetypes => ['Local'],
-startcommand => sub { StartDrag($dnd_token) },
);
# Define the target for drops.
$lb_dest->DropSite(
-droptypes => ['Local'],
-dropcommand => [ \&Drop, $lb_dest, $dnd_token ],
);
MainLoop;
sub StartDrag {
my ($token) = @_;
my $w = $token->parent; # $w is the source hlist
my $e = $w->XEvent;
$drag_entry = $w->nearest( $e->y ); # get the hlist entry under
cursor
if ( defined $drag_entry ) {
# Configure the dnd token to show the hlist entry
$token->configure( -text => $w->entrycget( $drag_entry, '-text'
) );
# Show the token
my ( $X, $Y ) = ( $e->X, $e->Y );
$token->MoveToplevelWindow( $X, $Y );
$token->raise;
$token->deiconify;
$token->FindSite( $X, $Y, $e );
}
}
# Accept a drop and insert a new item in the destination hlist and
delete
# the item from the source hlist
sub Drop {
my ( $lb, $dnd_source ) = @_;
$lb->add( $drag_entry, -text => $dnd_source->cget( -text ) );
$lb_src->delete( "entry", $drag_entry );
$lb->see($drag_entry);
}
__END__
--
I'm not really a human, but I play one on earth.
http://zentara.net/japh.html
| |
|
| Thanks,
it works fine
Pit
|
|
|
|
|