#!../src/bltwish package require BLT # -------------------------------------------------------------------------- # Starting with Tcl 8.x, the BLT commands are stored in their own # namespace called "blt". The idea is to prevent name clashes with # Tcl commands and variables from other packages, such as a "table" # command in two different packages. # # You can access the BLT commands in a couple of ways. You can prefix # all the BLT commands with the namespace qualifier "blt::" # # blt::graph .g # blt::table . .g -resize both # # or you can import all the command into the global namespace. # # namespace import blt::* # graph .g # table . .g -resize both # # -------------------------------------------------------------------------- if { $tcl_version >= 8.0 } { namespace import blt::* namespace import -force blt::tile::* } source scripts/demo.tcl set visual [winfo screenvisual .] if { $visual == "staticgray" || $visual == "grayscale" } { set activeBg black set normalBg white set bitmapFg black set bitmapBg white option add *top.background white } else { option add *htext.foreground navyblue if { $tk_version >= 4.0 } { set file1 ./images/clouds.gif set file2 ./images/chalk.gif image create photo bgTexture1 -file $file1 image create photo bgTexture2 -file $file2 # option add *htext.tile bgTexture1 option add *htext.foreground black option add *htext.background white option add *htext.selectBackground gold1 } } option add *highlightThickness 0 proc Blt_FindPattern { htext } { toplevel .search wm title .search "Text search" label .search.label1 -text "Enter Pattern" entry .search.entry -relief sunken button .search.clear -text "Clear" \ -command ".search.entry delete 0 end" button .search.cancel -text "Cancel" \ -command "destroy .search; focus $htext" button .search.search -text "Search" -command "Blt_Search&Move $htext" bind .search.entry <Return> "Blt_Search&Move $htext" table .search \ .search.label1 0,0 -padx 4 \ .search.entry 0,1 -cspan 2 -pady 4 -padx 4 -reqwidth 3i \ .search.search 3,0 -reqwidth .75i -anchor w -padx 10 -pady 5 \ .search.clear 3,1 -reqwidth .75i -anchor center -padx 10 -pady 5 \ .search.cancel 3,2 -reqwidth .75i -anchor e -padx 10 -pady 5 focus .search.entry bind .search <Visibility> { raise .search } } set last 0 set lastPattern {} proc Blt_Search&Move { h } { global last global lastPattern set pattern [.search.entry get] if { [string compare $pattern $lastPattern] != 0 } { set last 0 set lastPattern $pattern } if { $pattern == "" } { return } set indices [$h search $pattern $last end] if { $indices == "" } { bell } else { set first [lindex $indices 0] set last [lindex $indices 1] $h selection range $first $last $h gotoline $first incr last } } # Create horizonatal and vertical scrollbars scrollbar .vscroll -command { .htext yview } -orient vertical scrollbar .hscroll -command { .htext xview } -orient horizontal # Create the hypertext widget htext .htext -file ./htext.txt \ -yscrollcommand { .vscroll set } \ -xscrollcommand { .hscroll set } \ -yscrollunits 10m -xscrollunits .25i \ -height 6i table . \ .htext 0,0 -fill both \ .vscroll 0,1 -fill y \ .hscroll 1,0 -fill x table configure . r1 c1 -resize none bind .htext <B1-Motion> { %W select to @%x,%y } bind .htext <1> { %W select from @%x,%y %W select to @%x,%y } bind .htext <Shift-1> { %W select word @%x,%y } bind .htext <Meta-1> { %W select line @%x,%y } bind .htext <Control-1> { puts stderr [%W select index @%x,%y] } bind .htext <B2-Motion> { %W scan dragto @%x,%y } bind .htext <2> { %W scan mark @%x,%y } bind .htext <3> { %W select adjust @%x,%y } bind .htext <Control-p> { set line [%W gotoline] if { $line == 0 } { bell } else { set line [expr $line-1] %W gotoline $line.0 } } bind .htext <Control-n> { set line [%W gotoline] incr line if { [%W gotoline $line.0] != $line } { bell } } bind .htext <Control-v> { %W yview [expr [%W yview]+10] } bind .htext <Meta-v> { %W yview [expr [%W yview]-10] } bind .htext <Alt-v> { %W yview [expr [%W yview]-10] } bind .htext <Any-q> { exit 0 } bind .htext <Control-s> { Blt_FindPattern %W } wm min . 0 0 focus .htext