tcl_util.tcl
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:6k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. proc beep {} {
  2.     # TODO: silent mode would bail here
  3.     puts -nonewline "7"
  4. }
  5. proc createNamedCascade {parent name caption {opts ""}} {
  6.     set child [menu $parent.$name 
  7.    -tearoffcommand "setMenuTitle "$caption""]
  8.     if {$opts == ""} {
  9. $parent add cascade -label $caption -menu $child
  10.     } else {
  11. eval "$parent add cascade -label $caption -menu $child $opts"
  12.     }
  13.     return $child
  14. }
  15. proc globalset {var {val "~"}} {
  16.     global [getglobalname $var]
  17.     if {$val != "~"} {
  18. set $var $val
  19.     } else {
  20. set $var
  21.     }
  22. }
  23. proc globalexists {var} {
  24.     global $var
  25.     return [info exists $var]
  26. }
  27. proc getglobalname {var} {
  28.     set av $var
  29.     set arr [string first "(" $av]
  30.     if {$arr == -1} {
  31. return $av
  32.     }
  33.     return [string range $av 0 [expr $arr - 1]]
  34. }
  35. proc globalinit {var {val ""}} {
  36.     global $var
  37.     uplevel "global $var"
  38.     if {![info exists $var]} {
  39. set $var $val
  40.     }
  41. }
  42. # Creates an alias for a command name
  43. proc alias {newname oldname} {
  44.     eval "proc $newname args {eval "$oldname $args"}"
  45. }
  46. proc makeproc {name args def} {
  47.     proc $name $args $def
  48. }
  49. proc getBG {widget {force no}} {
  50.     set on [lindex [$widget config -value] 4]
  51.     if {[globalset [lindex [$widget config -variable] 4]] == "$on"
  52. || $force == "yes"} {
  53. set bg -selectcolor
  54. set ofs 4
  55.     } else {
  56. set bg -activebackground
  57. set ofs 3
  58.     }
  59.     set b [lindex [$widget config $bg] $ofs]
  60.     return $b
  61. }
  62. proc fixButtonColors {args} {
  63.     # relevant entries are activebackground, background, highlightbackground
  64.     # and activeforeground, foreground, highlightcolor, highlightthickness
  65.     # and selectcolor
  66.     # unselected: background, mouse makes it activebackground
  67.     # selected: selectcolor, mouse makes it activebackground
  68.     foreach widget $args {
  69. bind $widget <Enter>    { %W config -activebackground [getBG %W]}
  70. bind $widget <Button-1> { %W config -activebackground [getBG %W 
  71.        yes]}
  72.     }
  73. }
  74. proc getListboxSelection {listbox} {
  75.     set sel [$listbox cursel]
  76.     if {[string compare $sel ""] == 0} {
  77. return ""
  78.     } else {
  79. return [$listbox get $sel]
  80.     }
  81. }
  82. proc Scroll_Set {scrollbar geoCmd offset size} {
  83.     if {$offset != 0.0 || $size != 1.0} {
  84. eval $geoCmd;
  85. $scrollbar set $offset $size
  86.     } else {
  87. set manager [lindex $geoCmd 0]
  88. $manager forget $scrollbar
  89.     }
  90. }
  91. proc Scrolled_Listbox {f args } {
  92.     frame $f
  93.     listbox $f.list 
  94.     -yscrollcommand [list Scroll_Set $f.yscroll 
  95.        [list grid $f.yscroll -row 0 -column 1 -sticky ns]]
  96.     eval {$f.list configure} $args
  97.     scrollbar $f.yscroll -orient vertical 
  98.     -command [list $f.list yview]
  99.     grid $f.list $f.yscroll -sticky news
  100.     grid columnconfigure $f 0 -weight 1
  101.     return $f.list
  102. }
  103. proc ldelete {list first {last ""}} {
  104.     if {$last == ""} {set last $first}
  105.     set front [lrange $list 0 [expr $first - 1]]
  106.     set tail [lrange $list [expr $last + 1] end]
  107.     return [concat $front $tail]
  108. }
  109. proc flash {var value} {
  110.     upvar $var flashee
  111.     set old [set flashee]
  112.     set flashee $value
  113.     set flashee $old
  114. }
  115. proc globaltrace {var access proc} {
  116.     global $var
  117.     trace variable $var $access $proc
  118. }
  119. proc packchildren {parent args} {
  120.     foreach child [winfo children $parent] {
  121. eval pack $child $args
  122.     }
  123. }
  124. proc verboseOptionMenu {w caption varName args} {
  125.     upvar #0 $varName var
  126.     
  127.     menubutton $w -text $caption -indicatoron 1 -menu $w.menu 
  128. -relief raised -bd 2 -highlightthickness 2 -anchor c 
  129. -direction flush -padx 0 -pady 0
  130.     menu $w.menu -tearoff 0
  131.     foreach i $args {
  132. set val  [lindex $i 0]
  133. if {[llength $i] > 1} {
  134.     set desc [lindex $i 1]
  135. } else {
  136.     set desc $val
  137. }
  138.         $w.menu add radiobutton -label $desc 
  139.     -variable $varName -value $val
  140.     }
  141.     return $w.menu
  142. }
  143. proc prebind {widget binding script} {
  144.     set oldscript [bind $widget $binding]
  145.     bind $widget $binding $script
  146.     bind $widget $binding +$oldscript
  147. }
  148. proc swap {var1 var2} {
  149.     upvar $var1 v1
  150.     upvar $var2 v2
  151.     set swap $v2
  152.     set v2 $v1
  153.     set v1 $swap
  154. }
  155. proc menuInvokeByName {menu name} {
  156.     # make non-ambiguous string index out of name; otherwise, if
  157.     # numeric, it'll be taken as a count-based index
  158.     set v1 [string index $name 0]
  159.     set vr [string range $name 1 end]
  160.     set name [$v1]$vr
  161.    
  162.     set ind [$menu index $name]
  163.    
  164.     $menu invoke $ind
  165.     return $ind
  166. }
  167. proc resetBGcolor {widget} {
  168.     # resets a widget's background color to that of its parent
  169.     set bg [lindex [[winfo parent $widget] config -bg] 4]
  170.     $widget config -bg $bg
  171. }
  172. proc repeat {n script} {
  173.     for {set i 0} {$i < $n} {incr i} {eval $script}
  174. }
  175. proc centerWindow {window} {
  176.     wm withdraw $window
  177.     update idletasks
  178.     set w [winfo reqwidth $window]
  179.     set h [winfo reqheight $window]
  180.     set x [expr ([winfo screenwidth  $window] - $w) / 2]
  181.     set y [expr ([winfo screenheight $window] - $h) / 2]
  182.     wm geometry $window "+$x+$y"
  183.     wm deiconify $window
  184. }
  185. proc bindCommandToAllMenuItems {menu script} {
  186.     set n [$menu index end]
  187.     for {set i 0} {$i <= $n} {incr i} {
  188. $menu entryconfigure $i -command $script
  189.     }
  190. }
  191. proc vertbutton {args} {
  192.     set next 0
  193.     set outargs ""
  194.     for {set i 0} {$i < [llength $args]} {incr i} {
  195. if {[lindex $args $i] == "-text"} {
  196.     lappend outargs [lindex $args $i]
  197.     set next 1
  198. } else {
  199.     if {$next == 1} {
  200. set inlabel [lindex $args $i]
  201. set label ""
  202. foreach char [split $inlabel {}] {
  203.     if {$label != ""} {
  204. set label "$labeln"
  205.     }
  206.     set label "$label$char"
  207. }
  208. lappend outargs $label
  209.     } else {
  210. lappend outargs [lindex $args $i]
  211.     }
  212.     set next 0
  213. }
  214.     }
  215.     eval button $outargs
  216. }