Add a script to clean up after Tcl/Tk installation
[git/jnareb-git.git] / mingw / lib / tk8.5 / demos / ixset
blob21a099f53f6d9967afa1d8993aea402bd7d8154e
1 #!/bin/sh
2 # the next line restarts using wish \
3 exec wish "$0" ${1+"$@"}
5 # ixset --
6 # A nice interface to "xset" to change X server settings
8 # History :
9 # 91/11/23 : pda@masi.ibp.fr, jt@ratp.fr : design
10 # 92/08/01 : pda@masi.ibp.fr : cleaning
12 # RCS: @(#) $Id: ixset,v 1.5 2003/09/30 14:54:30 dkf Exp $
14 package require Tcl 8.4
15 package require Tk
18 # Button actions
21 proc quit {} {
22 destroy .
25 proc ok {} {
26 writesettings
27 quit
30 proc cancel {} {
31 readsettings
32 dispsettings
33 .buttons.apply configure -state disabled
34 .buttons.cancel configure -state disabled
37 proc apply {} {
38 writesettings
39 .buttons.apply configure -state disabled
40 .buttons.cancel configure -state disabled
44 # Read current settings
47 proc readsettings {} {
48 global kbdrep ; set kbdrep "on"
49 global kbdcli ; set kbdcli 0
50 global bellvol ; set bellvol 100
51 global bellpit ; set bellpit 440
52 global belldur ; set belldur 100
53 global mouseacc ; set mouseacc "3/1"
54 global mousethr ; set mousethr 4
55 global screenbla ; set screenbla "blank"
56 global screentim ; set screentim 600
57 global screencyc ; set screencyc 600
59 set xfd [open "|xset q" r]
60 while {[gets $xfd line] > -1} {
61 switch -- [lindex $line 0] {
62 auto {
63 set rpt [lindex $line 1]
64 if {$rpt eq "repeat:"} {
65 set kbdrep [lindex $line 2]
66 set kbdcli [lindex $line 6]
69 bell {
70 set bellvol [lindex $line 2]
71 set bellpit [lindex $line 5]
72 set belldur [lindex $line 8]
74 acceleration: {
75 set mouseacc [lindex $line 1]
76 set mousethr [lindex $line 3]
78 prefer {
79 set bla [lindex $line 2]
80 set screenbla [expr {$bla eq "yes" ? "blank" : "noblank"}]
82 timeout: {
83 set screentim [lindex $line 1]
84 set screencyc [lindex $line 3]
88 close $xfd
90 # puts stdout [format "Key REPEAT = %s\n" $kbdrep]
91 # puts stdout [format "Key CLICK = %s\n" $kbdcli]
92 # puts stdout [format "Bell VOLUME = %s\n" $bellvol]
93 # puts stdout [format "Bell PITCH = %s\n" $bellpit]
94 # puts stdout [format "Bell DURATION = %s\n" $belldur]
95 # puts stdout [format "Mouse ACCELERATION = %s\n" $mouseacc]
96 # puts stdout [format "Mouse THRESHOLD = %s\n" $mousethr]
97 # puts stdout [format "Screen BLANCK = %s\n" $screenbla]
98 # puts stdout [format "Screen TIMEOUT = %s\n" $screentim]
99 # puts stdout [format "Screen CYCLE = %s\n" $screencyc]
104 # Write settings into the X server
107 proc writesettings {} {
108 global kbdrep kbdcli bellvol bellpit belldur
109 global mouseacc mousethr screenbla screentim screencyc
111 set bellvol [.bell.vol get]
112 set bellpit [.bell.val.pit.entry get]
113 set belldur [.bell.val.dur.entry get]
115 if {$kbdrep eq "on"} {
116 set kbdcli [.kbd.val.cli get]
117 } else {
118 set kbdcli "off"
121 set mouseacc [.mouse.hor.acc.entry get]
122 set mousethr [.mouse.hor.thr.entry get]
124 set screentim [.screen.tim.entry get]
125 set screencyc [.screen.cyc.entry get]
127 exec xset \
128 b $bellvol $bellpit $belldur \
129 c $kbdcli \
130 r $kbdrep \
131 m $mouseacc $mousethr \
132 s $screentim $screencyc \
133 s $screenbla
138 # Sends all settings to the window
141 proc dispsettings {} {
142 global kbdrep kbdcli bellvol bellpit belldur
143 global mouseacc mousethr screenbla screentim screencyc
145 .bell.vol set $bellvol
146 .bell.val.pit.entry delete 0 end
147 .bell.val.pit.entry insert 0 $bellpit
148 .bell.val.dur.entry delete 0 end
149 .bell.val.dur.entry insert 0 $belldur
151 .kbd.val.onoff [expr {$kbdrep eq "on" ? "select" : "deselect"}]
152 .kbd.val.cli set $kbdcli
154 .mouse.hor.acc.entry delete 0 end
155 .mouse.hor.acc.entry insert 0 $mouseacc
156 .mouse.hor.thr.entry delete 0 end
157 .mouse.hor.thr.entry insert 0 $mousethr
159 .screen.blank [expr {$screenbla eq "blank" ? "select" : "deselect"}]
160 .screen.pat [expr {$screenbla ne "blank" ? "select" : "deselect"}]
161 .screen.tim.entry delete 0 end
162 .screen.tim.entry insert 0 $screentim
163 .screen.cyc.entry delete 0 end
164 .screen.cyc.entry insert 0 $screencyc
169 # Create all windows, and pack them
172 proc labelentry {path text length {range {}}} {
173 frame $path
174 label $path.label -text $text
175 if {[llength $range]} {
176 spinbox $path.entry -width $length -relief sunken \
177 -from [lindex $range 0] -to [lindex $range 1]
178 } else {
179 entry $path.entry -width $length -relief sunken
181 pack $path.label -side left
182 pack $path.entry -side right -expand y -fill x
185 proc createwindows {} {
187 # Buttons
190 frame .buttons
191 button .buttons.ok -default active -command ok -text "Ok"
192 button .buttons.apply -default normal -command apply -text "Apply" \
193 -state disabled
194 button .buttons.cancel -default normal -command cancel -text "Cancel" \
195 -state disabled
196 button .buttons.quit -default normal -command quit -text "Quit"
198 pack .buttons.ok .buttons.apply .buttons.cancel .buttons.quit \
199 -side left -expand yes -pady 5
201 bind . <Return> {.buttons.ok flash; .buttons.ok invoke}
202 bind . <Escape> {.buttons.quit flash; .buttons.quit invoke}
203 bind . <1> {
204 if {![string match .buttons* %W]} {
205 .buttons.apply configure -state normal
206 .buttons.cancel configure -state normal
209 bind . <Key> {
210 if {![string match .buttons* %W]} {
211 switch -glob %K {
212 Return - Escape - Tab - *Shift* {}
213 default {
214 .buttons.apply configure -state normal
215 .buttons.cancel configure -state normal
222 # Bell settings
225 labelframe .bell -text "Bell Settings" -padx 1.5m -pady 1.5m
226 scale .bell.vol \
227 -from 0 -to 100 -length 200 -tickinterval 20 \
228 -label "Volume (%)" -orient horizontal
230 frame .bell.val
231 labelentry .bell.val.pit "Pitch (Hz)" 6 {25 20000}
232 labelentry .bell.val.dur "Duration (ms)" 6 {1 10000}
233 pack .bell.val.pit -side left -padx 5
234 pack .bell.val.dur -side right -padx 5
235 pack .bell.vol .bell.val -side top -expand yes
238 # Keyboard settings
241 labelframe .kbd -text "Keyboard Repeat Settings" -padx 1.5m -pady 1.5m
243 frame .kbd.val
244 checkbutton .kbd.val.onoff \
245 -text "On" \
246 -onvalue "on" -offvalue "off" -variable kbdrep \
247 -relief flat
248 scale .kbd.val.cli \
249 -from 0 -to 100 -length 200 -tickinterval 20 \
250 -label "Click Volume (%)" -orient horizontal
251 pack .kbd.val.onoff -side left -fill x -expand yes -padx {0 1m}
252 pack .kbd.val.cli -side left -expand yes -fill x -padx {1m 0}
254 pack .kbd.val -side top -expand yes -pady 2 -fill x
257 # Mouse settings
260 labelframe .mouse -text "Mouse Settings" -padx 1.5m -pady 1.5m
262 frame .mouse.hor
263 labelentry .mouse.hor.acc "Acceleration" 5
264 labelentry .mouse.hor.thr "Threshold (pixels)" 3 {1 2000}
266 pack .mouse.hor.acc -side left -padx {0 1m}
267 pack .mouse.hor.thr -side right -padx {1m 0}
269 pack .mouse.hor -side top -expand yes
272 # Screen Saver settings
275 labelframe .screen -text "Screen-saver Settings" -padx 1.5m -pady 1.5m
277 radiobutton .screen.blank \
278 -variable screenblank -text "Blank" -relief flat \
279 -value "blank" -variable screenbla -anchor w
280 radiobutton .screen.pat \
281 -variable screenblank -text "Pattern" -relief flat \
282 -value "noblank" -variable screenbla -anchor w
283 labelentry .screen.tim "Timeout (s)" 5 {1 100000}
284 labelentry .screen.cyc "Cycle (s)" 5 {1 100000}
286 grid .screen.blank .screen.tim -sticky e
287 grid .screen.pat .screen.cyc -sticky e
288 grid configure .screen.blank .screen.pat -sticky ew
291 # Main window
294 pack .buttons -side top -fill both
295 pack .bell .kbd .mouse .screen -side top -fill both -expand yes \
296 -padx 1m -pady 1m
299 # Let the user resize our window
301 wm minsize . 10 10
304 ##############################################################################
305 # Main program
308 # Listen what "xset" tells us...
311 readsettings
314 # Create all windows
317 createwindows
320 # Write xset parameters
323 dispsettings
326 # Now, wait for user actions...
329 # Local Variables:
330 # mode: tcl
331 # End: