tk-win 0.2.0-x86-mingw32

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 (329) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +17 -0
  5. data/Rakefile +46 -0
  6. data/VERSION +1 -0
  7. data/lib/tcltk.rb +367 -0
  8. data/lib/tk.rb +5682 -0
  9. data/lib/tk/after.rb +6 -0
  10. data/lib/tk/autoload.rb +760 -0
  11. data/lib/tk/bgerror.rb +29 -0
  12. data/lib/tk/bindtag.rb +138 -0
  13. data/lib/tk/button.rb +31 -0
  14. data/lib/tk/canvas.rb +816 -0
  15. data/lib/tk/canvastag.rb +459 -0
  16. data/lib/tk/checkbutton.rb +32 -0
  17. data/lib/tk/clipboard.rb +75 -0
  18. data/lib/tk/clock.rb +71 -0
  19. data/lib/tk/composite.rb +484 -0
  20. data/lib/tk/console.rb +52 -0
  21. data/lib/tk/dialog.rb +326 -0
  22. data/lib/tk/encodedstr.rb +187 -0
  23. data/lib/tk/entry.rb +120 -0
  24. data/lib/tk/event.rb +562 -0
  25. data/lib/tk/font.rb +2351 -0
  26. data/lib/tk/frame.rb +132 -0
  27. data/lib/tk/grid.rb +279 -0
  28. data/lib/tk/image.rb +275 -0
  29. data/lib/tk/itemconfig.rb +1222 -0
  30. data/lib/tk/itemfont.rb +327 -0
  31. data/lib/tk/kinput.rb +71 -0
  32. data/lib/tk/label.rb +22 -0
  33. data/lib/tk/labelframe.rb +31 -0
  34. data/lib/tk/listbox.rb +284 -0
  35. data/lib/tk/macpkg.rb +80 -0
  36. data/lib/tk/menu.rb +718 -0
  37. data/lib/tk/menubar.rb +137 -0
  38. data/lib/tk/menuspec.rb +456 -0
  39. data/lib/tk/message.rb +24 -0
  40. data/lib/tk/mngfocus.rb +33 -0
  41. data/lib/tk/msgcat.rb +296 -0
  42. data/lib/tk/namespace.rb +551 -0
  43. data/lib/tk/optiondb.rb +377 -0
  44. data/lib/tk/optionobj.rb +212 -0
  45. data/lib/tk/pack.rb +107 -0
  46. data/lib/tk/package.rb +143 -0
  47. data/lib/tk/palette.rb +55 -0
  48. data/lib/tk/panedwindow.rb +260 -0
  49. data/lib/tk/place.rb +128 -0
  50. data/lib/tk/radiobutton.rb +73 -0
  51. data/lib/tk/root.rb +95 -0
  52. data/lib/tk/scale.rb +112 -0
  53. data/lib/tk/scrollable.rb +82 -0
  54. data/lib/tk/scrollbar.rb +183 -0
  55. data/lib/tk/scrollbox.rb +39 -0
  56. data/lib/tk/selection.rb +86 -0
  57. data/lib/tk/spinbox.rb +144 -0
  58. data/lib/tk/tagfont.rb +43 -0
  59. data/lib/tk/text.rb +1604 -0
  60. data/lib/tk/textimage.rb +88 -0
  61. data/lib/tk/textmark.rb +204 -0
  62. data/lib/tk/texttag.rb +321 -0
  63. data/lib/tk/textwindow.rb +154 -0
  64. data/lib/tk/timer.rb +669 -0
  65. data/lib/tk/toplevel.rb +264 -0
  66. data/lib/tk/ttk_selector.rb +98 -0
  67. data/lib/tk/txtwin_abst.rb +39 -0
  68. data/lib/tk/validation.rb +397 -0
  69. data/lib/tk/variable.rb +1799 -0
  70. data/lib/tk/virtevent.rb +139 -0
  71. data/lib/tk/winfo.rb +392 -0
  72. data/lib/tk/winpkg.rb +156 -0
  73. data/lib/tk/wm.rb +552 -0
  74. data/lib/tk/xim.rb +122 -0
  75. data/lib/tkafter.rb +4 -0
  76. data/lib/tkbgerror.rb +4 -0
  77. data/lib/tkcanvas.rb +4 -0
  78. data/lib/tkclass.rb +47 -0
  79. data/lib/tkconsole.rb +4 -0
  80. data/lib/tkdialog.rb +4 -0
  81. data/lib/tkentry.rb +4 -0
  82. data/lib/tkextlib/ICONS.rb +13 -0
  83. data/lib/tkextlib/ICONS/icons.rb +129 -0
  84. data/lib/tkextlib/ICONS/setup.rb +8 -0
  85. data/lib/tkextlib/SUPPORT_STATUS +198 -0
  86. data/lib/tkextlib/blt.rb +189 -0
  87. data/lib/tkextlib/blt/barchart.rb +79 -0
  88. data/lib/tkextlib/blt/bitmap.rb +112 -0
  89. data/lib/tkextlib/blt/busy.rb +83 -0
  90. data/lib/tkextlib/blt/component.rb +2218 -0
  91. data/lib/tkextlib/blt/container.rb +28 -0
  92. data/lib/tkextlib/blt/cutbuffer.rb +23 -0
  93. data/lib/tkextlib/blt/dragdrop.rb +269 -0
  94. data/lib/tkextlib/blt/eps.rb +32 -0
  95. data/lib/tkextlib/blt/graph.rb +67 -0
  96. data/lib/tkextlib/blt/htext.rb +112 -0
  97. data/lib/tkextlib/blt/setup.rb +8 -0
  98. data/lib/tkextlib/blt/spline.rb +23 -0
  99. data/lib/tkextlib/blt/stripchart.rb +74 -0
  100. data/lib/tkextlib/blt/table.rb +412 -0
  101. data/lib/tkextlib/blt/tabnotebook.rb +110 -0
  102. data/lib/tkextlib/blt/tabset.rb +504 -0
  103. data/lib/tkextlib/blt/ted.rb +68 -0
  104. data/lib/tkextlib/blt/tile.rb +25 -0
  105. data/lib/tkextlib/blt/tile/button.rb +16 -0
  106. data/lib/tkextlib/blt/tile/checkbutton.rb +17 -0
  107. data/lib/tkextlib/blt/tile/frame.rb +16 -0
  108. data/lib/tkextlib/blt/tile/label.rb +16 -0
  109. data/lib/tkextlib/blt/tile/radiobutton.rb +17 -0
  110. data/lib/tkextlib/blt/tile/scrollbar.rb +16 -0
  111. data/lib/tkextlib/blt/tile/toplevel.rb +16 -0
  112. data/lib/tkextlib/blt/tree.rb +1058 -0
  113. data/lib/tkextlib/blt/treeview.rb +1287 -0
  114. data/lib/tkextlib/blt/unix_dnd.rb +141 -0
  115. data/lib/tkextlib/blt/vector.rb +256 -0
  116. data/lib/tkextlib/blt/watch.rb +175 -0
  117. data/lib/tkextlib/blt/win_printer.rb +61 -0
  118. data/lib/tkextlib/blt/winop.rb +107 -0
  119. data/lib/tkextlib/bwidget.rb +153 -0
  120. data/lib/tkextlib/bwidget/arrowbutton.rb +21 -0
  121. data/lib/tkextlib/bwidget/bitmap.rb +21 -0
  122. data/lib/tkextlib/bwidget/button.rb +31 -0
  123. data/lib/tkextlib/bwidget/buttonbox.rb +90 -0
  124. data/lib/tkextlib/bwidget/combobox.rb +62 -0
  125. data/lib/tkextlib/bwidget/dialog.rb +194 -0
  126. data/lib/tkextlib/bwidget/dragsite.rb +31 -0
  127. data/lib/tkextlib/bwidget/dropsite.rb +39 -0
  128. data/lib/tkextlib/bwidget/dynamichelp.rb +63 -0
  129. data/lib/tkextlib/bwidget/entry.rb +43 -0
  130. data/lib/tkextlib/bwidget/label.rb +41 -0
  131. data/lib/tkextlib/bwidget/labelentry.rb +80 -0
  132. data/lib/tkextlib/bwidget/labelframe.rb +52 -0
  133. data/lib/tkextlib/bwidget/listbox.rb +361 -0
  134. data/lib/tkextlib/bwidget/mainframe.rb +132 -0
  135. data/lib/tkextlib/bwidget/messagedlg.rb +192 -0
  136. data/lib/tkextlib/bwidget/notebook.rb +166 -0
  137. data/lib/tkextlib/bwidget/pagesmanager.rb +73 -0
  138. data/lib/tkextlib/bwidget/panedwindow.rb +42 -0
  139. data/lib/tkextlib/bwidget/panelframe.rb +67 -0
  140. data/lib/tkextlib/bwidget/passwddlg.rb +44 -0
  141. data/lib/tkextlib/bwidget/progressbar.rb +20 -0
  142. data/lib/tkextlib/bwidget/progressdlg.rb +58 -0
  143. data/lib/tkextlib/bwidget/scrollableframe.rb +40 -0
  144. data/lib/tkextlib/bwidget/scrolledwindow.rb +48 -0
  145. data/lib/tkextlib/bwidget/scrollview.rb +25 -0
  146. data/lib/tkextlib/bwidget/selectcolor.rb +73 -0
  147. data/lib/tkextlib/bwidget/selectfont.rb +91 -0
  148. data/lib/tkextlib/bwidget/separator.rb +20 -0
  149. data/lib/tkextlib/bwidget/setup.rb +8 -0
  150. data/lib/tkextlib/bwidget/spinbox.rb +98 -0
  151. data/lib/tkextlib/bwidget/statusbar.rb +62 -0
  152. data/lib/tkextlib/bwidget/titleframe.rb +33 -0
  153. data/lib/tkextlib/bwidget/tree.rb +500 -0
  154. data/lib/tkextlib/bwidget/widget.rb +129 -0
  155. data/lib/tkextlib/itcl.rb +13 -0
  156. data/lib/tkextlib/itcl/incr_tcl.rb +178 -0
  157. data/lib/tkextlib/itcl/setup.rb +13 -0
  158. data/lib/tkextlib/itk.rb +13 -0
  159. data/lib/tkextlib/itk/incr_tk.rb +446 -0
  160. data/lib/tkextlib/itk/setup.rb +13 -0
  161. data/lib/tkextlib/iwidgets.rb +94 -0
  162. data/lib/tkextlib/iwidgets/buttonbox.rb +121 -0
  163. data/lib/tkextlib/iwidgets/calendar.rb +125 -0
  164. data/lib/tkextlib/iwidgets/canvasprintbox.rb +53 -0
  165. data/lib/tkextlib/iwidgets/canvasprintdialog.rb +38 -0
  166. data/lib/tkextlib/iwidgets/checkbox.rb +130 -0
  167. data/lib/tkextlib/iwidgets/combobox.rb +104 -0
  168. data/lib/tkextlib/iwidgets/dateentry.rb +20 -0
  169. data/lib/tkextlib/iwidgets/datefield.rb +58 -0
  170. data/lib/tkextlib/iwidgets/dialog.rb +20 -0
  171. data/lib/tkextlib/iwidgets/dialogshell.rb +121 -0
  172. data/lib/tkextlib/iwidgets/disjointlistbox.rb +50 -0
  173. data/lib/tkextlib/iwidgets/entryfield.rb +185 -0
  174. data/lib/tkextlib/iwidgets/extbutton.rb +40 -0
  175. data/lib/tkextlib/iwidgets/extfileselectionbox.rb +46 -0
  176. data/lib/tkextlib/iwidgets/extfileselectiondialog.rb +33 -0
  177. data/lib/tkextlib/iwidgets/feedback.rb +35 -0
  178. data/lib/tkextlib/iwidgets/fileselectionbox.rb +46 -0
  179. data/lib/tkextlib/iwidgets/fileselectiondialog.rb +33 -0
  180. data/lib/tkextlib/iwidgets/finddialog.rb +42 -0
  181. data/lib/tkextlib/iwidgets/hierarchy.rb +365 -0
  182. data/lib/tkextlib/iwidgets/hyperhelp.rb +50 -0
  183. data/lib/tkextlib/iwidgets/labeledframe.rb +39 -0
  184. data/lib/tkextlib/iwidgets/labeledwidget.rb +45 -0
  185. data/lib/tkextlib/iwidgets/mainwindow.rb +67 -0
  186. data/lib/tkextlib/iwidgets/menubar.rb +212 -0
  187. data/lib/tkextlib/iwidgets/messagebox.rb +93 -0
  188. data/lib/tkextlib/iwidgets/messagedialog.rb +20 -0
  189. data/lib/tkextlib/iwidgets/notebook.rb +175 -0
  190. data/lib/tkextlib/iwidgets/optionmenu.rb +92 -0
  191. data/lib/tkextlib/iwidgets/panedwindow.rb +134 -0
  192. data/lib/tkextlib/iwidgets/promptdialog.rb +131 -0
  193. data/lib/tkextlib/iwidgets/pushbutton.rb +35 -0
  194. data/lib/tkextlib/iwidgets/radiobox.rb +121 -0
  195. data/lib/tkextlib/iwidgets/scopedobject.rb +24 -0
  196. data/lib/tkextlib/iwidgets/scrolledcanvas.rb +353 -0
  197. data/lib/tkextlib/iwidgets/scrolledframe.rb +59 -0
  198. data/lib/tkextlib/iwidgets/scrolledhtml.rb +58 -0
  199. data/lib/tkextlib/iwidgets/scrolledlistbox.rb +207 -0
  200. data/lib/tkextlib/iwidgets/scrolledtext.rb +568 -0
  201. data/lib/tkextlib/iwidgets/scrolledwidget.rb +20 -0
  202. data/lib/tkextlib/iwidgets/selectionbox.rb +102 -0
  203. data/lib/tkextlib/iwidgets/selectiondialog.rb +92 -0
  204. data/lib/tkextlib/iwidgets/setup.rb +8 -0
  205. data/lib/tkextlib/iwidgets/shell.rb +38 -0
  206. data/lib/tkextlib/iwidgets/spindate.rb +48 -0
  207. data/lib/tkextlib/iwidgets/spinint.rb +30 -0
  208. data/lib/tkextlib/iwidgets/spinner.rb +169 -0
  209. data/lib/tkextlib/iwidgets/spintime.rb +48 -0
  210. data/lib/tkextlib/iwidgets/tabnotebook.rb +181 -0
  211. data/lib/tkextlib/iwidgets/tabset.rb +145 -0
  212. data/lib/tkextlib/iwidgets/timeentry.rb +25 -0
  213. data/lib/tkextlib/iwidgets/timefield.rb +58 -0
  214. data/lib/tkextlib/iwidgets/toolbar.rb +112 -0
  215. data/lib/tkextlib/iwidgets/watch.rb +56 -0
  216. data/lib/tkextlib/pkg_checker.rb +184 -0
  217. data/lib/tkextlib/setup.rb +8 -0
  218. data/lib/tkextlib/tcllib.rb +105 -0
  219. data/lib/tkextlib/tcllib/autoscroll.rb +158 -0
  220. data/lib/tkextlib/tcllib/ctext.rb +160 -0
  221. data/lib/tkextlib/tcllib/cursor.rb +97 -0
  222. data/lib/tkextlib/tcllib/datefield.rb +57 -0
  223. data/lib/tkextlib/tcllib/dialog.rb +84 -0
  224. data/lib/tkextlib/tcllib/getstring.rb +134 -0
  225. data/lib/tkextlib/tcllib/history.rb +73 -0
  226. data/lib/tkextlib/tcllib/ico.rb +146 -0
  227. data/lib/tkextlib/tcllib/ip_entry.rb +75 -0
  228. data/lib/tkextlib/tcllib/panelframe.rb +78 -0
  229. data/lib/tkextlib/tcllib/plotchart.rb +1404 -0
  230. data/lib/tkextlib/tcllib/ruler.rb +65 -0
  231. data/lib/tkextlib/tcllib/screenruler.rb +68 -0
  232. data/lib/tkextlib/tcllib/scrollwin.rb +61 -0
  233. data/lib/tkextlib/tcllib/setup.rb +8 -0
  234. data/lib/tkextlib/tcllib/style.rb +61 -0
  235. data/lib/tkextlib/tcllib/superframe.rb +51 -0
  236. data/lib/tkextlib/tcllib/swaplist.rb +150 -0
  237. data/lib/tkextlib/tcllib/tablelist.rb +28 -0
  238. data/lib/tkextlib/tcllib/tablelist_core.rb +1072 -0
  239. data/lib/tkextlib/tcllib/tablelist_tile.rb +43 -0
  240. data/lib/tkextlib/tcllib/tkpiechart.rb +314 -0
  241. data/lib/tkextlib/tcllib/tooltip.rb +104 -0
  242. data/lib/tkextlib/tcllib/widget.rb +82 -0
  243. data/lib/tkextlib/tclx.rb +13 -0
  244. data/lib/tkextlib/tclx/setup.rb +8 -0
  245. data/lib/tkextlib/tclx/tclx.rb +74 -0
  246. data/lib/tkextlib/tile.rb +449 -0
  247. data/lib/tkextlib/tile/dialog.rb +102 -0
  248. data/lib/tkextlib/tile/setup.rb +8 -0
  249. data/lib/tkextlib/tile/sizegrip.rb +32 -0
  250. data/lib/tkextlib/tile/style.rb +336 -0
  251. data/lib/tkextlib/tile/tbutton.rb +34 -0
  252. data/lib/tkextlib/tile/tcheckbutton.rb +38 -0
  253. data/lib/tkextlib/tile/tcombobox.rb +55 -0
  254. data/lib/tkextlib/tile/tentry.rb +49 -0
  255. data/lib/tkextlib/tile/tframe.rb +34 -0
  256. data/lib/tkextlib/tile/tlabel.rb +34 -0
  257. data/lib/tkextlib/tile/tlabelframe.rb +38 -0
  258. data/lib/tkextlib/tile/tmenubutton.rb +38 -0
  259. data/lib/tkextlib/tile/tnotebook.rb +147 -0
  260. data/lib/tkextlib/tile/tpaned.rb +245 -0
  261. data/lib/tkextlib/tile/tprogressbar.rb +57 -0
  262. data/lib/tkextlib/tile/tradiobutton.rb +38 -0
  263. data/lib/tkextlib/tile/treeview.rb +1306 -0
  264. data/lib/tkextlib/tile/tscale.rb +56 -0
  265. data/lib/tkextlib/tile/tscrollbar.rb +63 -0
  266. data/lib/tkextlib/tile/tseparator.rb +34 -0
  267. data/lib/tkextlib/tile/tsquare.rb +30 -0
  268. data/lib/tkextlib/tkDND.rb +18 -0
  269. data/lib/tkextlib/tkDND/setup.rb +8 -0
  270. data/lib/tkextlib/tkDND/shape.rb +125 -0
  271. data/lib/tkextlib/tkDND/tkdnd.rb +182 -0
  272. data/lib/tkextlib/tkHTML.rb +13 -0
  273. data/lib/tkextlib/tkHTML/htmlwidget.rb +453 -0
  274. data/lib/tkextlib/tkHTML/setup.rb +8 -0
  275. data/lib/tkextlib/tkimg.rb +36 -0
  276. data/lib/tkextlib/tkimg/bmp.rb +33 -0
  277. data/lib/tkextlib/tkimg/gif.rb +33 -0
  278. data/lib/tkextlib/tkimg/ico.rb +33 -0
  279. data/lib/tkextlib/tkimg/jpeg.rb +33 -0
  280. data/lib/tkextlib/tkimg/pcx.rb +33 -0
  281. data/lib/tkextlib/tkimg/pixmap.rb +44 -0
  282. data/lib/tkextlib/tkimg/png.rb +33 -0
  283. data/lib/tkextlib/tkimg/ppm.rb +33 -0
  284. data/lib/tkextlib/tkimg/ps.rb +33 -0
  285. data/lib/tkextlib/tkimg/setup.rb +8 -0
  286. data/lib/tkextlib/tkimg/sgi.rb +33 -0
  287. data/lib/tkextlib/tkimg/sun.rb +33 -0
  288. data/lib/tkextlib/tkimg/tga.rb +33 -0
  289. data/lib/tkextlib/tkimg/tiff.rb +33 -0
  290. data/lib/tkextlib/tkimg/window.rb +33 -0
  291. data/lib/tkextlib/tkimg/xbm.rb +33 -0
  292. data/lib/tkextlib/tkimg/xpm.rb +33 -0
  293. data/lib/tkextlib/tktable.rb +14 -0
  294. data/lib/tkextlib/tktable/setup.rb +8 -0
  295. data/lib/tkextlib/tktable/tktable.rb +966 -0
  296. data/lib/tkextlib/tktrans.rb +14 -0
  297. data/lib/tkextlib/tktrans/setup.rb +8 -0
  298. data/lib/tkextlib/tktrans/tktrans.rb +64 -0
  299. data/lib/tkextlib/treectrl.rb +13 -0
  300. data/lib/tkextlib/treectrl/setup.rb +8 -0
  301. data/lib/tkextlib/treectrl/tktreectrl.rb +2522 -0
  302. data/lib/tkextlib/trofs.rb +13 -0
  303. data/lib/tkextlib/trofs/setup.rb +8 -0
  304. data/lib/tkextlib/trofs/trofs.rb +51 -0
  305. data/lib/tkextlib/version.rb +6 -0
  306. data/lib/tkextlib/vu.rb +48 -0
  307. data/lib/tkextlib/vu/bargraph.rb +61 -0
  308. data/lib/tkextlib/vu/charts.rb +53 -0
  309. data/lib/tkextlib/vu/dial.rb +102 -0
  310. data/lib/tkextlib/vu/pie.rb +286 -0
  311. data/lib/tkextlib/vu/setup.rb +8 -0
  312. data/lib/tkextlib/vu/spinbox.rb +22 -0
  313. data/lib/tkextlib/winico.rb +14 -0
  314. data/lib/tkextlib/winico/setup.rb +8 -0
  315. data/lib/tkextlib/winico/winico.rb +224 -0
  316. data/lib/tkfont.rb +4 -0
  317. data/lib/tkmacpkg.rb +4 -0
  318. data/lib/tkmenubar.rb +4 -0
  319. data/lib/tkmngfocus.rb +4 -0
  320. data/lib/tkpalette.rb +4 -0
  321. data/lib/tkscrollbox.rb +4 -0
  322. data/lib/tktext.rb +4 -0
  323. data/lib/tkvirtevent.rb +4 -0
  324. data/lib/tkwinpkg.rb +4 -0
  325. data/spec/spec.opts +1 -0
  326. data/spec/spec_helper.rb +9 -0
  327. data/spec/tk-win_spec.rb +7 -0
  328. data/tk-win.gemspec +373 -0
  329. metadata +412 -0
