in reply to Re: Table matrix suspected selected cell discrepancy
in thread Table matrix suspected selected cell discrepancy

As you may well have guessed this is a 'test' from a bigger appliation.
I called $t->curselection from the brwscmd because I also
want to be able to select more than one cell using the
windows explorer techique where with the left hand mouse key
1. the Ctrl key allows you to select a number of cells;
2. the Shift key allows you to select a rnge of cells.
I have just looked in the documentation for the tablematrix.
In the Default Bindings section it says that "The left, right, up and down arrows move the active cell".
Therefore I wonder if there is problem with the basic table matrix code.
  • Comment on Re^2: Table matrix suspected selected cell discrepancy

Replies are listed 'Best First'.
Re^3: Table matrix suspected selected cell discrepancy
by zentara (Cardinal) on Aug 17, 2011 at 19:41 UTC
    It might be a little bug, but I added a button to show the current selected cell, and it works to call $t->curselection() from outside the browsecommand sub. I also included a hack discovered awhile ago to force the widget to update. You might find it handy. :-)

    This gets the current active cell correct, but from outside the browsecommand sub. There may be some tag to configure and set, to get the operation you want, but it eludes me.

    An interesting thing is that if the curselection is called from the button, it works. But I added an external sub call to the browsecommand, and it returns the wrong info!! There is something funny in the browsecommand sub maintaining cell state.

    #!/usr/bin/perl use warnings; use strict; use Tk; use Tk::TableMatrix; my $mw = MainWindow->new; my $arrayVar = {}; print "Filling Array...\n"; my ($rows,$cols) = (10, 10); foreach my $row (0..($rows-1)){ foreach my $col (0..($cols-1)){ $arrayVar->{"$row,$col"} = 2*$row + 3*$col; } } print "Creating Table...\n"; my $t = $mw->Scrolled('TableMatrix', -rows => $rows, -cols => $cols, -width => 10, -height => 10, -titlerows => 1, -titlecols => 1, -variable => $arrayVar, -coltagcommand => \&colSub, -browsecommand => \&brscmd, -colstretchmode => 'last', -rowstretchmode => 'last', -selectmode => 'extended', -selecttitles => 0, -drawmode => 'slow', -scrollbars=>'se' ); $t->pack(-expand => 1, -fill => 'both'); $mw->Button( -text => "Show Selected", -command => sub{ print $t->curselection(),"\n"; })->pack(-expand => 1, -fill => 'x'); Tk::MainLoop; sub brscmd { my ($previous_index, $actual_index) = @_; my ($row, $col) = split ',', $actual_index; my ($sel, $js); $sel = $t->curselection(); print "@$sel\n"; #didn't do much #$t->set('active',@$sel); &get_active(); &TMRefresh($t); foreach $js (@$sel) { print "\n[brscmd] actual index <$actual_index> from curselection < +$js>\n"; } } sub get_active{ &TMRefresh($t); my @active = @{$t->curselection()}; print "active-> @active\n"; } sub TMRefresh { #Required input TableMatrix object. #use to force matrix to update, a code trick return if (!$_[0]); $_[0]->configure(-padx =>($_[0]->cget(-padx))); }

    I'm not really a human, but I play one on earth.
    Old Perl Programmer Haiku ................... flash japh
      Many thanks for your help.
      I think that at the very least it confirms something not quite right is happening.
      I will run your code and see if it helps.
      I guess I might be able to trap that the keys were used and in that case forget about the result from
      cusrselection which I then would need.
        If you want to look at the Tk::TableMatrix code, run

        perldoc -m Tk::TableMatrix

        It seems to do the arrow bindings correctly, but there is some xs we don't see.


        I'm not really a human, but I play one on earth.
        Old Perl Programmer Haiku ................... flash japh