# # checkbutton widget demo2 (called by 'widget') # # toplevel widget ¤¬Â¸ºß¤¹¤ì¤Ðºï½ü¤¹¤ë if defined?($check2_demo) && $check2_demo $check2_demo.destroy $check2_demo = nil end # demo ÍѤΠtoplevel widget ¤òÀ¸À® $check2_demo = TkToplevel.new {|w| title("Checkbutton Demonstration 2") iconname("check2") positionWindow(w) } # label À¸À® msg = TkLabel.new($check2_demo) { font $font wraplength '4i' justify 'left' text "²¼¤Ë¤Ï£´¤Ä¤Î¥Á¥§¥Ã¥¯¥Ü¥¿¥ó¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥¯¥ê¥Ã¥¯¤¹¤ë¤È¥Ü¥¿¥ó¤ÎÁªÂò¾õÂÖ¤¬ÊѤï¤ê¡¢TclÊÑ¿ô¡ÊTkVariable¥ª¥Ö¥¸¥§¥¯¥È¤Ç¥¢¥¯¥»¥¹¤Ç¤¤Þ¤¹¡Ë¤Ë¤½¤Î¥Ü¥¿¥ó¤Î¾õÂÖ¤ò¼¨¤¹ÃͤòÀßÄꤷ¤Þ¤¹¡£ºÇ½é¤Î¥Ü¥¿¥ó¤Î¾õÂ֤Ͼ¤Î£³¤Ä¤Î¥Ü¥¿¥ó¤Î¾õÂ֤ˤâ°Í¸¤·¤ÆÊѲ½¤·¤Þ¤¹¡£¤â¤·£³¤Ä¤Î¥Ü¥¿¥ó¤Î°ìÉô¤À¤±¤Ë¥Á¥§¥Ã¥¯¤¬ÉÕ¤±¤é¤ì¤Æ¤¤¤ë¾ì¹ç¡¢ºÇ½é¤Î¥Ü¥¿¥ó¤Ï¥È¥é¥¤¥¹¥Æ¡¼¥È¡Ê£³¾õÂ֡˥⡼¥É¤Ç¤Îɽ¼¨¤ò¹Ô¤¤¤Þ¤¹¡£¸½ºß¤ÎÊÑ¿ô¤ÎÃͤò¸«¤ë¤Ë¤Ï¡ÖÊÑ¿ô»²¾È¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£" } msg.pack('side'=>'top') # ÊÑ¿ôÀ¸À® safety = TkVariable.new(0) wipers = TkVariable.new(0) brakes = TkVariable.new(0) sober = TkVariable.new(0) # frame À¸À® TkFrame.new($check2_demo) {|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=>'ÊÑ¿ô»²¾È', :image=>$image['view'], :compound=>:left, :command=>proc{ showVars($check2_demo, ['safety', safety], ['wipers', wipers], ['brakes', brakes], ['sober', sober]) }), TkButton.new(frame, :text=>'¥³¡¼¥É»²¾È', :image=>$image['view'], :compound=>:left, :command=>proc{showCode 'check2'}), TkButton.new(frame, :text=>'ÊĤ¸¤ë', :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($check2_demo, :text=>'°ÂÁ´À¸¡ºº', :variable=>safety, :relief=>:flat, :onvalue=>'all', :offvalue=>'none', :tristatevalue=>'partial'){ pack('side'=>'top', 'pady'=>2, 'anchor'=>'w') } [ TkCheckButton.new($check2_demo, 'text'=>'¥ï¥¤¥Ñ¡¼ OK', 'variable'=>wipers), TkCheckButton.new($check2_demo, 'text'=>'¥Ö¥ì¡¼¥ OK', 'variable'=>brakes), TkCheckButton.new($check2_demo, 'text'=>'±¿Å¾¼ê ÁÇÌÌ', '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)}