in reply to Re: How to bind single click to get an path of an entry in Tk::HList
in thread How to bind single click to get an path of an entry in Tk::HList

Thanks a lot for the example Ken

Looks like i misunderstood -browsecommand option, this works great for the -selectmode=>single option, but i could not get it working for extended option. It would have been great to get an array of paths. Any ideas how?

  • Comment on Re^2:How to bind single click to get an path of an entry in Tk::HList

Replies are listed 'Best First'.
Re^3: How to bind single click to get an path of an entry in Tk::HList
by kcott (Archbishop) on Apr 18, 2014 at 05:04 UTC

    This change to the code creating the Tk::HList widget will cause a changing, pipe ('|') separated, list of paths to appear in the Tk::Label as you move the mouse and highlight different parts of the tree.

    my $hlist; $hlist = $app_F->HList( -itemtype => 'text', -selectmode => 'extended', -browsecmd => sub { $label_text = join '|' => $hlist->selectionGet + }, );

    The (possibly) odd-looking "my $hlist; $hlist = ..." is intended: $hlist is used in the -browsecmd callback, so it needs to be declared before the widget is created and assigned to that variable. There's no syntactical reason for putting the separate declaration and assignment on the same line: use whatever style suits you.

    As before, process the array returned by $hlist->selectionGet however you want. Also, see the Tk::HList documentation for how this behaves differently in scalar context.

    -- Ken

      Great Ken! Exactly what i wanted. Very happy :)

      Though i should be content with this, i am curious to understand how did you get this solution? selectionGet gives you the entries selected and not the paths(as per the spec). Then how did you guess that calling it within browsecommand will get the paths

      Once again Thanks!!

        "Great Ken! Exactly what i wanted. Very happy :)"

        Glad I could help.

        "Though i should be content with this, i am curious to understand how did you get this solution? selectionGet gives you the entries selected and not the paths(as per the spec). Then how did you guess that calling it within browsecommand will get the paths"

        That wasn't a conscious guess on my part; however, you're quite right about the doco, so that was probably more of an implicit assumption about how that method works.

        Tk has lots of shortcuts and aliases. selectionGet is an alias for infoSelection which, in turn, is a shortcut for info('selection'). In the Tk::HList doco for the info() methods, all explicitly state that they either operate on or return entryPath(s), except "$hlist->info(selection)" — I suppose I just didn't notice the absence of "entryPath" in that particular description.

        Instead of

        "Returns a list of selected entries ..."

        a better description would be

        "Returns a list of entryPaths of selected entries ..."

        -- Ken