diff options
author | daryll <daryll> | 1999-12-05 00:59:08 +0000 |
---|---|---|
committer | daryll <daryll> | 1999-12-05 00:59:08 +0000 |
commit | 504880db5611bf0f57206abe44835959c2729147 (patch) | |
tree | f22ff902680775b5a6fb49364d305b846606716a /xc/programs/Xserver/hw/xfree86/XF86Setup/tcllib/combobox.tcl |
Initial revision
Diffstat (limited to 'xc/programs/Xserver/hw/xfree86/XF86Setup/tcllib/combobox.tcl')
-rw-r--r-- | xc/programs/Xserver/hw/xfree86/XF86Setup/tcllib/combobox.tcl | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/xc/programs/Xserver/hw/xfree86/XF86Setup/tcllib/combobox.tcl b/xc/programs/Xserver/hw/xfree86/XF86Setup/tcllib/combobox.tcl new file mode 100644 index 000000000..e058309f5 --- /dev/null +++ b/xc/programs/Xserver/hw/xfree86/XF86Setup/tcllib/combobox.tcl @@ -0,0 +1,179 @@ +# $XConsortium: combobox.tcl /main/1 1996/09/21 14:15:02 kaleb $ +# +# +# +# +# $XFree86: xc/programs/Xserver/hw/xfree86/XF86Setup/tcllib/combobox.tcl,v 3.6 1996/12/27 06:54:54 dawes Exp $ +# +# Copyright 1996 by Joseph V. Moss <joe@XFree86.Org> +# +# See the file "LICENSE" for information regarding redistribution terms, +# and for a DISCLAIMER OF ALL WARRANTIES. +# + +# Implements a simple combobox widget + +proc combobox {w args} { + global tcl_library + + frame $w + # putting the # in front does a pretty good job of hiding things + rename $w #$w.frame + proc $w {args} "eval [list \\#combobox_proc $w] \$args" + + entry $w.entry -relief sunken -bd 1m + button $w.button -command "\\#combobox_popup [list $w]" \ + -bitmap @$tcl_library/downarrow.xbm + pack $w.entry $w.button -side left + + toplevel $w.popup -cursor top_left_arrow + + listbox $w.popup.list -yscroll "$w.popup.sb set" \ + -selectmode browse -relief sunken -bd 1m + scrollbar $w.popup.sb -command "$w.popup.list yview" + + set topwin [winfo toplevel $w] + wm withdraw $w.popup + wm transient $w.popup $topwin + wm overrideredirect $w.popup 1 + + bind $w.popup.list <ButtonRelease-1> "\\#combobox_buttonrel [list $w]" + + if [llength $args] { + eval "\\#combobox_proc [list $w] econfig $args" + } +} + +proc #combobox_proc {w op args} { + + set p $w.popup + switch -- $op { + activate {return [eval [list $p.list activate] $args]} + bbox {return [eval [list $p.list bbox] $args]} + ecget {return [eval [list $w.entry cget] $args]} + lcget {return [eval [list $p.list cget] $args]} + econfig {return [eval [list $w.entry configure] $args]} + lconfig {return [eval [list $p.list configure] $args]} + curselection {return [eval \ + [list $p.list curselection] $args]} + edelete {return [eval [list $w.entry delete] $args]} + ldelete {return [eval [list $p.list delete] $args]} + eget {return [eval [list $w.entry get] $args]} + lget {return [eval [list $p.list get] $args]} + icursor {return [eval [list $w.entry icursor] $args]} + eindex {return [eval [list $w.entry index] $args]} + lindex {return [eval [list $p.list index] $args]} + einsert {return [eval [list $w.entry insert] $args]} + linsert {return [eval [list $p.list insert] $args]} + nearest {return [eval [list $p.list nearest] $args]} + escan {return [eval [list $w.entry scan] $args]} + lscan {return [eval [list $p.list scan] $args]} + see {return [eval [list $p.list see] $args]} + eselection {return [eval [list $w.entry selection] $args]} + lselection {return [eval [list $p.list selection] $args]} + size {return [eval [list $p.list size] $args]} + exview {return [eval [list $w.entry xview] $args]} + lxview {return [eval [list $p.list xview] $args]} + yview {return [eval [list $p.list yview] $args]} + default {error "Unknown option" } + } +} + +proc #combobox_popup { w } { + global tcl_library #combobox_vars + + set count [$w.popup.list size] + if { $count == 0 } return + pack forget $w.popup.sb $w.popup.list + set #combobox_vars(focus) [focus] + if { $count > 10 } { + set wid [winfo width $w.entry] + $w.popup.list configure -height 10 -width [$w.entry cget -width] + #$w.popup.list configure -height 10 + incr wid [expr [winfo width $w.button] +1 ] + pack $w.popup.list -side left -fill x -expand yes + pack $w.popup.sb -side left -fill y -expand yes + } else { + set wid [winfo width $w.entry] + #$w.popup.list configure -height $count -width $wid + $w.popup.list configure -height $count -width [$w.entry cget -width] + pack $w.popup.list -side left -fill x -expand yes + } + update idletasks + set ht [winfo reqheight $w.popup] + set xpos [winfo rootx $w] + set ypos [expr [winfo rooty $w]+[winfo reqheight $w]] + wm geometry $w.popup ${wid}x${ht}+${xpos}+${ypos} + #$w.popup.list configure -width [winfo width $w.entry] + #pack $w.popup.sb -side left -fill y -expand yes + wm deiconify $w.popup + raise $w.popup + #$w.button configure -state disabled + #grab -global $w.popup + grab $w.popup + bind $w.popup <ButtonPress-1> "\\#combobox_checkmsepos [list $w] %X %Y" + bind $w.popup.list <Return> "\\#combobox_popdown [list $w]" + #bind $w.popup.list <Escape> "\\#combobox_popdown [list $w]" + $w.button configure -command "\\#combobox_popdown [list $w]" \ + -bitmap @$tcl_library/uparrow.xbm + set #combobox_vars($w,x) [winfo rootx $w] + set #combobox_vars($w,y) [winfo rooty $w] + bind [winfo toplevel $w] <Configure> "\\#combobox_follow [list $w]" + if [string length [focus]] { + focus $w.popup.list + } +} + +proc #combobox_follow { w } { + global #combobox_vars + + regexp {([0-9]+)x([0-9]+)\+([0-9]+)\+([0-9]+)} \ + [wm geometry $w.popup] dummy pw ph px py + set oldx [set #combobox_vars($w,x)] + set oldy [set #combobox_vars($w,y)] + set newx [expr $px+[winfo rootx $w]-$oldx] + set newy [expr $py+[winfo rooty $w]-$oldy] + wm geometry $w.popup ${pw}x${ph}+${newx}+${newy} + set #combobox_vars($w,x) [winfo rootx $w] + set #combobox_vars($w,y) [winfo rooty $w] +} + +proc #combobox_popdown { w } { + global tcl_library #combobox_vars + + wm withdraw $w.popup + #$w.button configure -state normal + grab release $w.popup + if { [info exists #combobox_vars(focus)] + && [string length [set #combobox_vars(focus)]] } { + focus [set #combobox_vars(focus)] + } + set entry "" + foreach selection [$w.popup.list curselection] { + set text [$w.popup.list get $selection] + if { [string compare $text "<None>" ] != 0 && + [string compare $text "<Probed>"] != 0 } { + append entry ",$text" + } + } + set oldstate [$w.entry cget -state] + $w.entry configure -state normal + $w.entry delete 0 end + $w.entry insert end [string range $entry 1 end] + $w.entry configure -state $oldstate + $w.button configure -command "\\#combobox_popup [list $w]" \ + -bitmap @$tcl_library/downarrow.xbm +} + +proc #combobox_buttonrel { w } { + set mode [$w.popup.list cget -selectmode] + if { "$mode" == "multiple" || "$mode" == "extended" } return + \#combobox_popdown $w +} + +proc #combobox_checkmsepos { w xpos ypos } { + set curwin [winfo containing $xpos $ypos] + if { "[winfo toplevel $curwin]" == "$w.popup" } return + \#combobox_popdown $w +} + |