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,110 @@
1
+ #
2
+ # tkextlib/blt/tabnotebook.rb
3
+ # by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
4
+ #
5
+
6
+ require 'tk'
7
+ require 'tkextlib/blt.rb'
8
+ require 'tkextlib/blt/tabset.rb'
9
+
10
+ module Tk::BLT
11
+ class Tabnotebook < Tabset
12
+ TkCommandNames = ['::blt::tabnotebook'.freeze].freeze
13
+ WidgetClassName = 'Tabnotebook'.freeze
14
+ WidgetClassNames[WidgetClassName] ||= self
15
+
16
+ class Tab < Tk::BLT::Tabset::Tab
17
+ def self.new(parent, pos=nil, name=nil, keys={})
18
+ if pos.kind_of?(Hash)
19
+ keys = pos
20
+ name = nil
21
+ pos = nil
22
+ end
23
+ if name.kind_of?(Hash)
24
+ keys = name
25
+ name = nil
26
+ end
27
+ obj = nil
28
+ TabID_TBL.mutex.synchronize{
29
+ if name && TabID_TBL[parent.path] && TabID_TBL[parent.path][name]
30
+ obj = TabID_TBL[parent.path][name]
31
+ if pos
32
+ if pos.to_s == 'end'
33
+ obj.move_after('end')
34
+ else
35
+ obj.move_before(pos)
36
+ end
37
+ end
38
+ obj.configure if keys && ! keys.empty?
39
+ else
40
+ (obj = self.allocate).instance_eval{
41
+ initialize(parent, pos, name, keys)
42
+ TabID_TBL[@tpath] = {} unless TabID_TBL[@tpath]
43
+ TabID_TBL[@tpath][@id] = self
44
+ }
45
+ end
46
+ }
47
+ obj
48
+ end
49
+
50
+ def initialize(parent, pos, name, keys)
51
+ @t = parent
52
+ @tpath = parent.path
53
+ if name
54
+ @path = @id = name
55
+ unless (list(tk_call(@tpath, 'tab', 'names', @id)).empty?)
56
+ if pos
57
+ idx = tk_call(@tpath, 'index', @id)
58
+ if pos.to_s == 'end'
59
+ tk_call(@tpath, 'move', idx, 'after', 'end')
60
+ else
61
+ tk_call(@tpath, 'move', idx, 'before', pos)
62
+ end
63
+ end
64
+ tk_call(@tpath, 'tab', 'configure', @id, keys)
65
+ else
66
+ fail ArgumentError, "can't find tab \"#{@id}\" in #{@t}"
67
+ end
68
+ else
69
+ pos = 'end' unless pos
70
+ @path = @id = tk_call(@tpath, 'insert', pos, keys)
71
+ end
72
+ end
73
+ end
74
+
75
+ #######################################
76
+
77
+ def get_tab(index)
78
+ if (idx = tk_send_without_enc('id', tagindex(index))).empty?
79
+ nil
80
+ else
81
+ Tk::BLT::Tabset::Tab.id2obj(self, idx)
82
+ end
83
+ end
84
+ alias get_id get_tab
85
+
86
+ def get_tabobj(index)
87
+ if (idx = tk_send_without_enc('id', tagindex(index))).empty?
88
+ nil
89
+ else
90
+ Tk::BLT::Tabnotebook::Tab.new(self, nil, idx)
91
+ end
92
+ end
93
+
94
+ alias index_name index
95
+
96
+ def insert(pos=nil, keys={})
97
+ if pos.kind_of?(Hash)
98
+ keys = pos
99
+ pos = nil
100
+ end
101
+ pos = 'end' if pos.nil?
102
+ Tk::BLT::Tabnotebook::Tab.new(self, nil,
103
+ tk_send('insert', tagindex(pos), keys))
104
+
105
+ end
106
+ undef :insert_tabs
107
+
108
+ undef :tab_pageheight, :tab_pagewidth
109
+ end
110
+ end
@@ -0,0 +1,504 @@
1
+ #
2
+ # tkextlib/blt/tabset.rb
3
+ # by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
4
+ #
5
+
6
+ require 'tk'
7
+ require 'tkextlib/blt.rb'
8
+
9
+ module Tk::BLT
10
+ class Tabset < TkWindow
11
+ class Tab < TkObject
12
+ include TkTreatItemFont
13
+
14
+ TabID_TBL = TkCore::INTERP.create_table
15
+
16
+ (TabsetTab_ID = ['blt_tabset_tab'.freeze, TkUtil.untrust('00000')]).instance_eval{
17
+ @mutex = Mutex.new
18
+ def mutex; @mutex; end
19
+ freeze
20
+ }
21
+
22
+ TkCore::INTERP.init_ip_env{
23
+ TabID_TBL.mutex.synchronize{ TabID_TBL.clear }
24
+ }
25
+
26
+ def self.id2obj(tabset, id)
27
+ tpath = tabset.path
28
+ TabID_TBL.mutex.synchronize{
29
+ if TabID_TBL[tpath]
30
+ TabID_TBL[tpath][id]? TabID_TBL[tpath][id]: id
31
+ else
32
+ id
33
+ end
34
+ }
35
+ end
36
+
37
+ def self.new(parent, pos=nil, name=nil, keys={})
38
+ if pos.kind_of?(Hash)
39
+ keys = pos
40
+ name = nil
41
+ pos = nil
42
+ end
43
+ if name.kind_of?(Hash)
44
+ keys = name
45
+ name = nil
46
+ end
47
+ obj = nil
48
+ TabID_TBL.mutex.synchronize{
49
+ if name && TabID_TBL[parent.path] && TabID_TBL[parent.path][name]
50
+ obj = TabID_TBL[parent.path][name]
51
+ if pos
52
+ if pos.to_s == 'end'
53
+ obj.move_after('end')
54
+ else
55
+ obj.move_before(pos)
56
+ end
57
+ end
58
+ obj.configure if keys && ! keys.empty?
59
+ else
60
+ (obj = self.allocate).instance_eval{
61
+ initialize(parent, pos, name, keys)
62
+ TabID_TBL[@tpath] = {} unless TabID_TBL[@tpath]
63
+ TabID_TBL[@tpath][@id] = self
64
+ }
65
+ end
66
+ }
67
+ obj
68
+ end
69
+
70
+ def initialize(parent, pos, name, keys)
71
+ @t = parent
72
+ @tpath = parent.path
73
+ if name
74
+ @path = @id = name
75
+ unless (list(tk_call(@tpath, 'tab', 'names', @id)).empty?)
76
+ if pos
77
+ idx = tk_call(@tpath, 'index', '-name', @id)
78
+ if pos.to_s == 'end'
79
+ tk_call(@tpath, 'move', idx, 'after', 'end')
80
+ else
81
+ tk_call(@tpath, 'move', idx, 'before', pos)
82
+ end
83
+ end
84
+ tk_call(@tpath, 'tab', 'configure', @id, keys)
85
+ else
86
+ pos = 'end' unless pos
87
+ tk_call(@tpath, 'insert', pos, @id, keys)
88
+ end
89
+ else
90
+ pos = 'end' unless pos
91
+ TabsetTab_ID.mutex.synchronize{
92
+ @path = @id = TabsetTab_ID.join(TkCore::INTERP._ip_id_)
93
+ TabsetTab_ID[1].succ!
94
+ }
95
+ tk_call(@tpath, 'insert', pos, @id, keys)
96
+ end
97
+ end
98
+
99
+ #def bind(context, cmd=Proc.new, *args)
100
+ # @t.tab_bind(@id, context, cmd, *args)
101
+ # self
102
+ #end
103
+ def bind(context, *args)
104
+ # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
105
+ if TkComm._callback_entry?(args[0]) || !block_given?
106
+ cmd = args.shift
107
+ else
108
+ cmd = Proc.new
109
+ end
110
+ @t.tab_bind(@id, context, cmd, *args)
111
+ self
112
+ end
113
+ #def bind_append(context, cmd=Proc.new, *args)
114
+ # @t.tab_bind_append(@id, context, cmd, *args)
115
+ # self
116
+ #end
117
+ def bind_append(context, *args)
118
+ # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
119
+ if TkComm._callback_entry?(args[0]) || !block_given?
120
+ cmd = args.shift
121
+ else
122
+ cmd = Proc.new
123
+ end
124
+ @t.tab_bind_append(@id, context, cmd, *args)
125
+ self
126
+ end
127
+ def bind_remove(context)
128
+ @t.tab_bind_remove(@id, context)
129
+ self
130
+ end
131
+ def bindinfo(context=nil)
132
+ @t.tab_bindinfo(@id, context)
133
+ end
134
+
135
+ def cget_tkstring(*args)
136
+ @t.tab_cget_tkstring(@id, *args)
137
+ end
138
+ def cget(*args)
139
+ @t.tab_cget(@id, *args)
140
+ end
141
+ def cget_strict(*args)
142
+ @t.tab_cget_strict(@id, *args)
143
+ end
144
+ def configure(*args)
145
+ @t.tab_configure(@id, *args)
146
+ end
147
+ def configinfo(*args)
148
+ @t.tab_configinfo(@id, *args)
149
+ end
150
+ def current_configinfo(*args)
151
+ @t.current_tab_configinfo(@id, *args)
152
+ end
153
+
154
+ def delete()
155
+ @t.delete(@id)
156
+ TabID_TBL.mutex.synchronize{
157
+ TabID_TBL[@tpath].delete(@id)
158
+ }
159
+ self
160
+ end
161
+
162
+ def get_name()
163
+ @id.dup
164
+ end
165
+
166
+ def focus()
167
+ @t.focus(self.index)
168
+ end
169
+
170
+ def index()
171
+ @t.index_name(@id)
172
+ end
173
+
174
+ def invoke()
175
+ @t.invoke(self.index)
176
+ end
177
+
178
+ def move_before(idx)
179
+ @t.move_before(self.index, idx)
180
+ end
181
+ def move_after(idx)
182
+ @t.move_after(self.index, idx)
183
+ end
184
+
185
+ def perforation_highlight(mode)
186
+ @t.perforation_highlight(self.index, mode)
187
+ end
188
+ def perforation_invoke()
189
+ @t.perforation_invoke(self.index)
190
+ end
191
+
192
+ def see()
193
+ @t.see(self.index)
194
+ end
195
+
196
+ def tearoff(name=None)
197
+ @t.tab_tearoff(self.index, *args)
198
+ end
199
+ end
200
+
201
+ ########################################
202
+
203
+ class NamedTab < Tab
204
+ def self.new(parent, name)
205
+ super(parent, nil, name, {})
206
+ end
207
+ end
208
+
209
+ ########################################
210
+
211
+ include X_Scrollable
212
+ include TkItemConfigMethod
213
+
214
+ TkCommandNames = ['::blt::tabset'.freeze].freeze
215
+ WidgetClassName = 'Tabset'.freeze
216
+ WidgetClassNames[WidgetClassName] ||= self
217
+
218
+ def __destroy_hook__
219
+ Tk::BLT::Tabset::Tab::TabID_TBL.mutex.synchronize{
220
+ Tk::BLT::Tabset::Tab::TabID_TBL.delete(@path)
221
+ }
222
+ end
223
+
224
+ ########################################
225
+
226
+ def __boolval_optkeys
227
+ super() << 'samewidth' << 'tearoff'
228
+ end
229
+ private :__strval_optkeys
230
+
231
+ def __strval_optkeys
232
+ super() << 'tabbackground' << 'tabforeground'
233
+ end
234
+ private :__strval_optkeys
235
+
236
+ def __item_cget_cmd(id)
237
+ [self.path, 'tab', 'cget', id]
238
+ end
239
+ private :__item_cget_cmd
240
+
241
+ def __item_config_cmd(id)
242
+ [self.path, 'tab', 'configure', id]
243
+ end
244
+ private :__item_config_cmd
245
+
246
+ def __item_pathname(tagOrId)
247
+ if tagOrId.kind_of?(Tk::BLT::Tabset::Tab)
248
+ self.path + ';' + tagOrId.id.to_s
249
+ else
250
+ self.path + ';' + tagOrId.to_s
251
+ end
252
+ end
253
+ private :__item_pathname
254
+
255
+ alias tab_cget_tkstring itemcget_tkstring
256
+ alias tab_cget itemcget
257
+ alias tab_cget_strict itemcget_strict
258
+ alias tab_configure itemconfigure
259
+ alias tab_configinfo itemconfiginfo
260
+ alias current_tab_configinfo current_itemconfiginfo
261
+
262
+ def __item_strval_optkeys(id)
263
+ super(id) << 'shadow'
264
+ end
265
+ private :__item_strval_optkeys
266
+
267
+ def tagid(tab)
268
+ if tab.kind_of?(Tk::BLT::Tabset::Tab)
269
+ tab.id
270
+ else
271
+ tab
272
+ end
273
+ end
274
+
275
+ def tagindex(tab)
276
+ if tab.kind_of?(Tk::BLT::Tabset::Tab)
277
+ tab.index
278
+ else
279
+ tab
280
+ end
281
+ end
282
+
283
+ ########################################
284
+
285
+ def activate(index)
286
+ tk_send('activate', tagindex(index))
287
+ self
288
+ end
289
+ alias highlight activate
290
+
291
+ #def tabbind(tag, context, cmd=Proc.new, *args)
292
+ # _bind([path, "bind", tagid(tag)], context, cmd, *args)
293
+ # self
294
+ #end
295
+ def tabbind(tag, context, *args)
296
+ # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
297
+ if TkComm._callback_entry?(args[0]) || !block_given?
298
+ cmd = args.shift
299
+ else
300
+ cmd = Proc.new
301
+ end
302
+ _bind([path, "bind", tagid(tag)], context, cmd, *args)
303
+ self
304
+ end
305
+ #def tabbind_append(tag, context, cmd=Proc.new, *args)
306
+ # _bind_append([path, "bind", tagid(tag)], context, cmd, *args)
307
+ # self
308
+ #end
309
+ def tabbind_append(tag, context, *args)
310
+ # if args[0].kind_of?(Proc) || args[0].kind_of?(Method)
311
+ if TkComm._callback_entry?(args[0]) || !block_given?
312
+ cmd = args.shift
313
+ else
314
+ cmd = Proc.new
315
+ end
316
+ _bind_append([path, "bind", tagid(tag)], context, cmd, *args)
317
+ self
318
+ end
319
+ def tabbind_remove(tag, context)
320
+ _bind_remove([path, "bind", tagid(tag)], context)
321
+ self
322
+ end
323
+ def tabbindinfo(tag, context=nil)
324
+ _bindinfo([path, "bind", tagid(tag)], context)
325
+ end
326
+
327
+ def delete(first, last=None)
328
+ tk_send('delete', tagindex(first), tagindex(last))
329
+ if first.kind_of?(Tk::BLT::Tabset::Tab)
330
+ TabID_TBL.mutex.synchronize{
331
+ TabID_TBL[@path].delete(first.id)
332
+ }
333
+ end
334
+ # middle tabs of the range are unknown
335
+ if last.kind_of?(Tk::BLT::Tabset::Tab)
336
+ TabID_TBL.mutex.synchronize{
337
+ TabID_TBL[@path].delete(last.id)
338
+ }
339
+ end
340
+ self
341
+ end
342
+
343
+ def focus(index)
344
+ tk_send('focus', tagindex(index))
345
+ self
346
+ end
347
+
348
+ def get_tab(index)
349
+ if (idx = tk_send_without_enc('get', tagindex(index))).empty?
350
+ nil
351
+ else
352
+ Tk::BLT::Tabset::Tab.id2obj(self, idx)
353
+ end
354
+ end
355
+ def get_tabobj(index)
356
+ if (idx = tk_send_without_enc('get', tagindex(index))).empty?
357
+ nil
358
+ else
359
+ Tk::BLT::Tabset::Tab.new(self, nil, name, {})
360
+ end
361
+ end
362
+
363
+ def index(str)
364
+ num_or_str(tk_send('index', str))
365
+ end
366
+ def index_name(tab)
367
+ num_or_str(tk_send('index', '-name', tagid(tab)))
368
+ end
369
+
370
+ def insert(pos, tab, keys={})
371
+ pos = 'end' if pos.nil?
372
+ Tk::BLT::Tabset::Tab.new(self, tagindex(pos), tagid(tab), keys)
373
+ end
374
+ def insert_tabs(pos, *tabs)
375
+ pos = 'end' if pos.nil?
376
+ if tabs[-1].kind_of?(Hash)
377
+ keys = tabs.pop
378
+ else
379
+ keys = {}
380
+ end
381
+ fail ArgumentError, 'no tabs is given' if tabs.empty?
382
+ tabs.map!{|tab| tagid(tab)}
383
+ tk_send('insert', tagindex(pos), *(tabs + [keys]))
384
+ tabs.collect{|tab| Tk::BLT::Tabset::Tab.new(self, nil, tagid(tab))}
385
+ end
386
+
387
+ def invoke(index)
388
+ tk_send('invoke', tagindex(index))
389
+ end
390
+
391
+ def move_before(index, base_idx)
392
+ tk_send('move', tagindex(index), 'before', tagindex(base_idx))
393
+ self
394
+ end
395
+ def move_after(index, base_idx)
396
+ tk_send('move', tagindex(index), 'after', tagindex(base_idx))
397
+ self
398
+ end
399
+
400
+ def nearest(x, y)
401
+ Tk::BLT::Tabset::Tab.id2obj(self, num_or_str(tk_send_without_enc('nearest', x, y)))
402
+ end
403
+
404
+ def perforation_activate(mode)
405
+ tk_send('perforation', 'activate', mode)
406
+ self
407
+ end
408
+ def perforation_highlight(index, *args)
409
+ if args.empty?
410
+ # index --> mode
411
+ tk_send('perforation', 'highlight', index)
412
+ elsif args.size == 1
413
+ # args[0] --> mode
414
+ tk_send('perforation', 'highlight', tagindex(index), args[0])
415
+ else # Error: call to get Tcl's error message
416
+ tk_send('perforation', 'highlight', tagindex(index), *args)
417
+ end
418
+ self
419
+ end
420
+ def perforation_invoke(index=nil)
421
+ if index
422
+ tk_send('perforation', 'invoke', tagindex(index))
423
+ else
424
+ tk_send('perforation', 'invoke')
425
+ end
426
+ end
427
+
428
+ def scan_mark(x, y)
429
+ tk_send_without_enc('scan', 'mark', x, y)
430
+ self
431
+ end
432
+ def scan_dragto(x, y)
433
+ tk_send_without_enc('scan', 'dragto', x, y)
434
+ self
435
+ end
436
+
437
+ def see(index)
438
+ tk_send('see', tagindex(index))
439
+ self
440
+ end
441
+
442
+ def size()
443
+ number(tk_send_without_enc('size'))
444
+ end
445
+
446
+ def select(index)
447
+ tk_send('select', tagindex(index))
448
+ self
449
+ end
450
+
451
+ def tab_dockall
452
+ tk_send('tab', 'dockall')
453
+ self
454
+ end
455
+
456
+ def tab_names(pat=None)
457
+ simplelist(tk_send('tab', 'names', pat)).collect{|name|
458
+ Tk::BLT::Tabset::Tab.id2obj(self, name)
459
+ }
460
+ end
461
+
462
+ def tab_objs(pat=None)
463
+ simplelist(tk_send('tab', 'names', pat)).collect{|name|
464
+ Tk::BLT::Tabset::Tab.new(self, nil, name, {})
465
+ }
466
+ end
467
+
468
+ def tab_ids(pat=None)
469
+ simplelist(tk_send('tab', 'names', pat))
470
+ end
471
+
472
+ def tab_pageheight
473
+ number(tk_send('tab', 'pageheight'))
474
+ end
475
+
476
+ def tab_pagewidth
477
+ number(tk_send('tab', 'pagewidth'))
478
+ end
479
+
480
+ def tab_tearoff(index, parent=None)
481
+ window(tk_send('tab', 'tearoff', tagindex(index), parent))
482
+ end
483
+
484
+ def xscrollcommand(cmd=Proc.new)
485
+ configure_cmd 'scrollcommand', cmd
486
+ self
487
+ end
488
+ alias scrollcommand xscrollcommand
489
+
490
+ def xview(*index)
491
+ if index.empty?
492
+ list(tk_send_without_enc('view'))
493
+ else
494
+ tk_send_without_enc('view', *index)
495
+ self
496
+ end
497
+ end
498
+ alias view xview
499
+ alias view_moveto xview_moveto
500
+ alias view_scroll xview_scroll
501
+
502
+ alias scrollbar xscrollbar
503
+ end
504
+ end