# ---------------------------------------------------------------------- # EXAMPLE: TextDisplay widget # ---------------------------------------------------------------------- # COURSE: Object-Oriented Programming with [incr Tcl] # AUTHOR: Michael J. McLennan, Bell Labs Innovations # ====================================================================== # Copyright (c) 1996 Lucent Technologies # ====================================================================== option add *TextDisplay.width 3i widgetDefault option add *TextDisplay.height 2i widgetDefault option add *TextDisplay.scrollbar auto widgetDefault option add *TextDisplay.wrap none widgetDefault option add *TextDisplay.textBackground ivory widgetDefault class TextDisplay { inherit itk::Widget constructor {args} { itk_option add hull.width hull.height itk_component add text { text $itk_interior.info -state disabled -width 1 -height 1 \ -yscrollcommand [code $itk_interior.sbar set] } { usual keep -wrap -tabs rename -background -textbackground textBackground Background } pack $itk_component(text) -side left -expand yes -fill both itk_component add scrollbar { scrollbar $itk_interior.sbar \ -command [code $itk_interior.info yview] } pack $itk_component(scrollbar) -side right -fill y eval itk_initialize $args pack propagate $itk_component(hull) 0 fixScrollbar bind $itk_component(text) [code $this fixScrollbar] $itk_component(text) tag configure bold \ -font -*-courier-bold-r-normal--*-120-* $itk_component(text) tag configure italic \ -font -*-courier-medium-o-normal--*-120-* } public method display {info} public method append {info} public method substitute {word newword} itk_option define -scrollbar scrollbar Scrollbar "on" { switch -- $itk_option(-scrollbar) { on - off - auto { fixScrollbar } default { error "bad value \"$itk_option(-scollbar)\"" } } } protected method fixScrollbar {} private variable sbvisible 1 } body TextDisplay::display {args} { $itk_component(text) configure -state normal $itk_component(text) delete 1.0 end eval $itk_component(text) insert 1.0 $args $itk_component(text) configure -state disabled fixScrollbar } body TextDisplay::append {args} { $itk_component(text) configure -state normal eval $itk_component(text) insert end $args $itk_component(text) configure -state disabled fixScrollbar } body TextDisplay::substitute {word newword} { $itk_component(text) configure -state normal set index 1.0 while {1} { set index [$itk_component(text) search -count len $word $index] if {$index != ""} { $itk_component(text) delete $index "$index + $len chars" $itk_component(text) insert $index $newword } else { break } } $itk_component(text) configure -state disabled fixScrollbar } body TextDisplay::fixScrollbar {} { switch $itk_option(-scrollbar) { on { set sbstate 1 } off { set sbstate 0 } auto { if {[$itk_component(text) bbox 1.0] == "" || [$itk_component(text) bbox end-1char] == ""} { set sbstate 1 } else { set sbstate 0 } } } if {$sbstate != $sbvisible} { if {$sbstate} { pack $itk_component(scrollbar) -side right -fill y } else { pack forget $itk_component(scrollbar) } set sbvisible $sbstate } } usual TextDisplay { keep -background -cursor -foreground -font keep -activebackground -activerelief keep -highlightcolor -highlightthickness keep -insertbackground -insertborderwidth -insertwidth keep -insertontime -insertofftime keep -selectbackground -selectborderwidth -selectforeground keep -textbackground -troughcolor }