mirror of
https://github.com/ruby/ruby.git
synced 2025-09-17 17:43:59 +02:00

* ext/tk/lib/tk.rb: avoid trouble when finalize TclTkIp. * ext/tk/lib/tk.rb, ext/tk/lib/tk/*: help to fix troubles when use Ttk widgets on old Tk scripts. * ext/tk/sample/*: update and add demo stcipts. some of them are introduction about new features of Tcl/Tk8.5. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@16544 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)}
|