mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
287a34ae0d
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22784 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
109 lines
3.5 KiB
Ruby
109 lines
3.5 KiB
Ruby
#
|
|
# checkbutton widget demo2 (called by 'widget')
|
|
#
|
|
|
|
# delete old toplevel widget
|
|
if defined?($check2_demo) && $check2_demo
|
|
$check2_demo.destroy
|
|
$check2_demo = nil
|
|
end
|
|
|
|
# create demo toplevel widget
|
|
$check2_demo = TkToplevel.new {|w|
|
|
title("Checkbutton Demonstration 2")
|
|
iconname("check2")
|
|
positionWindow(w)
|
|
}
|
|
|
|
base_frame = TkFrame.new($check2_demo).pack(:fill=>:both, :expand=>true)
|
|
|
|
# label
|
|
msg = TkLabel.new(base_frame) {
|
|
font $font
|
|
wraplength '4i'
|
|
justify 'left'
|
|
text "Four checkbuttons are displayed below. If you click on a button, it will toggle the button's selection state and set a Tcl variable to a value indicating the state of the checkbutton. The first button also follows the state of the other three. If only some of the three are checked, the first button will display the tri-state mode. Click the \"See Variables\" button to see the current values of the variables."
|
|
}
|
|
msg.pack('side'=>'top')
|
|
|
|
# variable
|
|
safety = TkVariable.new(0)
|
|
wipers = TkVariable.new(0)
|
|
brakes = TkVariable.new(0)
|
|
sober = TkVariable.new(0)
|
|
|
|
# frame
|
|
TkFrame.new(base_frame) {|frame|
|
|
TkGrid(TkFrame.new(frame, :height=>2, :relief=>:sunken, :bd=>2),
|
|
:columnspan=>4, :row=>0, :sticky=>'ew', :pady=>2)
|
|
TkGrid('x',
|
|
TkButton.new(frame, :text=>'See Variables',
|
|
:image=>$image['view'], :compound=>:left,
|
|
:command=>proc{
|
|
showVars($check2_demo,
|
|
['safety', safety], ['wipers', wipers],
|
|
['brakes', brakes], ['sober', sober])
|
|
}),
|
|
TkButton.new(frame, :text=>'See Code',
|
|
:image=>$image['view'], :compound=>:left,
|
|
:command=>proc{showCode 'check2'}),
|
|
TkButton.new(frame, :text=>'Dismiss',
|
|
:image=>$image['delete'], :compound=>:left,
|
|
:command=>proc{
|
|
tmppath = $check2_demo
|
|
$check2_demo = nil
|
|
$showVarsWin[tmppath.path] = nil
|
|
tmppath.destroy
|
|
}),
|
|
:padx=>4, :pady=>4)
|
|
frame.grid_columnconfigure(0, :weight=>1)
|
|
}.pack('side'=>'bottom', 'fill'=>'x')
|
|
|
|
|
|
# checkbutton
|
|
TkCheckButton.new(base_frame, :text=>'Safety Check', :variable=>safety,
|
|
:relief=>:flat, :onvalue=>'all', :offvalue=>'none',
|
|
:tristatevalue=>'partial'){
|
|
pack('side'=>'top', 'pady'=>2, 'anchor'=>'w')
|
|
}
|
|
|
|
[ TkCheckButton.new(base_frame, 'text'=>'Wipers OK', 'variable'=>wipers),
|
|
TkCheckButton.new(base_frame, 'text'=>'Brakes OK', 'variable'=>brakes),
|
|
TkCheckButton.new(base_frame, 'text'=>'Driver Sober', 'variable'=>sober)
|
|
].each{|w|
|
|
w.relief('flat')
|
|
w.pack('side'=>'top', 'padx'=>15, 'pady'=>2, 'anchor'=>'w')
|
|
}
|
|
|
|
# tristate check
|
|
in_check = false
|
|
tristate_check = proc{|n1,n2,op|
|
|
unless in_check
|
|
in_check = true
|
|
begin
|
|
if n1 == safety
|
|
if safety == 'none'
|
|
wipers.value = 0
|
|
brakes.value = 0
|
|
sober.value = 0
|
|
elsif safety == 'all'
|
|
wipers.value = 1
|
|
brakes.value = 1
|
|
sober.value = 1
|
|
end
|
|
else
|
|
if wipers == 1 && brakes == 1 && sober == 1
|
|
safety.value = 'all'
|
|
elsif wipers == 1 || brakes == 1 || sober == 1
|
|
safety.value = 'partial'
|
|
else
|
|
safety.value = 'none'
|
|
end
|
|
end
|
|
ensure
|
|
in_check = false
|
|
end
|
|
end
|
|
}
|
|
|
|
[wipers, brakes, sober, safety].each{|v| v.trace('w', tristate_check)}
|