mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* (IMPORTANT BUG FIX) scan of event keywords doesn't work on recent
versions of Tck/Tk * (bug fix) initialize error of instance variable on TkComposite * (bug fix) initialize error on encoding-system on MultiTkIp * (bug fix) trouble on destroying widgets * (new) add JP and EN version of Ruby/Tk widget demos git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4249 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
0cdf0d99c1
commit
75362fbd47
141 changed files with 19495 additions and 25 deletions
333
ext/tk/sample/demos-en/ixset
Normal file
333
ext/tk/sample/demos-en/ixset
Normal file
|
|
@ -0,0 +1,333 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
# ixset --
|
||||
# A nice interface to "xset" to change X server settings
|
||||
#
|
||||
|
||||
require 'tk'
|
||||
|
||||
class Xsettings
|
||||
#
|
||||
# Button actions
|
||||
#
|
||||
def quit
|
||||
@root.destroy
|
||||
end
|
||||
|
||||
def ok
|
||||
writesettings
|
||||
quit
|
||||
end
|
||||
|
||||
def cancel
|
||||
readsettings
|
||||
dispsettings
|
||||
end
|
||||
|
||||
# apply is just "writesettings"
|
||||
|
||||
|
||||
#
|
||||
# Read current settings
|
||||
#
|
||||
def readsettings
|
||||
xfd = open("|xset q", 'r')
|
||||
xfd.readlines.each{|line|
|
||||
fields = line.chomp.strip.split(/\s+/)
|
||||
case fields[0]
|
||||
when "auto"
|
||||
if fields[1] == 'repeat:'
|
||||
@kbdrep = fields[2]
|
||||
@w_kbdrep.set(@kbdrep)
|
||||
@kbdcli = fields[6]
|
||||
end
|
||||
|
||||
when "bell"
|
||||
@bellvol = fields[2]
|
||||
@bellpit = fields[5]
|
||||
@belldur = fields[8]
|
||||
|
||||
when "acceleration:"
|
||||
@mouseacc = fields[1]
|
||||
@mousethr = fields[3]
|
||||
|
||||
when "prefer"
|
||||
if fields[2] == 'yes'
|
||||
@screenbla = 'blank'
|
||||
else
|
||||
@screenbla = 'noblank'
|
||||
end
|
||||
@w_screenbla.set(@screenbla)
|
||||
|
||||
when "timeout:"
|
||||
@screentim = fields[1]
|
||||
@screencyc = fields[3]
|
||||
|
||||
end
|
||||
}
|
||||
|
||||
xfd.close
|
||||
end
|
||||
|
||||
#
|
||||
# Write settings into the X server
|
||||
#
|
||||
def writesettings
|
||||
@bellvol = @w_bellvol.get
|
||||
@bellpit = @w_bellpit.get
|
||||
@belldur = @w_belldur.get
|
||||
|
||||
@kbdrep = @w_kbdrep.get
|
||||
if @kbdrep == 'on'
|
||||
@kbdcli = @w_kbdcli.get
|
||||
else
|
||||
@kbdcli = 'off'
|
||||
end
|
||||
|
||||
@mouseacc = @w_mouseacc.get
|
||||
@mousethr = @w_mousethr.get
|
||||
|
||||
@screentim = @w_screentim.get
|
||||
@screencyc = @w_screencyc.get
|
||||
@screenbla = @w_screenbla.get
|
||||
|
||||
system("xset \
|
||||
b #{@bellvol} #{@bellpit} #{@belldur} \
|
||||
c #{@kbdcli} \
|
||||
r #{@kbdrep} \
|
||||
m #{@mouseacc} #{@mousethr} \
|
||||
s #{@screentim} #{@screencyc} \
|
||||
s #{@screenbla}")
|
||||
end
|
||||
|
||||
#
|
||||
# Sends all settings to the window
|
||||
#
|
||||
def dispsettings
|
||||
@w_bellvol.set(@bellvol)
|
||||
@w_bellpit.set(@bellpit)
|
||||
@w_belldur.set(@belldur)
|
||||
|
||||
@w_kbdonoff.set(@w_kbdrep.get)
|
||||
@w_kbdcli.set(@kbdcli)
|
||||
|
||||
@w_mouseacc.set(@mouseacc)
|
||||
@w_mousethr.set(@mousethr)
|
||||
|
||||
@w_screenblank.set(@w_screenbla.get)
|
||||
@w_screenpat.set(@w_screenbla.get)
|
||||
|
||||
@w_screentim.set(@screentim)
|
||||
@w_screencyc.set(@screencyc)
|
||||
end
|
||||
|
||||
#
|
||||
# Create all windows, and pack them
|
||||
#
|
||||
class LabelEntry
|
||||
def initialize(parent, text, length)
|
||||
@frame = TkFrame.new(parent)
|
||||
TkLabel.new(@frame, 'text'=>text).pack('side'=>'left','expand'=>'y')
|
||||
@entry = TkEntry.new(@frame, 'width'=>length, 'relief'=>'sunken') {
|
||||
pack('side'=>'left','expand'=>'y')
|
||||
}
|
||||
end
|
||||
def pack(keys)
|
||||
@frame.pack(keys)
|
||||
end
|
||||
def get
|
||||
@entry.value
|
||||
end
|
||||
def set(value)
|
||||
@entry.delete(0,'end')
|
||||
@entry.insert(0, value)
|
||||
end
|
||||
end
|
||||
|
||||
def createwindows
|
||||
win = self
|
||||
|
||||
#
|
||||
# Buttons
|
||||
#
|
||||
buttons = TkFrame.new(@root) {|f|
|
||||
[ TkButton.new(f, 'command'=>proc{win.ok}, 'text'=>'Ok'),
|
||||
TkButton.new(f, 'command'=>proc{win.writesettings}, 'text'=>'Apply'),
|
||||
TkButton.new(f, 'command'=>proc{win.cancel}, 'text'=>'Cancel'),
|
||||
TkButton.new(f, 'command'=>proc{win.quit}, 'text'=>'Quit') ].each{|b|
|
||||
b.pack('side'=>'left', 'expand'=>'yes', 'pady'=>5)
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# Bell settings
|
||||
#
|
||||
bell = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2)
|
||||
l = TkLabel.new(bell, 'text'=>'Bell Settings')
|
||||
@w_bellvol = TkScale.new(bell, 'from'=>0, 'to'=>100, 'length'=>200,
|
||||
'tickinterval'=>20, 'orient'=>'horizontal',
|
||||
'label'=>"Volume (%)")
|
||||
|
||||
f = TkFrame.new(bell)
|
||||
@w_bellpit = LabelEntry.new(f, "Pitch (Hz)", 6)
|
||||
@w_bellpit.pack('side'=>'left', 'padx'=>5)
|
||||
@w_belldur = LabelEntry.new(f, "Duration (ms)", 6)
|
||||
@w_belldur.pack('side'=>'right', 'padx'=>5)
|
||||
|
||||
l.pack('side'=>'top', 'expand'=>'yes')
|
||||
@w_bellvol.pack('side'=>'top', 'expand'=>'yes')
|
||||
f.pack('side'=>'top', 'expand'=>'yes')
|
||||
|
||||
#
|
||||
# Keyboard settings
|
||||
#
|
||||
kbdonoff = nil
|
||||
kbdcli = nil
|
||||
kbd = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2)
|
||||
l = TkLabel.new(kbd, 'text'=>'Keyboard Repeat Settings')
|
||||
f = TkFrame.new(kbd)
|
||||
@w_kbdonoff = TkCheckButton.new(f, 'text'=>'On', 'relief'=>'flat',
|
||||
'onvalue'=>'on', 'offvalue'=>'off',
|
||||
'variable'=>@w_kbdrep ) {
|
||||
def self.set(value)
|
||||
if value == 'on'
|
||||
self.select
|
||||
else
|
||||
self.deselect
|
||||
end
|
||||
end
|
||||
pack('side'=>'left', 'expand'=>'yes', 'fill'=>'both')
|
||||
}
|
||||
@w_kbdcli = TkScale.new(f, 'from'=>0, 'to'=>100, 'length'=>200,
|
||||
'tickinterval'=>20, 'orient'=>'horizontal',
|
||||
'label'=>'Click Volume (%)')
|
||||
@w_kbdcli.pack('side'=>'left', 'expand'=>'yes')
|
||||
l.pack('side'=>'top', 'expand'=>'yes')
|
||||
f.pack('side'=>'top', 'expand'=>'yes', 'pady'=>2, 'fill'=>'x')
|
||||
|
||||
#
|
||||
# Mouse settings
|
||||
#
|
||||
mouse = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2)
|
||||
l = TkLabel.new(mouse, 'text'=>'Mouse Settings')
|
||||
f = TkFrame.new(mouse)
|
||||
@w_mouseacc = LabelEntry.new(f, 'Acceleration', 3)
|
||||
@w_mouseacc.pack('side'=>'left')
|
||||
@w_mousethr = LabelEntry.new(f, 'Threshold (pixels)', 3)
|
||||
@w_mousethr.pack('side'=>'right')
|
||||
l.pack('side'=>'top')
|
||||
f.pack('side'=>'top', 'expand'=>'yes')
|
||||
|
||||
#
|
||||
# Screen Saver settings
|
||||
#
|
||||
screen = TkFrame.new(@root, 'relief'=>'raised', 'borderwidth'=>2)
|
||||
l = TkLabel.new(screen, 'text'=>'Screen-saver Settings')
|
||||
f = TkFrame.new(screen)
|
||||
ff1 = TkFrame.new(f)
|
||||
[ @w_screenblank = TkRadioButton.new(ff1, 'text'=>'Blank',
|
||||
'relief'=>'flat',
|
||||
'variable'=>@w_screenbla,
|
||||
'value'=>'blank') {
|
||||
def self.set(value)
|
||||
if value == 'blank'
|
||||
self.select
|
||||
else
|
||||
self.deselect
|
||||
end
|
||||
end
|
||||
},
|
||||
@w_screenpat = TkRadioButton.new(ff1, 'text'=>'Pattern',
|
||||
'relief'=>'flat',
|
||||
'variable'=>@w_screenbla,
|
||||
'value'=>'noblank') {
|
||||
def self.set(value)
|
||||
if value != 'blank'
|
||||
self.select
|
||||
else
|
||||
self.deselect
|
||||
end
|
||||
end
|
||||
}
|
||||
].each {|w| w.pack('side'=>'top', 'pady'=>2, 'anchor'=>'w') }
|
||||
|
||||
ff2 = TkFrame.new(f)
|
||||
[ @w_screentim = LabelEntry.new(ff2, 'Timeout (s)', 5),
|
||||
@w_screencyc = LabelEntry.new(ff2, 'Cycle (s)', 5) ].each{|w|
|
||||
w.pack('side'=>'top', 'pady'=>2, 'anchor'=>'e')
|
||||
}
|
||||
|
||||
ff1.pack('side'=>'left')
|
||||
ff2.pack('side'=>'left')
|
||||
|
||||
l.pack('side'=>'top')
|
||||
f.pack('side'=>'top', 'expand'=>'yes')
|
||||
|
||||
#
|
||||
# Main window
|
||||
#
|
||||
buttons.pack('side'=>'top', 'fill'=>'both')
|
||||
bell.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes')
|
||||
kbd.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes')
|
||||
mouse.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes')
|
||||
screen.pack('side'=>'top', 'fill'=>'both', 'ipady'=>5, 'expand'=>'yes')
|
||||
|
||||
#
|
||||
# Let the user resize our window
|
||||
#
|
||||
@root.minsize(10,10)
|
||||
end
|
||||
|
||||
def initialize
|
||||
@root = TkRoot.new
|
||||
|
||||
@kbdrep = 'on'
|
||||
@w_kbdrep = TkVariable.new(@kbdrep)
|
||||
def @w_kbdrep.get
|
||||
self.value
|
||||
end
|
||||
def @w_kbdrep.set(val)
|
||||
self.value=val
|
||||
end
|
||||
|
||||
@kbdcli = 0
|
||||
|
||||
@bellvol = 100
|
||||
@bellpit = 440
|
||||
@belldur = 100
|
||||
|
||||
@mouseacc = "3/1"
|
||||
@mousethr = 4
|
||||
|
||||
@screenbla = "blank"
|
||||
@w_screenbla = TkVariable.new(@screenbla)
|
||||
def @w_screenbla.get
|
||||
self.value
|
||||
end
|
||||
def @w_screenbla.set(val)
|
||||
self.value=val
|
||||
end
|
||||
|
||||
@screentim = 600
|
||||
@screencyc = 600
|
||||
|
||||
#
|
||||
# Listen what "xset" tells us...
|
||||
#
|
||||
readsettings
|
||||
|
||||
#
|
||||
# Create all windows
|
||||
#
|
||||
createwindows
|
||||
|
||||
#
|
||||
# Write xset parameters
|
||||
#
|
||||
dispsettings
|
||||
end
|
||||
end
|
||||
|
||||
Xsettings.new
|
||||
|
||||
Tk.mainloop
|
||||
Loading…
Add table
Add a link
Reference in a new issue