# # widet demo 'puzzle' (called by 'widget') # # toplevel widget ¤¬Â¸ºß¤¹¤ì¤Ðºï½ü¤¹¤ë if defined?($puzzle_demo) && $puzzle_demo $puzzle_demo.destroy $puzzle_demo = nil end # demo ÍѤΠtoplevel widget ¤òÀ¸À® $puzzle_demo = TkToplevel.new {|w| title("15-Puzzle Demonstration") iconname("15-Puzzle") positionWindow(w) } # label À¸À® msg = TkLabel.new($puzzle_demo) { font $font wraplength '4i' justify 'left' text "²¼¤Î15-¥Ñ¥º¥ë¤Ï¥Ü¥¿¥ó¤ò½¸¤á¤Æ¤Ç¤¤Æ¤¤¤Þ¤¹¡£¶õ¤¤¤Æ¤¤¤ë½ê¤ÎÎ٤Υԡ¼¥¹¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢¤½¤Î¥Ô¡¼¥¹¤¬¤½¤Î¶õ¤¤¤Æ¤¤¤ë¾ì½ê¤Ë¥¹¥é¥¤¥É¤·¤Þ¤¹¡£¤³¤ÎÁàºî¤ò³¤±¡¢¥Ô¡¼¥¹¤¬¤½¤Î¿ô¤Î½ç¤Ë¾å¤«¤é²¼¡¢º¸¤«¤é±¦¤Ëʤ֤褦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£" } msg.pack('side'=>'top') # frame À¸À® TkFrame.new($puzzle_demo) {|frame| TkButton.new(frame) { #text 'λ²ò' text 'ÊĤ¸¤ë' command proc{ tmppath = $puzzle_demo $puzzle_demo = nil tmppath.destroy } }.pack('side'=>'left', 'expand'=>'yes') TkButton.new(frame) { text '¥³¡¼¥É»²¾È' command proc{showCode 'puzzle'} }.pack('side'=>'left', 'expand'=>'yes') }.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') # frame À¸À® # # Special trick: scrollbar widget ¤òÀ¸À®¤·¤Æ¤½¤Î trough color ¤òÍѤ¤¤ë¤³¤È¤Ç # ¶õÇòÉôʬ¤Î¤¿¤á¤Î°Å¿§¤òÁªÂò¤·¡¤ÀßÄꤹ¤ë # begin if Tk.windowingsystem() == 'aqua' frameSize = 160 else frameSize = 120 end rescue frameSize = 120 end s = TkScrollbar.new($puzzle_demo) base = TkFrame.new($puzzle_demo) { width frameSize height frameSize borderwidth 2 relief 'sunken' bg s['troughcolor'] } s.destroy base.pack('side'=>'top', 'padx'=>'1c', 'pady'=>'1c') # proc ¤Î¥¹¥³¡¼¥×¤òÊĤ¸¤ë¤¿¤á¡¤proc À¸À®¥á¥½¥Ã¥É¤òÍÑ°Õ # ¤³¤¦¤·¤Æ¤ª¤«¤Í¤Ð¡¤¥ë¡¼¥×Ãæ¤ÇÃͤ¬ÊѲ½¤¹¤ë num ¤Î±Æ¶Á¤ò¼õ¤±¤Æ # puzzleSwitch ¤ÎÂè 2 °ú¿ô¤¬ÊѲ½¤·¤Æ¤·¤Þ¤¤¡¤´üÂÔÄ̤ê¤Ë¤Ï¤Ê¤é¤Ê¤¤¡¥ def def_puzzleswitch_proc(w, num) proc{puzzleSwitch w, num} end $xpos = {} $ypos = {} order = [3,1,6,2,5,7,15,13,4,11,8,9,14,10,12] (0..14).each{|i| num = order[i] $xpos[num] = (i % 4) * 0.25 $ypos[num] = (i / 4) * 0.25 TkButton.new(base) {|w| relief 'raised' text num highlightthickness 0 command def_puzzleswitch_proc(w, num) }.place('relx'=>$xpos[num], 'rely'=>$ypos[num], 'relwidth'=>0.25, 'relheight'=>0.25) } $xpos['space'] = 0.75 $ypos['space'] = 0.75 ############ def puzzleSwitch(w, num) if ( ($ypos[num] >= ($ypos['space'] - 0.01)) \ && ($ypos[num] <= ($ypos['space'] + 0.01)) \ && ($xpos[num] >= ($xpos['space'] - 0.26)) \ && ($xpos[num] <= ($xpos['space'] + 0.26))) \ || (($xpos[num] >= ($xpos['space'] - 0.01)) \ && ($xpos[num] <= ($xpos['space'] + 0.01)) \ && ($ypos[num] >= ($ypos['space'] - 0.26)) \ && ($ypos[num] <= ($ypos['space'] + 0.26))) tmp = $xpos['space'] $xpos['space'] = $xpos[num] $xpos[num] = tmp tmp = $ypos['space'] $ypos['space'] = $ypos[num] $ypos[num] = tmp w.place('relx'=>$xpos[num], 'rely'=>$ypos[num]) end end