For Programmers: Free Programming Magazines  


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
Pit

2004-11-19, 8:58 am

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
Pit

2004-11-22, 9:02 am

Thanks,

it works fine

Pit

Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com