tk_as_gem 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. data/README +22 -0
  2. data/Rakefile +11 -0
  3. data/VERSION +1 -0
  4. data/ext/ChangeLog.tkextlib +935 -0
  5. data/ext/MANUAL_tcltklib.eng +469 -0
  6. data/ext/MANUAL_tcltklib.eucj +579 -0
  7. data/ext/README.1st +19 -0
  8. data/ext/README.ActiveTcl +49 -0
  9. data/ext/README.fork +34 -0
  10. data/ext/README.macosx-aqua +67 -0
  11. data/ext/README.tcltklib +85 -0
  12. data/ext/depend +2 -0
  13. data/ext/extconf.rb +451 -0
  14. data/ext/lib/README +30 -0
  15. data/ext/lib/multi-tk.rb +3491 -0
  16. data/ext/lib/remote-tk.rb +530 -0
  17. data/ext/lib/tcltk.rb +367 -0
  18. data/ext/lib/tk.rb +5584 -0
  19. data/ext/lib/tk/after.rb +6 -0
  20. data/ext/lib/tk/autoload.rb +414 -0
  21. data/ext/lib/tk/bgerror.rb +29 -0
  22. data/ext/lib/tk/bindtag.rb +138 -0
  23. data/ext/lib/tk/button.rb +30 -0
  24. data/ext/lib/tk/canvas.rb +789 -0
  25. data/ext/lib/tk/canvastag.rb +434 -0
  26. data/ext/lib/tk/checkbutton.rb +30 -0
  27. data/ext/lib/tk/clipboard.rb +75 -0
  28. data/ext/lib/tk/clock.rb +71 -0
  29. data/ext/lib/tk/composite.rb +458 -0
  30. data/ext/lib/tk/console.rb +52 -0
  31. data/ext/lib/tk/dialog.rb +326 -0
  32. data/ext/lib/tk/encodedstr.rb +187 -0
  33. data/ext/lib/tk/entry.rb +119 -0
  34. data/ext/lib/tk/event.rb +542 -0
  35. data/ext/lib/tk/font.rb +2344 -0
  36. data/ext/lib/tk/frame.rb +131 -0
  37. data/ext/lib/tk/grid.rb +279 -0
  38. data/ext/lib/tk/image.rb +275 -0
  39. data/ext/lib/tk/itemconfig.rb +1215 -0
  40. data/ext/lib/tk/itemfont.rb +327 -0
  41. data/ext/lib/tk/kinput.rb +71 -0
  42. data/ext/lib/tk/label.rb +21 -0
  43. data/ext/lib/tk/labelframe.rb +29 -0
  44. data/ext/lib/tk/listbox.rb +282 -0
  45. data/ext/lib/tk/macpkg.rb +78 -0
  46. data/ext/lib/tk/menu.rb +681 -0
  47. data/ext/lib/tk/menubar.rb +131 -0
  48. data/ext/lib/tk/menuspec.rb +275 -0
  49. data/ext/lib/tk/message.rb +22 -0
  50. data/ext/lib/tk/mngfocus.rb +33 -0
  51. data/ext/lib/tk/msgcat.rb +296 -0
  52. data/ext/lib/tk/namespace.rb +551 -0
  53. data/ext/lib/tk/optiondb.rb +377 -0
  54. data/ext/lib/tk/optionobj.rb +212 -0
  55. data/ext/lib/tk/pack.rb +107 -0
  56. data/ext/lib/tk/package.rb +143 -0
  57. data/ext/lib/tk/palette.rb +55 -0
  58. data/ext/lib/tk/panedwindow.rb +258 -0
  59. data/ext/lib/tk/place.rb +128 -0
  60. data/ext/lib/tk/radiobutton.rb +71 -0
  61. data/ext/lib/tk/root.rb +95 -0
  62. data/ext/lib/tk/scale.rb +111 -0
  63. data/ext/lib/tk/scrollable.rb +82 -0
  64. data/ext/lib/tk/scrollbar.rb +177 -0
  65. data/ext/lib/tk/scrollbox.rb +39 -0
  66. data/ext/lib/tk/selection.rb +86 -0
  67. data/ext/lib/tk/spinbox.rb +119 -0
  68. data/ext/lib/tk/tagfont.rb +43 -0
  69. data/ext/lib/tk/text.rb +1596 -0
  70. data/ext/lib/tk/textimage.rb +88 -0
  71. data/ext/lib/tk/textmark.rb +204 -0
  72. data/ext/lib/tk/texttag.rb +318 -0
  73. data/ext/lib/tk/textwindow.rb +154 -0
  74. data/ext/lib/tk/timer.rb +669 -0
  75. data/ext/lib/tk/toplevel.rb +262 -0
  76. data/ext/lib/tk/ttk_selector.rb +76 -0
  77. data/ext/lib/tk/txtwin_abst.rb +39 -0
  78. data/ext/lib/tk/validation.rb +397 -0
  79. data/ext/lib/tk/variable.rb +1765 -0
  80. data/ext/lib/tk/virtevent.rb +139 -0
  81. data/ext/lib/tk/winfo.rb +392 -0
  82. data/ext/lib/tk/winpkg.rb +153 -0
  83. data/ext/lib/tk/wm.rb +552 -0
  84. data/ext/lib/tk/xim.rb +122 -0
  85. data/ext/lib/tkafter.rb +4 -0
  86. data/ext/lib/tkbgerror.rb +4 -0
  87. data/ext/lib/tkcanvas.rb +4 -0
  88. data/ext/lib/tkclass.rb +47 -0
  89. data/ext/lib/tkconsole.rb +4 -0
  90. data/ext/lib/tkdialog.rb +4 -0
  91. data/ext/lib/tkentry.rb +4 -0
  92. data/ext/lib/tkextlib/ICONS.rb +13 -0
  93. data/ext/lib/tkextlib/ICONS/icons.rb +129 -0
  94. data/ext/lib/tkextlib/ICONS/setup.rb +8 -0
  95. data/ext/lib/tkextlib/SUPPORT_STATUS +196 -0
  96. data/ext/lib/tkextlib/blt.rb +187 -0
  97. data/ext/lib/tkextlib/blt/barchart.rb +79 -0
  98. data/ext/lib/tkextlib/blt/bitmap.rb +112 -0
  99. data/ext/lib/tkextlib/blt/busy.rb +82 -0
  100. data/ext/lib/tkextlib/blt/component.rb +2145 -0
  101. data/ext/lib/tkextlib/blt/container.rb +28 -0
  102. data/ext/lib/tkextlib/blt/cutbuffer.rb +23 -0
  103. data/ext/lib/tkextlib/blt/dragdrop.rb +268 -0
  104. data/ext/lib/tkextlib/blt/eps.rb +32 -0
  105. data/ext/lib/tkextlib/blt/graph.rb +67 -0
  106. data/ext/lib/tkextlib/blt/htext.rb +111 -0
  107. data/ext/lib/tkextlib/blt/setup.rb +8 -0
  108. data/ext/lib/tkextlib/blt/spline.rb +23 -0
  109. data/ext/lib/tkextlib/blt/stripchart.rb +74 -0
  110. data/ext/lib/tkextlib/blt/table.rb +399 -0
  111. data/ext/lib/tkextlib/blt/tabnotebook.rb +110 -0
  112. data/ext/lib/tkextlib/blt/tabset.rb +500 -0
  113. data/ext/lib/tkextlib/blt/ted.rb +65 -0
  114. data/ext/lib/tkextlib/blt/tile.rb +21 -0
  115. data/ext/lib/tkextlib/blt/tile/button.rb +16 -0
  116. data/ext/lib/tkextlib/blt/tile/checkbutton.rb +17 -0
  117. data/ext/lib/tkextlib/blt/tile/frame.rb +16 -0
  118. data/ext/lib/tkextlib/blt/tile/label.rb +16 -0
  119. data/ext/lib/tkextlib/blt/tile/radiobutton.rb +17 -0
  120. data/ext/lib/tkextlib/blt/tile/scrollbar.rb +16 -0
  121. data/ext/lib/tkextlib/blt/tile/toplevel.rb +16 -0
  122. data/ext/lib/tkextlib/blt/tree.rb +1058 -0
  123. data/ext/lib/tkextlib/blt/treeview.rb +1272 -0
  124. data/ext/lib/tkextlib/blt/unix_dnd.rb +135 -0
  125. data/ext/lib/tkextlib/blt/vector.rb +256 -0
  126. data/ext/lib/tkextlib/blt/watch.rb +175 -0
  127. data/ext/lib/tkextlib/blt/win_printer.rb +61 -0
  128. data/ext/lib/tkextlib/blt/winop.rb +107 -0
  129. data/ext/lib/tkextlib/bwidget.rb +151 -0
  130. data/ext/lib/tkextlib/bwidget/arrowbutton.rb +21 -0
  131. data/ext/lib/tkextlib/bwidget/bitmap.rb +21 -0
  132. data/ext/lib/tkextlib/bwidget/button.rb +31 -0
  133. data/ext/lib/tkextlib/bwidget/buttonbox.rb +90 -0
  134. data/ext/lib/tkextlib/bwidget/combobox.rb +51 -0
  135. data/ext/lib/tkextlib/bwidget/dialog.rb +182 -0
  136. data/ext/lib/tkextlib/bwidget/dragsite.rb +31 -0
  137. data/ext/lib/tkextlib/bwidget/dropsite.rb +39 -0
  138. data/ext/lib/tkextlib/bwidget/dynamichelp.rb +63 -0
  139. data/ext/lib/tkextlib/bwidget/entry.rb +43 -0
  140. data/ext/lib/tkextlib/bwidget/label.rb +41 -0
  141. data/ext/lib/tkextlib/bwidget/labelentry.rb +80 -0
  142. data/ext/lib/tkextlib/bwidget/labelframe.rb +52 -0
  143. data/ext/lib/tkextlib/bwidget/listbox.rb +358 -0
  144. data/ext/lib/tkextlib/bwidget/mainframe.rb +128 -0
  145. data/ext/lib/tkextlib/bwidget/messagedlg.rb +192 -0
  146. data/ext/lib/tkextlib/bwidget/notebook.rb +166 -0
  147. data/ext/lib/tkextlib/bwidget/pagesmanager.rb +73 -0
  148. data/ext/lib/tkextlib/bwidget/panedwindow.rb +37 -0
  149. data/ext/lib/tkextlib/bwidget/panelframe.rb +57 -0
  150. data/ext/lib/tkextlib/bwidget/passwddlg.rb +44 -0
  151. data/ext/lib/tkextlib/bwidget/progressbar.rb +20 -0
  152. data/ext/lib/tkextlib/bwidget/progressdlg.rb +58 -0
  153. data/ext/lib/tkextlib/bwidget/scrollableframe.rb +40 -0
  154. data/ext/lib/tkextlib/bwidget/scrolledwindow.rb +38 -0
  155. data/ext/lib/tkextlib/bwidget/scrollview.rb +25 -0
  156. data/ext/lib/tkextlib/bwidget/selectcolor.rb +73 -0
  157. data/ext/lib/tkextlib/bwidget/selectfont.rb +86 -0
  158. data/ext/lib/tkextlib/bwidget/separator.rb +20 -0
  159. data/ext/lib/tkextlib/bwidget/setup.rb +8 -0
  160. data/ext/lib/tkextlib/bwidget/spinbox.rb +98 -0
  161. data/ext/lib/tkextlib/bwidget/statusbar.rb +52 -0
  162. data/ext/lib/tkextlib/bwidget/titleframe.rb +33 -0
  163. data/ext/lib/tkextlib/bwidget/tree.rb +453 -0
  164. data/ext/lib/tkextlib/bwidget/widget.rb +129 -0
  165. data/ext/lib/tkextlib/itcl.rb +13 -0
  166. data/ext/lib/tkextlib/itcl/incr_tcl.rb +178 -0
  167. data/ext/lib/tkextlib/itcl/setup.rb +13 -0
  168. data/ext/lib/tkextlib/itk.rb +13 -0
  169. data/ext/lib/tkextlib/itk/incr_tk.rb +446 -0
  170. data/ext/lib/tkextlib/itk/setup.rb +13 -0
  171. data/ext/lib/tkextlib/iwidgets.rb +94 -0
  172. data/ext/lib/tkextlib/iwidgets/buttonbox.rb +120 -0
  173. data/ext/lib/tkextlib/iwidgets/calendar.rb +125 -0
  174. data/ext/lib/tkextlib/iwidgets/canvasprintbox.rb +53 -0
  175. data/ext/lib/tkextlib/iwidgets/canvasprintdialog.rb +38 -0
  176. data/ext/lib/tkextlib/iwidgets/checkbox.rb +129 -0
  177. data/ext/lib/tkextlib/iwidgets/combobox.rb +104 -0
  178. data/ext/lib/tkextlib/iwidgets/dateentry.rb +20 -0
  179. data/ext/lib/tkextlib/iwidgets/datefield.rb +58 -0
  180. data/ext/lib/tkextlib/iwidgets/dialog.rb +20 -0
  181. data/ext/lib/tkextlib/iwidgets/dialogshell.rb +120 -0
  182. data/ext/lib/tkextlib/iwidgets/disjointlistbox.rb +50 -0
  183. data/ext/lib/tkextlib/iwidgets/entryfield.rb +185 -0
  184. data/ext/lib/tkextlib/iwidgets/extbutton.rb +40 -0
  185. data/ext/lib/tkextlib/iwidgets/extfileselectionbox.rb +46 -0
  186. data/ext/lib/tkextlib/iwidgets/extfileselectiondialog.rb +33 -0
  187. data/ext/lib/tkextlib/iwidgets/feedback.rb +35 -0
  188. data/ext/lib/tkextlib/iwidgets/fileselectionbox.rb +46 -0
  189. data/ext/lib/tkextlib/iwidgets/fileselectiondialog.rb +33 -0
  190. data/ext/lib/tkextlib/iwidgets/finddialog.rb +42 -0
  191. data/ext/lib/tkextlib/iwidgets/hierarchy.rb +365 -0
  192. data/ext/lib/tkextlib/iwidgets/hyperhelp.rb +50 -0
  193. data/ext/lib/tkextlib/iwidgets/labeledframe.rb +39 -0
  194. data/ext/lib/tkextlib/iwidgets/labeledwidget.rb +45 -0
  195. data/ext/lib/tkextlib/iwidgets/mainwindow.rb +67 -0
  196. data/ext/lib/tkextlib/iwidgets/menubar.rb +211 -0
  197. data/ext/lib/tkextlib/iwidgets/messagebox.rb +92 -0
  198. data/ext/lib/tkextlib/iwidgets/messagedialog.rb +20 -0
  199. data/ext/lib/tkextlib/iwidgets/notebook.rb +174 -0
  200. data/ext/lib/tkextlib/iwidgets/optionmenu.rb +92 -0
  201. data/ext/lib/tkextlib/iwidgets/panedwindow.rb +133 -0
  202. data/ext/lib/tkextlib/iwidgets/promptdialog.rb +131 -0
  203. data/ext/lib/tkextlib/iwidgets/pushbutton.rb +35 -0
  204. data/ext/lib/tkextlib/iwidgets/radiobox.rb +120 -0
  205. data/ext/lib/tkextlib/iwidgets/scopedobject.rb +24 -0
  206. data/ext/lib/tkextlib/iwidgets/scrolledcanvas.rb +353 -0
  207. data/ext/lib/tkextlib/iwidgets/scrolledframe.rb +59 -0
  208. data/ext/lib/tkextlib/iwidgets/scrolledhtml.rb +58 -0
  209. data/ext/lib/tkextlib/iwidgets/scrolledlistbox.rb +207 -0
  210. data/ext/lib/tkextlib/iwidgets/scrolledtext.rb +564 -0
  211. data/ext/lib/tkextlib/iwidgets/scrolledwidget.rb +20 -0
  212. data/ext/lib/tkextlib/iwidgets/selectionbox.rb +102 -0
  213. data/ext/lib/tkextlib/iwidgets/selectiondialog.rb +92 -0
  214. data/ext/lib/tkextlib/iwidgets/setup.rb +8 -0
  215. data/ext/lib/tkextlib/iwidgets/shell.rb +38 -0
  216. data/ext/lib/tkextlib/iwidgets/spindate.rb +48 -0
  217. data/ext/lib/tkextlib/iwidgets/spinint.rb +30 -0
  218. data/ext/lib/tkextlib/iwidgets/spinner.rb +169 -0
  219. data/ext/lib/tkextlib/iwidgets/spintime.rb +48 -0
  220. data/ext/lib/tkextlib/iwidgets/tabnotebook.rb +180 -0
  221. data/ext/lib/tkextlib/iwidgets/tabset.rb +144 -0
  222. data/ext/lib/tkextlib/iwidgets/timeentry.rb +25 -0
  223. data/ext/lib/tkextlib/iwidgets/timefield.rb +58 -0
  224. data/ext/lib/tkextlib/iwidgets/toolbar.rb +112 -0
  225. data/ext/lib/tkextlib/iwidgets/watch.rb +56 -0
  226. data/ext/lib/tkextlib/pkg_checker.rb +184 -0
  227. data/ext/lib/tkextlib/setup.rb +8 -0
  228. data/ext/lib/tkextlib/tcllib.rb +90 -0
  229. data/ext/lib/tkextlib/tcllib/README +135 -0
  230. data/ext/lib/tkextlib/tcllib/autoscroll.rb +158 -0
  231. data/ext/lib/tkextlib/tcllib/ctext.rb +160 -0
  232. data/ext/lib/tkextlib/tcllib/cursor.rb +97 -0
  233. data/ext/lib/tkextlib/tcllib/datefield.rb +57 -0
  234. data/ext/lib/tkextlib/tcllib/dialog.rb +84 -0
  235. data/ext/lib/tkextlib/tcllib/getstring.rb +134 -0
  236. data/ext/lib/tkextlib/tcllib/history.rb +73 -0
  237. data/ext/lib/tkextlib/tcllib/ico.rb +116 -0
  238. data/ext/lib/tkextlib/tcllib/ip_entry.rb +66 -0
  239. data/ext/lib/tkextlib/tcllib/panelframe.rb +72 -0
  240. data/ext/lib/tkextlib/tcllib/plotchart.rb +886 -0
  241. data/ext/lib/tkextlib/tcllib/ruler.rb +65 -0
  242. data/ext/lib/tkextlib/tcllib/screenruler.rb +68 -0
  243. data/ext/lib/tkextlib/tcllib/scrollwin.rb +61 -0
  244. data/ext/lib/tkextlib/tcllib/setup.rb +8 -0
  245. data/ext/lib/tkextlib/tcllib/style.rb +61 -0
  246. data/ext/lib/tkextlib/tcllib/superframe.rb +51 -0
  247. data/ext/lib/tkextlib/tcllib/swaplist.rb +150 -0
  248. data/ext/lib/tkextlib/tcllib/tablelist.rb +27 -0
  249. data/ext/lib/tkextlib/tcllib/tablelist_core.rb +782 -0
  250. data/ext/lib/tkextlib/tcllib/tablelist_tile.rb +25 -0
  251. data/ext/lib/tkextlib/tcllib/tkpiechart.rb +314 -0
  252. data/ext/lib/tkextlib/tcllib/tooltip.rb +95 -0
  253. data/ext/lib/tkextlib/tcllib/widget.rb +48 -0
  254. data/ext/lib/tkextlib/tclx.rb +13 -0
  255. data/ext/lib/tkextlib/tclx/setup.rb +8 -0
  256. data/ext/lib/tkextlib/tclx/tclx.rb +74 -0
  257. data/ext/lib/tkextlib/tile.rb +419 -0
  258. data/ext/lib/tkextlib/tile/dialog.rb +96 -0
  259. data/ext/lib/tkextlib/tile/setup.rb +8 -0
  260. data/ext/lib/tkextlib/tile/sizegrip.rb +29 -0
  261. data/ext/lib/tkextlib/tile/style.rb +316 -0
  262. data/ext/lib/tkextlib/tile/tbutton.rb +33 -0
  263. data/ext/lib/tkextlib/tile/tcheckbutton.rb +36 -0
  264. data/ext/lib/tkextlib/tile/tcombobox.rb +54 -0
  265. data/ext/lib/tkextlib/tile/tentry.rb +48 -0
  266. data/ext/lib/tkextlib/tile/tframe.rb +33 -0
  267. data/ext/lib/tkextlib/tile/tlabel.rb +33 -0
  268. data/ext/lib/tkextlib/tile/tlabelframe.rb +36 -0
  269. data/ext/lib/tkextlib/tile/tmenubutton.rb +36 -0
  270. data/ext/lib/tkextlib/tile/tnotebook.rb +139 -0
  271. data/ext/lib/tkextlib/tile/tpaned.rb +231 -0
  272. data/ext/lib/tkextlib/tile/tprogressbar.rb +56 -0
  273. data/ext/lib/tkextlib/tile/tradiobutton.rb +36 -0
  274. data/ext/lib/tkextlib/tile/treeview.rb +1239 -0
  275. data/ext/lib/tkextlib/tile/tscale.rb +53 -0
  276. data/ext/lib/tkextlib/tile/tscrollbar.rb +54 -0
  277. data/ext/lib/tkextlib/tile/tseparator.rb +33 -0
  278. data/ext/lib/tkextlib/tile/tsquare.rb +30 -0
  279. data/ext/lib/tkextlib/tkDND.rb +18 -0
  280. data/ext/lib/tkextlib/tkDND/setup.rb +8 -0
  281. data/ext/lib/tkextlib/tkDND/shape.rb +125 -0
  282. data/ext/lib/tkextlib/tkDND/tkdnd.rb +182 -0
  283. data/ext/lib/tkextlib/tkHTML.rb +13 -0
  284. data/ext/lib/tkextlib/tkHTML/htmlwidget.rb +453 -0
  285. data/ext/lib/tkextlib/tkHTML/setup.rb +8 -0
  286. data/ext/lib/tkextlib/tkimg.rb +36 -0
  287. data/ext/lib/tkextlib/tkimg/README +26 -0
  288. data/ext/lib/tkextlib/tkimg/bmp.rb +33 -0
  289. data/ext/lib/tkextlib/tkimg/gif.rb +33 -0
  290. data/ext/lib/tkextlib/tkimg/ico.rb +33 -0
  291. data/ext/lib/tkextlib/tkimg/jpeg.rb +33 -0
  292. data/ext/lib/tkextlib/tkimg/pcx.rb +33 -0
  293. data/ext/lib/tkextlib/tkimg/pixmap.rb +44 -0
  294. data/ext/lib/tkextlib/tkimg/png.rb +33 -0
  295. data/ext/lib/tkextlib/tkimg/ppm.rb +33 -0
  296. data/ext/lib/tkextlib/tkimg/ps.rb +33 -0
  297. data/ext/lib/tkextlib/tkimg/setup.rb +8 -0
  298. data/ext/lib/tkextlib/tkimg/sgi.rb +33 -0
  299. data/ext/lib/tkextlib/tkimg/sun.rb +33 -0
  300. data/ext/lib/tkextlib/tkimg/tga.rb +33 -0
  301. data/ext/lib/tkextlib/tkimg/tiff.rb +33 -0
  302. data/ext/lib/tkextlib/tkimg/window.rb +33 -0
  303. data/ext/lib/tkextlib/tkimg/xbm.rb +33 -0
  304. data/ext/lib/tkextlib/tkimg/xpm.rb +33 -0
  305. data/ext/lib/tkextlib/tktable.rb +14 -0
  306. data/ext/lib/tkextlib/tktable/setup.rb +8 -0
  307. data/ext/lib/tkextlib/tktable/tktable.rb +957 -0
  308. data/ext/lib/tkextlib/tktrans.rb +14 -0
  309. data/ext/lib/tkextlib/tktrans/setup.rb +8 -0
  310. data/ext/lib/tkextlib/tktrans/tktrans.rb +64 -0
  311. data/ext/lib/tkextlib/treectrl.rb +13 -0
  312. data/ext/lib/tkextlib/treectrl/setup.rb +8 -0
  313. data/ext/lib/tkextlib/treectrl/tktreectrl.rb +2461 -0
  314. data/ext/lib/tkextlib/trofs.rb +13 -0
  315. data/ext/lib/tkextlib/trofs/setup.rb +8 -0
  316. data/ext/lib/tkextlib/trofs/trofs.rb +51 -0
  317. data/ext/lib/tkextlib/version.rb +6 -0
  318. data/ext/lib/tkextlib/vu.rb +48 -0
  319. data/ext/lib/tkextlib/vu/bargraph.rb +61 -0
  320. data/ext/lib/tkextlib/vu/charts.rb +53 -0
  321. data/ext/lib/tkextlib/vu/dial.rb +102 -0
  322. data/ext/lib/tkextlib/vu/pie.rb +282 -0
  323. data/ext/lib/tkextlib/vu/setup.rb +8 -0
  324. data/ext/lib/tkextlib/vu/spinbox.rb +22 -0
  325. data/ext/lib/tkextlib/winico.rb +14 -0
  326. data/ext/lib/tkextlib/winico/setup.rb +8 -0
  327. data/ext/lib/tkextlib/winico/winico.rb +224 -0
  328. data/ext/lib/tkfont.rb +4 -0
  329. data/ext/lib/tkmacpkg.rb +4 -0
  330. data/ext/lib/tkmenubar.rb +4 -0
  331. data/ext/lib/tkmngfocus.rb +4 -0
  332. data/ext/lib/tkpalette.rb +4 -0
  333. data/ext/lib/tkscrollbox.rb +4 -0
  334. data/ext/lib/tktext.rb +4 -0
  335. data/ext/lib/tkvirtevent.rb +4 -0
  336. data/ext/lib/tkwinpkg.rb +4 -0
  337. data/ext/old-README.tcltklib.eucj +159 -0
  338. data/ext/stubs.c +531 -0
  339. data/ext/stubs.h +33 -0
  340. data/ext/tcltklib.c +10155 -0
  341. data/ext/tkutil/.cvsignore +3 -0
  342. data/ext/tkutil/depend +1 -0
  343. data/ext/tkutil/extconf.rb +14 -0
  344. data/ext/tkutil/tkutil.c +1789 -0
  345. metadata +418 -0
