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,296 @@
1
+ #
2
+ # tk/msgcat.rb : methods for Tcl message catalog
3
+ # by Hidetoshi Nagai <nagai@ai.kyutech.ac.jp>
4
+ #
5
+ require 'tk'
6
+
7
+ #class TkMsgCatalog
8
+ class TkMsgCatalog < TkObject
9
+ include TkCore
10
+ extend Tk
11
+ #extend TkMsgCatalog
12
+
13
+ TkCommandNames = [
14
+ '::msgcat::mc'.freeze,
15
+ '::msgcat::mcmax'.freeze,
16
+ '::msgcat::mclocale'.freeze,
17
+ '::msgcat::mcpreferences'.freeze,
18
+ '::msgcat::mcload'.freeze,
19
+ '::msgcat::mcset'.freeze,
20
+ '::msgcat::mcmset'.freeze,
21
+ '::msgcat::mcunknown'.freeze
22
+ ].freeze
23
+
24
+ tk_call_without_enc('package', 'require', 'Tcl', '8.2')
25
+
26
+ PACKAGE_NAME = 'msgcat'.freeze
27
+ def self.package_name
28
+ PACKAGE_NAME
29
+ end
30
+
31
+ if self.const_defined? :FORCE_VERSION
32
+ tk_call_without_enc('package', 'require', 'msgcat', FORCE_VERSION)
33
+ else
34
+ tk_call_without_enc('package', 'require', 'msgcat')
35
+ end
36
+
37
+ MSGCAT_EXT = '.msg'
38
+
39
+ UNKNOWN_CBTBL = Hash.new{|hash,key| hash[key] = {}}.taint
40
+
41
+ TkCore::INTERP.add_tk_procs('::msgcat::mcunknown', 'args', <<-'EOL')
42
+ if {[set st [catch {eval {ruby_cmd TkMsgCatalog callback} [namespace current] $args} ret]] != 0} {
43
+ #return -code $st $ret
44
+ set idx [string first "\n\n" $ret]
45
+ if {$idx > 0} {
46
+ return -code $st \
47
+ -errorinfo [string range $ret [expr $idx + 2] \
48
+ [string length $ret]] \
49
+ [string range $ret 0 [expr $idx - 1]]
50
+ } else {
51
+ return -code $st $ret
52
+ }
53
+ } else {
54
+ return $ret
55
+ }
56
+ EOL
57
+
58
+ def self.callback(namespace, locale, src_str, *args)
59
+ src_str = sprintf(src_str, *args) unless args.empty?
60
+ cmd_tbl = TkMsgCatalog::UNKNOWN_CBTBL[TkCore::INTERP.__getip]
61
+ cmd = cmd_tbl[namespace]
62
+ cmd = cmd_tbl['::'] unless cmd # use global scope as interp default
63
+ return src_str unless cmd # no cmd -> return src-str (default action)
64
+ begin
65
+ cmd.call(locale, src_str)
66
+ rescue SystemExit
67
+ exit(0)
68
+ rescue Interrupt
69
+ exit!(1)
70
+ rescue Exception => e
71
+ begin
72
+ msg = _toUTF8(e.class.inspect) + ': ' +
73
+ _toUTF8(e.message) + "\n" +
74
+ "\n---< backtrace of Ruby side >-----\n" +
75
+ _toUTF8(e.backtrace.join("\n")) +
76
+ "\n---< backtrace of Tk side >-------"
77
+ if TkCore::WITH_ENCODING
78
+ msg.force_encoding('utf-8')
79
+ else
80
+ msg.instance_variable_set(:@encoding, 'utf-8')
81
+ end
82
+ rescue Exception
83
+ msg = e.class.inspect + ': ' + e.message + "\n" +
84
+ "\n---< backtrace of Ruby side >-----\n" +
85
+ e.backtrace.join("\n") +
86
+ "\n---< backtrace of Tk side >-------"
87
+ end
88
+ fail(e, msg)
89
+ end
90
+ end
91
+
92
+ def initialize(namespace = nil)
93
+ if namespace.kind_of?(TkNamespace)
94
+ @namespace = namespace
95
+ elsif namespace == nil
96
+ @namespace = TkNamespace.new('::') # global namespace
97
+ else
98
+ @namespace = TkNamespace.new(namespace)
99
+ end
100
+ @path = @namespace.path
101
+
102
+ @msgcat_ext = '.msg'
103
+ end
104
+ attr_accessor :msgcat_ext
105
+
106
+ def method_missing(id, *args)
107
+ # locale(src, trans) ==> set_translation(locale, src, trans)
108
+ loc = id.id2name
109
+ case args.length
110
+ when 0 # set locale
111
+ self.locale=(loc)
112
+
113
+ when 1 # src only, or trans_list
114
+ if args[0].kind_of?(Array)
115
+ # trans_list
116
+ #list = args[0].collect{|src, trans|
117
+ # [ Tk::UTF8_String.new(src), Tk::UTF8_String.new(trans) ]
118
+ #}
119
+ self.set_translation_list(loc, args[0])
120
+ else
121
+ # src
122
+ #self.set_translation(loc, Tk::UTF8_String.new(args[0]))
123
+ self.set_translation(loc, args[0])
124
+ end
125
+
126
+ when 2 # src and trans, or, trans_list and enc
127
+ if args[0].kind_of?(Array)
128
+ else
129
+ #self.set_translation(loc, args[0], Tk::UTF8_String.new(args[1]))
130
+ self.set_translation(loc, *args)
131
+ end
132
+
133
+ when 3 # src and trans and enc
134
+ self.set_translation(loc, *args)
135
+
136
+ else
137
+ super(id, *args)
138
+ # fail NameError, "undefined method `#{name}' for #{self.to_s}", error_at
139
+
140
+ end
141
+ end
142
+
143
+ # *args ::= form, arg, arg, ...
144
+ def self.translate(*args)
145
+ dst = args.collect{|src|
146
+ tk_call_without_enc('::msgcat::mc', _get_eval_string(src, true))
147
+ }
148
+ Tk.UTF8_String(sprintf(*dst))
149
+ end
150
+ class << self
151
+ alias mc translate
152
+ alias [] translate
153
+ end
154
+ def translate(*args)
155
+ dst = args.collect{|src|
156
+ @namespace.eval{tk_call_without_enc('::msgcat::mc',
157
+ _get_eval_string(src, true))}
158
+ }
159
+ Tk.UTF8_String(sprintf(*dst))
160
+ end
161
+ alias mc translate
162
+ alias [] translate
163
+
164
+ def self.maxlen(*src_strings)
165
+ tk_call('::msgcat::mcmax', *src_strings).to_i
166
+ end
167
+ def maxlen(*src_strings)
168
+ @namespace.eval{tk_call('::msgcat::mcmax', *src_strings).to_i}
169
+ end
170
+
171
+ def self.locale
172
+ tk_call('::msgcat::mclocale')
173
+ end
174
+ def locale
175
+ @namespace.eval{tk_call('::msgcat::mclocale')}
176
+ end
177
+
178
+ def self.locale=(locale)
179
+ tk_call('::msgcat::mclocale', locale)
180
+ end
181
+ def locale=(locale)
182
+ @namespace.eval{tk_call('::msgcat::mclocale', locale)}
183
+ end
184
+
185
+ def self.preferences
186
+ tk_split_simplelist(tk_call('::msgcat::mcpreferences'))
187
+ end
188
+ def preferences
189
+ tk_split_simplelist(@namespace.eval{tk_call('::msgcat::mcpreferences')})
190
+ end
191
+
192
+ def self.load_tk(dir)
193
+ number(tk_call('::msgcat::mcload', dir))
194
+ end
195
+
196
+ def self.load_rb(dir)
197
+ count = 0
198
+ preferences().each{|loc|
199
+ file = File.join(dir, loc + self::MSGCAT_EXT)
200
+ if File.readable?(file)
201
+ count += 1
202
+ eval(open(file){|f| f.read})
203
+ end
204
+ }
205
+ count
206
+ end
207
+
208
+ def load_tk(dir)
209
+ number(@namespace.eval{tk_call('::msgcat::mcload', dir)})
210
+ end
211
+
212
+ def load_rb(dir)
213
+ count = 0
214
+ preferences().each{|loc|
215
+ file = File.join(dir, loc + @msgcat_ext)
216
+ if File.readable?(file)
217
+ count += 1
218
+ @namespace.eval(open(file){|f| f.read})
219
+ end
220
+ }
221
+ count
222
+ end
223
+
224
+ def self.load(dir)
225
+ self.load_rb(dir)
226
+ end
227
+ alias load load_rb
228
+
229
+ def self.set_translation(locale, src_str, trans_str=None, enc='utf-8')
230
+ if trans_str && trans_str != None
231
+ trans_str = Tk.UTF8_String(_toUTF8(trans_str, enc))
232
+ Tk.UTF8_String(tk_call_without_enc('::msgcat::mcset',
233
+ locale,
234
+ _get_eval_string(src_str, true),
235
+ trans_str))
236
+ else
237
+ Tk.UTF8_String(tk_call_without_enc('::msgcat::mcset',
238
+ locale,
239
+ _get_eval_string(src_str, true)))
240
+ end
241
+ end
242
+ def set_translation(locale, src_str, trans_str=None, enc='utf-8')
243
+ if trans_str && trans_str != None
244
+ trans_str = Tk.UTF8_String(_toUTF8(trans_str, enc))
245
+ Tk.UTF8_String(@namespace.eval{
246
+ tk_call_without_enc('::msgcat::mcset',
247
+ locale,
248
+ _get_eval_string(src_str, true),
249
+ trans_str)
250
+ })
251
+ else
252
+ Tk.UTF8_String(@namespace.eval{
253
+ tk_call_without_enc('::msgcat::mcset',
254
+ locale,
255
+ _get_eval_string(src_str, true))})
256
+ end
257
+ end
258
+
259
+ def self.set_translation_list(locale, trans_list, enc='utf-8')
260
+ # trans_list ::= [ [src, trans], [src, trans], ... ]
261
+ list = []
262
+ trans_list.each{|src, trans|
263
+ if trans && trans != None
264
+ list << _get_eval_string(src, true)
265
+ list << Tk.UTF8_Stirng(_toUTF8(trans, enc))
266
+ else
267
+ list << _get_eval_string(src, true) << ''
268
+ end
269
+ }
270
+ number(tk_call_without_enc('::msgcat::mcmset', locale, list))
271
+ end
272
+ def set_translation_list(locale, trans_list, enc='utf-8')
273
+ # trans_list ::= [ [src, trans], [src, trans], ... ]
274
+ list = []
275
+ trans_list.each{|src, trans|
276
+ if trans && trans != None
277
+ list << _get_eval_string(src, true)
278
+ list << Tk.UTF8_String(_toUTF8(trans, enc))
279
+ else
280
+ list << _get_eval_string(src, true) << ''
281
+ end
282
+ }
283
+ number(@namespace.eval{
284
+ tk_call_without_enc('::msgcat::mcmset', locale, list)
285
+ })
286
+ end
287
+
288
+ def self.def_unknown_proc(cmd=Proc.new)
289
+ TkMsgCatalog::UNKNOWN_CBTBL[TkCore::INTERP.__getip]['::'] = cmd
290
+ end
291
+ def def_unknown_proc(cmd=Proc.new)
292
+ TkMsgCatalog::UNKNOWN_CBTBL[TkCore::INTERP.__getip][@namespace.path] = cmd
293
+ end
294
+ end
295
+
296
+ TkMsgCat = TkMsgCatalog
@@ -0,0 +1,551 @@
1
+ #
2
+ # tk/namespace.rb : methods to manipulate Tcl/Tk namespace
3
+ # by Hidetoshi Nagai <nagai@ai.kyutech.ac.jp>
4
+ #
5
+ require 'tk'
6
+
7
+ class TkNamespace < TkObject
8
+ extend Tk
9
+
10
+ TkCommandNames = [
11
+ 'namespace'.freeze,
12
+ ].freeze
13
+
14
+ Tk_Namespace_ID_TBL = TkCore::INTERP.create_table
15
+
16
+ (Tk_Namespace_ID = ["ns".freeze, "00000".taint]).instance_eval{
17
+ @mutex = Mutex.new
18
+ def mutex; @mutex; end
19
+ freeze
20
+ }
21
+
22
+ Tk_NsCode_RetObjID_TBL = TkCore::INTERP.create_table
23
+
24
+ TkCore::INTERP.init_ip_env{
25
+ Tk_Namespace_ID_TBL.mutex.synchronize{ Tk_Namespace_ID_TBL.clear }
26
+ Tk_NsCode_RetObjID_TBL.mutex.synchronize{ Tk_NsCode_RetObjID_TBL.clear }
27
+ }
28
+
29
+ def TkNamespace.id2obj(id)
30
+ Tk_Namespace_ID_TBL.mutex.synchronize{
31
+ Tk_Namespace_ID_TBL[id]? Tk_Namespace_ID_TBL[id]: id
32
+ }
33
+ end
34
+
35
+ #####################################
36
+
37
+ class Ensemble < TkObject
38
+ def __cget_cmd
39
+ ['namespace', 'ensemble', 'configure', self.path]
40
+ end
41
+ private :__cget_cmd
42
+
43
+ def __config_cmd
44
+ ['namespace', 'ensemble', 'configure', self.path]
45
+ end
46
+ private :__config_cmd
47
+
48
+ def __configinfo_struct
49
+ {:key=>0, :alias=>nil, :db_name=>nil, :db_class=>nil,
50
+ :default_value=>nil, :current_value=>2}
51
+ end
52
+ private :__configinfo_struct
53
+
54
+ def __boolval_optkeys
55
+ ['prefixes']
56
+ end
57
+ private :__boolval_optkeys
58
+
59
+ def __listval_optkeys
60
+ ['map', 'subcommands', 'unknown']
61
+ end
62
+ private :__listval_optkeys
63
+
64
+ def self.exist?(ensemble)
65
+ bool(tk_call('namespace', 'ensemble', 'exists', ensemble))
66
+ end
67
+
68
+ def initialize(keys = {})
69
+ @ensemble = @path = tk_call('namespace', 'ensemble', 'create', keys)
70
+ end
71
+
72
+ def cget(slot)
73
+ if slot == :namespace || slot == 'namespace'
74
+ ns = super(slot)
75
+ Tk_Namespace_ID_TBL.mutex.synchronize{
76
+ if TkNamespace::Tk_Namespace_ID_TBL.key?(ns)
77
+ TkNamespace::Tk_Namespace_ID_TBL[ns]
78
+ else
79
+ ns
80
+ end
81
+ }
82
+ else
83
+ super(slot)
84
+ end
85
+ end
86
+ def cget_strict(slot)
87
+ if slot == :namespace || slot == 'namespace'
88
+ ns = super(slot)
89
+ Tk_Namespace_ID_TBL.mutex.synchronize{
90
+ if TkNamespace::Tk_Namespace_ID_TBL.key?(ns)
91
+ TkNamespace::Tk_Namespace_ID_TBL[ns]
92
+ else
93
+ ns
94
+ end
95
+ }
96
+ else
97
+ super(slot)
98
+ end
99
+ end
100
+
101
+ def configinfo(slot = nil)
102
+ if slot
103
+ if slot == :namespace || slot == 'namespace'
104
+ val = super(slot)
105
+ Tk_Namespace_ID_TBL.mutex.synchronize{
106
+ if TkNamespace::Tk_Namespace_ID_TBL.key?(val)
107
+ val = TkNamespace::Tk_Namespace_ID_TBL[val]
108
+ end
109
+ }
110
+ else
111
+ val = super(slot)
112
+ end
113
+
114
+ if TkComm::GET_CONFIGINFO_AS_ARRAY
115
+ [slot.to_s, val]
116
+ else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
117
+ {slot.to_s => val}
118
+ end
119
+
120
+ else
121
+ info = super()
122
+
123
+ if TkComm::GET_CONFIGINFO_AS_ARRAY
124
+ Tk_Namespace_ID_TBL.mutex.synchronize{
125
+ info.map!{|inf|
126
+ if inf[0] == 'namespace' &&
127
+ TkNamespace::Tk_Namespace_ID_TBL.key?(inf[-1])
128
+ [inf[0], TkNamespace::Tk_Namespace_ID_TBL[inf[-1]]]
129
+ else
130
+ inf
131
+ end
132
+ }
133
+ }
134
+ else # ! TkComm::GET_CONFIGINFO_AS_ARRAY
135
+ val = info['namespace']
136
+ Tk_Namespace_ID_TBL.mutex.synchronize{
137
+ if TkNamespace::Tk_Namespace_ID_TBL.key?(val)
138
+ info['namespace'] = TkNamespace::Tk_Namespace_ID_TBL[val]
139
+ end
140
+ }
141
+ end
142
+
143
+ info
144
+ end
145
+ end
146
+
147
+ def exists?
148
+ bool(tk_call('namespace', 'ensemble', 'exists', @path))
149
+ end
150
+ end
151
+
152
+ #####################################
153
+
154
+ class ScopeArgs < Array
155
+ include Tk
156
+
157
+ # alias __tk_call tk_call
158
+ # alias __tk_call_without_enc tk_call_without_enc
159
+ # alias __tk_call_with_enc tk_call_with_enc
160
+ def tk_call(*args)
161
+ #super('namespace', 'eval', @namespace, *args)
162
+ args = args.collect{|arg| (s = _get_eval_string(arg, true))? s: ''}
163
+ super('namespace', 'eval', @namespace,
164
+ TkCore::INTERP._merge_tklist(*args))
165
+ end
166
+ def tk_call_without_enc(*args)
167
+ #super('namespace', 'eval', @namespace, *args)
168
+ args = args.collect{|arg| (s = _get_eval_string(arg, true))? s: ''}
169
+ super('namespace', 'eval', @namespace,
170
+ TkCore::INTERP._merge_tklist(*args))
171
+ end
172
+ def tk_call_with_enc(*args)
173
+ #super('namespace', 'eval', @namespace, *args)
174
+ args = args.collect{|arg| (s = _get_eval_string(arg, true))? s: ''}
175
+ super('namespace', 'eval', @namespace,
176
+ TkCore::INTERP._merge_tklist(*args))
177
+ end
178
+
179
+ def initialize(namespace, *args)
180
+ @namespace = namespace
181
+ super(args.size)
182
+ self.replace(args)
183
+ end
184
+ end
185
+
186
+ #####################################
187
+
188
+ class NsCode < TkObject
189
+ def initialize(scope, use_obj_id = false)
190
+ @scope = scope + ' '
191
+ @use_obj_id = use_obj_id
192
+ end
193
+ def path
194
+ @scope
195
+ end
196
+ def to_eval
197
+ @scope
198
+ end
199
+ def call(*args)
200
+ ret = TkCore::INTERP._eval_without_enc(@scope + array2tk_list(args))
201
+ if @use_obj_id
202
+ ret = TkNamespace::Tk_NsCode_RetObjID_TBL.delete(ret.to_i)
203
+ end
204
+ ret
205
+ end
206
+ end
207
+
208
+ #####################################
209
+
210
+ def install_cmd(cmd)
211
+ lst = tk_split_simplelist(super(cmd), false, false)
212
+ if lst[1] =~ /^::/
213
+ lst[1] = @fullname
214
+ else
215
+ lst.insert(1, @fullname)
216
+ end
217
+ TkCore::INTERP._merge_tklist(*lst)
218
+ end
219
+
220
+ alias __tk_call tk_call
221
+ alias __tk_call_without_enc tk_call_without_enc
222
+ alias __tk_call_with_enc tk_call_with_enc
223
+ def tk_call(*args)
224
+ #super('namespace', 'eval', @fullname, *args)
225
+ args = args.collect{|arg| (s = _get_eval_string(arg, true))? s: ''}
226
+ super('namespace', 'eval', @fullname,
227
+ TkCore::INTERP._merge_tklist(*args))
228
+ end
229
+ def tk_call_without_enc(*args)
230
+ #super('namespace', 'eval', @fullname, *args)
231
+ args = args.collect{|arg| (s = _get_eval_string(arg, true))? s: ''}
232
+ super('namespace', 'eval', @fullname,
233
+ TkCore::INTERP._merge_tklist(*args))
234
+ end
235
+ def tk_call_with_enc(*args)
236
+ #super('namespace', 'eval', @fullname, *args)
237
+ args = args.collect{|arg| (s = _get_eval_string(arg, true))? s: ''}
238
+ super('namespace', 'eval', @fullname,
239
+ TkCore::INTERP._merge_tklist(*args))
240
+ end
241
+ alias ns_tk_call tk_call
242
+ alias ns_tk_call_without_enc tk_call_without_enc
243
+ alias ns_tk_call_with_enc tk_call_with_enc
244
+
245
+ def initialize(name = nil, parent = nil)
246
+ unless name
247
+ Tk_Namespace_ID.mutex.synchronize{
248
+ # name = Tk_Namespace_ID.join('')
249
+ name = Tk_Namespace_ID.join(TkCore::INTERP._ip_id_)
250
+ Tk_Namespace_ID[1].succ!
251
+ }
252
+ end
253
+ name = __tk_call('namespace', 'current') if name == ''
254
+ if parent
255
+ if parent =~ /^::/
256
+ if name =~ /^::/
257
+ @fullname = parent + name
258
+ else
259
+ @fullname = parent +'::'+ name
260
+ end
261
+ else
262
+ ancestor = __tk_call('namespace', 'current')
263
+ ancestor = '' if ancestor == '::'
264
+ if name =~ /^::/
265
+ @fullname = ancestor + '::' + parent + name
266
+ else
267
+ @fullname = ancestor + '::'+ parent +'::'+ name
268
+ end
269
+ end
270
+ else # parent == nil
271
+ ancestor = __tk_call('namespace', 'current')
272
+ ancestor = '' if ancestor == '::'
273
+ if name =~ /^::/
274
+ @fullname = name
275
+ else
276
+ @fullname = ancestor + '::' + name
277
+ end
278
+ end
279
+ @path = @fullname
280
+ @parent = __tk_call('namespace', 'qualifiers', @fullname)
281
+ @name = __tk_call('namespace', 'tail', @fullname)
282
+
283
+ # create namespace
284
+ __tk_call('namespace', 'eval', @fullname, '')
285
+
286
+ Tk_Namespace_ID_TBL.mutex.synchronize{
287
+ Tk_Namespace_ID_TBL[@fullname] = self
288
+ }
289
+ end
290
+
291
+ def self.children(*args)
292
+ # args ::= [<namespace>] [<pattern>]
293
+ # <pattern> must be glob-style pattern
294
+ tk_split_simplelist(tk_call('namespace', 'children', *args)).collect{|ns|
295
+ # ns is fullname
296
+ Tk_Namespace_ID_TBL.mutex.synchronize{
297
+ if Tk_Namespace_ID_TBL.key?(ns)
298
+ Tk_Namespace_ID_TBL[ns]
299
+ else
300
+ ns
301
+ end
302
+ }
303
+ }
304
+ end
305
+ def children(pattern=None)
306
+ TkNamespace.children(@fullname, pattern)
307
+ end
308
+
309
+ def self.code(script = Proc.new)
310
+ TkNamespace.new('').code(script)
311
+ end
312
+ =begin
313
+ def code(script = Proc.new)
314
+ if script.kind_of?(String)
315
+ cmd = proc{|*args| ScopeArgs.new(@fullname,*args).instance_eval(script)}
316
+ elsif script.kind_of?(Proc)
317
+ cmd = proc{|*args| ScopeArgs.new(@fullname,*args).instance_eval(&script)}
318
+ else
319
+ fail ArgumentError, "String or Proc is expected"
320
+ end
321
+ TkNamespace::NsCode.new(tk_call_without_enc('namespace', 'code',
322
+ _get_eval_string(cmd, false)))
323
+ end
324
+ =end
325
+ def code(script = Proc.new)
326
+ if script.kind_of?(String)
327
+ cmd = proc{|*args|
328
+ if TkCore::WITH_RUBY_VM ### Ruby 1.9 !!!!
329
+ obj = ScopeArgs.new(@fullname,*args)
330
+ ret = obj.instance_exec(obj, script)
331
+ else
332
+ ret = ScopeArgs.new(@fullname,*args).instance_eval(script)
333
+ end
334
+ id = ret.object_id
335
+ TkNamespace::Tk_NsCode_RetObjID_TBL[id] = ret
336
+ id
337
+ }
338
+ elsif script.kind_of?(Proc)
339
+ cmd = proc{|*args|
340
+ if TkCore::WITH_RUBY_VM ### Ruby 1.9 !!!!
341
+ obj = ScopeArgs.new(@fullname,*args)
342
+ ret = obj.instance_exec(obj, &script)
343
+ else
344
+ ret = ScopeArgs.new(@fullname,*args).instance_eval(&script)
345
+ end
346
+ id = ret.object_id
347
+ TkNamespace::Tk_NsCode_RetObjID_TBL[id] = ret
348
+ id
349
+ }
350
+ else
351
+ fail ArgumentError, "String or Proc is expected"
352
+ end
353
+ TkNamespace::NsCode.new(tk_call_without_enc('namespace', 'code',
354
+ _get_eval_string(cmd, false)),
355
+ true)
356
+ end
357
+
358
+ def self.current_path
359
+ tk_call('namespace', 'current')
360
+ end
361
+ def current_path
362
+ @fullname
363
+ end
364
+
365
+ def self.current
366
+ ns = self.current_path
367
+ Tk_Namespace_ID_TBL.mutex.synchronize{
368
+ if Tk_Namespace_ID_TBL.key?(ns)
369
+ Tk_Namespace_ID_TBL[ns]
370
+ else
371
+ ns
372
+ end
373
+ }
374
+ end
375
+ def current_namespace
376
+ # ns_tk_call('namespace', 'current')
377
+ # @fullname
378
+ self
379
+ end
380
+ alias current current_namespace
381
+
382
+ def self.delete(*ns_list)
383
+ tk_call('namespace', 'delete', *ns_list)
384
+ ns_list.each{|ns|
385
+ Tk_Namespace_ID_TBL.mutex.synchronize{
386
+ if ns.kind_of?(TkNamespace)
387
+ Tk_Namespace_ID_TBL.delete(ns.path)
388
+ else
389
+ Tk_Namespace_ID_TBL.delete(ns.to_s)
390
+ end
391
+ }
392
+ }
393
+ end
394
+ def delete
395
+ TkNamespece.delete(@fullname)
396
+ end
397
+
398
+ def self.ensemble_create(*keys)
399
+ tk_call('namespace', 'ensemble', 'create', *hash_kv(keys))
400
+ end
401
+ def self.ensemble_configure(cmd, slot, value=None)
402
+ if slot.kind_of?(Hash)
403
+ tk_call('namespace', 'ensemble', 'configure', cmd, *hash_kv(slot))
404
+ else
405
+ tk_call('namespace', 'ensemble', 'configure', cmd, '-'+slot.to_s, value)
406
+ end
407
+ end
408
+ def self.ensemble_configinfo(cmd, slot = nil)
409
+ if slot
410
+ tk_call('namespace', 'ensemble', 'configure', cmd, '-' + slot.to_s)
411
+ else
412
+ inf = {}
413
+ Hash(*tk_split_simplelist(tk_call('namespace', 'ensemble', 'configure', cmd))).each{|k, v| inf[k[1..-1]] = v}
414
+ inf
415
+ end
416
+ end
417
+ def self.ensemble_exist?(cmd)
418
+ bool(tk_call('namespace', 'ensemble', 'exists', cmd))
419
+ end
420
+
421
+ def self.eval(namespace, cmd = Proc.new, *args)
422
+ #tk_call('namespace', 'eval', namespace, cmd, *args)
423
+ TkNamespace.new(namespace).eval(cmd, *args)
424
+ end
425
+ =begin
426
+ def eval(cmd = Proc.new, *args)
427
+ #TkNamespace.eval(@fullname, cmd, *args)
428
+ #ns_tk_call(cmd, *args)
429
+ code_obj = code(cmd)
430
+ ret = code_obj.call(*args)
431
+ # uninstall_cmd(TkCore::INTERP._split_tklist(code_obj.path)[-1])
432
+ uninstall_cmd(_fromUTF8(TkCore::INTERP._split_tklist(_toUTF8(code_obj.path))[-1]))
433
+ tk_tcl2ruby(ret)
434
+ end
435
+ =end
436
+ def eval(cmd = Proc.new, *args)
437
+ code_obj = code(cmd)
438
+ ret = code_obj.call(*args)
439
+ uninstall_cmd(_fromUTF8(TkCore::INTERP._split_tklist(_toUTF8(code_obj.path))[-1]))
440
+ ret
441
+ end
442
+
443
+ def self.exist?(ns)
444
+ bool(tk_call('namespace', 'exists', ns))
445
+ end
446
+ def exist?
447
+ TkNamespece.exist?(@fullname)
448
+ end
449
+
450
+ def self.export(*patterns)
451
+ tk_call('namespace', 'export', *patterns)
452
+ end
453
+ def self.export_with_clear(*patterns)
454
+ tk_call('namespace', 'export', '-clear', *patterns)
455
+ end
456
+ def export
457
+ TkNamespace.export(@fullname)
458
+ end
459
+ def export_with_clear
460
+ TkNamespace.export_with_clear(@fullname)
461
+ end
462
+
463
+ def self.forget(*patterns)
464
+ tk_call('namespace', 'forget', *patterns)
465
+ end
466
+ def forget
467
+ TkNamespace.forget(@fullname)
468
+ end
469
+
470
+ def self.import(*patterns)
471
+ tk_call('namespace', 'import', *patterns)
472
+ end
473
+ def self.force_import(*patterns)
474
+ tk_call('namespace', 'import', '-force', *patterns)
475
+ end
476
+ def import
477
+ TkNamespace.import(@fullname)
478
+ end
479
+ def force_import
480
+ TkNamespace.force_import(@fullname)
481
+ end
482
+
483
+ def self.inscope(namespace, script, *args)
484
+ tk_call('namespace', 'inscope', namespace, script, *args)
485
+ end
486
+ def inscope(script, *args)
487
+ TkNamespace.inscope(@fullname, script, *args)
488
+ end
489
+
490
+ def self.origin(cmd)
491
+ tk_call('namespace', 'origin', cmd)
492
+ end
493
+
494
+ def self.parent(namespace=None)
495
+ ns = tk_call('namespace', 'parent', namespace)
496
+ Tk_Namespace_ID_TBL.mutex.synchronize{
497
+ if Tk_Namespace_ID_TBL.key?(ns)
498
+ Tk_Namespace_ID_TBL[ns]
499
+ else
500
+ ns
501
+ end
502
+ }
503
+ end
504
+ def parent
505
+ tk_call('namespace', 'parent', @fullname)
506
+ end
507
+
508
+ def self.get_path
509
+ tk_call('namespace', 'path')
510
+ end
511
+ def self.set_path(*namespace_list)
512
+ tk_call('namespace', 'path', array2tk_list(namespace_list))
513
+ end
514
+ def set_path
515
+ tk_call('namespace', 'path', @fullname)
516
+ end
517
+
518
+ def self.qualifiers(str)
519
+ tk_call('namespace', 'qualifiers', str)
520
+ end
521
+
522
+ def self.tail(str)
523
+ tk_call('namespace', 'tail', str)
524
+ end
525
+
526
+ def self.upvar(namespace, *var_pairs)
527
+ tk_call('namespace', 'upvar', namespace, *(var_pairs.flatten))
528
+ end
529
+ def upvar(*var_pairs)
530
+ TkNamespace.inscope(@fullname, *(var_pairs.flatten))
531
+ end
532
+
533
+ def self.get_unknown_handler
534
+ tk_tcl2ruby(tk_call('namespace', 'unknown'))
535
+ end
536
+ def self.set_unknown_handler(cmd = Proc.new)
537
+ tk_call('namespace', 'unknown', cmd)
538
+ end
539
+
540
+ def self.which(name)
541
+ tk_call('namespace', 'which', name)
542
+ end
543
+ def self.which_command(name)
544
+ tk_call('namespace', 'which', '-command', name)
545
+ end
546
+ def self.which_variable(name)
547
+ tk_call('namespace', 'which', '-variable', name)
548
+ end
549
+ end
550
+
551
+ TkNamespace::Global = TkNamespace.new('::')