Posted to tcl by Gerry at Tue Dec 04 01:25:43 GMT 2007view pretty

proc leftarrow thetable {
  if {$::incell} {
    $thetable icursor [expr {[$thetable icursor]-1}]
    return -code break
  }
}

proc rightarrow thetable {
  if {$::incell} {
    $thetable icursor [expr {[$thetable icursor]+1}]
    return -code break
  }
}

proc ttbrowsecmd thetable {
  set ::incell false
  .tktabtest.e configure -validate none
  .tktabtest.e delete 0 end
  .tktabtest.e insert 0 [$thetable get active]
  .tktabtest.e configure -validate key
}

proc ttvcmd {thetable newcontent index} {
  if {[string equal [string index $newcontent $index]  \n]} {
    event generate $thetable <Key-Down>
    return false
  }
  set ::incell true
  .tktabtest.e configure -validate none
  .tktabtest.e delete 0 end
  .tktabtest.e insert 0 $newcontent
  .tktabtest.e configure -validate key
  return true
}

# First argument not used in example but needed in my app.
proc tevcmd {theentry newcontent newchar} {
  if {[string equal $newchar  \n]} {
    event generate .tktabtest.t <Key-Down>
    return false
  }
  .tktabtest.t set active $newcontent
  return true
}

# First argument not used in example but needed in my app.
proc entryreturn theentry {
  focus .tktabtest.t  
  event generate .tktabtest.t <Key-Down>
}

catch {destroy .tktabtest}
set t [toplevel .tktabtest]
pack [entry $t.e  -width 30 -validate none -vcmd [list tevcmd %W %P %S]] \
   [table $t.t -variable tt -multiline false -browsecmd [list ttbrowsecmd %W ] \
   -validate true -vcmd [list ttvcmd %W %S %i]]
array set tt [list 1,1 asdf 1,2 qwert 2,1 zxcv 2,2 1234567890123456789]
# $t.t tag configure active -relief {}
$t.t tag configure active -fg black
bind $t.t <Button-1> {set ::incell true}
bind $t.t <Key-Left> [list leftarrow %W]
bind $t.t <Key-Right> [list rightarrow %W]
bind $t.e <Return> [list entryreturn %W]