Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^2: Tkx g_bind to menu on listbox only for selected row

by v4169sgr (Sexton)
on Jan 18, 2013 at 08:28 UTC ( #1013979=note: print w/replies, xml ) Need Help??


in reply to Re: Tkx g_bind to menu on listbox only for selected row
in thread Tkx g_bind to menu on listbox only for selected row

Thanks for the reply :) If I understand correctly, this code will select the row in the listbox nearest to the y coordinate of the event.

I don't actually want to do that. What I want to do is only have the event trigger on mouseover the already selected row, and not the entire listbox. Does that make sense?

  • Comment on Re^2: Tkx g_bind to menu on listbox only for selected row

Replies are listed 'Best First'.
Re^3: Tkx g_bind to menu on listbox only for selected row
by Anonymous Monk on Jan 18, 2013 at 08:38 UTC

    I don't actually want to do that. What I want to do is only have the event trigger on mouseover the already selected row, and not the entire listbox. Does that make sense?

    sure, you have the nearest, just check to see if it is selected

      Thanks for the reply again. I've almost made it work. My problem now is that the y-coordinate returned gets interpreted by nearest() in a way that I don't expect: nearest() seems to expect a y-coordinate relative to the top of the listbox widget, but the y-coordinate given is actually the absolute, screen, coordinate.

      Here's my code snippet:

      $list->g_bind("<Motion>", [sub { my($x,$y) = @_; my @sel_list = $list->curselection(); my $on_target = 0; my $current_index = $list->nearest($y); print "y = " . $y . "current_index = " . $current_index . "\n"; # +test if (length($sel_list[0]) > 0) { my @sel_list_items = split(/ /,$sel_list[0]); if (scalar(@sel_list_items) > 1) { foreach my $sel_list_item (@sel_list_items) { print "sel_list_item = " . $sel_list_item . "\n"; # te +st if ($sel_list_item eq $current_index) { $on_target = 1; } } } } print "on_target = " . $on_target . "\n"; # test if ($on_target == 1) { $listmenu->g_tk___popup($x,$y) } }, Tkx::Ev("%X", "%Y")]);

      I can see that the current_index is always larger than I would expect it to be. Apologies if I am missing something simple!

        %X and %Y are not %x and %y, you want %y

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1013979]
help
Chatterbox?
[tye]: I get an error string but no reason and no context. Like die "Could not read file.\n" but with a stack trace where all of the useful context is stripped.
[thezip]: Heya tye!
[tye]: hey, thezip!
[RonW]: Hi, tye, thezip
[RonW]: I see useless errors liek that from Perl programs, too.
[tye]: well, you certainly don't see strack traces with all of the values removed from Perl.
[thezip]: Howdy RonW. Not in *my* logfiles you won't!
[tye]: and I never claimed anything about 100% on either side.
[RonW]: Presumably because the coders didn't realize that die and warn will append line number and file when the message strings doesn'r end with a line terminator

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (10)
As of 2017-09-21 20:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    During the recent solar eclipse, I:









    Results (252 votes). Check out past polls.

    Notices?