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

* ext/tk/*: Support new features of Tcl/Tk8.6b1 and minor bug fixes. ( [KNOWN BUG] Ruby/Tk on Ruby 1.9 will not work on Cygwin. ) * ext/tk/*: Unify sources between Ruby 1.8 & 1.9. Improve default_widget_set handling. * ext/tk/*: Multi-TkInterpreter (multi-tk.rb) works on Ruby 1.8 & 1.9. ( [KNOWN BUG] On Ruby 1.8, join to a long term Thread on Tk callbacks may freeze. On Ruby 1.9, cannot create a second master interpreter (creating slaves are OK); supported master interpreter is the default master interpreter only. ) * ext/tk/lib/tkextlib/*: Update supported versions of Tk extensions. Tcllib 1.8/Tklib 0.4.1 ==> Tcllib 1.11.1/Tklib 0.5 BWidgets 1.7 ==> BWidgets 1.8 TkTable 2.9 ==> TkTable 2.10 TkTreeCtrl 2005-12-02 ==> TkTreeCtrl 2.2.9 Tile 0.8.0/8.5.1 ==> Tile 0.8.3/8.6b1 IncrTcl 2005-02-14 ==> IncrTcl 2008-12-15 TclX 2005-02-07 ==> TclX 2008-12-15 Trofs 0.4.3 ==> Trofs 0.4.4 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@24064 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)}
|