in reply to Re^6: Table matrix suspected selected cell discrepancy
in thread Table matrix suspected selected cell discrepancy
Yes, there are a couple of ways to do it. Some sample code is shown in the ReadMore below.
The first method, is a bit crude, and requires a no warnings "redefine";. You just copy in the sub(s) you want to redefine, obtained from perldoc -m Tk::TableMatrix, into your script, and rewrite the sub(s) anyway you want.
The second, better method, is to create a custom package widget, which allows you to redefine any sub, without generating warnings.
I'm not sure which sub would need to be redefined, or if redefining it may break something else, like possibly the action of hitting the Enter key on a cell. A second package method using ClassInit is also shown, and may be needed to catch $mw bindings.
#!/usr/bin/perl use warnings; no warnings "redefine"; use Tk; use Tk::TableMatrix; sub Tk::TableMatrix::Paste { print "start\n"; my $w = shift; my $cell = shift || ''; ## Perltk not sure if translated correctly my $data; if ($cell ne '') { eval{ $data = $w->GetSelection(); }; return if($@); } else { eval{ $data = $w->GetSelection('CLIPBOARD'); }; return if($@); $cell = 'active'; } $w->PasteHandler($w->index($cell),$data); $w->focus if ($w->cget('-state') eq 'normal'); print "end\n"; } my $top = MainWindow->new; my $arrayVar = {}; foreach my $row (0..20){ foreach my $col (0..10){ $arrayVar->{"$row,$col"} = "r$row, c$col"; } } my $t = $top->Scrolled('TableMatrix', -rows => 21, -cols => 11, -width => 6, -height => 6, -titlerows => 1, -titlecols => 1, -variable => $arrayVar, -selectmode => 'extended', -resizeborders => 'both', -titlerows => 1, -titlecols => 1, -bg => 'white', # -state => 'disabled' # -colseparator => "\t", # -rowseparator => "\n" ); $t->tagConfigure('active', -bg => 'gray90', -relief => 'sunken'); $t->tagConfigure( 'title', -bg => 'gray85', -fg => 'black', -relief => + 'sunken'); # $t->bind("<Any-Enter>", sub { $t->focus }); $t->pack(-expand => 1, -fill => 'both'); Tk::MainLoop;
Creating a custom package: (shown with a Tk::Text widget as example ) which allows you to redefine a sub, without warnings.
and a second package version, which uses ClassInit to gain access to the $mw bindings too.#!/usr/bin/perl use warnings; use strict; use Tk; package Tk::MyText; require Tk::Text; use base qw/Tk::Text/; Construct Tk::Widget 'MyText'; sub InsertKeypress { my($w, $char) = @_; if (ord($char) < 27) { print chr(ord($char) | 0x40), "\n"; # only Control-G/J/L/M/Q/R/S/U/W/Y/Z are making it to here } else { $w->SUPER::InsertKeypress($char); } } package main; my $top = tkinit; my $text = $top->MyText->pack; $text->eventAdd('<<Bogus>>' => '<Control-Key-G>','<Control-Key-g>'); $text->bind('<<Bogus>>', sub { $text->insert('end'," <-- How do I supress this?\n") }); print $text->eventInfo('<<Bogus>>'); MainLoop;
#!/usr/bin/perl use warnings; use strict; use Tk; package Tk::MyText; require Tk::Text; use base qw/Tk::Text/; Construct Tk::Widget 'MyText'; sub ClassInit { print "ClassInit [@_]\n"; my($class,$mw) = @_; $class->SUPER::ClassInit($mw); $mw->bind($class,'<Control-KeyPress>','NoOp'); $class; } ##################################################### package main; my $top = tkinit; my $text = $top->MyText->pack; $text->eventAdd('<<Bogus>>' => '<Control-Key-G>','<Control-Key-g>'); $text->bind('<<Bogus>>', sub { $text->insert('end'," <-- How do I supress this?\n") }); print $text->eventInfo('<<Bogus>>'); MainLoop;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^8: Table matrix suspected selected cell discrepancy
by merrymonk (Hermit) on Aug 18, 2011 at 14:43 UTC |