@@ -0,0 +1,129 @@
1
+ #
2
+ # tkextlib/bwidget/widget.rb
3
+ # by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
4
+ #
5
+
6
+ require 'tk'
7
+ require 'tkextlib/bwidget.rb'
8
+
9
+ module Tk
10
+ module BWidget
11
+ module Widget
12
+ end
13
+ end
14
+ end
15
+
16
+ module Tk::BWidget::Widget
17
+ include Tk
18
+ extend Tk
19
+
20
+ def self.__pathname
21
+ 'Widget::configure'
22
+ end
23
+
24
+ def self.__cget_cmd
25
+ ['Widget::cget']
26
+ end
27
+
28
+ def self.__config_cmd
29
+ ['Widget::configure']
30
+ end
31
+
32
+ def self.cget_strict(slot)
33
+ slot = slot.to_s
34
+ info = {}
35
+ self.current_configinfo.each{|k,v| info[k.to_s] = v if k.to_s == slot}
36
+ fail RuntimeError, "unknown option \"-#{slot}\"" if info.empty?
37
+ info.values[0]
38
+ end
39
+ def self.cget(slot)
40
+ self.current_configinfo(slot).values[0]
41
+ end
42
+
43
+ def self.add_map(klass, subclass, subpath, opts)
44
+ tk_call('Widget::addmap', klass, subclass, subpath, opts)
45
+ end
46
+
47
+ def self.bwinclude(klass, subclass, subpath, *args)
48
+ tk_call('Widget::bwinclude', klass, subclass, subpath, *args)
49
+ end
50
+
51
+ def self.create(klass, path, rename=None, &b)
52
+ win = window(tk_call('Widget::create', klass, path, rename))
53
+ if b
54
+ if TkCore::WITH_RUBY_VM ### Ruby 1.9 !!!!
55
+ win.instance_exec(self, &b)
56
+ else
57
+ win.instance_eval(&b)
58
+ end
59
+ end
60
+ win
61
+ end
62
+
63
+ def self.declare(klass, optlist)
64
+ tk_call('Widget::declare', klass, optlist)
65
+ end
66
+
67
+ def self.define(klass, filename, *args)
68
+ tk_call('Widget::define', klass, filename, *args)
69
+ end
70
+
71
+ def self.destroy(win)
72
+ tk_call('Widget::destroy', _epath(win))
73
+ end
74
+
75
+ def self.focus_next(win)
76
+ tk_call('Widget::focusNext', win)
77
+ end
78
+
79
+ def self.focus_ok(win)
80
+ tk_call('Widget::focusOk', win)
81
+ end
82
+
83
+ def self.focus_prev(win)
84
+ tk_call('Widget::focusPrev', win)
85
+ end
86
+
87
+ def self.generate_doc(dir, widgetlist)
88
+ tk_call('Widget::generate-doc', dir, widgetlist)
89
+ end
90
+
91
+ def self.generate_widget_doc(klass, iscmd, file)
92
+ tk_call('Widget::generate-widget-doc', klass, iscmd, file)
93
+ end
94
+
95
+ def self.get_option(win, option)
96
+ tk_call('Widget::getoption', win, option)
97
+ end
98
+
99
+ def self.get_variable(win, varname, my_varname=None)
100
+ tk_call('Widget::getVariable', win, varname, my_varname)
101
+ end
102
+
103
+ def self.has_changed(win, option, pvalue)
104
+ tk_call('Widget::hasChanged', win, option, pvalue)
105
+ end
106
+
107
+ def self.init(klass, win, options)
108
+ tk_call('Widget::init', klass, win, options)
109
+ end
110
+
111
+ def self.set_option(win, option, value)
112
+ tk_call('Widget::setoption', win, option, value)
113
+ end
114
+
115
+ def self.sub_cget_strict(win, subwidget)
116
+ tk_call('Widget::subcget', win, subwidget)
117
+ end
118
+ def self.sub_cget(win, subwidget)
119
+ self.sub_cget_strict(win, subwidget)
120
+ end
121
+
122
+ def self.sync_options(klass, subclass, subpath, options)
123
+ tk_call('Widget::syncoptions', klass, subclass, subpath, options)
124
+ end
125
+
126
+ def self.tkinclude(klass, tkwidget, subpath, *args)
127
+ tk_call('Widget::tkinclude', klass, tkwidget, subpath, *args)
128
+ end
129
+ end
@@ -0,0 +1,13 @@
1
+ #
2
+ # [incr Tcl] support
3
+ # by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
4
+ #
5
+
6
+ # call setup script for general 'tkextlib' libraries
7
+ require 'tkextlib/setup.rb'
8
+
9
+ # call setup script
10
+ require 'tkextlib/itcl/setup.rb'
11
+
12
+ # load library
13
+ require 'tkextlib/itcl/incr_tcl.rb'
@@ -0,0 +1,178 @@
1
+ #
2
+ # tkextlib/itk/incr_tcl.rb
3
+ # by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
4
+ #
5
+
6
+ require 'tk'
7
+
8
+ # call setup script
9
+ require 'tkextlib/itcl.rb'
10
+
11
+ # TkPackage.require('Itcl', '3.2')
12
+ TkPackage.require('Itcl')
13
+
14
+ module Tk
15
+ module Itcl
16
+ include Tk
17
+ extend Tk
18
+
19
+ LIBRARY = TkVarAccess.new('::itcl::library')
20
+ PURIST = TkVarAccess.new('::itcl::purist')
21
+
22
+ VERSION = TkCore::INTERP._invoke("set", "::itcl::version").freeze
23
+ PATCHLEVEL = TkCore::INTERP._invoke("set", "::itcl::patchLevel").freeze
24
+
25
+ PACKAGE_NAME = 'Itcl'.freeze
26
+ def self.package_name
27
+ PACKAGE_NAME
28
+ end
29
+
30
+ def self.package_version
31
+ begin
32
+ TkPackage.require('Itcl')
33
+ rescue
34
+ ''
35
+ end
36
+ end
37
+
38
+ ##############################################
39
+
40
+ class ItclObject < TkObject
41
+ ITCL_CLASSNAME = ''.freeze
42
+
43
+ (ITCL_OBJ_ID = ['itclobj'.freeze, TkUtil.untrust('00000')]).instance_eval{
44
+ @mutex = Mutex.new
45
+ def mutex; @mutex; end
46
+ freeze
47
+ }
48
+ ITCL_OBJ_TBL = TkUtil.untrust({})
49
+
50
+ def initialize(*args)
51
+ if (@klass = self.class::ITCL_CLASSNAME).empty?
52
+ fail RuntimeError, 'unknown itcl class (abstract class?)'
53
+ end
54
+ Tk::Itcl::ItclObject::ITCL_OBJ_ID.mutex.synchronize{
55
+ @id = Tk::Itcl::ItclObject::TCL_OBJ_ID.join(TkCore::INTERP._ip_id_)
56
+ Tk::Itcl::ItclObject::ITCL_OBJ_ID[1].succ!
57
+ }
58
+ @path = @id
59
+ end
60
+
61
+ def self.call_proc(name, *args)
62
+ tk_call("#{ITCL_CLASSNAME}::#{cmd}", *args)
63
+ end
64
+
65
+ def call_method(name, *args)
66
+ tk_call(@path, name, *args)
67
+ end
68
+
69
+ def isa(klass)
70
+ bool(tk_call(@path, 'isa', klass))
71
+ end
72
+ alias itcl_kind_of? isa
73
+
74
+ def info_class
75
+ tk_call(@path, 'info', 'class')
76
+ end
77
+
78
+ def info_inherit
79
+ simplelist(tk_call(@path, 'info', 'inherit'))
80
+ end
81
+
82
+ def info_heritage
83
+ list(tk_call(@path, 'info', 'heritage'))
84
+ end
85
+
86
+ def info_function(*args)
87
+ if args[-1].kind_of?(Array)
88
+ params = args.pop
89
+ params.each{|param|
90
+ param = param.to_s
91
+ args << ( (param[0] == ?-)? param: "-#{param}" )
92
+ }
93
+ end
94
+ list(tk_call(@path, 'info', 'function', *args))
95
+ end
96
+
97
+ def info_variable(*args)
98
+ if args[-1].kind_of?(Array)
99
+ params = args.pop
100
+ params.each{|param|
101
+ param = param.to_s
102
+ args << ( (param[0] == ?-)? param: "-#{param}" )
103
+ }
104
+ end
105
+ list(tk_call(@path, 'info', 'variable', *args))
106
+ end
107
+ end
108
+
109
+ ##############################################
110
+
111
+ def self.body(klass, func, args, body)
112
+ tk_call('::itcl::body', "#{klass}::#{func}", args, body)
113
+ end
114
+
115
+ def self.code(cmd, *args)
116
+ tk_call('::itcl::code', cmd, *args)
117
+ end
118
+
119
+ def self.code_in_namespace(namespace, cmd, *args)
120
+ tk_call('::itcl::code', '-namespace', namespace, cmd, *args)
121
+ end
122
+
123
+ def self.configbody(klass, var, body)
124
+ tk_call('::itcl::configbody', "#{klass}::#{var}", body)
125
+ end
126
+
127
+ def self.create_itcl_class(name, body)
128
+ TkCore::INTERP._invoke('::itcl::class', name, body)
129
+ klass = Class.new(Tk::Itcl::ItclObject)
130
+ klass.const_set('ITCL_CLASSNAME', name.dup.freeze)
131
+ klass
132
+ end
133
+
134
+ def self.delete_itcl_class(*names)
135
+ tk_call('::itcl::delete', 'class', *names)
136
+ end
137
+
138
+ def self.delete_itcl_object(*names)
139
+ tk_call('::itcl::delete', 'object', *names)
140
+ end
141
+
142
+ def self.delete_namespace(*names)
143
+ tk_call('::itcl::delete', 'namespace', *names)
144
+ end
145
+
146
+ def self.ensemble(name, *args)
147
+ tk_call('::itcl::ensemble', name, *args)
148
+ end
149
+
150
+ def self.find_classes(pat=None)
151
+ simplelist(tk_call('::itcl::find', 'classes', pat))
152
+ end
153
+
154
+ def self.find_objects(*args)
155
+ simplelist(tk_call('::itcl::find', 'objects', *args))
156
+ end
157
+
158
+ def self.is_itcl_class(target)
159
+ bool(tk_call('::itcl::is', 'class', target))
160
+ end
161
+
162
+ def self.is_itcl_object(target)
163
+ bool(tk_call('::itcl::is', 'object', target))
164
+ end
165
+
166
+ def self.create_local_obj(klass, name, *args)
167
+ tk_call('::itcl::local', klass, name, *args)
168
+ end
169
+
170
+ def self.is_itcl_instance(klass, target)
171
+ bool(tk_call('::itcl::is', 'object', '-class', klass, target))
172
+ end
173
+
174
+ def self.scope(var)
175
+ tk_call('::itcl::scope', var)
176
+ end
177
+ end
178
+ end
@@ -0,0 +1,13 @@
1
+ #
2
+ # setup.rb -- setup script before calling TkPackage.require()
3
+ #
4
+ # If you need some setup operations (for example, add a library path
5
+ # to the library search path) before using Tcl/Tk library packages
6
+ # wrapped by Ruby scripts in this directory, please write the setup
7
+ # operations in this file.
8
+ #
9
+
10
+
11
+ # set [incr Tcl] library directory
12
+
13
+ # ENV['ITCL_LIBRARY'] = '/usr/local/ActiveTcl/lib/itcl3.2/'
@@ -0,0 +1,13 @@
1
+ #
2
+ # [incr Tk] support
3
+ # by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
4
+ #
5
+
6
+ # call setup script for general 'tkextlib' libraries
7
+ require 'tkextlib/setup.rb'
8
+
9
+ # call setup script
10
+ require 'tkextlib/itk/setup.rb'
11
+
12
+ # load library
13
+ require 'tkextlib/itk/incr_tk.rb'
@@ -0,0 +1,446 @@
1
+ #
2
+ # tkextlib/itk/incr_tk.rb
3
+ # by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
4
+ #
5
+
6
+ require 'tk'
7
+ require 'tk/menuspec'
8
+ require 'tkextlib/itcl.rb'
9
+
10
+ # call setup script
11
+ require 'tkextlib/itk.rb'
12
+
13
+ #TkPackage.require('Itk', '3.2')
14
+ TkPackage.require('Itk')
15
+
16
+ module Tk
17
+ module Itk
18
+ include Tk
19
+ extend Tk
20
+
21
+ LIBRARY = TkVarAccess.new('::itk::library')
22
+
23
+ PACKAGE_NAME = 'Itk'.freeze
24
+ def self.package_name
25
+ PACKAGE_NAME
26
+ end
27
+
28
+ def self.package_version
29
+ begin
30
+ TkPackage.require('Itk')
31
+ rescue
32
+ ''
33
+ end
34
+ end
35
+
36
+ def self.usual(arg, *args)
37
+ tk_call('::itk::usual', arg, *args)
38
+ end
39
+
40
+ def self.usual_names
41
+ list(tk_call('::itk::usual'))
42
+ end
43
+
44
+ ############################
45
+
46
+ class Archetype < TkWindow
47
+ TkCommandNames = [].freeze
48
+ # WidgetClassName = 'Archetype'.freeze
49
+ # WidgetClassNames[WidgetClassName] = self
50
+
51
+ def self.to_eval
52
+ '::itk::' << self::WidgetClassName
53
+ end
54
+
55
+ def __destroy_hook__
56
+ Tk::Itk::Component::ComponentID_TBL.delete(self.path)
57
+ end
58
+
59
+ #### [incr Tk] public methods
60
+ def component
61
+ simplelist(tk_send('component'))
62
+ end
63
+
64
+ def component_path(name)
65
+ window(tk_send('component', name))
66
+ end
67
+ alias component_widget component_path
68
+
69
+ def component_invoke(name, cmd, *args)
70
+ window(tk_send('component', name, cmd, *args))
71
+ end
72
+
73
+ def component_obj(*names)
74
+ names = component if names.empty?
75
+ names.collect{|name| Tk::Itk::Component.new(self.path, name) }
76
+ end
77
+
78
+ #### [incr Tk] protected methods
79
+ =begin
80
+ def itk_component_add(visibility, name, create_cmds, option_cmds=None)
81
+ args = []
82
+ visibility.each{|v| v = v.to_s; args << ( (v[0] == ?-)? v: "-#{v}" )}
83
+ args << '--' << name << create_cmd << option_cmds
84
+ tk_call('itk_component', 'add', *args)
85
+ end
86
+
87
+ def itk_component_delete(*names)
88
+ tk_call('itk_component', 'delete', *names)
89
+ end
90
+
91
+ def itk_initialize(keys={})
92
+ tk_call('itk_initialize', keys)
93
+ end
94
+
95
+ def itk_option_add(*args)
96
+ tk_call('itk_option', 'add', *args)
97
+ end
98
+
99
+ def itk_option_define(name, resource, klass, init, config=None)
100
+ tk_call('itk_option', 'define', name, resource, klass, init, config)
101
+ end
102
+
103
+ def itk_option_remove(*args)
104
+ tk_call('itk_option', 'remove', *args)
105
+ end
106
+ =end
107
+ end
108
+
109
+ ############################
110
+
111
+ class Toplevel < Archetype
112
+ TkCommandNames = ['::itk::Toplevel'].freeze
113
+ WidgetClassName = 'Toplevel'.freeze
114
+ WidgetClassNames[WidgetClassName] ||= self
115
+
116
+ include Wm
117
+ include TkMenuSpec
118
+
119
+ def __strval_optkeys
120
+ super() << 'title'
121
+ end
122
+ private :__strval_optkeys
123
+ end
124
+
125
+ ############################
126
+
127
+ class Widget < Archetype
128
+ TkCommandNames = ['::itk::Widget'].freeze
129
+ WidgetClassName = 'Widget'.freeze
130
+ WidgetClassNames[WidgetClassName] ||= self
131
+ end
132
+
133
+
134
+ ############################
135
+
136
+ class Component < TkObject
137
+ def __cget_cmd
138
+ [self.master, 'component', self.name, 'cget']
139
+ end
140
+ private :__cget_cmd
141
+
142
+ def __config_cmd
143
+ [self.master, 'component', self.name, 'configure']
144
+ end
145
+ private :__config_cmd
146
+
147
+ ComponentID_TBL = TkCore::INTERP.create_table
148
+
149
+ (Itk_Component_ID = ['itk:component'.freeze, TkUtil.untrust('00000')]).instance_eval{
150
+ @mutex = Mutex.new
151
+ def mutex; @mutex; end
152
+ freeze
153
+ }
154
+
155
+ TkCore::INTERP.init_ip_env{
156
+ ComponentID_TBL.mutex.synchronize{ ComponentID_TBL.clear }
157
+ }
158
+
159
+ def self.id2obj(master, id)
160
+ if master.kind_of?(TkObject)
161
+ master = master.path
162
+ else
163
+ master = master.to_s
164
+ end
165
+ ComponentID_TBL.mutex.synchronize{
166
+ if ComponentID_TBL.key?(master)
167
+ (ComponentID_TBL[master].key?(id))? ComponentID_TBL[master][id]: id
168
+ else
169
+ id
170
+ end
171
+ }
172
+ end
173
+
174
+ def self.new(master, component=nil)
175
+ if master.kind_of?(TkObject)
176
+ master = master.path
177
+ else
178
+ master = master.to_s
179
+ end
180
+
181
+ if component.kind_of?(Tk::Itk::Component)
182
+ component = component.name
183
+ elsif component
184
+ component = component.to_s
185
+ else
186
+ Itk_Component_ID.mutex.synchronize{
187
+ component = Itk_Component_ID.join(TkCore::INTERP._ip_id_)
188
+ Itk_Component_ID[1].succ!
189
+ }
190
+ end
191
+
192
+ ComponentID_TBL.mutex.synchronize{
193
+ if ComponentID_TBL.key?(master)
194
+ if ComponentID_TBL[master].key?(component)
195
+ return ComponentID_TBL[master][component]
196
+ end
197
+ else
198
+ ComponentID_TBL[master] = {}
199
+ end
200
+ }
201
+
202
+ super(master, component)
203
+ end
204
+
205
+ def initialize(master, component)
206
+ @master = master
207
+ @component = component
208
+
209
+ ComponentID_TBL.mutex.synchronize{
210
+ ComponentID_TBL[@master][@component] = self
211
+ }
212
+
213
+ begin
214
+ @widget = window(tk_call(@master, 'component', @component))
215
+ @path = @widget.path
216
+ rescue
217
+ @widget = nil
218
+ @path = nil
219
+ end
220
+ end
221
+
222
+ def path
223
+ unless @path
224
+ begin
225
+ @widget = window(tk_call(@master, 'component', @component))
226
+ @path = @widget.path
227
+ rescue
228
+ fail RuntimeError, 'component is not assigned to a widget'
229
+ end
230
+ end
231
+ @path
232
+ end
233
+
234
+ def epath
235
+ path()
236
+ end
237
+
238
+ def to_eval
239
+ path()
240
+ end
241
+
242
+ def master
243
+ @master
244
+ end
245
+
246
+ def name
247
+ @component
248
+ end
249
+
250
+ def widget
251
+ unless @widget
252
+ begin
253
+ @widget = window(tk_call(@master, 'component', @component))
254
+ @path = @widget.path
255
+ rescue
256
+ fail RuntimeError, 'component is not assigned to a widget'
257
+ end
258
+ end
259
+ @widget
260
+ end
261
+
262
+ def widget_class
263
+ unless @widget
264
+ begin
265
+ @widget = window(tk_call(@master, 'component', @component))
266
+ @path = @widget.path
267
+ @widget.classname
268
+ rescue
269
+ nil
270
+ end
271
+ end
272
+ end
273
+
274
+ def method_missing(id, *args)
275
+ name = id.id2name
276
+
277
+ # try 1 : component command
278
+ begin
279
+ return tk_call(@master, 'component', @component, name, *args)
280
+ rescue
281
+ end
282
+
283
+ # try 2 : component configure
284
+ len = args.length
285
+ begin
286
+ case len
287
+ when 1
288
+ if name[-1] == ?=
289
+ return configure(name[0..-2], args[0])
290
+ else
291
+ return configure(name, args[0])
292
+ end
293
+ when 0
294
+ return cget(name)
295
+ end
296
+ rescue
297
+ end
298
+
299
+ # try 3 : widget method or widget configure
300
+ begin
301
+ unless @widget
302
+ @widget = window(tk_call(@master, 'component', @component))
303
+ @path = @widget.path
304
+ end
305
+ @widget.__send__(id, *args)
306
+ rescue
307
+ end
308
+
309
+ # unknown method
310
+ super(id, *args)
311
+ # fail RuntimeError, "unknown method '#{name}' for #{self.inspect}"
312
+ end
313
+
314
+ def tk_send(cmd, *rest)
315
+ begin
316
+ tk_call(@master, 'component', @component, cmd, *rest)
317
+ rescue
318
+ unless @path
319
+ begin
320
+ @widget = window(tk_call(@master, 'component', @component))
321
+ @path = @widget.path
322
+ rescue
323
+ fail RuntimeError, 'component is not assigned to a widget'
324
+ end
325
+ end
326
+ tk_call(@path, cmd, *rest)
327
+ end
328
+ end
329
+
330
+ def tk_send_without_enc(cmd, *rest)
331
+ begin
332
+ tk_call_without_enc(@master, 'component', @component, cmd, *rest)
333
+ rescue
334
+ unless @path
335
+ begin
336
+ @widget = window(tk_call(@master, 'component', @component))
337
+ @path = @widget.path
338
+ rescue
339
+ fail RuntimeError, 'component is not assigned to a widget'
340
+ end
341
+ end
342
+ tk_call_without_enc(@path, cmd, *rest)
343
+ end
344
+ end
345
+
346
+ def tk_send_with_enc(cmd, *rest)
347
+ begin
348
+ tk_call_with_enc(@master, 'component', @component, cmd, *rest)
349
+ rescue
350
+ unless @path
351
+ begin
352
+ @widget = window(tk_call(@master, 'component', @component))
353
+ @path = @widget.path
354
+ rescue
355
+ fail RuntimeError, 'component is not assigned to a widget'
356
+ end
357
+ end
358
+ tk_call_with_enc(@path, cmd, *rest)
359
+ end
360
+ end
361
+
362
+ #def bind(*args)
363
+ # unless @widget
364
+ # begin
365
+ # @widget = window(tk_call(@master, 'component', @component))
366
+ # @path = @widget.path
367
+ # rescue
368
+ # fail RuntimeError, 'component is not assigned to a widget'
369
+ # end
370
+ # end
371
+ # @widget.bind(*args)
372
+ #end
373
+ def bind(context, *args)
374
+ unless @widget
375
+ begin
376
+ @widget = window(tk_call(@master, 'component', @component))
377
+ @path = @widget.path
378
+ rescue
379
+ fail RuntimeError, 'component is not assigned to a widget'
380
+ end
381
+ end
382
+ # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
383
+ if TkComm._callback_entry?(args[0]) || !block_given?
384
+ cmd = args.shift
385
+ else
386
+ cmd = Proc.new
387
+ end
388
+ @widget.bind(context, cmd, *args)
389
+ end
390
+
391
+ #def bind_append(*args)
392
+ # unless @widget
393
+ # begin
394
+ # @widget = window(tk_call(@master, 'component', @component))
395
+ # @path = @widget.path
396
+ # rescue
397
+ # fail RuntimeError, 'component is not assigned to a widget'
398
+ # end
399
+ # end
400
+ # @widget.bind_append(*args)
401
+ #end
402
+ def bind_append(context, *args)
403
+ unless @widget
404
+ begin
405
+ @widget = window(tk_call(@master, 'component', @component))
406
+ @path = @widget.path
407
+ rescue
408
+ fail RuntimeError, 'component is not assigned to a widget'
409
+ end
410
+ end
411
+ # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
412
+ if TkComm._callback_entry?(args[0]) || !block_given?
413
+ cmd = args.shift
414
+ else
415
+ cmd = Proc.new
416
+ end
417
+ @widget.bind_append(context, cmd, *args)
418
+ end
419
+
420
+ def bind_remove(*args)
421
+ unless @widget
422
+ begin
423
+ @widget = window(tk_call(@master, 'component', @component))
424
+ @path = @widget.path
425
+ rescue
426
+ fail RuntimeError, 'component is not assigned to a widget'
427
+ end
428
+ end
429
+ @widget.bind_remove(*args)
430
+ end
431
+
432
+ def bindinfo(*args)
433
+ unless @widget
434
+ begin
435
+ @widget = window(tk_call(@master, 'component', @component))
436
+ @path = @widget.path
437
+ rescue
438
+ fail RuntimeError, 'component is not assigned to a widget'
439
+ end
440
+ end
441
+ @widget.bindinfo(*args)
442
+ end
443
+
444
+ end
445
+ end
446
+ end