package require treectrl 2.1
proc buildGUI {} {
set top .tree_test
catch {destroy $top}
toplevel $top
set treeFrame [frame $top.treeFrame]
set tree [buildTree $treeFrame]
grid $treeFrame -row 0 -column 0 -sticky news
grid rowconfigure $treeFrame 0 -weight 1
grid columnconfigure $treeFrame 0 -weight 1
grid rowconfigure $top 0 -weight 1
grid columnconfigure $top 0 -weight 1
}
proc buildTree {t} {
set tree [treectrl $t.tree \
-xscrollcommand "$t.sx set" \
-yscrollcommand "$t.sy set" \
-highlightthickness 0 \
-selectmode extended]
grid $tree -row 0 -column 0 -sticky news
scrollbar $t.sx -orient h -command "$tree xview"
scrollbar $t.sy -orient v -command "$tree yview"
grid $t.sx -row 1 -column 0 -sticky new -padx 0 -pady 0
grid $t.sy -row 0 -column 1 -sticky nes -padx 0 -pady 0
$tree element create textElem text \
-fill [list #FFFFFF { selected focus } ]
$tree element create selectionRect rect \
-fill [list #00008B { selected focus } #BFBFBF { selected !focus } ] \
-showfocus no
$tree style create textStyle
$tree style elements textStyle {selectionRect textElem}
$tree style layout textStyle textElem \
-padx { 0 4 } -expand ns -iexpand ns -sticky s
$tree style layout textStyle selectionRect \
-union {textElem} -padx { 0 4 } -expand ns -iexpand ns -sticky s
for {set column 0} {$column < 4} {incr column} {
$tree column create
$tree column configure $column \
-text "Column $column" \
-expand yes -button no
}
$tree notify install <Edit-begin>
$tree notify install <Edit-end>
$tree notify install <Edit-accept>
$tree notify bind $tree <Edit-begin> "EditCallback begin %W %I %C %E %t"
$tree notify bind $tree <Edit-end> "EditCallback end %W %I %C %E %t"
$tree notify bind $tree <Edit-accept> "EditCallback accept %W %I %C %E %t"
bind $tree <ButtonPress-1> "OnButtonPress1 %W %x %y"
FillTable $tree
return $tree
}
proc FillTable {tree} {
for {set row 0} {$row < 4} {incr row} {
set newItem [$tree item create]
for {set column 0} {$column < 4} {incr column} {
$tree item style set $newItem $column textStyle
$tree item element configure $newItem $column textElem \
-text "test"
}
$tree item lastchild root $newItem
}
}
proc EditCallback {args} {
puts "$args"
foreach {callback tree item column elem t} $args {}
if {$callback eq "accept"} {
$tree item element configure $item $column $elem -text $t
}
}
proc OnButtonPress1 { tree x y } {
set treeInfo [$tree identify $x $y]
if {$treeInfo eq ""} {
$tree selection clear
return
}
if {[llength $treeInfo] != 6} {
return
}
foreach {item itemNum column columnNum elem elemName} $treeInfo {}
if { $item == "item" && \
$column == "column" && \
$elem == "elem" } {
if { $elemName eq "textElem"} {
::TreeCtrl::ButtonPress1 $tree $x $y
update
::TreeCtrl::EntryOpen $tree $itemNum $columnNum $elemName
return -code break
}
}
}
buildGUI