#!/usr/local/bin/wish8.3
# Das Tree-Widget aus den BWidgets
# Carsten Zerbst,
[email protected]
lappend auto_path [file join [pwd] BWidget-1.4.1]
package require BWidget 1.4.1
set sw [ScrolledWindow .sw -relief sunken -borderwidth 2]
grid $sw -sticky nesw
set tree [Tree $sw.tree -background white \
-selectbackground LightSkyBlue \
-opencmd knotenÖffnet \
-closecmd knotenSchließt
]
$sw setwidget $tree
$tree bindText <Button-1> selektiert
$tree bindImage <Button-1> selektiert
label .label -textvariable fileInfo -anchor w
grid .label -sticky ew
grid columnconfigure . 0 -weight 10
grid rowconfigure . 0 -weight 10
grid rowconfigure . 1 -weight 1
# Callbacks
proc knotenÖffnet {node} {
# Icon austauschen
$::tree itemconfigure $node -image [Bitmap::get openfold]
# alte Kinder-Knoten Löschen
$::tree delete [$::tree nodes $node]
# Verzeichniss aus Knoten
set path [$::tree itemcget $node -data]
# Knoten für alle Kinder anlegen
foreach child [glob -nocomplain [file join $path *]] {
if {[file isfile $child]} {
set icon [Bitmap::get file]
set dc never
} else {
set icon [Bitmap::get folder]
set dc allways
}
$::tree insert end $node $child -data $child \
-text [file tail $child] \
-image $icon -drawcross $dc
}
}
proc knotenSchließt {node} {
$::tree itemconfigure $node \
-image [Bitmap::get folder]
}
proc selektiert {node} {
$::tree selection set $node
set path [$::tree itemcget $node -data]
set ::fileInfo "[file tail $path], [file size $path] bytes"
}
# den erste Knoten einfügen
$tree insert end root pwd -data [pwd] -text [pwd] \
-image [Bitmap::get folder]
# ... und öffnen
$tree opentree pwd false
wm title . "FileBrowser"