tk 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1060) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +6 -0
  4. data/BSDL +22 -0
  5. data/ChangeLog.tkextlib +949 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +56 -0
  8. data/MANUAL_tcltklib.eng +467 -0
  9. data/MANUAL_tcltklib.ja +578 -0
  10. data/README.1st +19 -0
  11. data/README.ActiveTcl +62 -0
  12. data/README.fork +34 -0
  13. data/README.macosx-aqua +67 -0
  14. data/README.md +33 -0
  15. data/README.tcltklib +152 -0
  16. data/Rakefile +16 -0
  17. data/bin/console +14 -0
  18. data/bin/setup +8 -0
  19. data/ext/tk/config_list.in +41 -0
  20. data/ext/tk/extconf.rb +2098 -0
  21. data/ext/tk/old-extconf.rb +441 -0
  22. data/ext/tk/stubs.c +592 -0
  23. data/ext/tk/stubs.h +33 -0
  24. data/ext/tk/tcltklib.c +11066 -0
  25. data/ext/tk/tkutil/extconf.rb +14 -0
  26. data/ext/tk/tkutil/tkutil.c +1900 -0
  27. data/lib/README +30 -0
  28. data/lib/multi-tk.rb +3743 -0
  29. data/lib/remote-tk.rb +527 -0
  30. data/lib/tcltk.rb +369 -0
  31. data/lib/tk.rb +5758 -0
  32. data/lib/tk/after.rb +7 -0
  33. data/lib/tk/autoload.rb +763 -0
  34. data/lib/tk/bgerror.rb +30 -0
  35. data/lib/tk/bindtag.rb +139 -0
  36. data/lib/tk/busy.rb +119 -0
  37. data/lib/tk/button.rb +32 -0
  38. data/lib/tk/canvas.rb +847 -0
  39. data/lib/tk/canvastag.rb +460 -0
  40. data/lib/tk/checkbutton.rb +33 -0
  41. data/lib/tk/clipboard.rb +76 -0
  42. data/lib/tk/clock.rb +72 -0
  43. data/lib/tk/composite.rb +485 -0
  44. data/lib/tk/console.rb +53 -0
  45. data/lib/tk/dialog.rb +327 -0
  46. data/lib/tk/encodedstr.rb +188 -0
  47. data/lib/tk/entry.rb +121 -0
  48. data/lib/tk/event.rb +563 -0
  49. data/lib/tk/font.rb +2352 -0
  50. data/lib/tk/fontchooser.rb +181 -0
  51. data/lib/tk/frame.rb +133 -0
  52. data/lib/tk/grid.rb +280 -0
  53. data/lib/tk/image.rb +396 -0
  54. data/lib/tk/itemconfig.rb +1222 -0
  55. data/lib/tk/itemfont.rb +328 -0
  56. data/lib/tk/kinput.rb +72 -0
  57. data/lib/tk/label.rb +23 -0
  58. data/lib/tk/labelframe.rb +32 -0
  59. data/lib/tk/listbox.rb +285 -0
  60. data/lib/tk/macpkg.rb +81 -0
  61. data/lib/tk/menu.rb +719 -0
  62. data/lib/tk/menubar.rb +138 -0
  63. data/lib/tk/menuspec.rb +457 -0
  64. data/lib/tk/message.rb +25 -0
  65. data/lib/tk/mngfocus.rb +34 -0
  66. data/lib/tk/msgcat.rb +300 -0
  67. data/lib/tk/namespace.rb +547 -0
  68. data/lib/tk/optiondb.rb +372 -0
  69. data/lib/tk/optionobj.rb +213 -0
  70. data/lib/tk/pack.rb +108 -0
  71. data/lib/tk/package.rb +144 -0
  72. data/lib/tk/palette.rb +56 -0
  73. data/lib/tk/panedwindow.rb +261 -0
  74. data/lib/tk/place.rb +129 -0
  75. data/lib/tk/radiobutton.rb +74 -0
  76. data/lib/tk/root.rb +96 -0
  77. data/lib/tk/scale.rb +113 -0
  78. data/lib/tk/scrollable.rb +83 -0
  79. data/lib/tk/scrollbar.rb +184 -0
  80. data/lib/tk/scrollbox.rb +40 -0
  81. data/lib/tk/selection.rb +87 -0
  82. data/lib/tk/spinbox.rb +145 -0
  83. data/lib/tk/tagfont.rb +44 -0
  84. data/lib/tk/text.rb +1605 -0
  85. data/lib/tk/textimage.rb +89 -0
  86. data/lib/tk/textmark.rb +205 -0
  87. data/lib/tk/texttag.rb +322 -0
  88. data/lib/tk/textwindow.rb +155 -0
  89. data/lib/tk/timer.rb +666 -0
  90. data/lib/tk/tk_mac.rb +159 -0
  91. data/lib/tk/toplevel.rb +265 -0
  92. data/lib/tk/ttk_selector.rb +99 -0
  93. data/lib/tk/txtwin_abst.rb +40 -0
  94. data/lib/tk/validation.rb +398 -0
  95. data/lib/tk/variable.rb +1797 -0
  96. data/lib/tk/virtevent.rb +140 -0
  97. data/lib/tk/winfo.rb +393 -0
  98. data/lib/tk/winpkg.rb +157 -0
  99. data/lib/tk/wm.rb +553 -0
  100. data/lib/tk/xim.rb +123 -0
  101. data/lib/tkafter.rb +5 -0
  102. data/lib/tkbgerror.rb +5 -0
  103. data/lib/tkcanvas.rb +5 -0
  104. data/lib/tkclass.rb +48 -0
  105. data/lib/tkconsole.rb +5 -0
  106. data/lib/tkdialog.rb +5 -0
  107. data/lib/tkentry.rb +5 -0
  108. data/lib/tkextlib/ICONS.rb +14 -0
  109. data/lib/tkextlib/ICONS/icons.rb +130 -0
  110. data/lib/tkextlib/ICONS/setup.rb +9 -0
  111. data/lib/tkextlib/SUPPORT_STATUS +193 -0
  112. data/lib/tkextlib/blt.rb +190 -0
  113. data/lib/tkextlib/blt/barchart.rb +80 -0
  114. data/lib/tkextlib/blt/bitmap.rb +113 -0
  115. data/lib/tkextlib/blt/busy.rb +84 -0
  116. data/lib/tkextlib/blt/component.rb +2219 -0
  117. data/lib/tkextlib/blt/container.rb +29 -0
  118. data/lib/tkextlib/blt/cutbuffer.rb +24 -0
  119. data/lib/tkextlib/blt/dragdrop.rb +270 -0
  120. data/lib/tkextlib/blt/eps.rb +33 -0
  121. data/lib/tkextlib/blt/graph.rb +68 -0
  122. data/lib/tkextlib/blt/htext.rb +113 -0
  123. data/lib/tkextlib/blt/setup.rb +9 -0
  124. data/lib/tkextlib/blt/spline.rb +24 -0
  125. data/lib/tkextlib/blt/stripchart.rb +75 -0
  126. data/lib/tkextlib/blt/table.rb +413 -0
  127. data/lib/tkextlib/blt/tabnotebook.rb +111 -0
  128. data/lib/tkextlib/blt/tabset.rb +505 -0
  129. data/lib/tkextlib/blt/ted.rb +69 -0
  130. data/lib/tkextlib/blt/tile.rb +26 -0
  131. data/lib/tkextlib/blt/tile/button.rb +17 -0
  132. data/lib/tkextlib/blt/tile/checkbutton.rb +18 -0
  133. data/lib/tkextlib/blt/tile/frame.rb +17 -0
  134. data/lib/tkextlib/blt/tile/label.rb +17 -0
  135. data/lib/tkextlib/blt/tile/radiobutton.rb +18 -0
  136. data/lib/tkextlib/blt/tile/scrollbar.rb +17 -0
  137. data/lib/tkextlib/blt/tile/toplevel.rb +17 -0
  138. data/lib/tkextlib/blt/tree.rb +1059 -0
  139. data/lib/tkextlib/blt/treeview.rb +1288 -0
  140. data/lib/tkextlib/blt/unix_dnd.rb +142 -0
  141. data/lib/tkextlib/blt/vector.rb +257 -0
  142. data/lib/tkextlib/blt/watch.rb +176 -0
  143. data/lib/tkextlib/blt/win_printer.rb +62 -0
  144. data/lib/tkextlib/blt/winop.rb +108 -0
  145. data/lib/tkextlib/bwidget.rb +154 -0
  146. data/lib/tkextlib/bwidget/arrowbutton.rb +22 -0
  147. data/lib/tkextlib/bwidget/bitmap.rb +22 -0
  148. data/lib/tkextlib/bwidget/button.rb +32 -0
  149. data/lib/tkextlib/bwidget/buttonbox.rb +91 -0
  150. data/lib/tkextlib/bwidget/combobox.rb +63 -0
  151. data/lib/tkextlib/bwidget/dialog.rb +195 -0
  152. data/lib/tkextlib/bwidget/dragsite.rb +32 -0
  153. data/lib/tkextlib/bwidget/dropsite.rb +40 -0
  154. data/lib/tkextlib/bwidget/dynamichelp.rb +64 -0
  155. data/lib/tkextlib/bwidget/entry.rb +44 -0
  156. data/lib/tkextlib/bwidget/label.rb +42 -0
  157. data/lib/tkextlib/bwidget/labelentry.rb +81 -0
  158. data/lib/tkextlib/bwidget/labelframe.rb +53 -0
  159. data/lib/tkextlib/bwidget/listbox.rb +362 -0
  160. data/lib/tkextlib/bwidget/mainframe.rb +133 -0
  161. data/lib/tkextlib/bwidget/messagedlg.rb +193 -0
  162. data/lib/tkextlib/bwidget/notebook.rb +167 -0
  163. data/lib/tkextlib/bwidget/pagesmanager.rb +74 -0
  164. data/lib/tkextlib/bwidget/panedwindow.rb +43 -0
  165. data/lib/tkextlib/bwidget/panelframe.rb +68 -0
  166. data/lib/tkextlib/bwidget/passwddlg.rb +45 -0
  167. data/lib/tkextlib/bwidget/progressbar.rb +21 -0
  168. data/lib/tkextlib/bwidget/progressdlg.rb +59 -0
  169. data/lib/tkextlib/bwidget/scrollableframe.rb +41 -0
  170. data/lib/tkextlib/bwidget/scrolledwindow.rb +49 -0
  171. data/lib/tkextlib/bwidget/scrollview.rb +26 -0
  172. data/lib/tkextlib/bwidget/selectcolor.rb +74 -0
  173. data/lib/tkextlib/bwidget/selectfont.rb +92 -0
  174. data/lib/tkextlib/bwidget/separator.rb +21 -0
  175. data/lib/tkextlib/bwidget/setup.rb +9 -0
  176. data/lib/tkextlib/bwidget/spinbox.rb +99 -0
  177. data/lib/tkextlib/bwidget/statusbar.rb +63 -0
  178. data/lib/tkextlib/bwidget/titleframe.rb +34 -0
  179. data/lib/tkextlib/bwidget/tree.rb +501 -0
  180. data/lib/tkextlib/bwidget/widget.rb +130 -0
  181. data/lib/tkextlib/itcl.rb +14 -0
  182. data/lib/tkextlib/itcl/incr_tcl.rb +179 -0
  183. data/lib/tkextlib/itcl/setup.rb +14 -0
  184. data/lib/tkextlib/itk.rb +14 -0
  185. data/lib/tkextlib/itk/incr_tk.rb +447 -0
  186. data/lib/tkextlib/itk/setup.rb +14 -0
  187. data/lib/tkextlib/iwidgets.rb +95 -0
  188. data/lib/tkextlib/iwidgets/buttonbox.rb +122 -0
  189. data/lib/tkextlib/iwidgets/calendar.rb +126 -0
  190. data/lib/tkextlib/iwidgets/canvasprintbox.rb +54 -0
  191. data/lib/tkextlib/iwidgets/canvasprintdialog.rb +39 -0
  192. data/lib/tkextlib/iwidgets/checkbox.rb +131 -0
  193. data/lib/tkextlib/iwidgets/combobox.rb +105 -0
  194. data/lib/tkextlib/iwidgets/dateentry.rb +21 -0
  195. data/lib/tkextlib/iwidgets/datefield.rb +59 -0
  196. data/lib/tkextlib/iwidgets/dialog.rb +21 -0
  197. data/lib/tkextlib/iwidgets/dialogshell.rb +122 -0
  198. data/lib/tkextlib/iwidgets/disjointlistbox.rb +51 -0
  199. data/lib/tkextlib/iwidgets/entryfield.rb +186 -0
  200. data/lib/tkextlib/iwidgets/extbutton.rb +41 -0
  201. data/lib/tkextlib/iwidgets/extfileselectionbox.rb +47 -0
  202. data/lib/tkextlib/iwidgets/extfileselectiondialog.rb +34 -0
  203. data/lib/tkextlib/iwidgets/feedback.rb +36 -0
  204. data/lib/tkextlib/iwidgets/fileselectionbox.rb +47 -0
  205. data/lib/tkextlib/iwidgets/fileselectiondialog.rb +34 -0
  206. data/lib/tkextlib/iwidgets/finddialog.rb +43 -0
  207. data/lib/tkextlib/iwidgets/hierarchy.rb +366 -0
  208. data/lib/tkextlib/iwidgets/hyperhelp.rb +51 -0
  209. data/lib/tkextlib/iwidgets/labeledframe.rb +40 -0
  210. data/lib/tkextlib/iwidgets/labeledwidget.rb +46 -0
  211. data/lib/tkextlib/iwidgets/mainwindow.rb +68 -0
  212. data/lib/tkextlib/iwidgets/menubar.rb +213 -0
  213. data/lib/tkextlib/iwidgets/messagebox.rb +94 -0
  214. data/lib/tkextlib/iwidgets/messagedialog.rb +21 -0
  215. data/lib/tkextlib/iwidgets/notebook.rb +176 -0
  216. data/lib/tkextlib/iwidgets/optionmenu.rb +93 -0
  217. data/lib/tkextlib/iwidgets/panedwindow.rb +135 -0
  218. data/lib/tkextlib/iwidgets/promptdialog.rb +132 -0
  219. data/lib/tkextlib/iwidgets/pushbutton.rb +36 -0
  220. data/lib/tkextlib/iwidgets/radiobox.rb +122 -0
  221. data/lib/tkextlib/iwidgets/scopedobject.rb +25 -0
  222. data/lib/tkextlib/iwidgets/scrolledcanvas.rb +354 -0
  223. data/lib/tkextlib/iwidgets/scrolledframe.rb +60 -0
  224. data/lib/tkextlib/iwidgets/scrolledhtml.rb +59 -0
  225. data/lib/tkextlib/iwidgets/scrolledlistbox.rb +208 -0
  226. data/lib/tkextlib/iwidgets/scrolledtext.rb +569 -0
  227. data/lib/tkextlib/iwidgets/scrolledwidget.rb +21 -0
  228. data/lib/tkextlib/iwidgets/selectionbox.rb +103 -0
  229. data/lib/tkextlib/iwidgets/selectiondialog.rb +93 -0
  230. data/lib/tkextlib/iwidgets/setup.rb +9 -0
  231. data/lib/tkextlib/iwidgets/shell.rb +39 -0
  232. data/lib/tkextlib/iwidgets/spindate.rb +49 -0
  233. data/lib/tkextlib/iwidgets/spinint.rb +31 -0
  234. data/lib/tkextlib/iwidgets/spinner.rb +170 -0
  235. data/lib/tkextlib/iwidgets/spintime.rb +49 -0
  236. data/lib/tkextlib/iwidgets/tabnotebook.rb +182 -0
  237. data/lib/tkextlib/iwidgets/tabset.rb +146 -0
  238. data/lib/tkextlib/iwidgets/timeentry.rb +26 -0
  239. data/lib/tkextlib/iwidgets/timefield.rb +59 -0
  240. data/lib/tkextlib/iwidgets/toolbar.rb +113 -0
  241. data/lib/tkextlib/iwidgets/watch.rb +57 -0
  242. data/lib/tkextlib/pkg_checker.rb +185 -0
  243. data/lib/tkextlib/setup.rb +9 -0
  244. data/lib/tkextlib/tcllib.rb +106 -0
  245. data/lib/tkextlib/tcllib/README +135 -0
  246. data/lib/tkextlib/tcllib/autoscroll.rb +159 -0
  247. data/lib/tkextlib/tcllib/calendar.rb +56 -0
  248. data/lib/tkextlib/tcllib/canvas_sqmap.rb +37 -0
  249. data/lib/tkextlib/tcllib/canvas_zoom.rb +22 -0
  250. data/lib/tkextlib/tcllib/chatwidget.rb +152 -0
  251. data/lib/tkextlib/tcllib/crosshair.rb +118 -0
  252. data/lib/tkextlib/tcllib/ctext.rb +161 -0
  253. data/lib/tkextlib/tcllib/cursor.rb +98 -0
  254. data/lib/tkextlib/tcllib/dateentry.rb +63 -0
  255. data/lib/tkextlib/tcllib/datefield.rb +58 -0
  256. data/lib/tkextlib/tcllib/diagrams.rb +225 -0
  257. data/lib/tkextlib/tcllib/dialog.rb +85 -0
  258. data/lib/tkextlib/tcllib/getstring.rb +135 -0
  259. data/lib/tkextlib/tcllib/history.rb +74 -0
  260. data/lib/tkextlib/tcllib/ico.rb +147 -0
  261. data/lib/tkextlib/tcllib/ip_entry.rb +76 -0
  262. data/lib/tkextlib/tcllib/khim.rb +69 -0
  263. data/lib/tkextlib/tcllib/menuentry.rb +48 -0
  264. data/lib/tkextlib/tcllib/ntext.rb +147 -0
  265. data/lib/tkextlib/tcllib/panelframe.rb +79 -0
  266. data/lib/tkextlib/tcllib/plotchart.rb +1405 -0
  267. data/lib/tkextlib/tcllib/ruler.rb +66 -0
  268. data/lib/tkextlib/tcllib/screenruler.rb +69 -0
  269. data/lib/tkextlib/tcllib/scrolledwindow.rb +58 -0
  270. data/lib/tkextlib/tcllib/scrollwin.rb +62 -0
  271. data/lib/tkextlib/tcllib/setup.rb +9 -0
  272. data/lib/tkextlib/tcllib/statusbar.rb +80 -0
  273. data/lib/tkextlib/tcllib/style.rb +62 -0
  274. data/lib/tkextlib/tcllib/superframe.rb +52 -0
  275. data/lib/tkextlib/tcllib/swaplist.rb +151 -0
  276. data/lib/tkextlib/tcllib/tablelist.rb +29 -0
  277. data/lib/tkextlib/tcllib/tablelist_core.rb +1073 -0
  278. data/lib/tkextlib/tcllib/tablelist_tile.rb +44 -0
  279. data/lib/tkextlib/tcllib/tkpiechart.rb +315 -0
  280. data/lib/tkextlib/tcllib/toolbar.rb +176 -0
  281. data/lib/tkextlib/tcllib/tooltip.rb +105 -0
  282. data/lib/tkextlib/tcllib/validator.rb +66 -0
  283. data/lib/tkextlib/tcllib/widget.rb +83 -0
  284. data/lib/tkextlib/tclx.rb +14 -0
  285. data/lib/tkextlib/tclx/setup.rb +9 -0
  286. data/lib/tkextlib/tclx/tclx.rb +75 -0
  287. data/lib/tkextlib/tile.rb +450 -0
  288. data/lib/tkextlib/tile/dialog.rb +103 -0
  289. data/lib/tkextlib/tile/setup.rb +9 -0
  290. data/lib/tkextlib/tile/sizegrip.rb +33 -0
  291. data/lib/tkextlib/tile/style.rb +337 -0
  292. data/lib/tkextlib/tile/tbutton.rb +35 -0
  293. data/lib/tkextlib/tile/tcheckbutton.rb +39 -0
  294. data/lib/tkextlib/tile/tcombobox.rb +56 -0
  295. data/lib/tkextlib/tile/tentry.rb +50 -0
  296. data/lib/tkextlib/tile/tframe.rb +35 -0
  297. data/lib/tkextlib/tile/tlabel.rb +35 -0
  298. data/lib/tkextlib/tile/tlabelframe.rb +39 -0
  299. data/lib/tkextlib/tile/tmenubutton.rb +39 -0
  300. data/lib/tkextlib/tile/tnotebook.rb +148 -0
  301. data/lib/tkextlib/tile/tpaned.rb +246 -0
  302. data/lib/tkextlib/tile/tprogressbar.rb +58 -0
  303. data/lib/tkextlib/tile/tradiobutton.rb +39 -0
  304. data/lib/tkextlib/tile/treeview.rb +1337 -0
  305. data/lib/tkextlib/tile/tscale.rb +57 -0
  306. data/lib/tkextlib/tile/tscrollbar.rb +64 -0
  307. data/lib/tkextlib/tile/tseparator.rb +35 -0
  308. data/lib/tkextlib/tile/tspinbox.rb +108 -0
  309. data/lib/tkextlib/tile/tsquare.rb +31 -0
  310. data/lib/tkextlib/tkDND.rb +19 -0
  311. data/lib/tkextlib/tkDND/setup.rb +9 -0
  312. data/lib/tkextlib/tkDND/shape.rb +126 -0
  313. data/lib/tkextlib/tkDND/tkdnd.rb +183 -0
  314. data/lib/tkextlib/tkHTML.rb +14 -0
  315. data/lib/tkextlib/tkHTML/htmlwidget.rb +454 -0
  316. data/lib/tkextlib/tkHTML/setup.rb +9 -0
  317. data/lib/tkextlib/tkimg.rb +37 -0
  318. data/lib/tkextlib/tkimg/README +26 -0
  319. data/lib/tkextlib/tkimg/bmp.rb +34 -0
  320. data/lib/tkextlib/tkimg/dted.rb +34 -0
  321. data/lib/tkextlib/tkimg/gif.rb +34 -0
  322. data/lib/tkextlib/tkimg/ico.rb +34 -0
  323. data/lib/tkextlib/tkimg/jpeg.rb +34 -0
  324. data/lib/tkextlib/tkimg/pcx.rb +34 -0
  325. data/lib/tkextlib/tkimg/pixmap.rb +45 -0
  326. data/lib/tkextlib/tkimg/png.rb +34 -0
  327. data/lib/tkextlib/tkimg/ppm.rb +34 -0
  328. data/lib/tkextlib/tkimg/ps.rb +34 -0
  329. data/lib/tkextlib/tkimg/raw.rb +34 -0
  330. data/lib/tkextlib/tkimg/setup.rb +9 -0
  331. data/lib/tkextlib/tkimg/sgi.rb +34 -0
  332. data/lib/tkextlib/tkimg/sun.rb +34 -0
  333. data/lib/tkextlib/tkimg/tga.rb +34 -0
  334. data/lib/tkextlib/tkimg/tiff.rb +34 -0
  335. data/lib/tkextlib/tkimg/window.rb +34 -0
  336. data/lib/tkextlib/tkimg/xbm.rb +34 -0
  337. data/lib/tkextlib/tkimg/xpm.rb +34 -0
  338. data/lib/tkextlib/tktable.rb +15 -0
  339. data/lib/tkextlib/tktable/setup.rb +9 -0
  340. data/lib/tkextlib/tktable/tktable.rb +967 -0
  341. data/lib/tkextlib/tktrans.rb +15 -0
  342. data/lib/tkextlib/tktrans/setup.rb +9 -0
  343. data/lib/tkextlib/tktrans/tktrans.rb +65 -0
  344. data/lib/tkextlib/treectrl.rb +14 -0
  345. data/lib/tkextlib/treectrl/setup.rb +9 -0
  346. data/lib/tkextlib/treectrl/tktreectrl.rb +2523 -0
  347. data/lib/tkextlib/trofs.rb +14 -0
  348. data/lib/tkextlib/trofs/setup.rb +9 -0
  349. data/lib/tkextlib/trofs/trofs.rb +52 -0
  350. data/lib/tkextlib/version.rb +7 -0
  351. data/lib/tkextlib/vu.rb +49 -0
  352. data/lib/tkextlib/vu/bargraph.rb +62 -0
  353. data/lib/tkextlib/vu/charts.rb +54 -0
  354. data/lib/tkextlib/vu/dial.rb +103 -0
  355. data/lib/tkextlib/vu/pie.rb +287 -0
  356. data/lib/tkextlib/vu/setup.rb +9 -0
  357. data/lib/tkextlib/vu/spinbox.rb +23 -0
  358. data/lib/tkextlib/winico.rb +15 -0
  359. data/lib/tkextlib/winico/setup.rb +9 -0
  360. data/lib/tkextlib/winico/winico.rb +225 -0
  361. data/lib/tkfont.rb +5 -0
  362. data/lib/tkmacpkg.rb +5 -0
  363. data/lib/tkmenubar.rb +5 -0
  364. data/lib/tkmngfocus.rb +5 -0
  365. data/lib/tkpalette.rb +5 -0
  366. data/lib/tkscrollbox.rb +5 -0
  367. data/lib/tktext.rb +5 -0
  368. data/lib/tkvirtevent.rb +5 -0
  369. data/lib/tkwinpkg.rb +5 -0
  370. data/old-README.tcltklib.ja +159 -0
  371. data/sample/24hr_clock.rb +287 -0
  372. data/sample/binding_sample.rb +88 -0
  373. data/sample/bindtag_sample.rb +128 -0
  374. data/sample/binstr_usage.rb +46 -0
  375. data/sample/btn_with_frame.rb +21 -0
  376. data/sample/cd_timer.rb +82 -0
  377. data/sample/cmd_res_test.rb +18 -0
  378. data/sample/cmd_resource +5 -0
  379. data/sample/demos-en/ChangeLog +64 -0
  380. data/sample/demos-en/ChangeLog.prev +9 -0
  381. data/sample/demos-en/README +138 -0
  382. data/sample/demos-en/README.1st +18 -0
  383. data/sample/demos-en/README.tkencoding +29 -0
  384. data/sample/demos-en/anilabel.rb +175 -0
  385. data/sample/demos-en/aniwave.rb +119 -0
  386. data/sample/demos-en/arrow.rb +250 -0
  387. data/sample/demos-en/bind.rb +128 -0
  388. data/sample/demos-en/bitmap.rb +76 -0
  389. data/sample/demos-en/browse1 +63 -0
  390. data/sample/demos-en/browse2 +82 -0
  391. data/sample/demos-en/button.rb +85 -0
  392. data/sample/demos-en/check.rb +73 -0
  393. data/sample/demos-en/check2.rb +110 -0
  394. data/sample/demos-en/clrpick.rb +88 -0
  395. data/sample/demos-en/colors.rb +159 -0
  396. data/sample/demos-en/combo.rb +97 -0
  397. data/sample/demos-en/cscroll.rb +137 -0
  398. data/sample/demos-en/ctext.rb +208 -0
  399. data/sample/demos-en/dialog1.rb +39 -0
  400. data/sample/demos-en/dialog2.rb +42 -0
  401. data/sample/demos-en/doc.org/README +7 -0
  402. data/sample/demos-en/doc.org/README.JP +14 -0
  403. data/sample/demos-en/doc.org/README.tk80 +46 -0
  404. data/sample/demos-en/doc.org/license.terms +39 -0
  405. data/sample/demos-en/doc.org/license.terms.tk80 +39 -0
  406. data/sample/demos-en/entry1.rb +59 -0
  407. data/sample/demos-en/entry2.rb +94 -0
  408. data/sample/demos-en/entry3.rb +221 -0
  409. data/sample/demos-en/filebox.rb +103 -0
  410. data/sample/demos-en/floor.rb +1724 -0
  411. data/sample/demos-en/floor2.rb +1723 -0
  412. data/sample/demos-en/form.rb +65 -0
  413. data/sample/demos-en/goldberg.rb +2007 -0
  414. data/sample/demos-en/hello +14 -0
  415. data/sample/demos-en/hscale.rb +76 -0
  416. data/sample/demos-en/icon.rb +106 -0
  417. data/sample/demos-en/image1.rb +66 -0
  418. data/sample/demos-en/image2.rb +108 -0
  419. data/sample/demos-en/image3.rb +126 -0
  420. data/sample/demos-en/items.rb +382 -0
  421. data/sample/demos-en/ixset +333 -0
  422. data/sample/demos-en/ixset2 +367 -0
  423. data/sample/demos-en/knightstour.rb +272 -0
  424. data/sample/demos-en/label.rb +73 -0
  425. data/sample/demos-en/labelframe.rb +96 -0
  426. data/sample/demos-en/mclist.rb +118 -0
  427. data/sample/demos-en/menu.rb +197 -0
  428. data/sample/demos-en/menu84.rb +216 -0
  429. data/sample/demos-en/menubu.rb +238 -0
  430. data/sample/demos-en/msgbox.rb +91 -0
  431. data/sample/demos-en/msgbox2.rb +92 -0
  432. data/sample/demos-en/paned1.rb +48 -0
  433. data/sample/demos-en/paned2.rb +95 -0
  434. data/sample/demos-en/pendulum.rb +241 -0
  435. data/sample/demos-en/plot.rb +125 -0
  436. data/sample/demos-en/puzzle.rb +135 -0
  437. data/sample/demos-en/radio.rb +87 -0
  438. data/sample/demos-en/radio2.rb +110 -0
  439. data/sample/demos-en/radio3.rb +118 -0
  440. data/sample/demos-en/rmt +268 -0
  441. data/sample/demos-en/rolodex +320 -0
  442. data/sample/demos-en/ruler.rb +206 -0
  443. data/sample/demos-en/sayings.rb +107 -0
  444. data/sample/demos-en/search.rb +188 -0
  445. data/sample/demos-en/spin.rb +66 -0
  446. data/sample/demos-en/square +81 -0
  447. data/sample/demos-en/states.rb +81 -0
  448. data/sample/demos-en/style.rb +232 -0
  449. data/sample/demos-en/tcolor +526 -0
  450. data/sample/demos-en/text.rb +129 -0
  451. data/sample/demos-en/textpeer.rb +77 -0
  452. data/sample/demos-en/timer +136 -0
  453. data/sample/demos-en/tkencoding.rb +43 -0
  454. data/sample/demos-en/toolbar.rb +131 -0
  455. data/sample/demos-en/tree.rb +120 -0
  456. data/sample/demos-en/ttkbut.rb +140 -0
  457. data/sample/demos-en/ttkmenu.rb +86 -0
  458. data/sample/demos-en/ttknote.rb +90 -0
  459. data/sample/demos-en/ttkpane.rb +214 -0
  460. data/sample/demos-en/ttkprogress.rb +67 -0
  461. data/sample/demos-en/twind.rb +292 -0
  462. data/sample/demos-en/twind2.rb +385 -0
  463. data/sample/demos-en/unicodeout.rb +115 -0
  464. data/sample/demos-en/vscale.rb +80 -0
  465. data/sample/demos-en/widget +1087 -0
  466. data/sample/demos-jp/README +54 -0
  467. data/sample/demos-jp/README.1st +20 -0
  468. data/sample/demos-jp/anilabel.rb +178 -0
  469. data/sample/demos-jp/aniwave.rb +121 -0
  470. data/sample/demos-jp/arrow.rb +248 -0
  471. data/sample/demos-jp/bind.rb +126 -0
  472. data/sample/demos-jp/bitmap.rb +75 -0
  473. data/sample/demos-jp/browse1 +63 -0
  474. data/sample/demos-jp/browse2 +82 -0
  475. data/sample/demos-jp/button.rb +84 -0
  476. data/sample/demos-jp/check.rb +71 -0
  477. data/sample/demos-jp/check2.rb +111 -0
  478. data/sample/demos-jp/clrpick.rb +85 -0
  479. data/sample/demos-jp/colors.rb +156 -0
  480. data/sample/demos-jp/combo.rb +99 -0
  481. data/sample/demos-jp/cscroll.rb +135 -0
  482. data/sample/demos-jp/ctext.rb +205 -0
  483. data/sample/demos-jp/dialog1.rb +40 -0
  484. data/sample/demos-jp/dialog2.rb +44 -0
  485. data/sample/demos-jp/doc.org/README +7 -0
  486. data/sample/demos-jp/doc.org/README.JP +14 -0
  487. data/sample/demos-jp/doc.org/README.tk80 +46 -0
  488. data/sample/demos-jp/doc.org/license.terms +39 -0
  489. data/sample/demos-jp/doc.org/license.terms.tk80 +39 -0
  490. data/sample/demos-jp/entry1.rb +61 -0
  491. data/sample/demos-jp/entry2.rb +92 -0
  492. data/sample/demos-jp/entry3.rb +226 -0
  493. data/sample/demos-jp/filebox.rb +103 -0
  494. data/sample/demos-jp/floor.rb +1722 -0
  495. data/sample/demos-jp/floor2.rb +1720 -0
  496. data/sample/demos-jp/form.rb +67 -0
  497. data/sample/demos-jp/goldberg.rb +2012 -0
  498. data/sample/demos-jp/hello +10 -0
  499. data/sample/demos-jp/hscale.rb +79 -0
  500. data/sample/demos-jp/icon.rb +104 -0
  501. data/sample/demos-jp/image1.rb +65 -0
  502. data/sample/demos-jp/image2.rb +107 -0
  503. data/sample/demos-jp/image3.rb +128 -0
  504. data/sample/demos-jp/items.rb +380 -0
  505. data/sample/demos-jp/ixset +333 -0
  506. data/sample/demos-jp/ixset2 +369 -0
  507. data/sample/demos-jp/knightstour.rb +274 -0
  508. data/sample/demos-jp/label.rb +70 -0
  509. data/sample/demos-jp/labelframe.rb +103 -0
  510. data/sample/demos-jp/mclist.rb +122 -0
  511. data/sample/demos-jp/menu.rb +202 -0
  512. data/sample/demos-jp/menu84.rb +214 -0
  513. data/sample/demos-jp/menu8x.rb +234 -0
  514. data/sample/demos-jp/menubu.rb +239 -0
  515. data/sample/demos-jp/msgbox.rb +90 -0
  516. data/sample/demos-jp/msgbox2.rb +91 -0
  517. data/sample/demos-jp/paned1.rb +53 -0
  518. data/sample/demos-jp/paned2.rb +101 -0
  519. data/sample/demos-jp/pendulum.rb +243 -0
  520. data/sample/demos-jp/plot.rb +127 -0
  521. data/sample/demos-jp/puzzle.rb +132 -0
  522. data/sample/demos-jp/radio.rb +85 -0
  523. data/sample/demos-jp/radio2.rb +113 -0
  524. data/sample/demos-jp/radio3.rb +120 -0
  525. data/sample/demos-jp/rmt +268 -0
  526. data/sample/demos-jp/rolodex +320 -0
  527. data/sample/demos-jp/rolodex-j +300 -0
  528. data/sample/demos-jp/ruler.rb +204 -0
  529. data/sample/demos-jp/sayings.rb +104 -0
  530. data/sample/demos-jp/search.rb +185 -0
  531. data/sample/demos-jp/spin.rb +72 -0
  532. data/sample/demos-jp/square +81 -0
  533. data/sample/demos-jp/states.rb +75 -0
  534. data/sample/demos-jp/style.rb +271 -0
  535. data/sample/demos-jp/tcolor +534 -0
  536. data/sample/demos-jp/text.rb +121 -0
  537. data/sample/demos-jp/textpeer.rb +83 -0
  538. data/sample/demos-jp/timer +136 -0
  539. data/sample/demos-jp/toolbar.rb +137 -0
  540. data/sample/demos-jp/tree.rb +121 -0
  541. data/sample/demos-jp/ttkbut.rb +146 -0
  542. data/sample/demos-jp/ttkmenu.rb +92 -0
  543. data/sample/demos-jp/ttknote.rb +98 -0
  544. data/sample/demos-jp/ttkpane.rb +217 -0
  545. data/sample/demos-jp/ttkprogress.rb +72 -0
  546. data/sample/demos-jp/twind.rb +293 -0
  547. data/sample/demos-jp/twind2.rb +385 -0
  548. data/sample/demos-jp/unicodeout.rb +120 -0
  549. data/sample/demos-jp/vscale.rb +81 -0
  550. data/sample/demos-jp/widget +1122 -0
  551. data/sample/editable_listbox.rb +149 -0
  552. data/sample/encstr_usage.rb +31 -0
  553. data/sample/figmemo_sample.rb +457 -0
  554. data/sample/images/earth.gif +0 -0
  555. data/sample/images/earthris.gif +0 -0
  556. data/sample/images/face.xbm +173 -0
  557. data/sample/images/flagdown.xbm +27 -0
  558. data/sample/images/flagup.xbm +27 -0
  559. data/sample/images/gray25.xbm +6 -0
  560. data/sample/images/grey.25 +6 -0
  561. data/sample/images/grey.5 +6 -0
  562. data/sample/images/letters.xbm +27 -0
  563. data/sample/images/noletter.xbm +27 -0
  564. data/sample/images/pattern.xbm +6 -0
  565. data/sample/images/tcllogo.gif +0 -0
  566. data/sample/images/teapot.ppm +31 -0
  567. data/sample/irbtk.rb +31 -0
  568. data/sample/irbtkw.rbw +156 -0
  569. data/sample/iso2022-kr.txt +2 -0
  570. data/sample/menubar1.rb +52 -0
  571. data/sample/menubar2.rb +57 -0
  572. data/sample/menubar3.rb +73 -0
  573. data/sample/msgs_rb/README +3 -0
  574. data/sample/msgs_rb/cs.msg +84 -0
  575. data/sample/msgs_rb/de.msg +88 -0
  576. data/sample/msgs_rb/el.msg +98 -0
  577. data/sample/msgs_rb/en.msg +83 -0
  578. data/sample/msgs_rb/en_gb.msg +7 -0
  579. data/sample/msgs_rb/eo.msg +87 -0
  580. data/sample/msgs_rb/es.msg +84 -0
  581. data/sample/msgs_rb/fr.msg +84 -0
  582. data/sample/msgs_rb/it.msg +84 -0
  583. data/sample/msgs_rb/ja.msg +13 -0
  584. data/sample/msgs_rb/nl.msg +123 -0
  585. data/sample/msgs_rb/pl.msg +87 -0
  586. data/sample/msgs_rb/ru.msg +87 -0
  587. data/sample/msgs_rb2/README +5 -0
  588. data/sample/msgs_rb2/de.msg +88 -0
  589. data/sample/msgs_rb2/ja.msg +85 -0
  590. data/sample/msgs_tk/README +4 -0
  591. data/sample/msgs_tk/cs.msg +84 -0
  592. data/sample/msgs_tk/de.msg +88 -0
  593. data/sample/msgs_tk/el.msg +103 -0
  594. data/sample/msgs_tk/en.msg +83 -0
  595. data/sample/msgs_tk/en_gb.msg +7 -0
  596. data/sample/msgs_tk/eo.msg +87 -0
  597. data/sample/msgs_tk/es.msg +84 -0
  598. data/sample/msgs_tk/fr.msg +84 -0
  599. data/sample/msgs_tk/it.msg +84 -0
  600. data/sample/msgs_tk/ja.msg +13 -0
  601. data/sample/msgs_tk/license.terms +39 -0
  602. data/sample/msgs_tk/nl.msg +123 -0
  603. data/sample/msgs_tk/pl.msg +87 -0
  604. data/sample/msgs_tk/ru.msg +87 -0
  605. data/sample/multi-ip_sample.rb +104 -0
  606. data/sample/multi-ip_sample2.rb +30 -0
  607. data/sample/optobj_sample.rb +68 -0
  608. data/sample/propagate.rb +31 -0
  609. data/sample/remote-ip_sample.rb +34 -0
  610. data/sample/remote-ip_sample2.rb +57 -0
  611. data/sample/resource.en +13 -0
  612. data/sample/resource.ja +13 -0
  613. data/sample/safe-tk.rb +132 -0
  614. data/sample/scrollframe.rb +250 -0
  615. data/sample/tcltklib/batsu.gif +0 -0
  616. data/sample/tcltklib/lines0.tcl +42 -0
  617. data/sample/tcltklib/lines1.rb +51 -0
  618. data/sample/tcltklib/lines2.rb +55 -0
  619. data/sample/tcltklib/lines3.rb +55 -0
  620. data/sample/tcltklib/lines4.rb +55 -0
  621. data/sample/tcltklib/maru.gif +0 -0
  622. data/sample/tcltklib/safeTk.rb +23 -0
  623. data/sample/tcltklib/sample0.rb +40 -0
  624. data/sample/tcltklib/sample1.rb +635 -0
  625. data/sample/tcltklib/sample2.rb +452 -0
  626. data/sample/tkalignbox.rb +236 -0
  627. data/sample/tkballoonhelp.rb +221 -0
  628. data/sample/tkbiff.rb +156 -0
  629. data/sample/tkbrowse.rb +80 -0
  630. data/sample/tkcombobox.rb +498 -0
  631. data/sample/tkdialog.rb +62 -0
  632. data/sample/tkextlib/ICONS/Orig_LICENSE.txt +61 -0
  633. data/sample/tkextlib/ICONS/tkIcons +195 -0
  634. data/sample/tkextlib/ICONS/tkIcons-sample.kde +658 -0
  635. data/sample/tkextlib/ICONS/tkIcons.kde +195 -0
  636. data/sample/tkextlib/ICONS/viewIcons.rb +330 -0
  637. data/sample/tkextlib/blt/barchart5.rb +102 -0
  638. data/sample/tkextlib/blt/calendar.rb +118 -0
  639. data/sample/tkextlib/blt/graph6.rb +2223 -0
  640. data/sample/tkextlib/blt/graph7.rb +41 -0
  641. data/sample/tkextlib/blt/graph7a.rb +64 -0
  642. data/sample/tkextlib/blt/graph7b.rb +42 -0
  643. data/sample/tkextlib/blt/graph7c.rb +46 -0
  644. data/sample/tkextlib/blt/images/buckskin.gif +0 -0
  645. data/sample/tkextlib/blt/images/chalk.gif +0 -0
  646. data/sample/tkextlib/blt/images/qv100.t.gif +0 -0
  647. data/sample/tkextlib/blt/images/rain.gif +0 -0
  648. data/sample/tkextlib/blt/images/sample.gif +0 -0
  649. data/sample/tkextlib/blt/pareto.rb +91 -0
  650. data/sample/tkextlib/blt/plot1.rb +10 -0
  651. data/sample/tkextlib/blt/plot1b.rb +11 -0
  652. data/sample/tkextlib/blt/readme.txt +2 -0
  653. data/sample/tkextlib/blt/scripts/stipples.rb +157 -0
  654. data/sample/tkextlib/blt/winop1.rb +41 -0
  655. data/sample/tkextlib/blt/winop2.rb +29 -0
  656. data/sample/tkextlib/bwidget/Orig_LICENSE.txt +53 -0
  657. data/sample/tkextlib/bwidget/basic.rb +199 -0
  658. data/sample/tkextlib/bwidget/bwidget.xbm +46 -0
  659. data/sample/tkextlib/bwidget/demo.rb +244 -0
  660. data/sample/tkextlib/bwidget/dnd.rb +47 -0
  661. data/sample/tkextlib/bwidget/manager.rb +151 -0
  662. data/sample/tkextlib/bwidget/select.rb +83 -0
  663. data/sample/tkextlib/bwidget/tmpldlg.rb +222 -0
  664. data/sample/tkextlib/bwidget/tree.rb +290 -0
  665. data/sample/tkextlib/bwidget/x1.xbm +2258 -0
  666. data/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt +42 -0
  667. data/sample/tkextlib/iwidgets/catalog_demo/images/box.xbm +14 -0
  668. data/sample/tkextlib/iwidgets/catalog_demo/images/clear.gif +0 -0
  669. data/sample/tkextlib/iwidgets/catalog_demo/images/close.gif +0 -0
  670. data/sample/tkextlib/iwidgets/catalog_demo/images/copy.gif +0 -0
  671. data/sample/tkextlib/iwidgets/catalog_demo/images/cut.gif +0 -0
  672. data/sample/tkextlib/iwidgets/catalog_demo/images/exit.gif +0 -0
  673. data/sample/tkextlib/iwidgets/catalog_demo/images/find.gif +0 -0
  674. data/sample/tkextlib/iwidgets/catalog_demo/images/help.gif +0 -0
  675. data/sample/tkextlib/iwidgets/catalog_demo/images/line.xbm +14 -0
  676. data/sample/tkextlib/iwidgets/catalog_demo/images/mag.gif +0 -0
  677. data/sample/tkextlib/iwidgets/catalog_demo/images/new.gif +0 -0
  678. data/sample/tkextlib/iwidgets/catalog_demo/images/open.gif +0 -0
  679. data/sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm +14 -0
  680. data/sample/tkextlib/iwidgets/catalog_demo/images/paste.gif +0 -0
  681. data/sample/tkextlib/iwidgets/catalog_demo/images/points.xbm +14 -0
  682. data/sample/tkextlib/iwidgets/catalog_demo/images/poly.gif +0 -0
  683. data/sample/tkextlib/iwidgets/catalog_demo/images/print.gif +0 -0
  684. data/sample/tkextlib/iwidgets/catalog_demo/images/ruler.gif +0 -0
  685. data/sample/tkextlib/iwidgets/catalog_demo/images/save.gif +0 -0
  686. data/sample/tkextlib/iwidgets/catalog_demo/images/select.gif +0 -0
  687. data/sample/tkextlib/iwidgets/catalog_demo/images/text.xbm +14 -0
  688. data/sample/tkextlib/iwidgets/sample/buttonbox.rb +23 -0
  689. data/sample/tkextlib/iwidgets/sample/calendar.rb +11 -0
  690. data/sample/tkextlib/iwidgets/sample/canvasprintbox.rb +9 -0
  691. data/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb +9 -0
  692. data/sample/tkextlib/iwidgets/sample/checkbox.rb +13 -0
  693. data/sample/tkextlib/iwidgets/sample/combobox.rb +33 -0
  694. data/sample/tkextlib/iwidgets/sample/dateentry.rb +8 -0
  695. data/sample/tkextlib/iwidgets/sample/datefield.rb +9 -0
  696. data/sample/tkextlib/iwidgets/sample/dialog.rb +21 -0
  697. data/sample/tkextlib/iwidgets/sample/dialogshell.rb +15 -0
  698. data/sample/tkextlib/iwidgets/sample/disjointlistbox.rb +17 -0
  699. data/sample/tkextlib/iwidgets/sample/entryfield-1.rb +40 -0
  700. data/sample/tkextlib/iwidgets/sample/entryfield-2.rb +45 -0
  701. data/sample/tkextlib/iwidgets/sample/entryfield-3.rb +41 -0
  702. data/sample/tkextlib/iwidgets/sample/extbutton.rb +21 -0
  703. data/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb +9 -0
  704. data/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb +30 -0
  705. data/sample/tkextlib/iwidgets/sample/feedback.rb +11 -0
  706. data/sample/tkextlib/iwidgets/sample/fileselectionbox.rb +9 -0
  707. data/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb +29 -0
  708. data/sample/tkextlib/iwidgets/sample/finddialog.rb +16 -0
  709. data/sample/tkextlib/iwidgets/sample/hierarchy.rb +26 -0
  710. data/sample/tkextlib/iwidgets/sample/hyperhelp.rb +15 -0
  711. data/sample/tkextlib/iwidgets/sample/labeledframe.rb +15 -0
  712. data/sample/tkextlib/iwidgets/sample/labeledwidget.rb +14 -0
  713. data/sample/tkextlib/iwidgets/sample/mainwindow.rb +65 -0
  714. data/sample/tkextlib/iwidgets/sample/menubar.rb +125 -0
  715. data/sample/tkextlib/iwidgets/sample/menubar2.rb +45 -0
  716. data/sample/tkextlib/iwidgets/sample/messagebox1.rb +20 -0
  717. data/sample/tkextlib/iwidgets/sample/messagebox2.rb +20 -0
  718. data/sample/tkextlib/iwidgets/sample/messagedialog.rb +45 -0
  719. data/sample/tkextlib/iwidgets/sample/notebook.rb +31 -0
  720. data/sample/tkextlib/iwidgets/sample/notebook2.rb +31 -0
  721. data/sample/tkextlib/iwidgets/sample/optionmenu.rb +15 -0
  722. data/sample/tkextlib/iwidgets/sample/panedwindow.rb +23 -0
  723. data/sample/tkextlib/iwidgets/sample/panedwindow2.rb +23 -0
  724. data/sample/tkextlib/iwidgets/sample/promptdialog.rb +18 -0
  725. data/sample/tkextlib/iwidgets/sample/pushbutton.rb +10 -0
  726. data/sample/tkextlib/iwidgets/sample/radiobox.rb +14 -0
  727. data/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb +14 -0
  728. data/sample/tkextlib/iwidgets/sample/scrolledframe.rb +19 -0
  729. data/sample/tkextlib/iwidgets/sample/scrolledhtml.rb +16 -0
  730. data/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb +23 -0
  731. data/sample/tkextlib/iwidgets/sample/scrolledtext.rb +12 -0
  732. data/sample/tkextlib/iwidgets/sample/selectionbox.rb +20 -0
  733. data/sample/tkextlib/iwidgets/sample/selectiondialog.rb +13 -0
  734. data/sample/tkextlib/iwidgets/sample/shell.rb +18 -0
  735. data/sample/tkextlib/iwidgets/sample/spindate.rb +8 -0
  736. data/sample/tkextlib/iwidgets/sample/spinint.rb +11 -0
  737. data/sample/tkextlib/iwidgets/sample/spinner.rb +34 -0
  738. data/sample/tkextlib/iwidgets/sample/spintime.rb +8 -0
  739. data/sample/tkextlib/iwidgets/sample/tabnotebook.rb +27 -0
  740. data/sample/tkextlib/iwidgets/sample/tabnotebook2.rb +31 -0
  741. data/sample/tkextlib/iwidgets/sample/tabset.rb +35 -0
  742. data/sample/tkextlib/iwidgets/sample/timeentry.rb +8 -0
  743. data/sample/tkextlib/iwidgets/sample/timefield.rb +9 -0
  744. data/sample/tkextlib/iwidgets/sample/toolbar.rb +153 -0
  745. data/sample/tkextlib/iwidgets/sample/watch.rb +19 -0
  746. data/sample/tkextlib/tcllib/Orig_LICENSE.txt +46 -0
  747. data/sample/tkextlib/tcllib/datefield.rb +30 -0
  748. data/sample/tkextlib/tcllib/plotdemos1.rb +159 -0
  749. data/sample/tkextlib/tcllib/plotdemos2.rb +72 -0
  750. data/sample/tkextlib/tcllib/plotdemos3.rb +84 -0
  751. data/sample/tkextlib/tcllib/xyplot.rb +18 -0
  752. data/sample/tkextlib/tile/Orig_LICENSE.txt +30 -0
  753. data/sample/tkextlib/tile/demo.rb +984 -0
  754. data/sample/tkextlib/tile/iconlib.tcl +110 -0
  755. data/sample/tkextlib/tile/readme.txt +2 -0
  756. data/sample/tkextlib/tile/repeater.tcl +117 -0
  757. data/sample/tkextlib/tile/themes/blue/blue.tcl +149 -0
  758. data/sample/tkextlib/tile/themes/blue/blue/arrowdown-h.gif +0 -0
  759. data/sample/tkextlib/tile/themes/blue/blue/arrowdown-p.gif +0 -0
  760. data/sample/tkextlib/tile/themes/blue/blue/arrowdown.gif +0 -0
  761. data/sample/tkextlib/tile/themes/blue/blue/arrowleft-h.gif +0 -0
  762. data/sample/tkextlib/tile/themes/blue/blue/arrowleft-p.gif +0 -0
  763. data/sample/tkextlib/tile/themes/blue/blue/arrowleft.gif +0 -0
  764. data/sample/tkextlib/tile/themes/blue/blue/arrowright-h.gif +0 -0
  765. data/sample/tkextlib/tile/themes/blue/blue/arrowright-p.gif +0 -0
  766. data/sample/tkextlib/tile/themes/blue/blue/arrowright.gif +0 -0
  767. data/sample/tkextlib/tile/themes/blue/blue/arrowup-h.gif +0 -0
  768. data/sample/tkextlib/tile/themes/blue/blue/arrowup-p.gif +0 -0
  769. data/sample/tkextlib/tile/themes/blue/blue/arrowup.gif +0 -0
  770. data/sample/tkextlib/tile/themes/blue/blue/button-h.gif +0 -0
  771. data/sample/tkextlib/tile/themes/blue/blue/button-n.gif +0 -0
  772. data/sample/tkextlib/tile/themes/blue/blue/button-n.xcf +0 -0
  773. data/sample/tkextlib/tile/themes/blue/blue/button-p.gif +0 -0
  774. data/sample/tkextlib/tile/themes/blue/blue/check-hc.gif +0 -0
  775. data/sample/tkextlib/tile/themes/blue/blue/check-hu.gif +0 -0
  776. data/sample/tkextlib/tile/themes/blue/blue/check-nc.gif +0 -0
  777. data/sample/tkextlib/tile/themes/blue/blue/check-nu.gif +0 -0
  778. data/sample/tkextlib/tile/themes/blue/blue/radio-hc.gif +0 -0
  779. data/sample/tkextlib/tile/themes/blue/blue/radio-hu.gif +0 -0
  780. data/sample/tkextlib/tile/themes/blue/blue/radio-nc.gif +0 -0
  781. data/sample/tkextlib/tile/themes/blue/blue/radio-nu.gif +0 -0
  782. data/sample/tkextlib/tile/themes/blue/blue/sb-thumb-p.gif +0 -0
  783. data/sample/tkextlib/tile/themes/blue/blue/sb-thumb.gif +0 -0
  784. data/sample/tkextlib/tile/themes/blue/blue/sb-vthumb-p.gif +0 -0
  785. data/sample/tkextlib/tile/themes/blue/blue/sb-vthumb.gif +0 -0
  786. data/sample/tkextlib/tile/themes/blue/blue/slider-p.gif +0 -0
  787. data/sample/tkextlib/tile/themes/blue/blue/slider.gif +0 -0
  788. data/sample/tkextlib/tile/themes/blue/blue/vslider-p.gif +0 -0
  789. data/sample/tkextlib/tile/themes/blue/blue/vslider.gif +0 -0
  790. data/sample/tkextlib/tile/themes/blue/pkgIndex.tcl +6 -0
  791. data/sample/tkextlib/tile/themes/keramik/keramik.tcl +194 -0
  792. data/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-n.gif +0 -0
  793. data/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-p.gif +0 -0
  794. data/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-n.gif +0 -0
  795. data/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-p.gif +0 -0
  796. data/sample/tkextlib/tile/themes/keramik/keramik/arrowright-n.gif +0 -0
  797. data/sample/tkextlib/tile/themes/keramik/keramik/arrowright-p.gif +0 -0
  798. data/sample/tkextlib/tile/themes/keramik/keramik/arrowup-n.gif +0 -0
  799. data/sample/tkextlib/tile/themes/keramik/keramik/arrowup-p.gif +0 -0
  800. data/sample/tkextlib/tile/themes/keramik/keramik/button-d.gif +0 -0
  801. data/sample/tkextlib/tile/themes/keramik/keramik/button-h.gif +0 -0
  802. data/sample/tkextlib/tile/themes/keramik/keramik/button-n.gif +0 -0
  803. data/sample/tkextlib/tile/themes/keramik/keramik/button-p.gif +0 -0
  804. data/sample/tkextlib/tile/themes/keramik/keramik/button-s.gif +0 -0
  805. data/sample/tkextlib/tile/themes/keramik/keramik/check-c.gif +0 -0
  806. data/sample/tkextlib/tile/themes/keramik/keramik/check-u.gif +0 -0
  807. data/sample/tkextlib/tile/themes/keramik/keramik/hsb-n.gif +0 -0
  808. data/sample/tkextlib/tile/themes/keramik/keramik/hsb-p.gif +0 -0
  809. data/sample/tkextlib/tile/themes/keramik/keramik/hslider-n.gif +0 -0
  810. data/sample/tkextlib/tile/themes/keramik/keramik/mbut-a.gif +0 -0
  811. data/sample/tkextlib/tile/themes/keramik/keramik/mbut-arrow-n.gif +0 -0
  812. data/sample/tkextlib/tile/themes/keramik/keramik/mbut-d.gif +0 -0
  813. data/sample/tkextlib/tile/themes/keramik/keramik/mbut-n.gif +0 -0
  814. data/sample/tkextlib/tile/themes/keramik/keramik/radio-c.gif +0 -0
  815. data/sample/tkextlib/tile/themes/keramik/keramik/radio-u.gif +0 -0
  816. data/sample/tkextlib/tile/themes/keramik/keramik/tab-n.gif +0 -0
  817. data/sample/tkextlib/tile/themes/keramik/keramik/tab-p.gif +0 -0
  818. data/sample/tkextlib/tile/themes/keramik/keramik/tbar-a.gif +0 -0
  819. data/sample/tkextlib/tile/themes/keramik/keramik/tbar-n.gif +0 -0
  820. data/sample/tkextlib/tile/themes/keramik/keramik/tbar-p.gif +0 -0
  821. data/sample/tkextlib/tile/themes/keramik/keramik/vsb-n.gif +0 -0
  822. data/sample/tkextlib/tile/themes/keramik/keramik/vsb-p.gif +0 -0
  823. data/sample/tkextlib/tile/themes/keramik/keramik/vslider-n.gif +0 -0
  824. data/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl +15 -0
  825. data/sample/tkextlib/tile/themes/kroc.rb +227 -0
  826. data/sample/tkextlib/tile/themes/kroc/kroc.tcl +163 -0
  827. data/sample/tkextlib/tile/themes/kroc/kroc/button-h.gif +0 -0
  828. data/sample/tkextlib/tile/themes/kroc/kroc/button-n.gif +0 -0
  829. data/sample/tkextlib/tile/themes/kroc/kroc/button-p.gif +0 -0
  830. data/sample/tkextlib/tile/themes/kroc/kroc/check-hc.gif +0 -0
  831. data/sample/tkextlib/tile/themes/kroc/kroc/check-hu.gif +0 -0
  832. data/sample/tkextlib/tile/themes/kroc/kroc/check-nc.gif +0 -0
  833. data/sample/tkextlib/tile/themes/kroc/kroc/check-nu.gif +0 -0
  834. data/sample/tkextlib/tile/themes/kroc/kroc/radio-hc.gif +0 -0
  835. data/sample/tkextlib/tile/themes/kroc/kroc/radio-hu.gif +0 -0
  836. data/sample/tkextlib/tile/themes/kroc/kroc/radio-nc.gif +0 -0
  837. data/sample/tkextlib/tile/themes/kroc/kroc/radio-nu.gif +0 -0
  838. data/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl +15 -0
  839. data/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl +16 -0
  840. data/sample/tkextlib/tile/themes/plastik/plastik.tcl +125 -0
  841. data/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-n.gif +0 -0
  842. data/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-p.gif +0 -0
  843. data/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-n.gif +0 -0
  844. data/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-p.gif +0 -0
  845. data/sample/tkextlib/tile/themes/plastik/plastik/arrowright-n.gif +0 -0
  846. data/sample/tkextlib/tile/themes/plastik/plastik/arrowright-p.gif +0 -0
  847. data/sample/tkextlib/tile/themes/plastik/plastik/arrowup-n.gif +0 -0
  848. data/sample/tkextlib/tile/themes/plastik/plastik/arrowup-p.gif +0 -0
  849. data/sample/tkextlib/tile/themes/plastik/plastik/button-h.gif +0 -0
  850. data/sample/tkextlib/tile/themes/plastik/plastik/button-n.gif +0 -0
  851. data/sample/tkextlib/tile/themes/plastik/plastik/button-p.gif +0 -0
  852. data/sample/tkextlib/tile/themes/plastik/plastik/check-hc.gif +0 -0
  853. data/sample/tkextlib/tile/themes/plastik/plastik/check-hu.gif +0 -0
  854. data/sample/tkextlib/tile/themes/plastik/plastik/check-nc.gif +0 -0
  855. data/sample/tkextlib/tile/themes/plastik/plastik/check-nu.gif +0 -0
  856. data/sample/tkextlib/tile/themes/plastik/plastik/check-pc.gif +0 -0
  857. data/sample/tkextlib/tile/themes/plastik/plastik/hsb-n.gif +0 -0
  858. data/sample/tkextlib/tile/themes/plastik/plastik/hslider-n.gif +0 -0
  859. data/sample/tkextlib/tile/themes/plastik/plastik/radio-hc.gif +0 -0
  860. data/sample/tkextlib/tile/themes/plastik/plastik/radio-hu.gif +0 -0
  861. data/sample/tkextlib/tile/themes/plastik/plastik/radio-nc.gif +0 -0
  862. data/sample/tkextlib/tile/themes/plastik/plastik/radio-nu.gif +0 -0
  863. data/sample/tkextlib/tile/themes/plastik/plastik/radio-pc.gif +0 -0
  864. data/sample/tkextlib/tile/themes/plastik/plastik/vsb-n.gif +0 -0
  865. data/sample/tkextlib/tile/themes/plastik/plastik/vslider-n.gif +0 -0
  866. data/sample/tkextlib/tile/toolbutton.tcl +152 -0
  867. data/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt +12 -0
  868. data/sample/tkextlib/tkHTML/README +12 -0
  869. data/sample/tkextlib/tkHTML/hv.rb +314 -0
  870. data/sample/tkextlib/tkHTML/page1/image1 +0 -0
  871. data/sample/tkextlib/tkHTML/page1/image10 +0 -0
  872. data/sample/tkextlib/tkHTML/page1/image11 +0 -0
  873. data/sample/tkextlib/tkHTML/page1/image12 +0 -0
  874. data/sample/tkextlib/tkHTML/page1/image13 +0 -0
  875. data/sample/tkextlib/tkHTML/page1/image14 +0 -0
  876. data/sample/tkextlib/tkHTML/page1/image2 +0 -0
  877. data/sample/tkextlib/tkHTML/page1/image3 +0 -0
  878. data/sample/tkextlib/tkHTML/page1/image4 +0 -0
  879. data/sample/tkextlib/tkHTML/page1/image5 +0 -0
  880. data/sample/tkextlib/tkHTML/page1/image6 +0 -0
  881. data/sample/tkextlib/tkHTML/page1/image7 +0 -0
  882. data/sample/tkextlib/tkHTML/page1/image8 +0 -0
  883. data/sample/tkextlib/tkHTML/page1/image9 +0 -0
  884. data/sample/tkextlib/tkHTML/page1/index.html +115 -0
  885. data/sample/tkextlib/tkHTML/page2/image1 +0 -0
  886. data/sample/tkextlib/tkHTML/page2/image10 +0 -0
  887. data/sample/tkextlib/tkHTML/page2/image11 +0 -0
  888. data/sample/tkextlib/tkHTML/page2/image12 +0 -0
  889. data/sample/tkextlib/tkHTML/page2/image13 +0 -0
  890. data/sample/tkextlib/tkHTML/page2/image14 +0 -0
  891. data/sample/tkextlib/tkHTML/page2/image15 +0 -0
  892. data/sample/tkextlib/tkHTML/page2/image16 +0 -0
  893. data/sample/tkextlib/tkHTML/page2/image17 +0 -0
  894. data/sample/tkextlib/tkHTML/page2/image18 +0 -0
  895. data/sample/tkextlib/tkHTML/page2/image19 +0 -0
  896. data/sample/tkextlib/tkHTML/page2/image2 +0 -0
  897. data/sample/tkextlib/tkHTML/page2/image20 +0 -0
  898. data/sample/tkextlib/tkHTML/page2/image21 +0 -0
  899. data/sample/tkextlib/tkHTML/page2/image22 +0 -0
  900. data/sample/tkextlib/tkHTML/page2/image23 +0 -0
  901. data/sample/tkextlib/tkHTML/page2/image24 +0 -0
  902. data/sample/tkextlib/tkHTML/page2/image25 +0 -0
  903. data/sample/tkextlib/tkHTML/page2/image26 +0 -0
  904. data/sample/tkextlib/tkHTML/page2/image27 +0 -0
  905. data/sample/tkextlib/tkHTML/page2/image28 +0 -0
  906. data/sample/tkextlib/tkHTML/page2/image29 +0 -0
  907. data/sample/tkextlib/tkHTML/page2/image3 +0 -0
  908. data/sample/tkextlib/tkHTML/page2/image30 +0 -0
  909. data/sample/tkextlib/tkHTML/page2/image31 +0 -0
  910. data/sample/tkextlib/tkHTML/page2/image32 +0 -0
  911. data/sample/tkextlib/tkHTML/page2/image33 +0 -0
  912. data/sample/tkextlib/tkHTML/page2/image34 +0 -0
  913. data/sample/tkextlib/tkHTML/page2/image35 +0 -0
  914. data/sample/tkextlib/tkHTML/page2/image36 +0 -0
  915. data/sample/tkextlib/tkHTML/page2/image37 +0 -0
  916. data/sample/tkextlib/tkHTML/page2/image38 +0 -0
  917. data/sample/tkextlib/tkHTML/page2/image39 +0 -0
  918. data/sample/tkextlib/tkHTML/page2/image4 +0 -0
  919. data/sample/tkextlib/tkHTML/page2/image5 +0 -0
  920. data/sample/tkextlib/tkHTML/page2/image6 +0 -0
  921. data/sample/tkextlib/tkHTML/page2/image7 +0 -0
  922. data/sample/tkextlib/tkHTML/page2/image8 +0 -0
  923. data/sample/tkextlib/tkHTML/page2/image9 +0 -0
  924. data/sample/tkextlib/tkHTML/page2/index.html +433 -0
  925. data/sample/tkextlib/tkHTML/page3/image1 +0 -0
  926. data/sample/tkextlib/tkHTML/page3/image10 +0 -0
  927. data/sample/tkextlib/tkHTML/page3/image11 +0 -0
  928. data/sample/tkextlib/tkHTML/page3/image12 +0 -0
  929. data/sample/tkextlib/tkHTML/page3/image13 +0 -0
  930. data/sample/tkextlib/tkHTML/page3/image14 +0 -0
  931. data/sample/tkextlib/tkHTML/page3/image2 +0 -0
  932. data/sample/tkextlib/tkHTML/page3/image3 +0 -0
  933. data/sample/tkextlib/tkHTML/page3/image4 +0 -0
  934. data/sample/tkextlib/tkHTML/page3/image5 +0 -0
  935. data/sample/tkextlib/tkHTML/page3/image6 +0 -0
  936. data/sample/tkextlib/tkHTML/page3/image7 +0 -0
  937. data/sample/tkextlib/tkHTML/page3/image8 +0 -0
  938. data/sample/tkextlib/tkHTML/page3/image9 +0 -0
  939. data/sample/tkextlib/tkHTML/page3/index.html +2787 -0
  940. data/sample/tkextlib/tkHTML/page4/image1 +0 -0
  941. data/sample/tkextlib/tkHTML/page4/image2 +0 -0
  942. data/sample/tkextlib/tkHTML/page4/image3 +0 -0
  943. data/sample/tkextlib/tkHTML/page4/image4 +0 -0
  944. data/sample/tkextlib/tkHTML/page4/image5 +0 -0
  945. data/sample/tkextlib/tkHTML/page4/image6 +0 -0
  946. data/sample/tkextlib/tkHTML/page4/image7 +0 -0
  947. data/sample/tkextlib/tkHTML/page4/image8 +0 -0
  948. data/sample/tkextlib/tkHTML/page4/image9 +0 -0
  949. data/sample/tkextlib/tkHTML/page4/index.html +768 -0
  950. data/sample/tkextlib/tkHTML/ss.rb +437 -0
  951. data/sample/tkextlib/tkimg/demo.rb +1479 -0
  952. data/sample/tkextlib/tkimg/license_terms_of_Img_extension +41 -0
  953. data/sample/tkextlib/tkimg/readme.txt +3 -0
  954. data/sample/tkextlib/tktable/Orig_LICENSE.txt +52 -0
  955. data/sample/tkextlib/tktable/basic.rb +61 -0
  956. data/sample/tkextlib/tktable/buttons.rb +77 -0
  957. data/sample/tkextlib/tktable/command.rb +90 -0
  958. data/sample/tkextlib/tktable/debug.rb +102 -0
  959. data/sample/tkextlib/tktable/dynarows.rb +100 -0
  960. data/sample/tkextlib/tktable/maxsize.rb +68 -0
  961. data/sample/tkextlib/tktable/spreadsheet.rb +138 -0
  962. data/sample/tkextlib/tktable/tcllogo.gif +0 -0
  963. data/sample/tkextlib/tktable/valid.rb +89 -0
  964. data/sample/tkextlib/treectrl/bitmaps.rb +77 -0
  965. data/sample/tkextlib/treectrl/demo.rb +1306 -0
  966. data/sample/tkextlib/treectrl/explorer.rb +431 -0
  967. data/sample/tkextlib/treectrl/help.rb +405 -0
  968. data/sample/tkextlib/treectrl/imovie.rb +131 -0
  969. data/sample/tkextlib/treectrl/layout.rb +160 -0
  970. data/sample/tkextlib/treectrl/mailwasher.rb +270 -0
  971. data/sample/tkextlib/treectrl/outlook-folders.rb +125 -0
  972. data/sample/tkextlib/treectrl/outlook-newgroup.rb +449 -0
  973. data/sample/tkextlib/treectrl/pics/big-dll.gif +0 -0
  974. data/sample/tkextlib/treectrl/pics/big-exe.gif +0 -0
  975. data/sample/tkextlib/treectrl/pics/big-file.gif +0 -0
  976. data/sample/tkextlib/treectrl/pics/big-folder.gif +0 -0
  977. data/sample/tkextlib/treectrl/pics/big-txt.gif +0 -0
  978. data/sample/tkextlib/treectrl/pics/checked.gif +0 -0
  979. data/sample/tkextlib/treectrl/pics/file.gif +0 -0
  980. data/sample/tkextlib/treectrl/pics/folder-closed.gif +0 -0
  981. data/sample/tkextlib/treectrl/pics/folder-open.gif +0 -0
  982. data/sample/tkextlib/treectrl/pics/help-book-closed.gif +0 -0
  983. data/sample/tkextlib/treectrl/pics/help-book-open.gif +0 -0
  984. data/sample/tkextlib/treectrl/pics/help-page.gif +0 -0
  985. data/sample/tkextlib/treectrl/pics/imovie-01.gif +0 -0
  986. data/sample/tkextlib/treectrl/pics/imovie-02.gif +0 -0
  987. data/sample/tkextlib/treectrl/pics/imovie-03.gif +0 -0
  988. data/sample/tkextlib/treectrl/pics/imovie-04.gif +0 -0
  989. data/sample/tkextlib/treectrl/pics/imovie-05.gif +0 -0
  990. data/sample/tkextlib/treectrl/pics/imovie-06.gif +0 -0
  991. data/sample/tkextlib/treectrl/pics/imovie-07.gif +0 -0
  992. data/sample/tkextlib/treectrl/pics/internet-check-off.gif +0 -0
  993. data/sample/tkextlib/treectrl/pics/internet-check-on.gif +0 -0
  994. data/sample/tkextlib/treectrl/pics/internet-print.gif +0 -0
  995. data/sample/tkextlib/treectrl/pics/internet-radio-off.gif +0 -0
  996. data/sample/tkextlib/treectrl/pics/internet-radio-on.gif +0 -0
  997. data/sample/tkextlib/treectrl/pics/internet-search.gif +0 -0
  998. data/sample/tkextlib/treectrl/pics/internet-security.gif +0 -0
  999. data/sample/tkextlib/treectrl/pics/mac-collapse.gif +0 -0
  1000. data/sample/tkextlib/treectrl/pics/mac-expand.gif +0 -0
  1001. data/sample/tkextlib/treectrl/pics/outlook-arrow.gif +0 -0
  1002. data/sample/tkextlib/treectrl/pics/outlook-clip.gif +0 -0
  1003. data/sample/tkextlib/treectrl/pics/outlook-deleted.gif +0 -0
  1004. data/sample/tkextlib/treectrl/pics/outlook-draft.gif +0 -0
  1005. data/sample/tkextlib/treectrl/pics/outlook-folder.gif +0 -0
  1006. data/sample/tkextlib/treectrl/pics/outlook-group.gif +0 -0
  1007. data/sample/tkextlib/treectrl/pics/outlook-inbox.gif +0 -0
  1008. data/sample/tkextlib/treectrl/pics/outlook-local.gif +0 -0
  1009. data/sample/tkextlib/treectrl/pics/outlook-main.gif +0 -0
  1010. data/sample/tkextlib/treectrl/pics/outlook-outbox.gif +0 -0
  1011. data/sample/tkextlib/treectrl/pics/outlook-read-2.gif +0 -0
  1012. data/sample/tkextlib/treectrl/pics/outlook-read.gif +0 -0
  1013. data/sample/tkextlib/treectrl/pics/outlook-sent.gif +0 -0
  1014. data/sample/tkextlib/treectrl/pics/outlook-server.gif +0 -0
  1015. data/sample/tkextlib/treectrl/pics/outlook-unread.gif +0 -0
  1016. data/sample/tkextlib/treectrl/pics/outlook-watch.gif +0 -0
  1017. data/sample/tkextlib/treectrl/pics/sky.gif +0 -0
  1018. data/sample/tkextlib/treectrl/pics/small-dll.gif +0 -0
  1019. data/sample/tkextlib/treectrl/pics/small-exe.gif +0 -0
  1020. data/sample/tkextlib/treectrl/pics/small-file.gif +0 -0
  1021. data/sample/tkextlib/treectrl/pics/small-folder.gif +0 -0
  1022. data/sample/tkextlib/treectrl/pics/small-txt.gif +0 -0
  1023. data/sample/tkextlib/treectrl/pics/unchecked.gif +0 -0
  1024. data/sample/tkextlib/treectrl/random.rb +509 -0
  1025. data/sample/tkextlib/treectrl/readme.txt +2 -0
  1026. data/sample/tkextlib/treectrl/www-options.rb +304 -0
  1027. data/sample/tkextlib/vu/Orig_LICENSE.txt +51 -0
  1028. data/sample/tkextlib/vu/README.txt +50 -0
  1029. data/sample/tkextlib/vu/canvItems.rb +91 -0
  1030. data/sample/tkextlib/vu/canvSticker.rb +83 -0
  1031. data/sample/tkextlib/vu/canvSticker2.rb +102 -0
  1032. data/sample/tkextlib/vu/dial_demo.rb +114 -0
  1033. data/sample/tkextlib/vu/m128_000.xbm +174 -0
  1034. data/sample/tkextlib/vu/oscilloscope.rb +69 -0
  1035. data/sample/tkextlib/vu/pie.rb +57 -0
  1036. data/sample/tkextlib/vu/vu_demo.rb +68 -0
  1037. data/sample/tkfrom.rb +133 -0
  1038. data/sample/tkhello.rb +11 -0
  1039. data/sample/tkline.rb +48 -0
  1040. data/sample/tkmenubutton.rb +136 -0
  1041. data/sample/tkmsgcat-load_rb.rb +103 -0
  1042. data/sample/tkmsgcat-load_rb2.rb +103 -0
  1043. data/sample/tkmsgcat-load_tk.rb +119 -0
  1044. data/sample/tkmulticolumnlist.rb +744 -0
  1045. data/sample/tkmultilistbox.rb +655 -0
  1046. data/sample/tkmultilistframe.rb +941 -0
  1047. data/sample/tkoptdb-safeTk.rb +74 -0
  1048. data/sample/tkoptdb.rb +107 -0
  1049. data/sample/tkrttimer.rb +78 -0
  1050. data/sample/tksleep_sample.rb +30 -0
  1051. data/sample/tktextframe.rb +282 -0
  1052. data/sample/tktextio.rb +1061 -0
  1053. data/sample/tktimer.rb +51 -0
  1054. data/sample/tktimer2.rb +48 -0
  1055. data/sample/tktimer3.rb +60 -0
  1056. data/sample/tktree.rb +104 -0
  1057. data/sample/tktree.tcl +305 -0
  1058. data/sample/ttk_wrapper.rb +155 -0
  1059. data/tk.gemspec +24 -0
  1060. metadata +1144 -0
