#!../blt_wish -f if [file exists ../library] { set blt_library ../library } option add *Blt_htext.foreground navyblue proc Blt_HtFindPattern { htext } { toplevel .search wm title .search "Text search" label .search.label1 -text "Enter text string" entry .search.entry -relief sunken label .search.label2 -text "Direction:" set varName direction$htext radiobutton .search.forward -text "forward" -value "forward" \ -variable $varName -relief flat radiobutton .search.backward -text "backward" -value "backward" \ -variable $varName -relief flat global $varName set $varName "forward" button .search.cancel -text "dismiss" \ -command "destroy .search; focus $htext" button .search.search -text "search" -command "Blt_HtSearch&Move $htext" bind .search.entry "Blt_HtSearch&Move $htext" blt_table .search \ .search.label1 0,0 -cspan 3 -padx 4 \ .search.entry 1,0 -cspan 3 -pady 4 -padx 4 -reqwidth 3i \ .search.label2 2,0 \ .search.forward 2,1 -reqwidth 1i -anchor w \ .search.backward 2,2 -reqwidth 1i -anchor w \ .search.search 3,0 -reqwidth .75i -anchor w -padx 10 -pady 5 \ .search.cancel 3,2 -reqwidth .75i -anchor e -padx 10 -pady 5 focus .search.entry bind .search { raise .search } } proc Blt_HtSearch&Move { htext } { set pattern [.search.entry get] if { $pattern == "" } { return } set pattern "*$pattern*" set varName direction$htext global $varName set curPos [$htext gotoline] if { [set $varName] == "forward" } { set last end ; set first [expr $curPos+1] } else { set last 1 ; set first [expr $curPos-1] } set newPos [$htext search $pattern $first $last] if { ($newPos == -1) || ($newPos == $curPos) } { blt_bell } else { $htext gotoline $newPos } } # Create horizonatal and vertical scrollbars scrollbar .vscroll -command { .htext yview } -orient vertical scrollbar .hscroll -command { .htext xview } -orient horizontal # Create the hypertext widget blt_htext .htext -file ./htext.txt \ -yscrollcommand { .vscroll set } \ -xscrollcommand { .hscroll set } \ -height 6i \ -yscrollunits 10m \ -xscrollunits .25i blt_table . \ .htext 0,0 -fill both \ .vscroll 0,1 -fill y \ .hscroll 1,0 -fill x blt_table row . configure 1 -resize none blt_table column . configure 1 -resize none bind .htext { %W scan dragto %x %y } bind .htext <2> { %W scan mark %x %y } bind .htext { %W gotoline [expr [%W gotoline]-1] } bind .htext { %W gotoline [expr [%W gotoline]+1] } bind .htext { %W yview [expr [%W yview]+10] } bind .htext { %W yview [expr [%W yview]-10] } bind .htext { exit 0 } bind .htext { Blt_HtFindPattern %W } focus .htext wm min . 0 0