#!/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"