@@ -0,0 +1,67 @@
1
+ # -*- coding: utf-8 -*-
2
+ # frozen_string_literal: false
3
+ #
4
+ # form widget demo (called by 'widget')
5
+ #
6
+
7
+ # toplevel widget が存在すれば削除する
8
+ if defined?($form_demo) && $form_demo
9
+ $form_demo.destroy
10
+ $form_demo = nil
11
+ end
12
+
13
+ # demo 用の toplevel widget を生成
14
+ $form_demo = TkToplevel.new {|w|
15
+ title("Form Demonstration")
16
+ iconname("form")
17
+ positionWindow(w)
18
+ }
19
+
20
+ base_frame = TkFrame.new($form_demo).pack(:fill=>:both, :expand=>true)
21
+
22
+ # label 生成
23
+ msg = TkLabel.new(base_frame) {
24
+ font $font
25
+ wraplength '4i'
26
+ justify 'left'
27
+ text "このウィンドウは簡単なフォーム入力用になっていて、さまざまなエントリに入力ができます。タブでエントリの切替えができます。"
28
+ }
29
+ msg.pack('side'=>'top', 'fill'=>'x')
30
+
31
+ # frame 生成
32
+ TkFrame.new(base_frame) {|frame|
33
+ TkButton.new(frame) {
34
+ #text '了解'
35
+ text '閉じる'
36
+ command proc{
37
+ tmppath = $form_demo
38
+ $form_demo = nil
39
+ tmppath.destroy
40
+ }
41
+ }.pack('side'=>'left', 'expand'=>'yes')
42
+
43
+ TkButton.new(frame) {
44
+ text 'コード参照'
45
+ command proc{showCode 'form'}
46
+ }.pack('side'=>'left', 'expand'=>'yes')
47
+ }.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m')
48
+
49
+ # entry 生成
50
+ form_data = []
51
+ (1..5).each{|i|
52
+ f = TkFrame.new(base_frame, 'bd'=>2)
53
+ e = TkEntry.new(f, 'relief'=>'sunken', 'width'=>40)
54
+ l = TkLabel.new(f)
55
+ e.pack('side'=>'right')
56
+ l.pack('side'=>'left')
57
+ form_data[i] = {'frame'=>f, 'entry'=>e, 'label'=>l}
58
+ }
59
+
60
+ # 文字列設定
61
+ form_data[1]['label'].text('名前:')
62
+ form_data[2]['label'].text('住所:')
63
+ form_data[5]['label'].text('電話:')
64
+
65
+ # pack
66
+ (1..5).each{|i| form_data[i]['frame'].pack('side'=>'top', 'fill'=>'x')}
67
+
@@ -0,0 +1,2012 @@
1
+ # -*- coding: utf-8 -*-
2
+ # frozen_string_literal: false
3
+ #
4
+ # Ruby/Tk Goldverg demo (called by 'widget')
5
+ #
6
+ # Based on Tcl/Tk8.5a2 widget demos.
7
+ # The following is the original comment of TkGoldberg.tcl.
8
+ #
9
+ #>>##+#################################################################
10
+ #>>#
11
+ #>># TkGoldberg.tcl
12
+ #>># by Keith Vetter, March 13, 2003
13
+ #>>#
14
+ #>># "Man will always find a difficult means to perform a simple task"
15
+ #>># Rube Goldberg
16
+ #>>#
17
+ #>># Reproduced here with permission.
18
+ #>>#
19
+ #>>##+#################################################################
20
+ #>>#
21
+ #>># Keith Vetter 2003-03-21: this started out as a simple little program
22
+ #>># but was so much fun that it grew and grew. So I apologize about the
23
+ #>># size but I just couldn't resist sharing it.
24
+ #>>#
25
+ #>># This is a whizzlet that does a Rube Goldberg type animation, the
26
+ #>># design of which comes from an New Years e-card from IncrediMail.
27
+ #>># That version had nice sound effects which I eschewed. On the other
28
+ #>># hand, that version was in black and white (actually dark blue and
29
+ #>># light blue) and this one is fully colorized.
30
+ #>>#
31
+ #>># One thing I learned from this project is that drawing filled complex
32
+ #>># objects on a canvas is really hard. More often than not I had to
33
+ #>># draw each item twice--once with the desired fill color but no
34
+ #>># outline, and once with no fill but with the outline. Another trick
35
+ #>># is erasing by drawing with the background color. Having a flood fill
36
+ #>># command would have been extremely helpful.
37
+ #>>#
38
+ #>># Two wiki pages were extremely helpful: Drawing rounded rectangles
39
+ #>># which I generalized into Drawing rounded polygons, and regular
40
+ #>># polygons which allowed me to convert ovals and arcs into polygons
41
+ #>># which could then be rotated (see Canvas Rotation). I also wrote
42
+ #>># Named Colors to aid in the color selection.
43
+ #>>#
44
+ #>># I could comment on the code, but it's just 26 state machines with
45
+ #>># lots of canvas create and move calls.
46
+
47
+ if defined?($goldberg_demo) && $goldberg_demo
48
+ $goldberg_demo.destroy
49
+ $goldberg_demo = nil
50
+ end
51
+
52
+ # demo toplevel widget
53
+ $goldberg_demo = TkToplevel.new {|w|
54
+ title("Tk Goldberg (demonstration)")
55
+ iconname("goldberg")
56
+ # positionWindow(w)
57
+ }
58
+
59
+ base_frame = TkFrame.new($goldberg_demo).pack(:fill=>:both, :expand=>true)
60
+
61
+ =begin
62
+ # label
63
+ msg = TkLabel.new($goldberg_demo) {
64
+ font 'Arial 10'
65
+ wraplength '4i'
66
+ justify 'left'
67
+ text "これは、あなたが自分のアニメーションをいかに入り組んだものにできるかを示すというだけのためのデモです。ボールをクリックすれば物が動き始めます!\n\n\"Man will always find a difficult means to perform a simple task\"\n - Rube Goldberg"
68
+ }
69
+ msg.pack('side'=>'top')
70
+ =end
71
+
72
+ =begin
73
+ # frame
74
+ TkFrame.new($goldberg_demo) {|frame|
75
+ TkButton.new(frame) {
76
+ text '閉じる'
77
+ command proc{
78
+ tmppath = $goldberg_demo
79
+ $goldberg_demo = nil
80
+ tmppath.destroy
81
+ }
82
+ }.pack('side'=>'left', 'expand'=>'yes')
83
+
84
+ TkButton.new(frame) {
85
+ text 'コード参照'
86
+ command proc{showCode 'goldberg'}
87
+ }.pack('side'=>'left', 'expand'=>'yes')
88
+
89
+ }.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m')
90
+ =end
91
+
92
+ #########################################
93
+
94
+ class TkGoldberg_Demo
95
+ def initialize(parent)
96
+ @parent = parent
97
+
98
+ @S = {}
99
+ @S['title'] = 'Tk Goldberg'
100
+ @S['speed'] = TkVariable.new(5)
101
+ @S['cnt'] = TkVariable.new(0)
102
+ # @S['message'] = TkVariable.new("\\nWelcome\\nto\\nRuby/Tk")
103
+ @S['message'] = TkVariable.new("\\n ようこそ!\\nRuby/Tk\\nの\\n世界へ")
104
+ @S['pause'] = TkVariable.new
105
+ @S['details'] = TkVariable.new(true)
106
+
107
+ @S['mode'] = TkVariable.new(:MSTART, :symbol)
108
+ # :MSTART, :MGO, :MPAUSE, :MSSTEP, :MBSTEP, :MDONE, :MDEBUG
109
+
110
+ # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
111
+ @speed = [1, 10, 20, 50, 80, 100, 150, 200, 300, 400, 500]
112
+
113
+ # colors
114
+ @C = {}
115
+ @C['fg'] = 'black'
116
+ # @C['bg'] = 'gray75'
117
+ @C['bg'] = 'cornflowerblue'
118
+
119
+ @C['0'] = 'white'; @C['1a'] = 'darkgreen'; @C['1b'] = 'yellow'
120
+ @C['2'] = 'red'; @C['3a'] = 'green'; @C['3b'] = 'darkblue'
121
+ @C['4'] = @C['fg']; @C['5a'] = 'brown'; @C['5b'] = 'white'
122
+ @C['6'] = 'magenta'; @C['7'] = 'green'; @C['8'] = @C['fg']
123
+ @C['9'] = 'blue4'; @C['10a'] = 'white'; @C['10b'] = 'cyan'
124
+ @C['11a'] = 'yellow'; @C['11b'] = 'mediumblue'; @C['12'] = 'tan2'
125
+ @C['13a'] = 'yellow'; @C['13b'] = 'red'; @C['14'] = 'white'
126
+ @C['15a'] = 'green'; @C['15b'] = 'yellow'; @C['16'] = 'gray65'
127
+ @C['17'] = '#A65353'; @C['18'] = @C['fg']; @C['19'] = 'gray50'
128
+ @C['20'] = 'cyan'; @C['21'] = 'gray65'; @C['22'] = @C['20']
129
+ @C['23a'] = 'blue'; @C['23b'] = 'red'; @C['23c'] = 'yellow'
130
+ @C['24a'] = 'red'; @C['24b'] = 'white';
131
+
132
+ @STEP = TkVariable.new_hash
133
+ @STEP.default_value_type = :numeric
134
+
135
+ @XY = {}
136
+
137
+ @XY6 = {
138
+ '-1'=>[366, 207], '-2'=>[349, 204], '-3'=>[359, 193], '-4'=>[375, 192],
139
+ '-5'=>[340, 190], '-6'=>[349, 177], '-7'=>[366, 177], '-8'=>[380, 176],
140
+ '-9'=>[332, 172], '-10'=>[342, 161], '-11'=>[357, 164],
141
+ '-12'=>[372, 163], '-13'=>[381, 149], '-14'=>[364, 151],
142
+ '-15'=>[349, 146], '-16'=>[333, 148], '0'=>[357, 219],
143
+ '1'=>[359, 261], '2'=>[359, 291], '3'=>[359, 318], '4'=>[361, 324],
144
+ '5'=>[365, 329], '6'=>[367, 334], '7'=>[367, 340], '8'=>[366, 346],
145
+ '9'=>[364, 350], '10'=>[361, 355], '11'=>[359, 370], '12'=>[359, 391],
146
+ '13,0'=>[360, 456], '13,1'=>[376, 456], '13,2'=>[346, 456],
147
+ '13,3'=>[330, 456], '13,4'=>[353, 444], '13,5'=>[368, 443],
148
+ '13,6'=>[339, 442], '13,7'=>[359, 431], '13,8'=>[380, 437],
149
+ '13,9'=>[345, 428], '13,10'=>[328, 434], '13,11'=>[373, 424],
150
+ '13,12'=>[331, 420], '13,13'=>[360, 417], '13,14'=>[345, 412],
151
+ '13,15'=>[376, 410], '13,16'=>[360, 403]
152
+ }
153
+
154
+ @timer = TkTimer.new(@speed[@S['speed'].numeric]){|timer|
155
+ timer.set_interval(go)
156
+ }
157
+
158
+ do_display
159
+ reset
160
+
161
+ # Start everything going
162
+ @timer.start
163
+ end
164
+
165
+ def do_display()
166
+ @ctrl = TkFrame.new(@parent, :relief=>:ridge, :bd=>2, :padx=>5, :pady=>5)
167
+ @screen = TkFrame.new(@parent, :bd=>2,
168
+ :relief=>:raised).pack(:side=>:left, :fill=>:both,
169
+ :expand=>true)
170
+
171
+ @canvas = TkCanvas.new(@parent, :width=>850, :height=>700,
172
+ :bg=>@C['bg'], :highlightthickness=>0){
173
+ scrollregion([0, 0, 1000, 1000]) # Kludge to move everything up
174
+ yview_moveto(0.05)
175
+ }.pack(:in=>@screen, :side=>:top, :fill=>:both, :expand=>true)
176
+
177
+ @canvas.bind('3'){ @pause.invoke }
178
+ @canvas.bind('Destroy'){ @timer.stop }
179
+
180
+ do_ctrl_frame
181
+ do_detail_frame
182
+
183
+ # msg = TkLabel.new(@parent, :bg=>@C['bg'], :fg=>'white') {
184
+ msg = Tk::Label.new(@parent, :bg=>@C['bg'], :fg=>'white') {
185
+ font 'Arial 10'
186
+ wraplength 600
187
+ justify 'left'
188
+ text "これは、あなたが自分のアニメーションをいかに入り組んだものにできるかを示すというだけのためのデモです。ボールをクリックすれば物が動き始めます!\n\"Man will always find a difficult means to perform a simple task\" - Rube Goldberg"
189
+ }
190
+ msg.place(:in=>@canvas, :relx=>0, :rely=>0, :anchor=>:nw)
191
+
192
+ frame = TkFrame.new(@parent, :bg=>@C['bg'])
193
+
194
+ # TkButton.new(frame, :bg=>@C['bg'], :activebackground=>@C['bg']) {
195
+ Tk::Button.new(frame, :bg=>@C['bg'], :activebackground=>@C['bg']) {
196
+ text '閉じる'
197
+ command proc{
198
+ tmppath = $goldberg_demo
199
+ $goldberg_demo = nil
200
+ tmppath.destroy
201
+ }
202
+ }.pack('side'=>'left')
203
+
204
+ # TkButton.new(frame, :bg=>@C['bg'], :activebackground=>@C['bg']) {
205
+ Tk::Button.new(frame, :bg=>@C['bg'], :activebackground=>@C['bg']) {
206
+ text 'コード参照'
207
+ command proc{showCode 'goldberg'}
208
+ }.pack('side'=>'left', 'padx'=>5)
209
+
210
+ # @show = TkButton.new(frame, :text=>'>>', :command=>proc{show_ctrl},
211
+ @show = Tk::Button.new(frame, :text=>'>>', :command=>proc{show_ctrl},
212
+ :bg=>@C['bg'], :activebackground=>@C['bg'])
213
+ @show.pack('side'=>'left')
214
+ frame.place(:in=>@canvas, :relx=>1, :rely=>0, :anchor=>:ne)
215
+
216
+ Tk.update
217
+ end
218
+
219
+ def do_ctrl_frame
220
+ @start = Tk::Button.new(@parent, :text=>'Start', :bd=>6,
221
+ :command=>proc{do_button(0)})
222
+ if font = @start['font']
223
+ @start.font(font.weight('bold'))
224
+ end
225
+
226
+ @pause = TkCheckbutton.new(@parent, :text=>'Pause', :font=>font,
227
+ :command=>proc{do_button(1)}, :relief=>:raised,
228
+ :variable=>@S['pause'])
229
+
230
+ @step = TkButton.new(@parent, :text=>'Single Step', :font=>font,
231
+ :command=>proc{do_button(2)})
232
+ @bstep = TkButton.new(@parent, :text=>'Big Step', :font=>font,
233
+ :command=>proc{do_button(4)})
234
+ @reset = TkButton.new(@parent, :text=>'Reset', :font=>font,
235
+ :command=>proc{do_button(3)})
236
+
237
+ @details = TkFrame.new(@parent, :bd=>2, :relief=>:ridge)
238
+ @detail = TkCheckbutton.new(@parent, :text=>'Details', :font=>font,
239
+ :relief=>:raised, :variable=>@S['details'])
240
+
241
+ @msg_entry = TkEntry.new(@parent, :textvariable=>@S['message'],
242
+ :justify=>:center)
243
+ @speed_scale = TkScale.new(@parent, :orient=>:horizontal,
244
+ :from=>1, :to=>10, :font=>font,
245
+ :variable=>@S['speed'], :bd=>2,
246
+ :relief=>:ridge, :showvalue=>false)
247
+ @about = TkButton.new(@parent, :text=>'About',
248
+ :command=>proc{about}, :font=>font)
249
+
250
+ Tk.grid(@start, :in=>@ctrl, :row=>0, :sticky=>:ew)
251
+ @ctrl.grid_rowconfigure(1, :minsize=>10)
252
+ Tk.grid(@pause, :in=>@ctrl, :row=>2, :sticky=>:ew)
253
+ Tk.grid(@step, :in=>@ctrl, :sticky=>:ew)
254
+ Tk.grid(@bstep, :in=>@ctrl, :sticky=>:ew)
255
+ Tk.grid(@reset, :in=>@ctrl, :sticky=>:ew)
256
+ @ctrl.grid_rowconfigure(10, :minsize=>20)
257
+ Tk.grid(@details, :in=>@ctrl, :row=>11, :sticky=>:ew)
258
+ Tk.grid(@detail, :in=>@details, :row=>0, :sticky=>:ew)
259
+ @ctrl.grid_rowconfigure(50, :weight=>1)
260
+
261
+ @S['mode'].trace('w', proc{|*args| active_GUI(*args)})
262
+ @S['details'].trace('w', proc{|*args| active_GUI(*args)})
263
+ @S['speed'].trace('w', proc{|*args| active_GUI(*args)})
264
+
265
+ Tk.grid(@msg_entry, :in=>@ctrl, :row=>98, :sticky=>:ew, :pady=>5)
266
+ Tk.grid(@speed_scale, :in=>@ctrl, :row=>99, :sticky=>:ew)
267
+ Tk.grid(@about, :in=>@ctrl, :row=>100, :sticky=>:ew)
268
+
269
+ @reset.bind('3'){@S['mode'].value = -1} # Debugging
270
+ end
271
+
272
+ def do_detail_frame
273
+ @f_details = TkFrame.new(@details)
274
+
275
+ @label = TkLabel.new(@f_details, :textvariable=>@S['cnt'],
276
+ :bd=>1, :relief=>:solid, :bg=>'white')
277
+ Tk.grid(@label, '-', '-', '-', :sticky=>:ew, :row=>0)
278
+
279
+ idx = 1
280
+ loop {
281
+ break unless respond_to?("move#{idx}")
282
+ l = TkLabel.new(@f_details, :text=>idx, :anchor=>:e,
283
+ :width=>2, :bd=>1, :relief=>:solid, :bg=>'white')
284
+ @STEP[idx] = 0
285
+ ll = TkLabel.new(@f_details, :textvariable=>@STEP.ref(idx),
286
+ :width=>5, :bd=>1, :relief=>:solid, :bg=>'white')
287
+ row = (idx + 1)/2
288
+ col = ((idx + 1) & 1) * 2
289
+ Tk.grid(l, :sticky=>:ew, :row=>row, :column=>col)
290
+ Tk.grid(ll, :sticky=>:ew, :row=>row, :column=>(col + 1))
291
+ idx += 1
292
+ }
293
+ @f_details.grid_columnconfigure(1, :weight=>1)
294
+ end
295
+
296
+ def show_ctrl
297
+ if @ctrl.winfo_mapped?
298
+ @ctrl.pack_forget
299
+ @show.text('>>')
300
+ else
301
+ @ctrl.pack(:side=>:right, :fill=>:both, :ipady=>5)
302
+ @show.text('<<')
303
+ end
304
+ end
305
+
306
+ def draw_all
307
+ reset_step
308
+ @canvas.delete(:all)
309
+ idx = 0
310
+ loop{
311
+ m = "draw#{idx}"
312
+ break unless respond_to?(m)
313
+ send(m)
314
+ idx += 1
315
+ }
316
+ end
317
+
318
+ def active_GUI(var1, var2, op)
319
+ st = {false=>:disabled, true=>:normal}
320
+
321
+ m = @S['mode'].to_sym
322
+ @S['pause'].value = (m == :MPAUSE)
323
+ @start.state(st[m != :MGO])
324
+ @pause.state(st[m != :MSTART && m != :MDONE])
325
+ @step.state(st[m != :MGO && m != :MDONE])
326
+ @bstep.state(st[m != :MGO && m != :MDONE])
327
+ @reset.state(st[m != :MSTART])
328
+
329
+ if @S['details'].bool
330
+ Tk.grid(@f_details, :in=>@details, :row=>2, :sticky=>:ew)
331
+ else
332
+ Tk.grid_forget(@f_details)
333
+ end
334
+ @speed_scale.label("Speed: #{@S['speed'].value}")
335
+ end
336
+
337
+ def start
338
+ @S['mode'].value = :MGO
339
+ end
340
+
341
+ def do_button(what)
342
+ case what
343
+ when 0 # Start
344
+ reset if @S['mode'].to_sym == :MDONE
345
+ @S['mode'].value = :MGO
346
+
347
+ when 1 # Pause
348
+ @S['mode'].value = ((@S['pause'].bool)? :MPAUSE: :MGO)
349
+
350
+ when 2 # Step
351
+ @S['mode'].value = :MSSTEP
352
+
353
+ when 3 # Reset
354
+ reset
355
+
356
+ when 4 # Big step
357
+ @S['mode'].value = :MBSTEP
358
+ end
359
+ end
360
+
361
+ def go(who = nil)
362
+ now = Tk::Clock.clicks(:milliseconds)
363
+ if who # Start here for debugging
364
+ @S['active'] = [who]
365
+ @S['mode'].value = :MGO
366
+ end
367
+ return if @S['mode'].to_sym == :MDEBUG # Debugging
368
+ # If not paused, do the next move
369
+ n = next_step if @S['mode'].to_sym != :MPAUSE
370
+ @S['mode'].value = :MPAUSE if @S['mode'].to_sym == :MSSTEP # Single step
371
+ @S['mode'].value = :MSSTEP if @S['mode'].to_sym == :MBSTEP && n # big step
372
+ elapsed = Tk::Clock.clicks(:milliseconds) - now
373
+ delay = @speed[@S['speed'].to_i] - elapsed
374
+ delay = 1 if delay <= 0
375
+ return delay
376
+ end
377
+
378
+ def next_step
379
+ retval = false # Return value
380
+
381
+ if @S['mode'].to_sym != :MSTART && @S['mode'].to_sym != :MDONE
382
+ @S['cnt'].numeric += 1
383
+ end
384
+ alive = []
385
+ @S['active'].each{|who|
386
+ who = who.to_i
387
+ n = send("move#{who}")
388
+ if (n & 1).nonzero? # This guy still alive
389
+ alive << who
390
+ end
391
+ if (n & 2).nonzero? # Next guy is active
392
+ alive << (who + 1)
393
+ retval = true
394
+ end
395
+ if (n & 4).nonzero? # End of puzzle flag
396
+ @S['mode'].value = :MDONE # Done mode
397
+ @S['active'] = [] # No more animation
398
+ return true
399
+ end
400
+ }
401
+ @S['active'] = alive
402
+ return retval
403
+ end
404
+
405
+ def about
406
+ msg = "Ruby/Tk Version ::\nby Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)\n\n"
407
+ msg += "Original Version ::\n"
408
+ msg += "#{@S['title']}\nby Keith Vetter, March 2003\n(Reproduced by kind permission of the author)\n\n"
409
+ msg += "Man will always find a difficult means to perform a simple task"
410
+ msg += "\nRube Goldberg"
411
+ Tk.messageBox(:message=>msg, :title=>'About')
412
+ end
413
+
414
+ ################################################################
415
+ #
416
+ # All the drawing and moving routines
417
+ #
418
+
419
+ # START HERE! banner
420
+ def draw0
421
+ color = @C['0']
422
+ TkcText.new(@canvas,
423
+ # [579, 119], :text=>'START HERE!',
424
+ [558, 119], :text=>'ここからスタート!',
425
+ :fill=>color, :anchor=>:w,
426
+ :tag=>'I0', :font=>['Times Roman', 12, :italic, :bold])
427
+ TkcLine.new(@canvas, [719, 119, 763, 119], :tag=>'I0', :fill=>color,
428
+ :width=>5, :arrow=>:last, :arrowshape=>[18, 18, 5])
429
+ @canvas.itembind('I0', '1'){ start }
430
+ end
431
+
432
+ def move0(step = nil)
433
+ step = get_step(0, step)
434
+
435
+ if @S['mode'].to_sym != :MSTART # Start the ball rolling
436
+ move_abs('I0', [-100, -100]) # Hide the banner
437
+ return 2
438
+ end
439
+
440
+ pos = [
441
+ [673, 119], [678, 119], [683, 119], [688, 119],
442
+ [693, 119], [688, 119], [683, 119], [678, 119]
443
+ ]
444
+ step = step % pos.length
445
+ move_abs('I0', pos[step])
446
+ return 1
447
+ end
448
+
449
+ # Dropping ball
450
+ def draw1
451
+ color = @C['1a']
452
+ color2 = @C['1b']
453
+ TkcPolygon.new(@canvas,
454
+ [ 844, 133, 800, 133, 800, 346, 820, 346,
455
+ 820, 168, 844, 168, 844, 133 ],
456
+ :width=>3, :fill=>color, :outline=>'')
457
+ TkcPolygon.new(@canvas,
458
+ [ 771, 133, 685, 133, 685, 168, 751, 168,
459
+ 751, 346, 771, 346, 771, 133 ],
460
+ :width=>3, :fill=>color, :outline=>'')
461
+ TkcOval.new(@canvas, box(812, 122, 9),
462
+ :tag=>'I1', :fill=>color2, :outline=>'')
463
+
464
+ @canvas.itembind('I1', '1'){ start }
465
+ end
466
+
467
+ def move1(step = nil)
468
+ step = get_step(1, step)
469
+ pos = [
470
+ [807, 122], [802, 122], [797, 123], [793, 124], [789, 129], [785, 153],
471
+ [785, 203], [785, 278, :x], [785, 367], [810, 392], [816, 438],
472
+ [821, 503], [824, 585, :y], [838, 587], [848, 593], [857, 601],
473
+ [-100, -100]
474
+ ]
475
+ return 0 if step >= pos.length
476
+ where = pos[step]
477
+ move_abs('I1', where)
478
+ move15a if where[2] == :y
479
+ return 3 if where[2] == :x
480
+ return 1
481
+ end
482
+
483
+ # Lighting the match
484
+ def draw2
485
+ color = @C['2']
486
+
487
+ # Fulcrum
488
+ TkcPolygon.new(@canvas, [750, 369, 740, 392, 760, 392],
489
+ :fill=>@C['fg'], :outline=>@C['fg'])
490
+
491
+ # Strike box
492
+ TkcRectangle.new(@canvas, [628, 335, 660, 383],
493
+ :fill=>'', :outline=>@C['fg'])
494
+ (0..2).each{|y|
495
+ yy = 335 + y*16
496
+ TkcBitmap.new(@canvas, [628, yy], :bitmap=>'gray25',
497
+ :anchor=>:nw, :foreground=>@C['fg'])
498
+ TkcBitmap.new(@canvas, [644, yy], :bitmap=>'gray25',
499
+ :anchor=>:nw, :foreground=>@C['fg'])
500
+ }
501
+
502
+ # Lever
503
+ TkcLine.new(@canvas, [702, 366, 798, 366],
504
+ :fill=>@C['fg'], :width=>6, :tag=>'I2_0')
505
+
506
+ # R strap
507
+ TkcLine.new(@canvas, [712, 363, 712, 355],
508
+ :fill=>@C['fg'], :width=>3, :tag=>'I2_1')
509
+
510
+ # L strap
511
+ TkcLine.new(@canvas, [705, 363, 705, 355],
512
+ :fill=>@C['fg'], :width=>3, :tag=>'I2_2')
513
+
514
+ # Match stick
515
+ TkcLine.new(@canvas, [679, 356, 679, 360, 717, 360, 717, 356, 679, 356],
516
+ :fill=>@C['fg'], :width=>3, :tag=>'I2_3')
517
+
518
+ # Match head
519
+ TkcPolygon.new(@canvas,
520
+ [ 671, 352, 677.4, 353.9, 680, 358.5, 677.4, 363.1,
521
+ 671, 365, 664.6, 363.1, 662, 358.5, 664.6, 353.9 ],
522
+ :fill=>color, :outline=>color, :tag=>'I2_4')
523
+ end
524
+
525
+ def move2(step = nil)
526
+ step = get_step(2, step)
527
+
528
+ stages = [0, 0, 1, 2, 0, 2, 1, 0, 1, 2, 0, 2, 1]
529
+ xy = []
530
+ xy[0] = [
531
+ 686, 333, 692, 323, 682, 316, 674, 309, 671, 295, 668, 307,
532
+ 662, 318, 662, 328, 671, 336
533
+ ]
534
+ xy[1] = [
535
+ 687, 331, 698, 322, 703, 295, 680, 320, 668, 297, 663, 311,
536
+ 661, 327, 671, 335
537
+ ]
538
+ xy[2] = [
539
+ 686, 331, 704, 322, 688, 300, 678, 283, 678, 283, 674, 298,
540
+ 666, 309, 660, 324, 672, 336
541
+ ]
542
+
543
+ if step >= stages.length
544
+ @canvas.delete('I2')
545
+ return 0
546
+ end
547
+
548
+ if step == 0 # Rotate the match
549
+ beta = 20
550
+
551
+ ox, oy = anchor('I2_0', :s) # Where to pivot
552
+
553
+ i = 0
554
+ until @canvas.find_withtag("I2_#{i}").empty?
555
+ rotate_item("I2_#{i}", ox, oy, beta)
556
+ i += 1
557
+ end
558
+
559
+ # For the flame
560
+ TkcPolygon.new(@canvas, [], :tag=>'I2', :smooth=>true, :fill=>@C['2'])
561
+
562
+ return 1
563
+ end
564
+ @canvas.coords('I2', xy[stages[step]])
565
+ return ((step == 7)? 3: 1)
566
+ end
567
+
568
+ # Weight and pulleys
569
+ def draw3
570
+ color = @C['3a']
571
+ color2 = @C['3b']
572
+
573
+ xy = [ [602, 296], [577, 174], [518, 174] ]
574
+ xy.each{|x, y| # 3 Pulleys
575
+ TkcOval.new(@canvas, box(x, y, 13),
576
+ :fill=>color, :outline=>@C['fg'], :width=>3)
577
+ TkcOval.new(@canvas, box(x, y, 2), :fill=>@C['fg'], :outline=>@C['fg'])
578
+ }
579
+
580
+ # Wall to flame
581
+ TkcLine.new(@canvas, [750, 309, 670, 309], :tag=>'I3_s',
582
+ :width=>3, :fill=>@C['fg'], :smooth=>true)
583
+
584
+ # Flame to pulley 1
585
+ TkcLine.new(@canvas, [670, 309, 650, 309], :tag=>'I3_0',
586
+ :width=>3, :fill=>@C['fg'], :smooth=>true)
587
+ TkcLine.new(@canvas, [650, 309, 600, 309], :tag=>'I3_1',
588
+ :width=>3, :fill=>@C['fg'], :smooth=>true)
589
+
590
+ # Pulley 1 half way to 2
591
+ TkcLine.new(@canvas, [589, 296, 589, 235], :tag=>'I3_2',
592
+ :width=>3, :fill=>@C['fg'])
593
+
594
+ # Pulley 1 other half to 2
595
+ TkcLine.new(@canvas, [589, 235, 589, 174], :width=>3, :fill=>@C['fg'])
596
+
597
+ # Across the top
598
+ TkcLine.new(@canvas, [577, 161, 518, 161], :width=>3, :fill=>@C['fg'])
599
+
600
+ # Down to weight
601
+ TkcLine.new(@canvas, [505, 174, 505, 205], :tag=>'I3_w',
602
+ :width=>3, :fill=>@C['fg'])
603
+
604
+ # Draw the weight as 2 circles, two rectangles and 1 rounded rectangle
605
+ x1, y1, x2, y2 = [515, 207, 495, 207]
606
+ TkcOval.new(@canvas, box(x1, y1, 6),
607
+ :tag=>'I3_', :fill=>color2, :outline=>color2)
608
+ TkcOval.new(@canvas, box(x2, y2, 6),
609
+ :tag=>'I3_', :fill=>color2, :outline=>color2)
610
+ TkcRectangle.new(@canvas, x1, y1 - 6, x2, y2 + 6,
611
+ :tag=>'I3_', :fill=>color2, :outline=>color2)
612
+
613
+ TkcPolygon.new(@canvas, round_rect([492, 220, 518, 263], 15),
614
+ :smooth=>true, :tag=>'I3_', :fill=>color2, :outline=>color2)
615
+
616
+ TkcLine.new(@canvas, [500, 217, 511, 217],
617
+ :tag=>'I3_', :fill=>color2, :width=>10)
618
+
619
+ # Bottom weight target
620
+ TkcLine.new(@canvas, [502, 393, 522, 393, 522, 465],
621
+ :tag=>'I3__', :fill=>@C['fg'], :joinstyle=>:miter, :width=>10)
622
+ end
623
+
624
+ def move3(step = nil)
625
+ step = get_step(3, step)
626
+
627
+ pos = [ [505, 247], [505, 297], [505, 386.5], [505, 386.5] ]
628
+ rope = []
629
+ rope[0] = [750, 309, 729, 301, 711, 324, 690, 300]
630
+ rope[1] = [750, 309, 737, 292, 736, 335, 717, 315, 712, 320]
631
+ rope[2] = [750, 309, 737, 309, 740, 343, 736, 351, 725, 340]
632
+ rope[3] = [750, 309, 738, 321, 746, 345, 742, 356]
633
+
634
+ return 0 if step >= pos.length
635
+
636
+ @canvas.delete("I3_#{step}") # Delete part of the rope
637
+ move_abs('I3_', pos[step]) # Move weight down
638
+ @canvas.coords('I3_s', rope[step]) # Flapping rope end
639
+ @canvas.coords('I3_w', [505, 174].concat(pos[step]))
640
+ if step == 2
641
+ @canvas.move('I3__', 0, 30)
642
+ return 2
643
+ end
644
+ return 1
645
+ end
646
+
647
+ # Cage and door
648
+ def draw4
649
+ color = @C['4']
650
+ x0, y0, x1, y1 = [527, 356, 611, 464]
651
+
652
+ # Horizontal bars
653
+ y0.step(y1, 12){|y|
654
+ TkcLine.new(@canvas, [x0, y, x1, y], :fill=>color, :width=>1)
655
+ }
656
+
657
+ # Vertical bars
658
+ x0.step(x1, 12){|x|
659
+ TkcLine.new(@canvas, [x, y0, x, y1], :fill=>color, :width=>1)
660
+ }
661
+
662
+ # Swing gate
663
+ TkcLine.new(@canvas, [518, 464, 518, 428],
664
+ :tag=>'I4', :fill=>color, :width=>1)
665
+ end
666
+
667
+ def move4(step = nil)
668
+ step = get_step(4, step)
669
+
670
+ angles = [-10, -20, -30, -30]
671
+ return 0 if step >= angles.length
672
+
673
+ rotate_item('I4', 518, 464, angles[step])
674
+ @canvas.raise('I4')
675
+
676
+ return((step == 3)? 3: 1)
677
+ end
678
+
679
+ # Mouse
680
+ def draw5
681
+ color = @C['5a']
682
+ color2 = @C['5b']
683
+
684
+ xy = [377, 248, 410, 248, 410, 465, 518, 465] # Mouse course
685
+ xy.concat [518, 428, 451, 428, 451, 212, 377, 212]
686
+
687
+ TkcPolygon.new(@canvas, xy, :fill=>color2, :outline=>@C['fg'], :width=>3)
688
+
689
+ xy = [
690
+ 534.5, 445.5, 541, 440, 552, 436, 560, 436, 569, 440, 574, 446,
691
+ 575, 452, 574, 454, 566, 456, 554, 456, 545, 456, 537, 454, 530, 452
692
+ ]
693
+ TkcPolygon.new(@canvas, xy, :tag=>['I5', 'I5_0'], :fill=>color)
694
+
695
+ TkcLine.new(@canvas, [573, 452, 592, 458, 601, 460, 613, 456], # Tail
696
+ :tag=>['I5', 'I5_1'], :fill=>color, :smooth=>true, :width=>3)
697
+
698
+ xy = box(540, 446, 2) # Eye
699
+ xy = [540, 444, 541, 445, 541, 447, 540, 448, 538, 447, 538, 445]
700
+ TkcPolygon.new(@canvas, xy, :tag=>['I5', 'I5_2'], :fill=>@C['bg'],
701
+ :outline=>'', :smooth=>true)
702
+
703
+ xy = [538, 454, 535, 461] # Front leg
704
+ TkcLine.new(@canvas, xy, :tag=>['I5', 'I5_3'], :fill=>color, :width=>2)
705
+
706
+ xy = [566, 455, 569, 462] # Back leg
707
+ TkcLine.new(@canvas, xy, :tag=>['I5', 'I5_4'], :fill=>color, :width=>2)
708
+
709
+ xy = [544, 455, 545, 460] # 2nd front leg
710
+ TkcLine.new(@canvas, xy, :tag=>['I5', 'I5_5'], :fill=>color, :width=>2)
711
+
712
+ xy = [560, 455, 558, 460] # 2nd back leg
713
+ TkcLine.new(@canvas, xy, :tag=>['I5', 'I5_6'], :fill=>color, :width=>2)
714
+ end
715
+
716
+ def move5(step = nil)
717
+ step = get_step(5, step)
718
+
719
+ pos = [
720
+ [553, 452], [533, 452], [513, 452], [493, 452], [473, 452],
721
+ [463, 442, 30], [445.5, 441.5, 30], [425.5, 434.5, 30], [422, 414],
722
+ [422, 394], [422, 374], [422, 354], [422, 334], [422, 314], [422, 294],
723
+ [422, 274, -30], [422, 260.5, -30, :x], [422.5, 248.5, -28], [425, 237]
724
+ ]
725
+
726
+ return 0 if step >= pos.length
727
+
728
+ x, y, beta, nxt = pos[step]
729
+ move_abs('I5', [x, y])
730
+ if beta
731
+ ox, oy = centroid('I5_0')
732
+ (0..6).each{|id| rotate_item("I5_#{id}", ox, oy, beta) }
733
+ end
734
+ return 3 if nxt == :x
735
+ return 1
736
+ end
737
+
738
+ # Dropping gumballs
739
+ def draw6
740
+ color = @C['6']
741
+ xy = [324, 130, 391, 204] # Ball holder
742
+ xy = round_rect(xy, 10)
743
+ TkcPolygon.new(@canvas, xy, :smooth=>true,
744
+ :outline=>@C['fg'], :width=>3, :fill=>color)
745
+ xy = [339, 204, 376, 253] # Below the ball holder
746
+ TkcRectangle.new(@canvas, xy, :outline=>@C['fg'], :width=>3,
747
+ :fill=>color, :tag=>'I6c')
748
+ xy = box(346, 339, 28)
749
+ TkcOval.new(@canvas, xy, :fill=>color, :outline=>'') # Roter
750
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>2, :style=>:arc,
751
+ :start=>80, :extent=>205)
752
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>2, :style=>:arc,
753
+ :start=>-41, :extent=>85)
754
+
755
+ xy = box(346, 339, 15) # Center of rotor
756
+ TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>@C['fg'], :tag=>'I6m')
757
+ xy = [352, 312, 352, 254, 368, 254, 368, 322] # Top drop to rotor
758
+ TkcPolygon.new(@canvas, xy, :fill=>color, :outline=>'')
759
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2)
760
+
761
+ xy = [353, 240, 367, 300] # Poke bottom hole
762
+ TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>'')
763
+ xy = [341, 190, 375, 210] # Poke another hole
764
+ TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>'')
765
+
766
+ xy = [
767
+ 368, 356, 368, 403, 389, 403, 389, 464, 320, 464, 320, 403,
768
+ 352, 403, 352, 366
769
+ ]
770
+ TkcPolygon.new(@canvas, xy, :fill=>color, :outline=>'',
771
+ :width=>2) # Below rotor
772
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2)
773
+ xy = box(275, 342, 7) # On/off rotor
774
+ TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>@C['fg'])
775
+ xy = [276, 334, 342, 325] # Fan belt top
776
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3)
777
+ xy = [276, 349, 342, 353] # Fan belt bottom
778
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3)
779
+
780
+ xy = [337, 212, 337, 247] # What the mouse pushes
781
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I6_')
782
+ xy = [392, 212, 392, 247]
783
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I6_')
784
+ xy = [337, 230, 392, 230]
785
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>7, :tag=>'I6_')
786
+
787
+ who = -1 # All the balls
788
+ colors = %w(red cyan orange green blue darkblue)
789
+ colors *= 3
790
+
791
+ (0..16).each{|i|
792
+ loc = -i
793
+ color = colors[i]
794
+ x, y = @XY6["#{loc}"]
795
+ TkcOval.new(@canvas, box(x, y, 5),
796
+ :fill=>color, :outline=>color, :tag=>"I6_b#{i}")
797
+ }
798
+ draw6a(12) # The wheel
799
+ end
800
+
801
+ def draw6a(beta)
802
+ @canvas.delete('I6_0')
803
+ ox, oy = [346, 339]
804
+ (0..3).each{|i|
805
+ b = beta + i * 45
806
+ x, y = rotate_c(28, 0, 0, 0, b)
807
+ xy = [ox + x, oy + y, ox - x, oy - y]
808
+ TkcLine.new(@canvas, xy, :tag=>'I6_0', :fill=>@C['fg'], :width=>2)
809
+ }
810
+ end
811
+
812
+ def move6(step = nil)
813
+ step = get_step(6, step)
814
+
815
+ return 0 if step > 62
816
+
817
+ if step < 2 # Open gate for balls to drop
818
+ @canvas.move('I6_', -7, 0)
819
+ if step == 1 # Poke a hole
820
+ xy = [348, 226, 365, 240]
821
+ TkcRectangle.new(@canvas, xy, :fill=>@canvas.itemcget('I6c', :fill),
822
+ :outline=>'')
823
+ end
824
+ return 1
825
+ end
826
+
827
+ s = step - 1 # Do the gumball drop dance
828
+ (0..(((s - 1)/3).to_i)).each{|i|
829
+ tag = "I6_b#{i}"
830
+ break if @canvas.find_withtag(tag).empty?
831
+ loc = s - 3*i
832
+
833
+ if @XY6["#{loc},#{i}"]
834
+ move_abs(tag, @XY6["#{loc},#{i}"])
835
+ elsif @XY6["#{loc}"]
836
+ move_abs(tag, @XY6["#{loc}"])
837
+ end
838
+ }
839
+ if s % 3 == 1
840
+ first = (s + 2)/3
841
+ i = first
842
+ loop {
843
+ tag = "I6_b#{i}"
844
+ break if @canvas.find_withtag(tag).empty?
845
+ loc = first - i
846
+ move_abs(tag, @XY6["#{loc}"])
847
+ i += 1
848
+ }
849
+ end
850
+ if s >= 3 # Rotate the motor
851
+ idx = s % 3
852
+ draw6a(12 + s * 15)
853
+ end
854
+ return((s == 3)? 3 : 1)
855
+ end
856
+
857
+ # On/off switch
858
+ def draw7
859
+ color = @C['7']
860
+ xy = [198, 306, 277, 374] # Box
861
+ TkcRectangle.new(@canvas, xy, :outline=>@C['fg'], :width=>2,
862
+ :fill=>color, :tag=>'I7z')
863
+ @canvas.lower('I7z')
864
+ xy = [275, 343, 230, 349]
865
+ TkcLine.new(@canvas, xy, :tag=>'I7', :fill=>@C['fg'], :arrow=>:last,
866
+ :arrowshape=>[23, 23, 8], :width=>6)
867
+ xy = [225, 324] # On button
868
+ x, y = xy
869
+ TkcOval.new(@canvas, box(x, y, 3), :fill=>@C['fg'], :outline=>@C['fg'])
870
+ xy = [218, 323] # On text
871
+ font = ['Times Roman', 8]
872
+ TkcText.new(@canvas, xy, :text=>'on', :anchor=>:e,
873
+ :fill=>@C['fg'], :font=>font)
874
+ xy = [225, 350] # Off button
875
+ x, y = xy
876
+ TkcOval.new(@canvas, box(x, y, 3), :fill=>@C['fg'], :outline=>@C['fg'])
877
+ xy = [218, 349] # Off text
878
+ TkcText.new(@canvas, xy, :text=>'off', :anchor=>:e,
879
+ :fill=>@C['fg'], :font=>font)
880
+ end
881
+
882
+ def move7(step = nil)
883
+ step = get_step(7, step)
884
+
885
+ numsteps = 30
886
+ return 0 if step > numsteps
887
+ beta = 30.0 / numsteps
888
+ rotate_item('I7', 275, 343, beta)
889
+
890
+ return((step == numsteps)? 3: 1)
891
+ end
892
+
893
+ # Electricity to the fan
894
+ def draw8
895
+ sine([271, 248, 271, 306], 5, 8, :tag=>'I8_s', :fill=>@C['8'], :width=>3)
896
+ end
897
+
898
+ def move8(step = nil)
899
+ step = get_step(8, step)
900
+
901
+ return 0 if step > 3
902
+ if step == 0
903
+ sparkle(anchor('I8_s', :s), 'I8')
904
+ return 1
905
+ elsif step == 1
906
+ move_abs('I8', anchor('I8_s', :c))
907
+ elsif step == 2
908
+ move_abs('I8', anchor('I8_s', :n))
909
+ else
910
+ @canvas.delete('I8')
911
+ end
912
+ return((step == 2)? 3: 1)
913
+ end
914
+
915
+ # Fan
916
+ def draw9
917
+ color = @C['9']
918
+ xy = [266, 194, 310, 220]
919
+ TkcOval.new(@canvas, xy, :outline=>color, :fill=>color)
920
+ xy = [280, 209, 296, 248]
921
+ TkcOval.new(@canvas, xy, :outline=>color, :fill=>color)
922
+ xy = [
923
+ 288, 249, 252, 249, 260, 240, 280, 234,
924
+ 296, 234, 316, 240, 324, 249, 288, 249
925
+ ]
926
+ TkcPolygon.new(@canvas, xy, :fill=>color, :smooth=>true)
927
+
928
+ xy = [248, 205, 265, 214, 264, 205, 265, 196] # Spinner
929
+ TkcPolygon.new(@canvas, xy, :fill=>color)
930
+
931
+ xy = [255, 206, 265, 234] # Fan blades
932
+ TkcOval.new(@canvas, xy, :fill=>'', :outline=>@C['fg'],
933
+ :width=>3, :tag=>'I9_0')
934
+ xy = [255, 176, 265, 204]
935
+ TkcOval.new(@canvas, xy, :fill=>'', :outline=>@C['fg'],
936
+ :width=>3, :tag=>'I9_0')
937
+ xy = [255, 206, 265, 220]
938
+ TkcOval.new(@canvas, xy, :fill=>'', :outline=>@C['fg'],
939
+ :width=>1, :tag=>'I9_1')
940
+ xy = [255, 190, 265, 204]
941
+ TkcOval.new(@canvas, xy, :fill=>'', :outline=>@C['fg'],
942
+ :width=>1, :tag=>'I9_1')
943
+ end
944
+
945
+ def move9(step = nil)
946
+ step = get_step(9, step)
947
+
948
+ if (step & 1).nonzero?
949
+ @canvas.itemconfigure('I9_0', :width=>4)
950
+ @canvas.itemconfigure('I9_1', :width=>1)
951
+ @canvas.lower('I9_1', 'I9_0')
952
+ else
953
+ @canvas.itemconfigure('I9_0', :width=>1)
954
+ @canvas.itemconfigure('I9_1', :width=>4)
955
+ @canvas.lower('I9_0', 'I9_1')
956
+ end
957
+ return 3 if step == 0
958
+ return 1
959
+ end
960
+
961
+ # Boat
962
+ def draw10
963
+ color = @C['10a']
964
+ color2 = @C['10b']
965
+ xy = [191, 230, 233, 230, 233, 178, 191, 178] # Sail
966
+ TkcPolygon.new(@canvas, xy, :fill=>color, :width=>3, :outline=>@C['fg'],
967
+ :tag=>'I10')
968
+ xy = box(209, 204, 31) # Front
969
+ TkcArc.new(@canvas, xy, :outline=>'', :fill=>color, :style=>:pie,
970
+ :start=>120, :extent=>120, :tag=>'I10')
971
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc,
972
+ :start=>120, :extent=>120, :tag=>'I10')
973
+ xy = box(249, 204, 31) # Back
974
+ TkcArc.new(@canvas, xy, :outline=>'', :fill=>@C['bg'], :width=>3,
975
+ :style=>:pie, :start=>120, :extent=>120, :tag=>'I10')
976
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc,
977
+ :start=>120, :extent=>120, :tag=>'I10')
978
+
979
+ xy = [200, 171, 200, 249] # Mast
980
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I10')
981
+ xy = [159, 234, 182, 234] # Bow sprit
982
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I10')
983
+ xy = [180, 234, 180, 251, 220, 251] # Hull
984
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>6, :tag=>'I10')
985
+
986
+ xy = [92, 255, 221, 255] # Waves
987
+ sine(xy, 2, 25, :fill=>color2, :width=>1, :tag=>'I10w')
988
+
989
+ xy = @canvas.coords('I10w')[4..-5] # Water
990
+ xy.concat([222, 266, 222, 277, 99, 277])
991
+ TkcPolygon.new(@canvas, xy, :fill=>color2, :outline=>color2)
992
+ xy = [222, 266, 222, 277, 97, 277, 97, 266] # Water bottom
993
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3)
994
+
995
+ xy = box(239, 262, 17)
996
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc,
997
+ :start=>95, :extent=>103)
998
+ xy = box(76, 266, 21)
999
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc,
1000
+ :extent=>190)
1001
+ end
1002
+
1003
+ def move10(step = nil)
1004
+ step = get_step(10, step)
1005
+
1006
+ pos = [
1007
+ [195, 212], [193, 212], [190, 212], [186, 212], [181, 212], [176, 212],
1008
+ [171, 212], [166, 212], [161, 212], [156, 212], [151, 212], [147, 212],
1009
+ [142, 212], [137, 212], [132, 212, :x], [127, 212], [121, 212],
1010
+ [116, 212], [111, 212]
1011
+ ]
1012
+
1013
+ return 0 if step >= pos.length
1014
+
1015
+ where = pos[step]
1016
+ move_abs('I10', where)
1017
+
1018
+ return 3 if where[2] == :x
1019
+ return 1
1020
+ end
1021
+
1022
+ # 2nd ball drop
1023
+ def draw11
1024
+ color = @C['11a']
1025
+ color2 = @C['11b']
1026
+ xy = [23, 264, 55, 591] # Color the down tube
1027
+ TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>'')
1028
+ xy = box(71, 460, 48) # Color the outer loop
1029
+ TkcOval.new(@canvas, xy, :fill=>color, :outline=>'')
1030
+
1031
+ xy = [55, 264, 55, 458] # Top right side
1032
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3)
1033
+ xy = [55, 504, 55, 591] # Bottom right side
1034
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3)
1035
+ xy = box(71, 460, 48) # Outer loop
1036
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc,
1037
+ :start=>110, :extent=>-290, :tag=>'I11i')
1038
+ xy = box(71, 460, 16) # Inner loop
1039
+ TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>'',
1040
+ :width=>3, :tag=>'I11i')
1041
+ TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>@C['bg'], :width=>3)
1042
+
1043
+ xy = [23, 264, 23, 591] # Left side
1044
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3)
1045
+ xy = box(1, 266, 23) # Top left curve
1046
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3,
1047
+ :style=>:arc, :extent=>90)
1048
+
1049
+ xy = box(75, 235, 9) # The ball
1050
+ TkcOval.new(@canvas, xy, :fill=>color2, :outline=>'',
1051
+ :width=>3, :tag=>'I11')
1052
+ end
1053
+
1054
+ def move11(step = nil)
1055
+ step = get_step(11, step)
1056
+
1057
+ pos = [
1058
+ [75, 235], [70, 235], [65, 237], [56, 240], [46, 247], [38, 266],
1059
+ [38, 296], [38, 333], [38, 399], [38, 475], [74, 496], [105, 472],
1060
+ [100, 437], [65, 423], [-100, -100], [38, 505], [38, 527, :x], [38, 591]
1061
+ ]
1062
+
1063
+ return 0 if step >= pos.length
1064
+ where = pos[step]
1065
+ move_abs('I11', where)
1066
+ return 3 if where[2] == :x
1067
+ return 1
1068
+ end
1069
+
1070
+ # Hand
1071
+ def draw12
1072
+ xy = [
1073
+ 20, 637, 20, 617, 20, 610, 20, 590, 40, 590, 40, 590,
1074
+ 60, 590, 60, 610, 60, 610
1075
+ ]
1076
+ xy.concat([60, 610, 65, 620, 60, 631]) # Thumb
1077
+ xy.concat([60, 631, 60, 637, 60, 662, 60, 669, 52, 669,
1078
+ 56, 669, 50, 669, 50, 662, 50, 637])
1079
+
1080
+ y0 = 637 # Bumps for fingers
1081
+ y1 = 645
1082
+ 50.step(21, -10){|x|
1083
+ x1 = x - 5
1084
+ x2 = x - 10
1085
+ xy << x << y0 << x1 << y1 << x2 << y0
1086
+ }
1087
+ TkcPolygon.new(@canvas, xy, :fill=>@C['12'], :outline=>@C['fg'],
1088
+ :smooth=>true, :tag=>'I12', :width=>3)
1089
+ end
1090
+
1091
+ def move12(step = nil)
1092
+ step = get_step(12, step)
1093
+
1094
+ pos = [[42.5, 641, :x]]
1095
+ return 0 if step >= pos.length
1096
+ where = pos[step]
1097
+ move_abs('I12', where)
1098
+ return 3 if where[2] == :x
1099
+ return 1
1100
+ end
1101
+
1102
+ # Fax
1103
+ def draw13
1104
+ color = @C['13a']
1105
+ xy = [86, 663, 149, 663, 149, 704, 50, 704, 50, 681, 64, 681, 86, 671]
1106
+ xy2 = [
1107
+ 784, 663, 721, 663, 721, 704, 820, 704, 820, 681, 806, 681, 784, 671
1108
+ ]
1109
+ radii = [2, 9, 9, 8, 5, 5, 2]
1110
+
1111
+ round_poly(@canvas, xy, radii, :width=>3,
1112
+ :outline=>@C['fg'], :fill=>color)
1113
+ round_poly(@canvas, xy2, radii, :width=>3,
1114
+ :outline=>@C['fg'], :fill=>color)
1115
+
1116
+ xy = [56, 677]
1117
+ x, y = xy
1118
+ TkcRectangle.new(@canvas, box(x, y, 4), :fill=>'', :outline=>@C['fg'],
1119
+ :width=>3, :tag=>'I13')
1120
+ xy = [809, 677]
1121
+ x, y = xy
1122
+ TkcRectangle.new(@canvas, box(x, y, 4), :fill=>'', :outline=>@C['fg'],
1123
+ :width=>3, :tag=>'I13R')
1124
+
1125
+ xy = [112, 687] # Label
1126
+ TkcText.new(@canvas, xy, :text=>'FAX', :fill=>@C['fg'],
1127
+ :font=>['Times Roman', 12, :bold])
1128
+ xy = [762, 687]
1129
+ TkcText.new(@canvas, xy, :text=>'FAX', :fill=>@C['fg'],
1130
+ :font=>['Times Roman', 12, :bold])
1131
+
1132
+ xy = [138, 663, 148, 636, 178, 636] # Paper guide
1133
+ TkcLine.new(@canvas, xy, :smooth=>true, :fill=>@C['fg'], :width=>3)
1134
+ xy = [732, 663, 722, 636, 692, 636]
1135
+ TkcLine.new(@canvas, xy, :smooth=>true, :fill=>@C['fg'], :width=>3)
1136
+
1137
+ sine([149, 688, 720, 688], 5, 15,
1138
+ :tag=>'I13_s', :fill=>@C['fg'], :width=>3)
1139
+ end
1140
+
1141
+ def move13(step = nil)
1142
+ step = get_step(13, step)
1143
+
1144
+ numsteps = 7
1145
+
1146
+ if step == numsteps + 2
1147
+ move_abs('I13_star', [-100, -100])
1148
+ @canvas.itemconfigure('I13R', :fill=>@C['13b'], :width=>2)
1149
+ return 2
1150
+ end
1151
+ if step == 0 # Button down
1152
+ @canvas.delete('I13')
1153
+ sparkle([-100, -100], 'I13_star') # Create off screen
1154
+ return 1
1155
+ end
1156
+ x0, y0 = anchor('I13_s', :w)
1157
+ x1, y1 = anchor('I13_s', :e)
1158
+ x = x0 + (x1 - x0) * (step - 1) / numsteps.to_f
1159
+ move_abs('I13_star', [x, y0])
1160
+ return 1
1161
+ end
1162
+
1163
+ # Paper in fax
1164
+ def draw14
1165
+ color = @C['14']
1166
+ xy = [102, 661, 113, 632, 130, 618] # Left paper edge
1167
+ TkcLine.new(@canvas, xy, :smooth=>true, :fill=>color,
1168
+ :width=>3, :tag=>'I14L_0')
1169
+ xy = [148, 629, 125, 640, 124, 662] # Right paper edge
1170
+ TkcLine.new(@canvas, xy, :smooth=>true, :fill=>color,
1171
+ :width=>3, :tag=>'I14L_1')
1172
+ draw14a('L')
1173
+
1174
+ xy = [
1175
+ 768.0, 662.5, 767.991316225, 662.433786215, 767.926187912, 662.396880171
1176
+ ]
1177
+ TkcLine.new(@canvas, xy, :smooth=>true, :fill=>color,
1178
+ :width=>3, :tag=>'I14R_0')
1179
+ @canvas.lower('I14R_0')
1180
+ # NB. these numbers are VERY sensitive, you must start with final size
1181
+ # and shrink down to get the values
1182
+ xy = [
1183
+ 745.947897349, 662.428358855, 745.997829056, 662.452239237, 746.0, 662.5
1184
+ ]
1185
+ TkcLine.new(@canvas, xy, :smooth=>true, :fill=>color,
1186
+ :width=>3, :tag=>'I14R_1')
1187
+ @canvas.lower('I14R_1')
1188
+ end
1189
+
1190
+ def draw14a(side)
1191
+ color = @C['14']
1192
+ xy = @canvas.coords("I14#{side}_0")
1193
+ xy2 = @canvas.coords("I14#{side}_1")
1194
+ x0, y0, x1, y1, x2, y2 = xy
1195
+ x3, y3, x4, y4, x5, y5 = xy2
1196
+
1197
+ zz = [
1198
+ x0, y0, x0, y0, xy, x2, y2, x2, y2,
1199
+ x3, y3, x3, y3, xy2, x5, y5, x5, y5
1200
+ ].flatten
1201
+ @canvas.delete("I14#{side}")
1202
+ TkcPolygon.new(@canvas, zz, :tag=>"I14#{side}", :smooth=>true,
1203
+ :fill=>color, :outline=>color, :width=>3)
1204
+ @canvas.lower("I14#{side}")
1205
+ end
1206
+
1207
+ def move14(step = nil)
1208
+ step = get_step(14, step)
1209
+
1210
+ # Paper going down
1211
+ sc = 0.9 - 0.05*step
1212
+ if sc < 0.3
1213
+ @canvas.delete('I14L')
1214
+ return 0
1215
+ end
1216
+
1217
+ ox, oy = @canvas.coords('I14L_0')
1218
+ @canvas.scale('I14L_0', ox, oy, sc, sc)
1219
+ ox, oy = @canvas.coords('I14L_1')[-2..-1]
1220
+ @canvas.scale('I14L_1', ox, oy, sc, sc)
1221
+ draw14a('L')
1222
+
1223
+ # Paper going up
1224
+ sc = 0.35 + 0.05*step
1225
+ sc = 1/sc
1226
+
1227
+ ox, oy = @canvas.coords('I14R_0')
1228
+ @canvas.scale('I14R_0', ox, oy, sc, sc)
1229
+ ox, oy = @canvas.coords('I14R_1')[-2..-1]
1230
+ @canvas.scale('I14R_1', ox, oy, sc, sc)
1231
+ draw14a('R')
1232
+
1233
+ return((step == 10)? 3: 1)
1234
+ end
1235
+
1236
+ # Light beam
1237
+ def draw15
1238
+ color = @C['15a']
1239
+ xy = [824, 599, 824, 585, 820, 585, 829, 585]
1240
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I15a')
1241
+ xy = [789, 599, 836, 643]
1242
+ TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>3)
1243
+ xy = [778, 610, 788, 632]
1244
+ TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>3)
1245
+ xy = [766, 617, 776, 625]
1246
+ TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>3)
1247
+
1248
+ xy = [633, 600, 681, 640]
1249
+ TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>3)
1250
+ xy = [635, 567, 657, 599]
1251
+ TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>2)
1252
+ xy = [765, 557, 784, 583]
1253
+ TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>2)
1254
+
1255
+ sine([658, 580, 765, 580], 3, 15,
1256
+ :tag=>'I15_s', :fill=>@C['fg'], :width=>3)
1257
+ end
1258
+
1259
+ def move15a
1260
+ color = @C['15b']
1261
+ @canvas.scale('I15a', 824, 599, 1, 0.3) # Button down
1262
+ xy = [765, 621, 681, 621]
1263
+ TkcLine.new(@canvas, xy, :dash=>'-', :width=>3, :fill=>color, :tag=>'I15')
1264
+ end
1265
+
1266
+ def move15(step = nil)
1267
+ step = get_step(15, step)
1268
+
1269
+ numsteps = 6
1270
+
1271
+ if step == numsteps + 2
1272
+ move_abs('I15_star', [-100, -100])
1273
+ return 2
1274
+ end
1275
+ if step == 0 # Break the light beam
1276
+ sparkle([-100, -100], 'I15_star')
1277
+ xy = [765, 621, 745, 621]
1278
+ @canvas.coords('I15', xy)
1279
+ return 1
1280
+ end
1281
+ x0, y0 = anchor('I15_s', :w)
1282
+ x1, y1 = anchor('I15_s', :e)
1283
+ x = x0 + (x1 - x0) * (step - 1) / numsteps.to_f
1284
+ move_abs('I15_star', [x, y0])
1285
+ return 1
1286
+ end
1287
+
1288
+ # Bell
1289
+ def draw16
1290
+ color = @C['16']
1291
+ xy = [722, 485, 791, 556]
1292
+ TkcRectangle.new(@canvas, xy, :fill=>'', :outline=>@C['fg'], :width=>3)
1293
+ xy = box(752, 515, 25) # Bell
1294
+ TkcOval.new(@canvas, xy, :fill=>color, :outline=>'black',
1295
+ :tag=>'I16b', :width=>2)
1296
+ xy = box(752, 515, 5) # Bell button
1297
+ TkcOval.new(@canvas, xy, :fill=>'black', :outline=>'black', :tag=>'I16b')
1298
+
1299
+ xy = [784, 523, 764, 549] # Clapper
1300
+ TkcLine.new(@canvas, xy, :width=>3, :tag=>'I16c', :fill=>@C['fg'])
1301
+ xy = box(784, 523, 4)
1302
+ TkcOval.new(@canvas, xy, :fill=>@C['fg'], :outline=>@C['fg'], :tag=>'I16d')
1303
+ end
1304
+
1305
+ def move16(step = nil)
1306
+ step = get_step(16, step)
1307
+
1308
+ # Note: we never stop
1309
+ ox, oy = [760, 553]
1310
+ if (step & 1).nonzero?
1311
+ beta = 12
1312
+ @canvas.move('I16b', 3, 0)
1313
+ else
1314
+ beta = -12
1315
+ @canvas.move('I16b', -3, 0)
1316
+ end
1317
+ rotate_item('I16c', ox, oy, beta)
1318
+ rotate_item('I16d', ox, oy, beta)
1319
+
1320
+ return ((step == 1)? 3: 1)
1321
+ end
1322
+
1323
+ # Cat
1324
+ def draw17
1325
+ color = @C['17']
1326
+
1327
+ xy = [584, 556, 722, 556]
1328
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3)
1329
+ xy = [584, 485, 722, 485]
1330
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3)
1331
+
1332
+ xy = [664, 523, 717, 549] # Body
1333
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :fill=>color, :width=>3,
1334
+ :style=>:chord, :start=>128, :extent=>260, :tag=>'I17')
1335
+
1336
+ xy = [709, 554, 690, 543] # Paw
1337
+ TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>color,
1338
+ :width=>3, :tag=>'I17')
1339
+ xy = [657, 544, 676, 555]
1340
+ TkcOval.new(@canvas, xy, :outline=>@C['fg'], :fill=>color,
1341
+ :width=>3, :tag=>'I17')
1342
+
1343
+ xy = box(660, 535, 15) # Lower face
1344
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :style=>:arc,
1345
+ :start=>150, :extent=>240, :tag=>'I17_')
1346
+ TkcArc.new(@canvas, xy, :outline=>'', :fill=>color, :width=>1,
1347
+ :style=>:chord, :start=>150, :extent=>240, :tag=>'I17_')
1348
+ xy = [674, 529, 670, 513, 662, 521, 658, 521, 650, 513, 647, 529] # Ears
1349
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_')
1350
+ TkcPolygon.new(@canvas, xy, :fill=>color, :outline=>'', :width=>1,
1351
+ :tag=>['I17_', 'I17_c'])
1352
+ xy = [652, 542, 628, 539] # Whiskers
1353
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_')
1354
+ xy = [652, 543, 632, 545]
1355
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_')
1356
+ xy = [652, 546, 632, 552]
1357
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_')
1358
+
1359
+ xy = [668, 543, 687, 538]
1360
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3,
1361
+ :tag=>['I17_', 'I17_w'])
1362
+ xy = [668, 544, 688, 546]
1363
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3,
1364
+ :tag=>['I17_', 'I17_w'])
1365
+ xy = [668, 547, 688, 553]
1366
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3,
1367
+ :tag=>['I17_', 'I17_w'])
1368
+
1369
+ xy = [649, 530, 654, 538, 659, 530] # Left eye
1370
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2,
1371
+ :smooth=>true, :tag=>'I17')
1372
+ xy = [671, 530, 666, 538, 661, 530] # Right eye
1373
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2,
1374
+ :smooth=>true, :tag=>'I17')
1375
+ xy = [655, 543, 660, 551, 665, 543] # Mouth
1376
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2,
1377
+ :smooth=>true, :tag=>'I17')
1378
+ end
1379
+
1380
+ def move17(step = nil)
1381
+ step = get_step(17, step)
1382
+
1383
+ if step == 0
1384
+ @canvas.delete('I17') # Delete most of the cat
1385
+ xy = [655, 543, 660, 535, 665, 543] # Mouth
1386
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3,
1387
+ :smooth=>true, :tag=>'I17_')
1388
+ xy = box(654, 530, 4) # Left eye
1389
+ TkcOval.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :fill=>'',
1390
+ :tag=>'I17_')
1391
+ xy = box(666, 530, 4) # Right eye
1392
+ TkcOval.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :fill=>'',
1393
+ :tag=>'I17_')
1394
+
1395
+ @canvas.move('I17_', 0, -20) # Move face up
1396
+ xy = [652, 528, 652, 554] # Front leg
1397
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_')
1398
+ xy = [670, 528, 670, 554] # 2nd front leg
1399
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_')
1400
+
1401
+ xy = [ # Body
1402
+ 675, 506, 694, 489, 715, 513, 715, 513, 715, 513, 716, 525,
1403
+ 716, 525, 716, 525, 706, 530, 695, 530, 679, 535, 668, 527,
1404
+ 668, 527, 668, 527, 675, 522, 676, 517, 677, 512
1405
+ ]
1406
+ TkcPolygon.new(@canvas, xy, :fill=>@canvas.itemcget('I17_c', :fill),
1407
+ :outline=>@C['fg'], :width=>3, :smooth=>true,
1408
+ :tag=>'I17_')
1409
+ xy = [716, 514, 716, 554] # Back leg
1410
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_')
1411
+ xy = [694, 532, 694, 554] # 2nd back leg
1412
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I17_')
1413
+ xy = [715, 514, 718, 506, 719, 495, 716, 488] # Tail
1414
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3,
1415
+ :smooth=>true, :tag=>'I17_')
1416
+
1417
+ @canvas.raise('I17w') # Make whiskers visible
1418
+ @canvas.move('I17_', -5, 0) # Move away from the wall a bit
1419
+ return 2
1420
+ end
1421
+ return 0
1422
+ end
1423
+
1424
+ # Sling shot
1425
+ def draw18
1426
+ color = @C['18']
1427
+ xy = [721, 506, 627, 506] # Sling hold
1428
+ TkcLine.new(@canvas, xy, :width=>4, :fill=>@C['fg'], :tag=>'I18')
1429
+
1430
+ xy = [607, 500, 628, 513] # Sling rock
1431
+ TkcOval.new(@canvas, xy, :fill=>color, :outline=>'', :tag=>'I18a')
1432
+
1433
+ xy = [526, 513, 606, 507, 494, 502] # Sling band
1434
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>4, :tag=>'I18b')
1435
+ xy = [485, 490, 510, 540, 510, 575, 510, 540, 535, 491] # Sling
1436
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>6)
1437
+ end
1438
+
1439
+ def move18(step = nil)
1440
+ step = get_step(18, step)
1441
+
1442
+ pos = [
1443
+ [587, 506], [537, 506], [466, 506], [376, 506], [266, 506, :x],
1444
+ [136, 506], [16, 506], [-100, -100]
1445
+ ]
1446
+
1447
+ b = []
1448
+ b[0] = [490, 502, 719, 507, 524, 512] # Band collapsing
1449
+ b[1] = [
1450
+ 491, 503, 524, 557, 563, 505, 559, 496, 546, 506, 551, 525,
1451
+ 553, 536, 538, 534, 532, 519, 529, 499
1452
+ ]
1453
+ b[2] = [
1454
+ 491, 503, 508, 563, 542, 533, 551, 526, 561, 539, 549, 550, 530, 500
1455
+ ]
1456
+ b[3] = [
1457
+ 491, 503, 508, 563, 530, 554, 541, 562, 525, 568, 519, 544, 530, 501
1458
+ ]
1459
+
1460
+ return 0 if step >= pos.length
1461
+
1462
+ if step == 0
1463
+ @canvas.delete('I18')
1464
+ @canvas.itemconfigure('I18b', :smooth=>true)
1465
+ end
1466
+ if b[step]
1467
+ @canvas.coords('I18b', b[step])
1468
+ end
1469
+
1470
+ where = pos[step]
1471
+ move_abs('I18a', where)
1472
+ return 3 if where[2] == :x
1473
+ return 1
1474
+ end
1475
+
1476
+ # Water pipe
1477
+ def draw19
1478
+ color = @C['19']
1479
+ xx = [[249, 181], [155, 118], [86, 55], [22, 0]]
1480
+ xx.each{|x1, x2|
1481
+ TkcRectangle.new(@canvas, x1, 453, x2, 467,
1482
+ :fill=>color, :outline=>'', :tag=>'I19')
1483
+ TkcLine.new(@canvas, x1, 453, x2, 453,
1484
+ :fill=>@C['fg'], :width=>1) # Pipe top
1485
+ TkcLine.new(@canvas, x1, 467, x2, 467,
1486
+ :fill=>@C['fg'], :width=>1) # Pipe bottom
1487
+ }
1488
+ @canvas.raise('I11i')
1489
+
1490
+ xy = box(168, 460, 16) # Bulge by the joint
1491
+ TkcOval.new(@canvas, xy, :fill=>color, :outline=>'')
1492
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, :style=>:arc,
1493
+ :start=>21, :extent=>136)
1494
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1, :style=>:arc,
1495
+ :start=>-21, :extent=>-130)
1496
+
1497
+ xy = [249, 447, 255, 473] # First joint 26x6
1498
+ TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1)
1499
+
1500
+ xy = box(257, 433, 34) # Bend up
1501
+ TkcArc.new(@canvas, xy, :outline=>'', :fill=>color, :width=>1,
1502
+ :style=>:pie, :start=>0, :extent=>-91)
1503
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1,
1504
+ :style=>:arc, :start=>0, :extent=>-90)
1505
+ xy = box(257, 433, 20)
1506
+ TkcArc.new(@canvas, xy, :outline=>'', :fill=>@C['bg'], :width=>1,
1507
+ :style=>:pie, :start=>0, :extent=>-92)
1508
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1,
1509
+ :style=>:arc, :start=>0, :extent=>-90)
1510
+ xy = box(257, 421, 34) # Bend left
1511
+ TkcArc.new(@canvas, xy, :outline=>'', :fill=>color, :width=>1,
1512
+ :style=>:pie, :start=>0, :extent=>91)
1513
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1,
1514
+ :style=>:arc, :start=>0, :extent=>90)
1515
+ xy = box(257, 421, 20)
1516
+ TkcArc.new(@canvas, xy, :outline=>'', :fill=>@C['bg'], :width=>1,
1517
+ :style=>:pie, :start=>0, :extent=>90)
1518
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1,
1519
+ :style=>:arc, :start=>0, :extent=>90)
1520
+ xy = box(243, 421, 34) # Bend down
1521
+ TkcArc.new(@canvas, xy, :outline=>'', :fill=>color, :width=>1,
1522
+ :style=>:pie, :start=>90, :extent=>90)
1523
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1,
1524
+ :style=>:arc, :start=>90, :extent=>90)
1525
+ xy = box(243, 421, 20)
1526
+ TkcArc.new(@canvas, xy, :outline=>'', :fill=>@C['bg'], :width=>1,
1527
+ :style=>:pie, :start=>90, :extent=>90)
1528
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>1,
1529
+ :style=>:arc, :start=>90, :extent=>90)
1530
+
1531
+ xy = [270, 427, 296, 433] # 2nd joint bottom
1532
+ TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1)
1533
+ xy = [270, 421, 296, 427] # 2nd joint top
1534
+ TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1)
1535
+ xy = [249, 382, 255, 408] # Third joint right
1536
+ TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1)
1537
+ xy = [243, 382, 249, 408] # Third joint left
1538
+ TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1)
1539
+ xy = [203, 420, 229, 426] # Last joint
1540
+ TkcRectangle.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>1)
1541
+
1542
+ xy = box(168, 460, 6) # Handle joint
1543
+ TkcOval.new(@canvas, xy, :fill=>@C['fg'], :outline=>'', :tag=>'I19a')
1544
+ xy = [168, 460, 168, 512] # Handle bar
1545
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>5, :tag=>'I19b')
1546
+ end
1547
+
1548
+ def move19(step = nil)
1549
+ step = get_step(19, step)
1550
+
1551
+ angles = [30, 30, 30]
1552
+ return 2 if step == angles.length
1553
+ ox, oy = centroid('I19a')
1554
+ rotate_item('I19b', ox, oy, angles[step])
1555
+
1556
+ return 1
1557
+ end
1558
+
1559
+ # Water pouring
1560
+ def draw20
1561
+ # do nothing
1562
+ end
1563
+
1564
+ def move20(step = nil)
1565
+ step = get_step(20, step)
1566
+
1567
+ pos = [451, 462, 473, 484, 496, 504, 513, 523, 532]
1568
+ freq = [20, 40, 40, 40, 40, 40, 40, 40, 40]
1569
+ pos = [
1570
+ [451, 20], [462, 40], [473, 40], [484, 40], [496, 40],
1571
+ [504, 40], [513, 40], [523, 40], [532, 40, :x]
1572
+ ]
1573
+ return 0 if step >= pos.length
1574
+
1575
+ @canvas.delete('I20')
1576
+ where = pos[step]
1577
+ y, f = where
1578
+ h20(y, f)
1579
+ return 3 if where[2] == :x
1580
+ return 1
1581
+ end
1582
+
1583
+ def h20(y, f)
1584
+ color = @C['20']
1585
+ @canvas.delete('I20')
1586
+
1587
+ sine([208, 428, 208, y], 4, f, :tag=>['I20', 'I20s'],
1588
+ :width=>3, :fill=>color, :smooth=>true)
1589
+ TkcLine.new(@canvas, @canvas.coords('I20s'), :width=>3,
1590
+ :fill=>color, :smooth=>1, :tag=>['I20', 'I20a'])
1591
+ TkcLine.new(@canvas, @canvas.coords('I20s'), :width=>3,
1592
+ :fill=>color, :smooth=>1, :tag=>['I20', 'I20b'])
1593
+ @canvas.move('I20a', 8, 0)
1594
+ @canvas.move('I20b', 16, 0)
1595
+ end
1596
+
1597
+ # Bucket
1598
+ def draw21
1599
+ color = @C['21']
1600
+ xy = [217, 451, 244, 490] # Right handle
1601
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2, :tag=>'I21_a')
1602
+ xy = [201, 467, 182, 490] # Left handle
1603
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2, :tag=>'I21_a')
1604
+
1605
+ xy = [245, 490, 237, 535] # Right side
1606
+ xy2 = [189, 535, 181, 490] # Left side
1607
+ TkcPolygon.new(@canvas, xy + xy2, :fill=>color, :outline=>'',
1608
+ :tag=>['I21', 'I21f'])
1609
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>2, :tag=>'I21')
1610
+ TkcLine.new(@canvas, xy2, :fill=>@C['fg'], :width=>2, :tag=>'I21')
1611
+
1612
+ xy = [182, 486, 244, 498] # Top
1613
+ TkcOval.new(@canvas, xy, :fill=>color, :outline=>'', :width=>2,
1614
+ :tag=>['I21', 'I21f'])
1615
+ TkcOval.new(@canvas, xy, :fill=>'', :outline=>@C['fg'], :width=>2,
1616
+ :tag=>['I21', 'I21t'])
1617
+ xy = [189, 532, 237, 540] # Bottom
1618
+ TkcOval.new(@canvas, xy, :fill=>color, :outline=>@C['fg'], :width=>2,
1619
+ :tag=>['I21', 'I21b'])
1620
+ end
1621
+
1622
+ def move21(step = nil)
1623
+ step = get_step(21, step)
1624
+
1625
+ numsteps = 30
1626
+ return 0 if step >= numsteps
1627
+
1628
+ x1, y1, x2, y2 = @canvas.coords('I21b')
1629
+ # lx1, ly1, lx2, ly2 = @canvas.coords('I21t')
1630
+ lx1, ly1, lx2, ly2 = [183, 492, 243, 504]
1631
+
1632
+ f = step / numsteps.to_f
1633
+ y2 = y2 - 3
1634
+ xx1 = x1 + (lx1 - x1) * f
1635
+ yy1 = y1 + (ly1 - y1) * f
1636
+ xx2 = x2 + (lx2 - x2) * f
1637
+ yy2 = y2 + (ly2 - y2) * f
1638
+
1639
+ @canvas.itemconfigure('I21b', :fill=>@C['20'])
1640
+ @canvas.delete('I21w')
1641
+ TkcPolygon.new(@canvas, x2, y2, x1, y1, xx1, yy1, xx2, yy1,
1642
+ :tag=>['I21', 'I21w'], :outline=>'', :fill=>@C['20'])
1643
+ @canvas.lower('I21w', 'I21')
1644
+ @canvas.raise('I21b')
1645
+ @canvas.lower('I21f')
1646
+
1647
+ return((step == numsteps - 1)? 3: 1)
1648
+ end
1649
+
1650
+ # Bucket drop
1651
+ def draw22
1652
+ # do nothing
1653
+ end
1654
+
1655
+ def move22(step = nil)
1656
+ step = get_step(22, step)
1657
+ pos = [[213, 513], [213, 523], [213, 543, :x], [213, 583], [213, 593]]
1658
+
1659
+ @canvas.itemconfigure('I21f', :fill=>@C['22']) if step == 0
1660
+ return 0 if step >= pos.length
1661
+ where = pos[step]
1662
+ move_abs('I21', where)
1663
+ h20(where[1], 40)
1664
+ @canvas.delete('I21_a') # Delete handles
1665
+
1666
+ return 3 if where[2] == :x
1667
+ return 1
1668
+ end
1669
+
1670
+ # Blow dart
1671
+ def draw23
1672
+ color = @C['23a']
1673
+ color2 = @C['23b']
1674
+ color3 = @C['23c']
1675
+
1676
+ xy = [185, 623, 253, 650] # Block
1677
+ TkcRectangle.new(@canvas, xy, :fill=>'black', :outline=>@C['fg'],
1678
+ :width=>2, :tag=>'I23a')
1679
+ xy = [187, 592, 241, 623] # Balloon
1680
+ TkcOval.new(@canvas, xy, :outline=>'', :fill=>color, :tag=>'I23b')
1681
+ TkcArc.new(@canvas, xy, :outline=>@C['fg'], :width=>3, :tag=>'I23b',
1682
+ :style=>:arc, :start=>12, :extent=>336)
1683
+ xy = [239, 604, 258, 589, 258, 625, 239, 610] # Balloon nozzle
1684
+ TkcPolygon.new(@canvas, xy, :outline=>'', :fill=>color, :tag=>'I23b')
1685
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I23b')
1686
+
1687
+ xy = [285, 611, 250, 603] # Dart body
1688
+ TkcOval.new(@canvas, xy, :fill=>color2, :outline=>@C['fg'],
1689
+ :width=>3, :tag=>'I23d')
1690
+ xy = [249, 596, 249, 618, 264, 607, 249, 596] # Dart tail
1691
+ TkcPolygon.new(@canvas, xy, :fill=>color3, :outline=>@C['fg'],
1692
+ :width=>3, :tag=>'I23d')
1693
+ xy = [249, 607, 268, 607] # Dart detail
1694
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I23d')
1695
+ xy = [285, 607, 305, 607] # Dart needle
1696
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I23d')
1697
+ end
1698
+
1699
+ def move23(step = nil)
1700
+ step = get_step(23, step)
1701
+
1702
+ pos = [
1703
+ [277, 607], [287, 607], [307, 607, :x], [347, 607], [407, 607],
1704
+ [487, 607], [587, 607], [687, 607], [787, 607], [-100, -100]
1705
+ ]
1706
+
1707
+ return 0 if step >= pos.length
1708
+ if step <= 1
1709
+ ox, oy = anchor('I23a', :n)
1710
+ @canvas.scale('I23b', ox, oy, 0.9, 0.5)
1711
+ end
1712
+ where = pos[step]
1713
+ move_abs('I23d', where)
1714
+
1715
+ return 3 if where[2] == :x
1716
+ return 1
1717
+ end
1718
+
1719
+ # Balloon
1720
+ def draw24
1721
+ color = @C['24a']
1722
+ xy = [366, 518, 462, 665] # Balloon
1723
+ TkcOval.new(@canvas, xy, :fill=>color, :outline=>@C['fg'],
1724
+ :width=>3, :tag=>'I24')
1725
+ xy = [414, 666, 414, 729] # String
1726
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :width=>3, :tag=>'I24')
1727
+ xy = [410, 666, 404, 673, 422, 673, 418, 666] # Nozzle
1728
+ TkcPolygon.new(@canvas, xy, :fill=>color, :outline=>@C['fg'],
1729
+ :width=>3, :tag=>'I24')
1730
+
1731
+ xy = [387, 567, 390, 549, 404, 542] # Reflections
1732
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :smooth=>true,
1733
+ :width=>2, :tag=>'I24')
1734
+ xy = [395, 568, 399, 554, 413, 547]
1735
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :smooth=>true,
1736
+ :width=>2, :tag=>'I24')
1737
+ xy = [403, 570, 396, 555, 381, 553]
1738
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :smooth=>true,
1739
+ :width=>2, :tag=>'I24')
1740
+ xy = [408, 564, 402, 547, 386, 545]
1741
+ TkcLine.new(@canvas, xy, :fill=>@C['fg'], :smooth=>true,
1742
+ :width=>2, :tag=>'I24')
1743
+ end
1744
+
1745
+ def move24(step = nil)
1746
+ step = get_step(24, step)
1747
+
1748
+ return 0 if step > 4
1749
+ return 2 if step == 4
1750
+
1751
+ if step == 0
1752
+ @canvas.delete('I24') # Exploding balloon
1753
+ xy = [
1754
+ 347, 465, 361, 557, 271, 503, 272, 503, 342, 574, 259, 594,
1755
+ 259, 593, 362, 626, 320, 737, 320, 740, 398, 691, 436, 738,
1756
+ 436, 739, 476, 679, 528, 701, 527, 702, 494, 627, 548, 613,
1757
+ 548, 613, 480, 574, 577, 473, 577, 473, 474, 538, 445, 508,
1758
+ 431, 441, 431, 440, 400, 502, 347, 465, 347, 465
1759
+ ]
1760
+ TkcPolygon.new(@canvas, xy, :tag=>'I24', :fill=>@C['24b'],
1761
+ :outline=>@C['24a'], :width=>10, :smooth=>true)
1762
+ msg = Tk.subst(@S['message'].value)
1763
+ TkcText.new(@canvas, centroid('I24'), :text=>msg, :tag=>['I24', 'I24t'],
1764
+ :justify=>:center, :font=>['Times Roman', 18, :bold])
1765
+ return 1
1766
+ end
1767
+
1768
+ @canvas.itemconfigure('I24t', :font=>['Times Roman', 18 + 6*step, :bold])
1769
+ @canvas.move('I24', 0, -60)
1770
+ ox, oy = centroid('I24')
1771
+ @canvas.scale('I24', ox, oy, 1.25, 1.25)
1772
+ return 1
1773
+ end
1774
+
1775
+ # Displaying the message
1776
+ def move25(step = nil)
1777
+ step = get_step(25, step)
1778
+
1779
+ if step == 0
1780
+ @XY['25'] = Tk::Clock.clicks(:milliseconds)
1781
+ return 1
1782
+ end
1783
+ elapsed = Tk::Clock.clicks(:milliseconds) - @XY['25']
1784
+ return 1 if elapsed < 5000
1785
+ return 2
1786
+ end
1787
+
1788
+ # Collapsing balloon
1789
+ def move26(step = nil)
1790
+ step = get_step(26, step)
1791
+
1792
+ if step >= 3
1793
+ @canvas.delete('I24', 'I26')
1794
+ TkcText.new(@canvas, 430, 735, :anchor=>:s, :tag=>'I26',
1795
+ #:text=>'click to continue',
1796
+ :text=>'クリックでリセットします',
1797
+ :font=>['Times Roman', 20, :bold])
1798
+ @canvas.bind('1', proc{reset})
1799
+ return 4
1800
+ end
1801
+
1802
+ ox, oy = centroid('I24')
1803
+ @canvas.scale('I24', ox, oy, 0.8, 0.8)
1804
+ @canvas.move('I24', 0, 60)
1805
+ @canvas.itemconfigure('I24t', :font=>['Times Roman', 30 - 6*step, :bold])
1806
+ return 1
1807
+ end
1808
+
1809
+ ################################################################
1810
+ #
1811
+ # Helper functions
1812
+ #
1813
+ def box(x, y, r)
1814
+ [x - r, y - r, x + r, y + r]
1815
+ end
1816
+
1817
+ def move_abs(item, xy)
1818
+ x, y = xy
1819
+ ox, oy = centroid(item)
1820
+ dx = x - ox
1821
+ dy = y - oy
1822
+ @canvas.move(item, dx, dy)
1823
+ end
1824
+
1825
+ def rotate_item(item, ox, oy, beta)
1826
+ xy = @canvas.coords(item)
1827
+ xy2 = []
1828
+ 0.step(xy.length - 1, 2){|idx|
1829
+ x, y = xy[idx, 2]
1830
+ xy2.concat(rotate_c(x, y, ox, oy, beta))
1831
+ }
1832
+ @canvas.coords(item, xy2)
1833
+ end
1834
+
1835
+ def rotate_c(x, y, ox, oy, beta)
1836
+ # rotates vector (ox,oy)->(x,y) by beta degrees clockwise
1837
+
1838
+ x -= ox # Shift to origin
1839
+ y -= oy
1840
+
1841
+ beta = beta * Math.atan(1) * 4 / 180.0 # Radians
1842
+ xx = x * Math.cos(beta) - y * Math.sin(beta) # Rotate
1843
+ yy = x * Math.sin(beta) + y * Math.cos(beta)
1844
+
1845
+ xx += ox # Shift back
1846
+ yy += oy
1847
+
1848
+ [xx, yy]
1849
+ end
1850
+
1851
+ def reset
1852
+ draw_all
1853
+ @canvas.bind_remove('1')
1854
+ @S['mode'].value = :MSTART
1855
+ @S['active'] = [0]
1856
+ end
1857
+
1858
+ # Each Move## keeps its state info in STEP, this retrieves and increments it
1859
+ def get_step(who, step)
1860
+ if step
1861
+ @STEP[who] = step
1862
+ else
1863
+ if !@STEP.exist?(who) || @STEP[who] == ""
1864
+ @STEP[who] = 0
1865
+ else
1866
+ @STEP[who] += 1
1867
+ end
1868
+ end
1869
+ @STEP[who]
1870
+ end
1871
+
1872
+ def reset_step
1873
+ @S['cnt'].value = 0
1874
+ @STEP.keys.each{|k| @STEP[k] = ''}
1875
+ end
1876
+
1877
+ def sine(xy0, amp, freq, opts = {})
1878
+ x0, y0, x1, y1 = xy0
1879
+ step = 2
1880
+ xy = []
1881
+ if y0 == y1 # Horizontal
1882
+ x0.step(x1, step){|x|
1883
+ beta = (x - x0) * 2 * Math::PI / freq
1884
+ y = y0 + amp * Math.sin(beta)
1885
+ xy << x << y
1886
+ }
1887
+ else
1888
+ y0.step(y1, step){|y|
1889
+ beta = (y - y0) * 2 * Math::PI / freq
1890
+ x = x0 + amp * Math.sin(beta)
1891
+ xy << x << y
1892
+ }
1893
+ end
1894
+ TkcLine.new(@canvas, xy, opts)
1895
+ end
1896
+
1897
+ def round_rect(xy, radius, opts={})
1898
+ x0, y0, x3, y3 = xy
1899
+ r = @canvas.winfo_pixels(radius)
1900
+ d = 2 * r
1901
+
1902
+ # Make sure that the radius of the curve is less than 3/8 size of the box!
1903
+ maxr = 0.75
1904
+ if d > maxr * (x3 - x0)
1905
+ d = maxr * (x3 - x0)
1906
+ end
1907
+ if d > maxr * (y3 - y0)
1908
+ d = maxr * (y3 - y0)
1909
+ end
1910
+
1911
+ x1 = x0 + d
1912
+ x2 = x3 - d
1913
+ y1 = y0 + d
1914
+ y2 = y3 - d
1915
+
1916
+ xy = [x0, y0, x1, y0, x2, y0, x3, y0, x3, y1, x3, y2]
1917
+ xy.concat([x3, y3, x2, y3, x1, y3, x0, y3, x0, y2, x0, y1])
1918
+ return xy
1919
+ end
1920
+
1921
+ def round_poly(canv, xy, radii, opts)
1922
+ lenXY = xy.length
1923
+ lenR = radii.length
1924
+ if lenXY != 2*lenR
1925
+ raise "wrong number of vertices and radii"
1926
+ end
1927
+
1928
+ knots = []
1929
+ x0 = xy[-2]; y0 = xy[-1]
1930
+ x1 = xy[0]; y1 = xy[1]
1931
+ xy << xy[0] << xy[1]
1932
+
1933
+ 0.step(lenXY - 1, 2){|i|
1934
+ radius = radii[i/2]
1935
+ r = canv.winfo_pixels(radius)
1936
+
1937
+ x2 = xy[i+2]; y2 = xy[i+3]
1938
+ z = _round_poly2(x0, y0, x1, y1, x2, y2, r)
1939
+ knots.concat(z)
1940
+
1941
+ x0 = x1; y0 = y1
1942
+ x1 = x2; y1 = y2
1943
+ }
1944
+ TkcPolygon.new(canv, knots, {:smooth=>true}.update(opts))
1945
+ end
1946
+
1947
+ def _round_poly2(x0, y0, x1, y1, x2, y2, radius)
1948
+ d = 2 * radius
1949
+ maxr = 0.75
1950
+
1951
+ v1x = x0 - x1
1952
+ v1y = y0 - y1
1953
+ v2x = x2 - x1
1954
+ v2y = y2 - y1
1955
+
1956
+ vlen1 = Math.sqrt(v1x*v1x + v1y*v1y)
1957
+ vlen2 = Math.sqrt(v2x*v2x + v2y*v2y)
1958
+
1959
+ if d > maxr * vlen1
1960
+ d = maxr * vlen1
1961
+ end
1962
+ if d > maxr * vlen2
1963
+ d = maxr * vlen2
1964
+ end
1965
+
1966
+ xy = []
1967
+ xy << (x1 + d * v1x / vlen1) << (y1 + d * v1y / vlen1)
1968
+ xy << x1 << y1
1969
+ xy << (x1 + d * v2x / vlen2) << (y1 + d * v2y / vlen2)
1970
+
1971
+ return xy
1972
+ end
1973
+
1974
+ def sparkle(oxy, tag)
1975
+ xy = [
1976
+ [299, 283], [298, 302], [295, 314], [271, 331],
1977
+ [239, 310], [242, 292], [256, 274], [281, 273]
1978
+ ]
1979
+ xy.each{|x, y|
1980
+ TkcLine.new(@canvas, 271, 304, x, y,
1981
+ :fill=>'white', :width=>3, :tag=>tag)
1982
+ }
1983
+ move_abs(tag, oxy)
1984
+ end
1985
+
1986
+ def centroid(item)
1987
+ anchor(item, :c)
1988
+ end
1989
+
1990
+ def anchor(item, where)
1991
+ x1, y1, x2, y2 = @canvas.bbox(item)
1992
+ case(where)
1993
+ when :n
1994
+ y = y1
1995
+ when :s
1996
+ y = y2
1997
+ else
1998
+ y = (y1 + y2) / 2.0
1999
+ end
2000
+ case(where)
2001
+ when :w
2002
+ x = x1
2003
+ when :e
2004
+ x = x2
2005
+ else
2006
+ x = (x1 + x2) / 2.0
2007
+ end
2008
+ return [x, y]
2009
+ end
2010
+ end
2011
+
2012
+ TkGoldberg_Demo.new(base_frame)