OSDN Git Service

979894fcb8c957c247d187208ded37622de7a574
[splhack/AndroidRuby.git] / lib / ruby-1.9.1-rc1 / ext / tk / sample / demos-en / ixset
1 #!/usr/bin/env ruby
2
3 # ixset --
4 # A nice interface to "xset" to change X server settings
5 #
6
7 require 'tk'
8
9 class Xsettings
10   #
11   # Button actions
12   #
13   def quit
14     @root.destroy
15   end
16
17   def ok
18     writesettings
19     quit
20   end
21
22   def cancel
23     readsettings
24     dispsettings
25   end
26
27   # apply is just "writesettings"
28
29
30   #
31   # Read current settings
32   #
33   def readsettings
34     xfd = open("|xset q", 'r')
35     xfd.readlines.each{|line|
36       fields = line.chomp.strip.split(/\s+/)
37       case fields[0]
38       when "auto"
39         if fields[1] == 'repeat:'
40           @kbdrep = fields[2]
41           @w_kbdrep.set(@kbdrep)
42           @kbdcli = fields[6]
43         end
44
45       when "bell"
46         @bellvol = fields[2]
47         @bellpit = fields[5]
48         @belldur = fields[8]
49
50       when "acceleration:"
51         @mouseacc = fields[1]
52         @mousethr = fields[3]
53
54       when "prefer"
55         if fields[2] == 'yes'
56           @screenbla = 'blank'
57         else
58           @screenbla = 'noblank'
59         end
60         @w_screenbla.set(@screenbla)
61
62       when "timeout:"
63         @screentim = fields[1]
64         @screencyc = fields[3]
65
66       end
67     }
68
69     xfd.close
70   end
71
72   #
73   # Write settings into the X server
74   #
75   def writesettings
76     @bellvol = @w_bellvol.get
77     @bellpit = @w_bellpit.get
78     @belldur = @w_belldur.get
79
80     @kbdrep = @w_kbdrep.get
81     if @kbdrep == 'on'
82       @kbdcli = @w_kbdcli.get
83     else
84       @kbdcli = 'off'
85     end
86
87     @mouseacc = @w_mouseacc.get
88     @mousethr = @w_mousethr.get
89
90     @screentim = @w_screentim.get
91     @screencyc = @w_screencyc.get
92     @screenbla = @w_screenbla.get
93
94     system("xset \
95             b #{@bellvol} #{@bellpit} #{@belldur} \
96             c #{@kbdcli} \
97             r #{@kbdrep} \
98             m #{@mouseacc} #{@mousethr} \
99             s #{@screentim} #{@screencyc} \
100             s #{@screenbla}")
101   end
102
103   #
104   # Sends all settings to the window
105   #
106   def dispsettings
107     @w_bellvol.set(@bellvol)
108     @w_bellpit.set(@bellpit)
109     @w_belldur.set(@belldur)
110
111     @w_kbdonoff.set(@w_kbdrep.get)
112     @w_kbdcli.set(@kbdcli)
113
114     @w_mouseacc.set(@mouseacc)
115     @w_mousethr.set(@mousethr)
116
117     @w_screenblank.set(@w_screenbla.get)
118     @w_screenpat.set(@w_screenbla.get)
119
120     @w_screentim.set(@screentim)
121     @w_screencyc.set(@screencyc)
122   end
123
124   #
125   # Create all windows, and pack them
126   #
127   class LabelEntry
128     def initialize(parent, text, length)
129       @frame = TkFrame.new(parent)
130       TkLabel.new(@frame, 'text'=>text).pack('side'=>'left','expand'=>'y')
131       @entry = TkEntry.new(@frame, 'width'=>length, 'relief'=>'sunken') {
132         pack('side'=>'left','expand'=>'y')
133       }
134     end
135     def pack(keys)
136       @frame.pack(keys)
137     end
138     def get
139       @entry.value
140     end
141     def set(value)
142       @entry.delete(0,'end')
143       @entry.insert(0, value)
144     end
145   end
146
147   def createwindows
148     win = self
149
150     #
151     # Buttons
152     #
153     buttons = TkFrame.new(@root) {|f|
154       [ TkButton.new(f, 'command'=>proc{win.ok}, 'text'=>'Ok'),
155         TkButton.new(f, 'command'=>proc{win.writesettings}, 'text'=>'Apply'),
156         TkButton.new(f, 'command'=>proc{win.cancel}, 'text'=>'Cancel'),
157         TkButton.new(f, 'command'=>proc{win.quit}, 'text'=>'Quit') ].each{|b|
158         b.pack('side'=>'left', 'expand'=>'yes', 'pady'=>5)
159       }
160     }
161
162     #
163     # Bell settings
164     #
165     bell = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2)
166     l = TkLabel.new(bell, 'text'=>'Bell Settings')
167     @w_bellvol = TkScale.new(bell, 'from'=>0, 'to'=>100, 'length'=>200, 
168                              'tickinterval'=>20, 'orient'=>'horizontal', 
169                              'label'=>"Volume (%)")
170
171     f = TkFrame.new(bell)
172     @w_bellpit = LabelEntry.new(f, "Pitch (Hz)", 6)
173     @w_bellpit.pack('side'=>'left', 'padx'=>5)
174     @w_belldur = LabelEntry.new(f, "Duration (ms)", 6)
175     @w_belldur.pack('side'=>'right', 'padx'=>5)
176
177     l.pack('side'=>'top', 'expand'=>'yes')
178     @w_bellvol.pack('side'=>'top', 'expand'=>'yes')
179     f.pack('side'=>'top', 'expand'=>'yes')
180
181     #
182     # Keyboard settings
183     # 
184     kbdonoff = nil
185     kbdcli = nil
186     kbd = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2)
187     l = TkLabel.new(kbd, 'text'=>'Keyboard Repeat Settings')
188     f = TkFrame.new(kbd)
189     @w_kbdonoff = TkCheckButton.new(f, 'text'=>'On', 'relief'=>'flat', 
190                                     'onvalue'=>'on', 'offvalue'=>'off',
191                                     'variable'=>@w_kbdrep ) {
192       def self.set(value)
193         if value == 'on'
194           self.select
195         else
196           self.deselect
197         end
198       end
199       pack('side'=>'left', 'expand'=>'yes', 'fill'=>'both')
200     }
201     @w_kbdcli = TkScale.new(f, 'from'=>0, 'to'=>100, 'length'=>200, 
202                          'tickinterval'=>20, 'orient'=>'horizontal', 
203                          'label'=>'Click Volume (%)')
204     @w_kbdcli.pack('side'=>'left', 'expand'=>'yes')
205     l.pack('side'=>'top', 'expand'=>'yes')
206     f.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2, 'fill'=>'x')
207
208     #
209     # Mouse settings
210     #
211     mouse = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2)
212     l = TkLabel.new(mouse, 'text'=>'Mouse Settings')
213     f = TkFrame.new(mouse)
214     @w_mouseacc = LabelEntry.new(f, 'Acceleration', 3)
215     @w_mouseacc.pack('side'=>'left')
216     @w_mousethr = LabelEntry.new(f, 'Threshold (pixels)', 3)
217     @w_mousethr.pack('side'=>'right')
218     l.pack('side'=>'top')
219     f.pack('side'=>'top', 'expand'=>'yes')
220
221     #
222     # Screen Saver settings
223     #
224     screen = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2)
225     l = TkLabel.new(screen, 'text'=>'Screen-saver Settings')
226     f = TkFrame.new(screen)
227     ff1 = TkFrame.new(f)
228     [ @w_screenblank = TkRadioButton.new(ff1, 'text'=>'Blank', 
229                                          'relief'=>'flat', 
230                                          'variable'=>@w_screenbla, 
231                                          'value'=>'blank') {
232         def self.set(value)
233           if value == 'blank'
234             self.select
235           else
236             self.deselect
237           end
238         end
239       }, 
240       @w_screenpat = TkRadioButton.new(ff1, 'text'=>'Pattern', 
241                                        'relief'=>'flat', 
242                                        'variable'=>@w_screenbla, 
243                                        'value'=>'noblank') {
244         def self.set(value)
245           if value != 'blank'
246             self.select
247           else
248             self.deselect
249           end
250         end
251       }
252     ].each {|w| w.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w') }
253
254     ff2 = TkFrame.new(f)
255     [ @w_screentim = LabelEntry.new(ff2, 'Timeout (s)', 5), 
256       @w_screencyc = LabelEntry.new(ff2, 'Cycle (s)', 5) ].each{|w|
257       w.pack('side'=>'top', 'pady'=>2, 'anchor'=>'e')
258     }
259
260     ff1.pack('side'=>'left')
261     ff2.pack('side'=>'left')
262
263     l.pack('side'=>'top')
264     f.pack('side'=>'top', 'expand'=>'yes')
265
266     #
267     # Main window
268     #
269     buttons.pack('side'=>'top', 'fill'=>'both')
270     bell.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes')
271     kbd.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes')
272     mouse.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes')
273     screen.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes')
274
275     #
276     # Let the user resize our window
277     #
278     @root.minsize(10,10)
279   end
280
281   def initialize
282     @root = TkRoot.new
283
284     @kbdrep = 'on'
285     @w_kbdrep = TkVariable.new(@kbdrep)
286     def @w_kbdrep.get
287       self.value
288     end
289     def @w_kbdrep.set(val)
290       self.value=val
291     end
292
293     @kbdcli = 0
294
295     @bellvol = 100
296     @bellpit = 440
297     @belldur = 100
298
299     @mouseacc = "3/1"
300     @mousethr = 4
301
302     @screenbla = "blank"
303     @w_screenbla = TkVariable.new(@screenbla)
304     def @w_screenbla.get
305       self.value
306     end
307     def @w_screenbla.set(val)
308       self.value=val
309     end
310
311     @screentim = 600
312     @screencyc = 600
313
314     #
315     # Listen what "xset" tells us...
316     #
317     readsettings
318
319     #
320     # Create all windows
321     #
322     createwindows
323
324     #
325     # Write xset parameters
326     #
327     dispsettings
328   end
329 end
330
331 Xsettings.new
332
333 Tk.mainloop