Posted to tcl by aspect at Sat May 17 04:41:46 GMT 2014view raw
- # use as you would a labelframe: eg:
- # grid [CollapsingFrame .f -text "Clicky"] -sticky nsew
- # grid [text .t1] -in .f -sticky nsew
- snit::widgetadaptor CollapsingFrame {
- component b
- delegate option -text to b
- delegate option -textvariable to b
- delegate option * to hull
- delegate method * to hull
- constructor args {
- installhull using labelframe
- install b using label $win.b
- $self configurelist $args
- $self configure -labelwidget $b
- bind $b <1> [mymethod collapse]
- }
- method collapse {} {
- set C "+" ;#\u25ba
- set O "-" ;#\u25bc
- set h [winfo height $b]
- incr h 2
- set f [winfo parent $b]
- set title [$b cget -text]
- set title [string trimleft $title "$C$O "]
- if {[grid propagate $f]} {
- grid propagate $f 0
- $f configure -height $h
- $b configure -text "$C $title"
- } else {
- grid propagate $f 1
- $f configure -height 0
- $b configure -text "$O $title"
- }
- }
- }