# -*-mode: tcl; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: MkSample.tcl,v 1.3 2001/12/09 05:34:59 idiscovery Exp $ # # MkSample.tcl -- # # This file implements the "Sample" page in the widget demo # # This file has not been properly documented. It is NOT intended # to be used as an introductory demo program about Tix # programming. For such demos, please see the files in the # demos/samples directory or go to the "Samples" page in the # "widget demo" # # # Copyright (c) 1996, Expert Interface Technologies # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # # set tix_demo_running 1 set samples_dir [file join $demo_dir samples] set sample_filename {} uplevel #0 source [list [file join $samples_dir AllSampl.tcl]] proc MkSample {nb page} { global tixOption #---------------------------------------------------------------------- set w [$nb subwidget $page] set pane [tixPanedWindow $w.pane -orient horizontal] pack $pane -expand yes -fill both set f1 [$pane add 1 -expand 1] set f2 [$pane add 2 -expand 3] $f1 config -relief flat $f2 config -relief flat # Left pane: the Tree: # set lab [label $f1.lab -text "Select a sample program:" -anchor w] set tree [tixTree $f1.slb \ -options { hlist.selectMode single hlist.width 40 }] $tree config \ -command "Sample:Action $w $tree run" \ -browsecmd "Sample:Action $w $tree browse" pack $lab -side top -fill x -padx 5 -pady 5 pack $tree -side top -fill both -expand yes -padx 5 # Right pane: the Text # set labe [tixLabelEntry $f2.lab -label "Source:" -options { label.anchor w }] $labe subwidget entry config -state disabled set stext [tixScrolledText $f2.stext] set f3 [frame $f2.f3] set run [button $f3.run -text "Run ..." \ -command "Sample:Action $w $tree run"] set view [button $f3.view -text "View Source in Browser ..." \ -command "Sample:Action $w $tree view"] pack $run $view -side left -fill y -pady 2 pack $labe -side top -fill x -padx 7 -pady 2 pack $f3 -side bottom -fill x -padx 7 pack $stext -side top -fill both -expand yes -padx 7 # # Set up the text subwidget set text [$stext subwidget text] bind $text "%W yview scroll -1 unit" bind $text "%W yview scroll 1 unit" bind $text "%W xview scroll -1 unit" bind $text "%W xview scroll 1 unit" bind $text {focus [tk_focusNext %W]; break} bindtags $text "$text Text [winfo toplevel $text] all" $text config -bg [$tree subwidget hlist cget -bg] \ -state disabled -font $tixOption(fixed_font) -wrap none $run config -state disabled $view config -state disabled global demo set demo(w:run) $run set demo(w:view) $view set demo(w:tree) $tree set demo(w:lab1) $labe set demo(w:stext) $stext set hlist [$tree subwidget hlist] $hlist config -separator "." -width 30 -drawbranch 0 \ -wideselect false set style [tixDisplayStyle imagetext -refwindow $hlist \ -fg $tixOption(fg) -padx 4] set file [tix getimage textfile] set folder [tix getimage openfold] ForAllSamples root "" \ [list AddSampleToHList $tree $hlist $style $file $folder] } # AddSampleToHList -- # # A callback from ForAllSamples. Add all the possible sample files # into the Tree widget. # proc AddSampleToHList {tree hlist style file folder token type text dest} { case $type { d { return [$hlist addchild $token -itemtype imagetext -style $style \ -image $folder -text $text] } done { if {![tixStrEq $token ""]} { $tree setmode $token close $tree close $token } } f { return [$hlist addchild $token -itemtype imagetext \ -image $file -text $text -data [list $text $dest]] } } } proc Sample:Action {w slb action args} { global samples demo_dir demo samples_dir set hlist [$slb subwidget hlist] set ent [$hlist info anchor] if {$ent == ""} { $demo(w:run) config -state disabled $demo(w:view) config -state disabled return } if {[$hlist info data $ent] == {}} { # This is just a comment $demo(w:run) config -state disabled $demo(w:view) config -state disabled return } else { $demo(w:run) config -state normal $demo(w:view) config -state normal } set theSample [$hlist info data $ent] set title [lindex $theSample 0] set prog [lindex $theSample 1] case $action { "run" { RunProg $title $prog } "view" { LoadFile [file join $samples_dir $prog] } "browse" { # Bring up a short description of the sample program # in the scrolled text about set text [$demo(w:stext) subwidget text] uplevel #0 set sample_filename [list [file join $samples_dir $prog]] tixWidgetDoWhenIdle ReadFileWhenIdle $text $demo(w:lab1) subwidget entry config -state normal $demo(w:lab1) subwidget entry delete 0 end $demo(w:lab1) subwidget entry insert end [file join $samples_dir $prog] $demo(w:lab1) subwidget entry xview end $demo(w:lab1) subwidget entry config -state disabled } } } proc RunProg {title prog} { global samples demo_dir demo samples_dir set w .[lindex [split $prog .] 0] set w [string tolower $w] if [winfo exists $w] { wm deiconify $w raise $w return } uplevel #0 source [list [file join $samples_dir $prog]] toplevel $w wm title $w $title RunSample $w } proc LoadFile {filename} { global tixOption set tmp $filename regsub -all . $filename _ tmp set w [string tolower .$tmp] if [winfo exists $w] { wm deiconify $w raise $w return } toplevel $w wm title $w "Source View: $filename" button $w.b -text Close -command "destroy $w" set t [tixScrolledText $w.text] tixForm $w.b -left 0 -bottom -0 -padx 4 -pady 4 tixForm $w.text -left 0 -right -0 -top 0 -bottom $w.b $t subwidget text config -highlightcolor [$t cget -bg] -bd 2 \ -bg [$t cget -bg] -font $tixOption(fixed_font) if {$filename == {}} { return } set text [$w.text subwidget text] $text config -wrap none ReadFile $text $filename } proc ReadFileWhenIdle {text} { global sample_filename if ![file isdir $sample_filename] { ReadFile $text $sample_filename } } proc ReadFile {text filename} { set oldState [$text cget -state] $text config -state normal $text delete 0.0 end set fd [open $filename {RDONLY}] $text delete 1.0 end while {![eof $fd]} { $text insert end [gets $fd]\n } close $fd $text see 1.0 $text config -state $oldState }