@@ -0,0 +1,138 @@
1
+ #
2
+ # tk/bind.rb : control event binding
3
+ #
4
+ require 'tk'
5
+
6
+ class TkBindTag
7
+ include TkBindCore
8
+
9
+ #BTagID_TBL = {}
10
+ BTagID_TBL = TkCore::INTERP.create_table
11
+
12
+ (Tk_BINDTAG_ID = ["btag".freeze, "00000".taint]).instance_eval{
13
+ @mutex = Mutex.new
14
+ def mutex; @mutex; end
15
+ freeze
16
+ }
17
+
18
+ TkCore::INTERP.init_ip_env{
19
+ BTagID_TBL.mutex.synchronize{ BTagID_TBL.clear }
20
+ }
21
+
22
+ def TkBindTag.id2obj(id)
23
+ BTagID_TBL.mutex.synchronize{
24
+ (BTagID_TBL[id])? BTagID_TBL[id]: id
25
+ }
26
+ end
27
+
28
+ =begin
29
+ def TkBindTag.new_by_name(name, *args, &b)
30
+ BTagID_TBL.mutex.synchronize{
31
+ return BTagID_TBL[name] if BTagID_TBL[name]
32
+ }
33
+
34
+ self.new.instance_eval{
35
+ BTagID_TBL.mutex.synchronize{
36
+ BTagID_TBL.delete @id
37
+ @id = name
38
+ BTagID_TBL[@id] = self
39
+ }
40
+ bind(*args, &b) if args != []
41
+ self
42
+ }
43
+ end
44
+ =end
45
+ def TkBindTag.new_by_name(name, *args, &b)
46
+ obj = nil
47
+ BTagID_TBL.mutex.synchronize{
48
+ if BTagID_TBL[name]
49
+ obj = BTagID_TBL[name]
50
+ else
51
+ (obj = BTagID_TBL[name] = self.allocate).instance_eval{
52
+ @id = name
53
+ }
54
+ end
55
+ }
56
+ bind(*args, &b) if obj && args != []
57
+ obj
58
+ end
59
+
60
+ def initialize(*args, &b)
61
+ Tk_BINDTAG_ID.mutex.synchronize{
62
+ # @id = Tk_BINDTAG_ID.join('')
63
+ @id = Tk_BINDTAG_ID.join(TkCore::INTERP._ip_id_)
64
+ Tk_BINDTAG_ID[1].succ!
65
+ }
66
+ BTagID_TBL.mutex.synchronize{
67
+ BTagID_TBL[@id] = self
68
+ }
69
+ bind(*args, &b) if args != []
70
+ end
71
+
72
+ ALL = self.new_by_name('all')
73
+
74
+ def name
75
+ @id
76
+ end
77
+
78
+ def to_eval
79
+ @id
80
+ end
81
+
82
+ def inspect
83
+ #Kernel.format "#<TkBindTag: %s>", @id
84
+ '#<TkBindTag: ' + @id + '>'
85
+ end
86
+ end
87
+
88
+
89
+ class TkBindTagAll<TkBindTag
90
+ def TkBindTagAll.new(*args, &b)
91
+ $stderr.puts "Warning: TkBindTagALL is obsolete. Use TkBindTag::ALL\n"
92
+
93
+ TkBindTag::ALL.bind(*args, &b) if args != []
94
+ TkBindTag::ALL
95
+ end
96
+ end
97
+
98
+
99
+ class TkDatabaseClass<TkBindTag
100
+ =begin
101
+ def self.new(name, *args, &b)
102
+ BTagID_TBL.mutex.synchronize{
103
+ return BTagID_TBL[name] if BTagID_TBL[name]
104
+ }
105
+ super(name, *args, &b)
106
+ end
107
+
108
+ def initialize(name, *args, &b)
109
+ @id = name
110
+ BTagID_TBL.mutex.synchronize{
111
+ BTagID_TBL[@id] = self
112
+ }
113
+ bind(*args, &b) if args != []
114
+ end
115
+ =end
116
+ def self.new(name, *args, &b)
117
+ BTagID_TBL.mutex.synchronize{
118
+ if BTagID_TBL[name]
119
+ BTagID_TBL[name]
120
+ else
121
+ BTagID_TBL[name] = self.allocate.instance_eval{
122
+ initialize(name, *args, &b)
123
+ self
124
+ }
125
+ end
126
+ }
127
+ end
128
+
129
+ def initialize(name, *args, &b)
130
+ @id = name
131
+ bind(*args, &b) if args != []
132
+ end
133
+
134
+ def inspect
135
+ #Kernel.format "#<TkDatabaseClass: %s>", @id
136
+ '#<TkDatabaseClass: ' + @id + '>'
137
+ end
138
+ end
@@ -0,0 +1,30 @@
1
+ #
2
+ # tk/button.rb : treat button widget
3
+ #
4
+ require 'tk'
5
+ require 'tk/label'
6
+
7
+ class Tk::Button<Tk::Label
8
+ TkCommandNames = ['button'.freeze].freeze
9
+ WidgetClassName = 'Button'.freeze
10
+ WidgetClassNames[WidgetClassName] = self
11
+ #def create_self(keys)
12
+ # if keys and keys != None
13
+ # tk_call_without_enc('button', @path, *hash_kv(keys, true))
14
+ # else
15
+ # tk_call_without_enc('button', @path)
16
+ # end
17
+ #end
18
+ #private :create_self
19
+
20
+ def invoke
21
+ _fromUTF8(tk_send_without_enc('invoke'))
22
+ end
23
+ def flash
24
+ tk_send_without_enc('flash')
25
+ self
26
+ end
27
+ end
28
+
29
+ #TkButton = Tk::Button unless Object.const_defined? :TkButton
30
+ Tk.__set_toplevel_aliases__(:Tk, Tk::Button, :TkButton)
@@ -0,0 +1,789 @@
1
+ #
2
+ # tk/canvas.rb - Tk canvas classes
3
+ # by Yukihiro Matsumoto <matz@caelum.co.jp>
4
+ #
5
+ require 'tk'
6
+ require 'tk/canvastag'
7
+ require 'tk/itemconfig'
8
+ require 'tk/scrollable'
9
+
10
+ module TkCanvasItemConfig
11
+ include TkItemConfigMethod
12
+
13
+ def __item_strval_optkeys(id)
14
+ # maybe need to override
15
+ super(id) + [
16
+ 'fill', 'activefill', 'disabledfill',
17
+ 'outline', 'activeoutline', 'disabledoutline'
18
+ ]
19
+ end
20
+ private :__item_strval_optkeys
21
+
22
+ def __item_methodcall_optkeys(id)
23
+ {'coords'=>'coords'}
24
+ end
25
+ private :__item_methodcall_optkeys
26
+
27
+ def __item_val2ruby_optkeys(id) # { key=>proc, ... }
28
+ super(id).update('window'=>proc{|i, v| window(v)})
29
+ end
30
+ private :__item_val2ruby_optkeys
31
+
32
+ def __item_pathname(tagOrId)
33
+ if tagOrId.kind_of?(TkcItem) || tagOrId.kind_of?(TkcTag)
34
+ self.path + ';' + tagOrId.id.to_s
35
+ else
36
+ self.path + ';' + tagOrId.to_s
37
+ end
38
+ end
39
+ private :__item_pathname
40
+ end
41
+
42
+ class Tk::Canvas<TkWindow
43
+ include TkCanvasItemConfig
44
+ include Tk::Scrollable
45
+
46
+ TkCommandNames = ['canvas'.freeze].freeze
47
+ WidgetClassName = 'Canvas'.freeze
48
+ WidgetClassNames[WidgetClassName] = self
49
+
50
+ def __destroy_hook__
51
+ TkcItem::CItemID_TBL.delete(@path)
52
+ end
53
+
54
+ #def create_self(keys)
55
+ # if keys and keys != None
56
+ # tk_call_without_enc('canvas', @path, *hash_kv(keys, true))
57
+ # else
58
+ # tk_call_without_enc('canvas', @path)
59
+ # end
60
+ #end
61
+ #private :create_self
62
+
63
+ def __numval_optkeys
64
+ super() + ['closeenough']
65
+ end
66
+ private :__numval_optkeys
67
+
68
+ def __boolval_optkeys
69
+ super() + ['confine']
70
+ end
71
+ private :__boolval_optkeys
72
+
73
+ def tagid(tag)
74
+ if tag.kind_of?(TkcItem) || tag.kind_of?(TkcTag)
75
+ tag.id
76
+ else
77
+ tag # maybe an Array of configure paramters
78
+ end
79
+ end
80
+ private :tagid
81
+
82
+
83
+ # create a canvas item without creating a TkcItem object
84
+ def create(type, *args)
85
+ type.create(self, *args)
86
+ end
87
+
88
+
89
+ def addtag(tag, mode, *args)
90
+ mode = mode.to_s
91
+ if args[0] && mode =~ /^(above|below|with(tag)?)$/
92
+ args[0] = tagid(args[0])
93
+ end
94
+ tk_send_without_enc('addtag', tagid(tag), mode, *args)
95
+ self
96
+ end
97
+ def addtag_above(tagOrId, target)
98
+ addtag(tagOrId, 'above', tagid(target))
99
+ end
100
+ def addtag_all(tagOrId)
101
+ addtag(tagOrId, 'all')
102
+ end
103
+ def addtag_below(tagOrId, target)
104
+ addtag(tagOrId, 'below', tagid(target))
105
+ end
106
+ def addtag_closest(tagOrId, x, y, halo=None, start=None)
107
+ addtag(tagOrId, 'closest', x, y, halo, start)
108
+ end
109
+ def addtag_enclosed(tagOrId, x1, y1, x2, y2)
110
+ addtag(tagOrId, 'enclosed', x1, y1, x2, y2)
111
+ end
112
+ def addtag_overlapping(tagOrId, x1, y1, x2, y2)
113
+ addtag(tagOrId, 'overlapping', x1, y1, x2, y2)
114
+ end
115
+ def addtag_withtag(tagOrId, tag)
116
+ addtag(tagOrId, 'withtag', tagid(tag))
117
+ end
118
+
119
+ def bbox(tagOrId, *tags)
120
+ list(tk_send_without_enc('bbox', tagid(tagOrId),
121
+ *tags.collect{|t| tagid(t)}))
122
+ end
123
+
124
+ #def itembind(tag, context, cmd=Proc.new, *args)
125
+ # _bind([path, "bind", tagid(tag)], context, cmd, *args)
126
+ # self
127
+ #end
128
+ def itembind(tag, context, *args)
129
+ # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
130
+ if TkComm._callback_entry?(args[0]) || !block_given?
131
+ cmd = args.shift
132
+ else
133
+ cmd = Proc.new
134
+ end
135
+ _bind([path, "bind", tagid(tag)], context, cmd, *args)
136
+ self
137
+ end
138
+
139
+ #def itembind_append(tag, context, cmd=Proc.new, *args)
140
+ # _bind_append([path, "bind", tagid(tag)], context, cmd, *args)
141
+ # self
142
+ #end
143
+ def itembind_append(tag, context, *args)
144
+ # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
145
+ if TkComm._callback_entry?(args[0]) || !block_given?
146
+ cmd = args.shift
147
+ else
148
+ cmd = Proc.new
149
+ end
150
+ _bind_append([path, "bind", tagid(tag)], context, cmd, *args)
151
+ self
152
+ end
153
+
154
+ def itembind_remove(tag, context)
155
+ _bind_remove([path, "bind", tagid(tag)], context)
156
+ self
157
+ end
158
+
159
+ def itembindinfo(tag, context=nil)
160
+ _bindinfo([path, "bind", tagid(tag)], context)
161
+ end
162
+
163
+ def canvasx(screen_x, *args)
164
+ #tk_tcl2ruby(tk_send_without_enc('canvasx', screen_x, *args))
165
+ number(tk_send_without_enc('canvasx', screen_x, *args))
166
+ end
167
+ def canvasy(screen_y, *args)
168
+ #tk_tcl2ruby(tk_send_without_enc('canvasy', screen_y, *args))
169
+ number(tk_send_without_enc('canvasy', screen_y, *args))
170
+ end
171
+ alias canvas_x canvasx
172
+ alias canvas_y canvasy
173
+
174
+ def coords(tag, *args)
175
+ if args == []
176
+ tk_split_list(tk_send_without_enc('coords', tagid(tag)))
177
+ else
178
+ tk_send_without_enc('coords', tagid(tag), *(args.flatten))
179
+ self
180
+ end
181
+ end
182
+
183
+ def dchars(tag, first, last=None)
184
+ tk_send_without_enc('dchars', tagid(tag),
185
+ _get_eval_enc_str(first), _get_eval_enc_str(last))
186
+ self
187
+ end
188
+
189
+ def delete(*args)
190
+ tbl = nil
191
+ TkcItem::CItemID_TBL.mutex.synchronize{
192
+ tbl = TkcItem::CItemID_TBL[self.path]
193
+ }
194
+ if tbl
195
+ args.each{|tag|
196
+ find('withtag', tag).each{|item|
197
+ if item.kind_of?(TkcItem)
198
+ TkcItem::CItemID_TBL.mutex.synchronize{
199
+ tbl.delete(item.id)
200
+ }
201
+ end
202
+ }
203
+ }
204
+ end
205
+ tk_send_without_enc('delete', *args.collect{|t| tagid(t)})
206
+ self
207
+ end
208
+ alias remove delete
209
+
210
+ def dtag(tag, tag_to_del=None)
211
+ tk_send_without_enc('dtag', tagid(tag), tagid(tag_to_del))
212
+ self
213
+ end
214
+ alias deltag dtag
215
+
216
+ def find(mode, *args)
217
+ list(tk_send_without_enc('find', mode, *args)).collect!{|id|
218
+ TkcItem.id2obj(self, id)
219
+ }
220
+ end
221
+ def find_above(target)
222
+ find('above', tagid(target))
223
+ end
224
+ def find_all
225
+ find('all')
226
+ end
227
+ def find_below(target)
228
+ find('below', tagid(target))
229
+ end
230
+ def find_closest(x, y, halo=None, start=None)
231
+ find('closest', x, y, halo, start)
232
+ end
233
+ def find_enclosed(x1, y1, x2, y2)
234
+ find('enclosed', x1, y1, x2, y2)
235
+ end
236
+ def find_overlapping(x1, y1, x2, y2)
237
+ find('overlapping', x1, y1, x2, y2)
238
+ end
239
+ def find_withtag(tag)
240
+ find('withtag', tag)
241
+ end
242
+
243
+ def itemfocus(tagOrId=nil)
244
+ if tagOrId
245
+ tk_send_without_enc('focus', tagid(tagOrId))
246
+ self
247
+ else
248
+ ret = tk_send_without_enc('focus')
249
+ if ret == ""
250
+ nil
251
+ else
252
+ TkcItem.id2obj(self, ret)
253
+ end
254
+ end
255
+ end
256
+
257
+ def gettags(tagOrId)
258
+ list(tk_send_without_enc('gettags', tagid(tagOrId))).collect{|tag|
259
+ TkcTag.id2obj(self, tag)
260
+ }
261
+ end
262
+
263
+ def icursor(tagOrId, index)
264
+ tk_send_without_enc('icursor', tagid(tagOrId), index)
265
+ self
266
+ end
267
+
268
+ def index(tagOrId, idx)
269
+ number(tk_send_without_enc('index', tagid(tagOrId), idx))
270
+ end
271
+
272
+ def insert(tagOrId, index, string)
273
+ tk_send_without_enc('insert', tagid(tagOrId), index,
274
+ _get_eval_enc_str(string))
275
+ self
276
+ end
277
+
278
+ =begin
279
+ def itemcget(tagOrId, option)
280
+ case option.to_s
281
+ when 'dash', 'activedash', 'disableddash'
282
+ conf = tk_send_without_enc('itemcget', tagid(tagOrId), "-#{option}")
283
+ if conf =~ /^[0-9]/
284
+ list(conf)
285
+ else
286
+ conf
287
+ end
288
+ when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'
289
+ _fromUTF8(tk_send_without_enc('itemcget', tagid(tagOrId), "-#{option}"))
290
+ when 'font', 'kanjifont'
291
+ #fnt = tk_tcl2ruby(tk_send('itemcget', tagid(tagOrId), "-#{option}"))
292
+ fnt = tk_tcl2ruby(_fromUTF8(tk_send_with_enc('itemcget', tagid(tagOrId), '-font')))
293
+ unless fnt.kind_of?(TkFont)
294
+ fnt = tagfontobj(tagid(tagOrId), fnt)
295
+ end
296
+ if option.to_s == 'kanjifont' && JAPANIZED_TK && TK_VERSION =~ /^4\.*/
297
+ # obsolete; just for compatibility
298
+ fnt.kanji_font
299
+ else
300
+ fnt
301
+ end
302
+ else
303
+ tk_tcl2ruby(_fromUTF8(tk_send_without_enc('itemcget', tagid(tagOrId),
304
+ "-#{option}")))
305
+ end
306
+ end
307
+
308
+ def itemconfigure(tagOrId, key, value=None)
309
+ if key.kind_of? Hash
310
+ key = _symbolkey2str(key)
311
+ coords = key.delete('coords')
312
+ self.coords(tagOrId, coords) if coords
313
+
314
+ if ( key['font'] || key['kanjifont'] \
315
+ || key['latinfont'] || key['asciifont'] )
316
+ tagfont_configure(tagid(tagOrId), key.dup)
317
+ else
318
+ _fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId),
319
+ *hash_kv(key, true)))
320
+ end
321
+
322
+ else
323
+ if ( key == 'coords' || key == :coords )
324
+ self.coords(tagOrId, value)
325
+ elsif ( key == 'font' || key == :font ||
326
+ key == 'kanjifont' || key == :kanjifont ||
327
+ key == 'latinfont' || key == :latinfont ||
328
+ key == 'asciifont' || key == :asciifont )
329
+ if value == None
330
+ tagfontobj(tagid(tagOrId))
331
+ else
332
+ tagfont_configure(tagid(tagOrId), {key=>value})
333
+ end
334
+ else
335
+ _fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId),
336
+ "-#{key}", _get_eval_enc_str(value)))
337
+ end
338
+ end
339
+ self
340
+ end
341
+ # def itemconfigure(tagOrId, key, value=None)
342
+ # if key.kind_of? Hash
343
+ # tk_send 'itemconfigure', tagid(tagOrId), *hash_kv(key)
344
+ # else
345
+ # tk_send 'itemconfigure', tagid(tagOrId), "-#{key}", value
346
+ # end
347
+ # end
348
+ # def itemconfigure(tagOrId, keys)
349
+ # tk_send 'itemconfigure', tagid(tagOrId), *hash_kv(keys)
350
+ # end
351
+
352
+ def itemconfiginfo(tagOrId, key=nil)
353
+ if TkComm::GET_CONFIGINFO_AS_ARRAY
354
+ if key
355
+ case key.to_s
356
+ when 'coords'
357
+ return ['coords', '', '', '', self.coords(tagOrId)]
358
+ when 'dash', 'activedash', 'disableddash'
359
+ conf = tk_split_simplelist(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}"))
360
+ if conf[3] && conf[3] =~ /^[0-9]/
361
+ conf[3] = list(conf[3])
362
+ end
363
+ if conf[4] && conf[4] =~ /^[0-9]/
364
+ conf[4] = list(conf[4])
365
+ end
366
+ when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'
367
+ conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}")))
368
+ when 'font', 'kanjifont'
369
+ conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId),"-#{key}")))
370
+ conf[4] = tagfont_configinfo(tagid(tagOrId), conf[4])
371
+ else
372
+ conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}")))
373
+ end
374
+ conf[0] = conf[0][1..-1]
375
+ conf
376
+ else
377
+ ret = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId)))).collect{|conflist|
378
+ conf = tk_split_simplelist(conflist)
379
+ conf[0] = conf[0][1..-1]
380
+ case conf[0]
381
+ when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'
382
+ when 'dash', 'activedash', 'disableddash'
383
+ if conf[3] && conf[3] =~ /^[0-9]/
384
+ conf[3] = list(conf[3])
385
+ end
386
+ if conf[4] && conf[4] =~ /^[0-9]/
387
+ conf[4] = list(conf[4])
388
+ end
389
+ else
390
+ if conf[3]
391
+ if conf[3].index('{')
392
+ conf[3] = tk_split_list(conf[3])
393
+ else
394
+ conf[3] = tk_tcl2ruby(conf[3])
395
+ end
396
+ end
397
+ if conf[4]
398
+ if conf[4].index('{')
399
+ conf[4] = tk_split_list(conf[4])
400
+ else
401
+ conf[4] = tk_tcl2ruby(conf[4])
402
+ end
403
+ end
404
+ end
405
+ conf[1] = conf[1][1..-1] if conf.size == 2 # alias info
406
+ conf
407
+ }
408
+
409
+ fontconf = ret.assoc('font')
410
+ if fontconf
411
+ ret.delete_if{|item| item[0] == 'font' || item[0] == 'kanjifont'}
412
+ fontconf[4] = tagfont_configinfo(tagid(tagOrId), fontconf[4])
413
+ ret.push(fontconf)
414
+ end
415
+
416
+ ret << ['coords', '', '', '', self.coords(tagOrId)]
417
+ end
418
+ else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
419
+ if key
420
+ case key.to_s
421
+ when 'coords'
422
+ {'coords' => ['', '', '', self.coords(tagOrId)]}
423
+ when 'dash', 'activedash', 'disableddash'
424
+ conf = tk_split_simplelist(tk_send_without_enc('itemconfigure',
425
+ tagid(tagOrId),
426
+ "-#{key}"))
427
+ if conf[3] && conf[3] =~ /^[0-9]/
428
+ conf[3] = list(conf[3])
429
+ end
430
+ if conf[4] && conf[4] =~ /^[0-9]/
431
+ conf[4] = list(conf[4])
432
+ end
433
+ when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'
434
+ conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}")))
435
+ when 'font', 'kanjifont'
436
+ conf = tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId),"-#{key}")))
437
+ conf[4] = tagfont_configinfo(tagid(tagOrId), conf[4])
438
+ else
439
+ conf = tk_split_list(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId), "-#{key}")))
440
+ end
441
+ key = conf.shift[1..-1]
442
+ { key => conf }
443
+ else
444
+ ret = {}
445
+ tk_split_simplelist(_fromUTF8(tk_send_without_enc('itemconfigure', tagid(tagOrId)))).each{|conflist|
446
+ conf = tk_split_simplelist(conflist)
447
+ key = conf.shift[1..-1]
448
+ case key
449
+ when 'text', 'label', 'show', 'data', 'file', 'maskdata', 'maskfile'
450
+ when 'dash', 'activedash', 'disableddash'
451
+ if conf[2] && conf[2] =~ /^[0-9]/
452
+ conf[2] = list(conf[2])
453
+ end
454
+ if conf[3] && conf[3] =~ /^[0-9]/
455
+ conf[3] = list(conf[3])
456
+ end
457
+ else
458
+ if conf[2]
459
+ if conf[2].index('{')
460
+ conf[2] = tk_split_list(conf[2])
461
+ else
462
+ conf[2] = tk_tcl2ruby(conf[2])
463
+ end
464
+ end
465
+ if conf[3]
466
+ if conf[3].index('{')
467
+ conf[3] = tk_split_list(conf[3])
468
+ else
469
+ conf[3] = tk_tcl2ruby(conf[3])
470
+ end
471
+ end
472
+ end
473
+ if conf.size == 1
474
+ ret[key] = conf[0][1..-1] # alias info
475
+ else
476
+ ret[key] = conf
477
+ end
478
+ }
479
+
480
+ fontconf = ret['font']
481
+ if fontconf
482
+ ret.delete('font')
483
+ ret.delete('kanjifont')
484
+ fontconf[3] = tagfont_configinfo(tagid(tagOrId), fontconf[3])
485
+ ret['font'] = fontconf
486
+ end
487
+
488
+ ret['coords'] = ['', '', '', self.coords(tagOrId)]
489
+
490
+ ret
491
+ end
492
+ end
493
+ end
494
+
495
+ def current_itemconfiginfo(tagOrId, key=nil)
496
+ if TkComm::GET_CONFIGINFO_AS_ARRAY
497
+ if key
498
+ conf = itemconfiginfo(tagOrId, key)
499
+ {conf[0] => conf[4]}
500
+ else
501
+ ret = {}
502
+ itemconfiginfo(tagOrId).each{|conf|
503
+ ret[conf[0]] = conf[4] if conf.size > 2
504
+ }
505
+ ret
506
+ end
507
+ else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
508
+ ret = {}
509
+ itemconfiginfo(tagOrId, key).each{|k, conf|
510
+ ret[k] = conf[-1] if conf.kind_of?(Array)
511
+ }
512
+ ret
513
+ end
514
+ end
515
+ =end
516
+
517
+ def lower(tag, below=nil)
518
+ if below
519
+ tk_send_without_enc('lower', tagid(tag), tagid(below))
520
+ else
521
+ tk_send_without_enc('lower', tagid(tag))
522
+ end
523
+ self
524
+ end
525
+
526
+ def move(tag, x, y)
527
+ tk_send_without_enc('move', tagid(tag), x, y)
528
+ self
529
+ end
530
+
531
+ def postscript(keys)
532
+ tk_send("postscript", *hash_kv(keys))
533
+ end
534
+
535
+ def raise(tag, above=nil)
536
+ if above
537
+ tk_send_without_enc('raise', tagid(tag), tagid(above))
538
+ else
539
+ tk_send_without_enc('raise', tagid(tag))
540
+ end
541
+ self
542
+ end
543
+
544
+ def scale(tag, x, y, xs, ys)
545
+ tk_send_without_enc('scale', tagid(tag), x, y, xs, ys)
546
+ self
547
+ end
548
+
549
+ def scan_mark(x, y)
550
+ tk_send_without_enc('scan', 'mark', x, y)
551
+ self
552
+ end
553
+ def scan_dragto(x, y, gain=None)
554
+ tk_send_without_enc('scan', 'dragto', x, y, gain)
555
+ self
556
+ end
557
+
558
+ def select(mode, *args)
559
+ r = tk_send_without_enc('select', mode, *args)
560
+ (mode == 'item')? TkcItem.id2obj(self, r): self
561
+ end
562
+ def select_adjust(tagOrId, index)
563
+ select('adjust', tagid(tagOrId), index)
564
+ end
565
+ def select_clear
566
+ select('clear')
567
+ end
568
+ def select_from(tagOrId, index)
569
+ select('from', tagid(tagOrId), index)
570
+ end
571
+ def select_item
572
+ select('item')
573
+ end
574
+ def select_to(tagOrId, index)
575
+ select('to', tagid(tagOrId), index)
576
+ end
577
+
578
+ def itemtype(tag)
579
+ TkcItem.type2class(tk_send('type', tagid(tag)))
580
+ end
581
+ end
582
+
583
+ #TkCanvas = Tk::Canvas unless Object.const_defined? :TkCanvas
584
+ Tk.__set_toplevel_aliases__(:Tk, Tk::Canvas, :TkCanvas)
585
+
586
+
587
+ class TkcItem<TkObject
588
+ extend Tk
589
+ include TkcTagAccess
590
+ extend TkItemFontOptkeys
591
+ extend TkItemConfigOptkeys
592
+
593
+ CItemTypeName = nil
594
+ CItemTypeToClass = {}
595
+
596
+ CItemID_TBL = TkCore::INTERP.create_table
597
+
598
+ TkCore::INTERP.init_ip_env{
599
+ CItemID_TBL.mutex.synchronize{ CItemID_TBL.clear }
600
+ }
601
+
602
+ def TkcItem.type2class(type)
603
+ CItemTypeToClass[type]
604
+ end
605
+
606
+ def TkcItem.id2obj(canvas, id)
607
+ cpath = canvas.path
608
+ CItemID_TBL.mutex.synchronize{
609
+ if CItemID_TBL[cpath]
610
+ CItemID_TBL[cpath][id]? CItemID_TBL[cpath][id]: id
611
+ else
612
+ id
613
+ end
614
+ }
615
+ end
616
+
617
+ ########################################
618
+ def self._parse_create_args(args)
619
+ fontkeys = {}
620
+ methodkeys = {}
621
+ if args[-1].kind_of? Hash
622
+ keys = _symbolkey2str(args.pop)
623
+ if args.size == 0
624
+ args = keys.delete('coords')
625
+ unless args.kind_of?(Array)
626
+ fail "coords parameter must be given by an Array"
627
+ end
628
+ end
629
+
630
+ #['font', 'kanjifont', 'latinfont', 'asciifont'].each{|key|
631
+ # fontkeys[key] = keys.delete(key) if keys.key?(key)
632
+ #}
633
+ __item_font_optkeys(nil).each{|key|
634
+ fkey = key.to_s
635
+ fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)
636
+
637
+ fkey = "kanji#{key}"
638
+ fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)
639
+
640
+ fkey = "latin#{key}"
641
+ fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)
642
+
643
+ fkey = "ascii#{key}"
644
+ fontkeys[fkey] = keys.delete(fkey) if keys.key?(fkey)
645
+ }
646
+
647
+ __item_optkey_aliases(nil).each{|alias_name, real_name|
648
+ alias_name = alias_name.to_s
649
+ if keys.has_key?(alias_name)
650
+ keys[real_name.to_s] = keys.delete(alias_name)
651
+ end
652
+ }
653
+
654
+ __item_methodcall_optkeys(nil).each{|key|
655
+ key = key.to_s
656
+ methodkeys[key] = keys.delete(key) if keys.key?(key)
657
+ }
658
+
659
+ __item_ruby2val_optkeys(nil).each{|key, method|
660
+ key = key.to_s
661
+ keys[key] = method.call(keys[key]) if keys.has_key?(key)
662
+ }
663
+
664
+ #args = args.flatten.concat(hash_kv(keys))
665
+ args = args.flatten.concat(itemconfig_hash_kv(nil, keys))
666
+ else
667
+ args = args.flatten
668
+ end
669
+
670
+ [args, fontkeys]
671
+ end
672
+ private_class_method :_parse_create_args
673
+
674
+ def self.create(canvas, *args)
675
+ unless self::CItemTypeName
676
+ fail RuntimeError, "#{self} is an abstract class"
677
+ end
678
+ args, fontkeys = _parse_create_args(args)
679
+ idnum = tk_call_without_enc(canvas.path, 'create',
680
+ self::CItemTypeName, *args)
681
+ canvas.itemconfigure(idnum, fontkeys) unless fontkeys.empty?
682
+ idnum.to_i # 'canvas item id' is an integer number
683
+ end
684
+ ########################################
685
+
686
+ def initialize(parent, *args)
687
+ #unless parent.kind_of?(Tk::Canvas)
688
+ # fail ArgumentError, "expect Tk::Canvas for 1st argument"
689
+ #end
690
+ @parent = @c = parent
691
+ @path = parent.path
692
+
693
+ @id = create_self(*args) # an integer number as 'canvas item id'
694
+ CItemID_TBL.mutex.synchronize{
695
+ CItemID_TBL[@path] = {} unless CItemID_TBL[@path]
696
+ CItemID_TBL[@path][@id] = self
697
+ }
698
+ end
699
+ def create_self(*args)
700
+ self.class.create(@c, *args) # return an integer number as 'canvas item id'
701
+ end
702
+ private :create_self
703
+
704
+ def id
705
+ @id
706
+ end
707
+
708
+ def exist?
709
+ if @c.find_withtag(@id)
710
+ true
711
+ else
712
+ false
713
+ end
714
+ end
715
+
716
+ def delete
717
+ @c.delete @id
718
+ CItemID_TBL.mutex.synchronize{
719
+ CItemID_TBL[@path].delete(@id) if CItemID_TBL[@path]
720
+ }
721
+ self
722
+ end
723
+ alias remove delete
724
+ alias destroy delete
725
+ end
726
+
727
+ class TkcArc<TkcItem
728
+ CItemTypeName = 'arc'.freeze
729
+ CItemTypeToClass[CItemTypeName] = self
730
+ end
731
+
732
+ class TkcBitmap<TkcItem
733
+ CItemTypeName = 'bitmap'.freeze
734
+ CItemTypeToClass[CItemTypeName] = self
735
+ end
736
+
737
+ class TkcImage<TkcItem
738
+ CItemTypeName = 'image'.freeze
739
+ CItemTypeToClass[CItemTypeName] = self
740
+ end
741
+
742
+ class TkcLine<TkcItem
743
+ CItemTypeName = 'line'.freeze
744
+ CItemTypeToClass[CItemTypeName] = self
745
+ end
746
+
747
+ class TkcOval<TkcItem
748
+ CItemTypeName = 'oval'.freeze
749
+ CItemTypeToClass[CItemTypeName] = self
750
+ end
751
+
752
+ class TkcPolygon<TkcItem
753
+ CItemTypeName = 'polygon'.freeze
754
+ CItemTypeToClass[CItemTypeName] = self
755
+ end
756
+
757
+ class TkcRectangle<TkcItem
758
+ CItemTypeName = 'rectangle'.freeze
759
+ CItemTypeToClass[CItemTypeName] = self
760
+ end
761
+
762
+ class TkcText<TkcItem
763
+ CItemTypeName = 'text'.freeze
764
+ CItemTypeToClass[CItemTypeName] = self
765
+ def self.create(canvas, *args)
766
+ if args[-1].kind_of?(Hash)
767
+ keys = _symbolkey2str(args.pop)
768
+ txt = keys['text']
769
+ keys['text'] = _get_eval_enc_str(txt) if txt
770
+ args.push(keys)
771
+ end
772
+ super(canvas, *args)
773
+ end
774
+ end
775
+
776
+ class TkcWindow<TkcItem
777
+ CItemTypeName = 'window'.freeze
778
+ CItemTypeToClass[CItemTypeName] = self
779
+ def self.create(canvas, *args)
780
+ if args[-1].kind_of?(Hash)
781
+ keys = _symbolkey2str(args.pop)
782
+ win = keys['window']
783
+ # keys['window'] = win.epath if win.kind_of?(TkWindow)
784
+ keys['window'] = _epath(win) if win
785
+ args.push(keys)
786
+ end
787
+ super(canvas, *args)
788
+ end
789
+ end