Pratt 1.5.6

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 (283) hide show
  1. data/.exrc +61 -0
  2. data/.gitignore +4 -0
  3. data/History.txt +6 -0
  4. data/Manifest.txt +46 -0
  5. data/Pratt.gemspec +351 -0
  6. data/README.txt +66 -0
  7. data/Rakefile +85 -0
  8. data/TODO +54 -0
  9. data/VERSION +1 -0
  10. data/bin/pratt.rb +13 -0
  11. data/config.rb +34 -0
  12. data/lib/pratt.rb +527 -0
  13. data/lib/pratt/array.rb +11 -0
  14. data/lib/pratt/string.rb +18 -0
  15. data/models/app.rb +40 -0
  16. data/models/customer.rb +24 -0
  17. data/models/payment.rb +22 -0
  18. data/models/pratt.rb +19 -0
  19. data/models/project.rb +82 -0
  20. data/models/whence.rb +70 -0
  21. data/pkgs/tile-0.8.2.tar.gz +0 -0
  22. data/pkgs/tile-0.8.2/ANNOUNCE.txt +95 -0
  23. data/pkgs/tile-0.8.2/ChangeLog +4651 -0
  24. data/pkgs/tile-0.8.2/Makefile +250 -0
  25. data/pkgs/tile-0.8.2/Makefile.in +250 -0
  26. data/pkgs/tile-0.8.2/README.txt +86 -0
  27. data/pkgs/tile-0.8.2/aclocal.m4 +2 -0
  28. data/pkgs/tile-0.8.2/altTheme.o +0 -0
  29. data/pkgs/tile-0.8.2/blink.o +0 -0
  30. data/pkgs/tile-0.8.2/button.o +0 -0
  31. data/pkgs/tile-0.8.2/cache.o +0 -0
  32. data/pkgs/tile-0.8.2/clamTheme.o +0 -0
  33. data/pkgs/tile-0.8.2/classicTheme.o +0 -0
  34. data/pkgs/tile-0.8.2/config.log +1330 -0
  35. data/pkgs/tile-0.8.2/config.status +795 -0
  36. data/pkgs/tile-0.8.2/configure +15248 -0
  37. data/pkgs/tile-0.8.2/configure.in +89 -0
  38. data/pkgs/tile-0.8.2/demos/autocomplete.tcl +59 -0
  39. data/pkgs/tile-0.8.2/demos/demo.tcl +870 -0
  40. data/pkgs/tile-0.8.2/demos/dirbrowser.tcl +167 -0
  41. data/pkgs/tile-0.8.2/demos/dlgtest.tcl +97 -0
  42. data/pkgs/tile-0.8.2/demos/iconlib.tcl +110 -0
  43. data/pkgs/tile-0.8.2/demos/repeater.tcl +117 -0
  44. data/pkgs/tile-0.8.2/demos/toolbutton.tcl +101 -0
  45. data/pkgs/tile-0.8.2/doc/Geometry.3 +230 -0
  46. data/pkgs/tile-0.8.2/doc/INDEX.MAP +153 -0
  47. data/pkgs/tile-0.8.2/doc/Makefile +36 -0
  48. data/pkgs/tile-0.8.2/doc/TILE.XML +45 -0
  49. data/pkgs/tile-0.8.2/doc/Theme.3 +34 -0
  50. data/pkgs/tile-0.8.2/doc/button.n +75 -0
  51. data/pkgs/tile-0.8.2/doc/checkbutton.n +61 -0
  52. data/pkgs/tile-0.8.2/doc/combobox.n +98 -0
  53. data/pkgs/tile-0.8.2/doc/converting.txt +97 -0
  54. data/pkgs/tile-0.8.2/doc/dialog.n +122 -0
  55. data/pkgs/tile-0.8.2/doc/entry.n +438 -0
  56. data/pkgs/tile-0.8.2/doc/frame.n +43 -0
  57. data/pkgs/tile-0.8.2/doc/html/Geometry.html +304 -0
  58. data/pkgs/tile-0.8.2/doc/html/Theme.html +48 -0
  59. data/pkgs/tile-0.8.2/doc/html/button.html +120 -0
  60. data/pkgs/tile-0.8.2/doc/html/category-index.html +18 -0
  61. data/pkgs/tile-0.8.2/doc/html/checkbutton.html +94 -0
  62. data/pkgs/tile-0.8.2/doc/html/combobox.html +164 -0
  63. data/pkgs/tile-0.8.2/doc/html/converting.txt +97 -0
  64. data/pkgs/tile-0.8.2/doc/html/dialog.html +159 -0
  65. data/pkgs/tile-0.8.2/doc/html/entry.html +613 -0
  66. data/pkgs/tile-0.8.2/doc/html/frame.html +76 -0
  67. data/pkgs/tile-0.8.2/doc/html/image.html +100 -0
  68. data/pkgs/tile-0.8.2/doc/html/index.html +25 -0
  69. data/pkgs/tile-0.8.2/doc/html/keyword-index.html +228 -0
  70. data/pkgs/tile-0.8.2/doc/html/label.html +133 -0
  71. data/pkgs/tile-0.8.2/doc/html/labelframe.html +91 -0
  72. data/pkgs/tile-0.8.2/doc/html/manpage.css +212 -0
  73. data/pkgs/tile-0.8.2/doc/html/menubutton.html +63 -0
  74. data/pkgs/tile-0.8.2/doc/html/notebook.html +280 -0
  75. data/pkgs/tile-0.8.2/doc/html/paned.html +149 -0
  76. data/pkgs/tile-0.8.2/doc/html/progressbar.html +138 -0
  77. data/pkgs/tile-0.8.2/doc/html/radiobutton.html +89 -0
  78. data/pkgs/tile-0.8.2/doc/html/scrollbar.html +221 -0
  79. data/pkgs/tile-0.8.2/doc/html/separator.html +48 -0
  80. data/pkgs/tile-0.8.2/doc/html/sizegrip.html +62 -0
  81. data/pkgs/tile-0.8.2/doc/html/style.html +172 -0
  82. data/pkgs/tile-0.8.2/doc/html/tile-intro.html +164 -0
  83. data/pkgs/tile-0.8.2/doc/html/treeview.html +634 -0
  84. data/pkgs/tile-0.8.2/doc/html/widget.html +342 -0
  85. data/pkgs/tile-0.8.2/doc/image.n +81 -0
  86. data/pkgs/tile-0.8.2/doc/internals.txt +409 -0
  87. data/pkgs/tile-0.8.2/doc/label.n +75 -0
  88. data/pkgs/tile-0.8.2/doc/labelframe.n +64 -0
  89. data/pkgs/tile-0.8.2/doc/man.macros +239 -0
  90. data/pkgs/tile-0.8.2/doc/menubutton.n +41 -0
  91. data/pkgs/tile-0.8.2/doc/notebook.n +188 -0
  92. data/pkgs/tile-0.8.2/doc/paned.n +95 -0
  93. data/pkgs/tile-0.8.2/doc/progressbar.n +79 -0
  94. data/pkgs/tile-0.8.2/doc/radiobutton.n +57 -0
  95. data/pkgs/tile-0.8.2/doc/scrollbar.n +160 -0
  96. data/pkgs/tile-0.8.2/doc/separator.n +30 -0
  97. data/pkgs/tile-0.8.2/doc/sizegrip.n +53 -0
  98. data/pkgs/tile-0.8.2/doc/style.n +119 -0
  99. data/pkgs/tile-0.8.2/doc/tile-intro.n +165 -0
  100. data/pkgs/tile-0.8.2/doc/tmml.options +4 -0
  101. data/pkgs/tile-0.8.2/doc/treeview.n +415 -0
  102. data/pkgs/tile-0.8.2/doc/widget.n +227 -0
  103. data/pkgs/tile-0.8.2/doc/xml/Geometry.tmml +379 -0
  104. data/pkgs/tile-0.8.2/doc/xml/INDEX.MAP +153 -0
  105. data/pkgs/tile-0.8.2/doc/xml/Theme.tmml +63 -0
  106. data/pkgs/tile-0.8.2/doc/xml/button.tmml +134 -0
  107. data/pkgs/tile-0.8.2/doc/xml/checkbutton.tmml +119 -0
  108. data/pkgs/tile-0.8.2/doc/xml/combobox.tmml +184 -0
  109. data/pkgs/tile-0.8.2/doc/xml/dialog.tmml +195 -0
  110. data/pkgs/tile-0.8.2/doc/xml/entry.tmml +630 -0
  111. data/pkgs/tile-0.8.2/doc/xml/frame.tmml +98 -0
  112. data/pkgs/tile-0.8.2/doc/xml/image.tmml +101 -0
  113. data/pkgs/tile-0.8.2/doc/xml/label.tmml +154 -0
  114. data/pkgs/tile-0.8.2/doc/xml/labelframe.tmml +116 -0
  115. data/pkgs/tile-0.8.2/doc/xml/menubutton.tmml +80 -0
  116. data/pkgs/tile-0.8.2/doc/xml/notebook.tmml +306 -0
  117. data/pkgs/tile-0.8.2/doc/xml/paned.tmml +154 -0
  118. data/pkgs/tile-0.8.2/doc/xml/progressbar.tmml +151 -0
  119. data/pkgs/tile-0.8.2/doc/xml/radiobutton.tmml +109 -0
  120. data/pkgs/tile-0.8.2/doc/xml/scrollbar.tmml +233 -0
  121. data/pkgs/tile-0.8.2/doc/xml/separator.tmml +59 -0
  122. data/pkgs/tile-0.8.2/doc/xml/sizegrip.tmml +82 -0
  123. data/pkgs/tile-0.8.2/doc/xml/style.tmml +171 -0
  124. data/pkgs/tile-0.8.2/doc/xml/tile-intro.tmml +192 -0
  125. data/pkgs/tile-0.8.2/doc/xml/treeview.tmml +604 -0
  126. data/pkgs/tile-0.8.2/doc/xml/widget.tmml +372 -0
  127. data/pkgs/tile-0.8.2/entry.o +0 -0
  128. data/pkgs/tile-0.8.2/frame.o +0 -0
  129. data/pkgs/tile-0.8.2/generic/Makefile.in +221 -0
  130. data/pkgs/tile-0.8.2/generic/TODO +493 -0
  131. data/pkgs/tile-0.8.2/generic/altTheme.c +1172 -0
  132. data/pkgs/tile-0.8.2/generic/blink.c +168 -0
  133. data/pkgs/tile-0.8.2/generic/button.c +858 -0
  134. data/pkgs/tile-0.8.2/generic/cache.c +354 -0
  135. data/pkgs/tile-0.8.2/generic/clamTheme.c +974 -0
  136. data/pkgs/tile-0.8.2/generic/classicTheme.c +518 -0
  137. data/pkgs/tile-0.8.2/generic/configure +10334 -0
  138. data/pkgs/tile-0.8.2/generic/configure.in +100 -0
  139. data/pkgs/tile-0.8.2/generic/entry.c +1922 -0
  140. data/pkgs/tile-0.8.2/generic/frame.c +648 -0
  141. data/pkgs/tile-0.8.2/generic/gunk.h +44 -0
  142. data/pkgs/tile-0.8.2/generic/image.c +416 -0
  143. data/pkgs/tile-0.8.2/generic/label.c +663 -0
  144. data/pkgs/tile-0.8.2/generic/layout.c +1215 -0
  145. data/pkgs/tile-0.8.2/generic/manager.c +554 -0
  146. data/pkgs/tile-0.8.2/generic/manager.h +91 -0
  147. data/pkgs/tile-0.8.2/generic/notebook.c +1380 -0
  148. data/pkgs/tile-0.8.2/generic/paned.c +958 -0
  149. data/pkgs/tile-0.8.2/generic/pkgIndex.tcl.in +7 -0
  150. data/pkgs/tile-0.8.2/generic/progress.c +549 -0
  151. data/pkgs/tile-0.8.2/generic/scale.c +526 -0
  152. data/pkgs/tile-0.8.2/generic/scroll.c +253 -0
  153. data/pkgs/tile-0.8.2/generic/scrollbar.c +346 -0
  154. data/pkgs/tile-0.8.2/generic/separator.c +132 -0
  155. data/pkgs/tile-0.8.2/generic/square.c +306 -0
  156. data/pkgs/tile-0.8.2/generic/tagset.c +147 -0
  157. data/pkgs/tile-0.8.2/generic/tile.c +296 -0
  158. data/pkgs/tile-0.8.2/generic/tkElements.c +1280 -0
  159. data/pkgs/tile-0.8.2/generic/tkTheme.c +1708 -0
  160. data/pkgs/tile-0.8.2/generic/tkTheme.h +419 -0
  161. data/pkgs/tile-0.8.2/generic/tkThemeInt.h +45 -0
  162. data/pkgs/tile-0.8.2/generic/tkstate.c +268 -0
  163. data/pkgs/tile-0.8.2/generic/trace.c +145 -0
  164. data/pkgs/tile-0.8.2/generic/track.c +174 -0
  165. data/pkgs/tile-0.8.2/generic/treeview.c +3211 -0
  166. data/pkgs/tile-0.8.2/generic/ttk.decls +154 -0
  167. data/pkgs/tile-0.8.2/generic/ttkDecls.h +340 -0
  168. data/pkgs/tile-0.8.2/generic/ttkStubInit.c +61 -0
  169. data/pkgs/tile-0.8.2/generic/ttkStubLib.c +70 -0
  170. data/pkgs/tile-0.8.2/generic/widget.c +785 -0
  171. data/pkgs/tile-0.8.2/generic/widget.h +263 -0
  172. data/pkgs/tile-0.8.2/image.o +0 -0
  173. data/pkgs/tile-0.8.2/label.o +0 -0
  174. data/pkgs/tile-0.8.2/layout.o +0 -0
  175. data/pkgs/tile-0.8.2/library/altTheme.tcl +101 -0
  176. data/pkgs/tile-0.8.2/library/aquaTheme.tcl +62 -0
  177. data/pkgs/tile-0.8.2/library/button.tcl +85 -0
  178. data/pkgs/tile-0.8.2/library/clamTheme.tcl +139 -0
  179. data/pkgs/tile-0.8.2/library/classicTheme.tcl +108 -0
  180. data/pkgs/tile-0.8.2/library/combobox.tcl +439 -0
  181. data/pkgs/tile-0.8.2/library/cursors.tcl +36 -0
  182. data/pkgs/tile-0.8.2/library/defaults.tcl +118 -0
  183. data/pkgs/tile-0.8.2/library/dialog.tcl +274 -0
  184. data/pkgs/tile-0.8.2/library/entry.tcl +580 -0
  185. data/pkgs/tile-0.8.2/library/fonts.tcl +153 -0
  186. data/pkgs/tile-0.8.2/library/icons.tcl +105 -0
  187. data/pkgs/tile-0.8.2/library/keynav.tcl +192 -0
  188. data/pkgs/tile-0.8.2/library/menubutton.tcl +171 -0
  189. data/pkgs/tile-0.8.2/library/notebook.tcl +193 -0
  190. data/pkgs/tile-0.8.2/library/paned.tcl +87 -0
  191. data/pkgs/tile-0.8.2/library/progress.tcl +51 -0
  192. data/pkgs/tile-0.8.2/library/scale.tcl +54 -0
  193. data/pkgs/tile-0.8.2/library/scrollbar.tcl +125 -0
  194. data/pkgs/tile-0.8.2/library/sizegrip.tcl +77 -0
  195. data/pkgs/tile-0.8.2/library/tile.tcl +211 -0
  196. data/pkgs/tile-0.8.2/library/treeview.tcl +382 -0
  197. data/pkgs/tile-0.8.2/library/utils.tcl +254 -0
  198. data/pkgs/tile-0.8.2/library/winTheme.tcl +77 -0
  199. data/pkgs/tile-0.8.2/library/xpTheme.tcl +63 -0
  200. data/pkgs/tile-0.8.2/libtile0.8.2.so +0 -0
  201. data/pkgs/tile-0.8.2/libttkstub.a +0 -0
  202. data/pkgs/tile-0.8.2/license.terms +24 -0
  203. data/pkgs/tile-0.8.2/macosx/aquaTheme.c +1076 -0
  204. data/pkgs/tile-0.8.2/manager.o +0 -0
  205. data/pkgs/tile-0.8.2/notebook.o +0 -0
  206. data/pkgs/tile-0.8.2/paned.o +0 -0
  207. data/pkgs/tile-0.8.2/pkgIndex.tcl +3 -0
  208. data/pkgs/tile-0.8.2/progress.o +0 -0
  209. data/pkgs/tile-0.8.2/scale.o +0 -0
  210. data/pkgs/tile-0.8.2/scroll.o +0 -0
  211. data/pkgs/tile-0.8.2/scrollbar.o +0 -0
  212. data/pkgs/tile-0.8.2/separator.o +0 -0
  213. data/pkgs/tile-0.8.2/tagset.o +0 -0
  214. data/pkgs/tile-0.8.2/tclconfig/install-sh +119 -0
  215. data/pkgs/tile-0.8.2/tclconfig/tcl.m4 +4069 -0
  216. data/pkgs/tile-0.8.2/tclconfig/teax.m4 +109 -0
  217. data/pkgs/tile-0.8.2/tests/all.tcl +18 -0
  218. data/pkgs/tile-0.8.2/tests/bwidget.test +103 -0
  219. data/pkgs/tile-0.8.2/tests/cbtest.tcl +125 -0
  220. data/pkgs/tile-0.8.2/tests/combobox.test +51 -0
  221. data/pkgs/tile-0.8.2/tests/compound.tcl +92 -0
  222. data/pkgs/tile-0.8.2/tests/entry.test +285 -0
  223. data/pkgs/tile-0.8.2/tests/entrytest.tcl +78 -0
  224. data/pkgs/tile-0.8.2/tests/image.test +94 -0
  225. data/pkgs/tile-0.8.2/tests/labelframe.tcl +41 -0
  226. data/pkgs/tile-0.8.2/tests/labelframe.test +137 -0
  227. data/pkgs/tile-0.8.2/tests/layout.test +33 -0
  228. data/pkgs/tile-0.8.2/tests/misc.test +35 -0
  229. data/pkgs/tile-0.8.2/tests/nbtest.tcl +66 -0
  230. data/pkgs/tile-0.8.2/tests/notebook.test +500 -0
  231. data/pkgs/tile-0.8.2/tests/paned.test +298 -0
  232. data/pkgs/tile-0.8.2/tests/progress.test +92 -0
  233. data/pkgs/tile-0.8.2/tests/pwtest.tcl +90 -0
  234. data/pkgs/tile-0.8.2/tests/sbtest.tcl +79 -0
  235. data/pkgs/tile-0.8.2/tests/scrollbar.test +77 -0
  236. data/pkgs/tile-0.8.2/tests/sgtest.tcl +52 -0
  237. data/pkgs/tile-0.8.2/tests/testutils.tcl +20 -0
  238. data/pkgs/tile-0.8.2/tests/tile.test +674 -0
  239. data/pkgs/tile-0.8.2/tests/treetags.test +78 -0
  240. data/pkgs/tile-0.8.2/tests/treeview.test +563 -0
  241. data/pkgs/tile-0.8.2/tests/tvtest.tcl +332 -0
  242. data/pkgs/tile-0.8.2/tests/validate.test +278 -0
  243. data/pkgs/tile-0.8.2/tile.o +0 -0
  244. data/pkgs/tile-0.8.2/tkElements.o +0 -0
  245. data/pkgs/tile-0.8.2/tkTheme.o +0 -0
  246. data/pkgs/tile-0.8.2/tkstate.o +0 -0
  247. data/pkgs/tile-0.8.2/tools/genStubs.tcl +861 -0
  248. data/pkgs/tile-0.8.2/trace.o +0 -0
  249. data/pkgs/tile-0.8.2/track.o +0 -0
  250. data/pkgs/tile-0.8.2/treeview.o +0 -0
  251. data/pkgs/tile-0.8.2/ttkStubInit.o +0 -0
  252. data/pkgs/tile-0.8.2/ttkStubLib.o +0 -0
  253. data/pkgs/tile-0.8.2/widget.o +0 -0
  254. data/pkgs/tile-0.8.2/win/Tile.dsp +261 -0
  255. data/pkgs/tile-0.8.2/win/makefile.vc +527 -0
  256. data/pkgs/tile-0.8.2/win/monitor.c +164 -0
  257. data/pkgs/tile-0.8.2/win/nmakehlp.c +483 -0
  258. data/pkgs/tile-0.8.2/win/rules.vc +512 -0
  259. data/pkgs/tile-0.8.2/win/tile.rc +40 -0
  260. data/pkgs/tile-0.8.2/win/winTheme.c +734 -0
  261. data/pkgs/tile-0.8.2/win/xpTheme.c +1029 -0
  262. data/spec/app_spec.rb +48 -0
  263. data/spec/customer_spec.rb +31 -0
  264. data/spec/fixtures/graph.expectation +18 -0
  265. data/spec/payment_spec.rb +19 -0
  266. data/spec/pratt_spec.rb +148 -0
  267. data/spec/project_spec.rb +163 -0
  268. data/spec/rcov.opts +0 -0
  269. data/spec/spec.opts +1 -0
  270. data/spec/spec_helper.rb +21 -0
  271. data/spec/whence_spec.rb +54 -0
  272. data/tasks/pratt.rb +84 -0
  273. data/templates/model.eruby +12 -0
  274. data/templates/spec.eruby +8 -0
  275. data/views/env.rb +22 -0
  276. data/views/graph.eruby +20 -0
  277. data/views/invoice.eruby +148 -0
  278. data/views/main.rb +92 -0
  279. data/views/pid.eruby +3 -0
  280. data/views/pop.rb +94 -0
  281. data/views/pop2.rb +75 -0
  282. data/views/raw.eruby +11 -0
  283. metadata +390 -0
@@ -0,0 +1,382 @@
1
+ # treeview.tcl,v 1.22 2006/12/18 15:05:59 jenglish Exp
2
+ #
3
+ # ttk::treeview widget bindings and utilities.
4
+ #
5
+
6
+ namespace eval ttk::treeview {
7
+ variable State
8
+
9
+ # Enter/Leave/Motion
10
+ #
11
+ set State(activeWidget) {}
12
+ set State(activeHeading) {}
13
+
14
+ # Press/drag/release:
15
+ #
16
+ set State(pressMode) none
17
+ set State(pressX) 0
18
+
19
+ # For pressMode == "resize"
20
+ set State(resizeColumn) #0
21
+
22
+ # For pressmode == "heading"
23
+ set State(heading) {}
24
+
25
+ # Provide [lassign] if not already present
26
+ # (@@@ TODO: check if this is still needed after horrible-identify purge)
27
+ #
28
+ if {![llength [info commands lassign]]} {
29
+ proc lassign {vals args} {
30
+ uplevel 1 [list foreach $args $vals break]
31
+ }
32
+ }
33
+ }
34
+
35
+ ### Widget bindings.
36
+ #
37
+
38
+ bind Treeview <Motion> { ttk::treeview::Motion %W %x %y }
39
+ bind Treeview <B1-Leave> { #nothing }
40
+ bind Treeview <Leave> { ttk::treeview::ActivateHeading {} {}}
41
+ bind Treeview <ButtonPress-1> { ttk::treeview::Press %W %x %y }
42
+ bind Treeview <Double-ButtonPress-1> { ttk::treeview::DoubleClick %W %x %y }
43
+ bind Treeview <ButtonRelease-1> { ttk::treeview::Release %W %x %y }
44
+ bind Treeview <B1-Motion> { ttk::treeview::Drag %W %x %y }
45
+ bind Treeview <KeyPress-Up> { ttk::treeview::Keynav %W up }
46
+ bind Treeview <KeyPress-Down> { ttk::treeview::Keynav %W down }
47
+ bind Treeview <KeyPress-Right> { ttk::treeview::Keynav %W right }
48
+ bind Treeview <KeyPress-Left> { ttk::treeview::Keynav %W left }
49
+ bind Treeview <KeyPress-Prior> { %W yview scroll -1 pages }
50
+ bind Treeview <KeyPress-Next> { %W yview scroll 1 pages }
51
+ bind Treeview <KeyPress-Return> { ttk::treeview::ToggleFocus %W }
52
+ bind Treeview <KeyPress-space> { ttk::treeview::ToggleFocus %W }
53
+
54
+ bind Treeview <Shift-ButtonPress-1> \
55
+ { ttk::treeview::Select %W %x %y extend }
56
+ bind Treeview <Control-ButtonPress-1> \
57
+ { ttk::treeview::Select %W %x %y toggle }
58
+
59
+ # Standard mousewheel bindings:
60
+ #
61
+ bind Treeview <MouseWheel> { %W yview scroll [expr {- (%D / 120) * 4}] units }
62
+ if {[string equal "x11" [tk windowingsystem]]} {
63
+ bind Treeview <ButtonPress-4> { %W yview scroll -5 units }
64
+ bind Treeview <ButtonPress-5> { %W yview scroll 5 units }
65
+ }
66
+
67
+ ### Binding procedures.
68
+ #
69
+
70
+ ## Keynav -- Keyboard navigation
71
+ #
72
+ # @@@ TODO: verify/rewrite up and down code.
73
+ #
74
+ proc ttk::treeview::Keynav {w dir} {
75
+ set focus [$w focus]
76
+ if {$focus eq ""} { return }
77
+
78
+ switch -- $dir {
79
+ up {
80
+ if {[set up [$w prev $focus]] eq ""} {
81
+ set focus [$w parent $focus]
82
+ } else {
83
+ while {[$w item $up -open] && [llength [$w children $up]]} {
84
+ set up [lindex [$w children $up] end]
85
+ }
86
+ set focus $up
87
+ }
88
+ }
89
+ down {
90
+ if {[$w item $focus -open] && [llength [$w children $focus]]} {
91
+ set focus [lindex [$w children $focus] 0]
92
+ } else {
93
+ set up $focus
94
+ while {$up ne "" && [set down [$w next $up]] eq ""} {
95
+ set up [$w parent $up]
96
+ }
97
+ set focus $down
98
+ }
99
+ }
100
+ left {
101
+ if {[$w item $focus -open] && [llength [$w children $focus]]} {
102
+ CloseItem $w $focus
103
+ } else {
104
+ set focus [$w parent $focus]
105
+ }
106
+ }
107
+ right {
108
+ OpenItem $w $focus
109
+ }
110
+ }
111
+
112
+ if {$focus != {}} {
113
+ SelectOp $w $focus choose
114
+ }
115
+ }
116
+
117
+ ## Motion -- pointer motion binding.
118
+ # Sets cursor, active element ...
119
+ #
120
+ proc ttk::treeview::Motion {w x y} {
121
+ variable ::ttk::Cursors
122
+ variable State
123
+
124
+ set cursor {}
125
+ set activeHeading {}
126
+
127
+ lassign [$w identify $x $y] what where detail
128
+ switch -- $what {
129
+ separator { set cursor $Cursors(hresize) }
130
+ heading { set activeHeading $where }
131
+ }
132
+
133
+ if {[$w cget -cursor] ne $cursor} {
134
+ $w configure -cursor $cursor
135
+ }
136
+ ActivateHeading $w $activeHeading
137
+ }
138
+
139
+ ## ActivateHeading -- track active heading element
140
+ #
141
+ proc ttk::treeview::ActivateHeading {w heading} {
142
+ variable State
143
+
144
+ if {$w != $State(activeWidget) || $heading != $State(activeHeading)} {
145
+ if {$State(activeHeading) != {}} {
146
+ $State(activeWidget) heading $State(activeHeading) state !active
147
+ }
148
+ if {$heading != {}} {
149
+ $w heading $heading state active
150
+ }
151
+ set State(activeHeading) $heading
152
+ set State(activeWidget) $w
153
+ }
154
+ }
155
+
156
+ ## Select $w $x $y $selectop
157
+ # Binding procedure for selection operations.
158
+ # See "Selection modes", below.
159
+ #
160
+ proc ttk::treeview::Select {w x y op} {
161
+ if {[set item [$w identify row $x $y]] ne "" } {
162
+ SelectOp $w $item $op
163
+ }
164
+ }
165
+
166
+ ## DoubleClick -- Double-ButtonPress-1 binding.
167
+ #
168
+ proc ttk::treeview::DoubleClick {w x y} {
169
+ if {[set row [$w identify row $x $y]] ne ""} {
170
+ Toggle $w $row
171
+ } else {
172
+ Press $w $x $y ;# perform single-click action
173
+ }
174
+ }
175
+
176
+ ## Press -- ButtonPress binding.
177
+ #
178
+ proc ttk::treeview::Press {w x y} {
179
+ lassign [$w identify $x $y] what where detail
180
+ focus $w ;# or: ClickToFocus?
181
+
182
+ switch -- $what {
183
+ nothing { }
184
+ heading { heading.press $w $where }
185
+ separator { resize.press $w $x $where }
186
+ cell -
187
+ row -
188
+ item { SelectOp $w $where choose }
189
+ }
190
+ if {$what eq "item" && [string match *indicator $detail]} {
191
+ Toggle $w $where
192
+ }
193
+ }
194
+
195
+ ## Drag -- B1-Motion binding
196
+ #
197
+ proc ttk::treeview::Drag {w x y} {
198
+ variable State
199
+ switch $State(pressMode) {
200
+ resize { resize.drag $w $x }
201
+ heading { heading.drag $w $x $y }
202
+ }
203
+ }
204
+
205
+ proc ttk::treeview::Release {w x y} {
206
+ variable State
207
+ switch $State(pressMode) {
208
+ resize { resize.release $w $x }
209
+ heading { heading.release $w }
210
+ }
211
+ set State(pressMode) none
212
+ Motion $w $x $y
213
+ }
214
+
215
+ ### Interactive column resizing.
216
+ #
217
+ proc ttk::treeview::resize.press {w x column} {
218
+ variable State
219
+ set State(pressMode) "resize"
220
+ set State(resizeColumn) $column
221
+ }
222
+
223
+ proc ttk::treeview::resize.drag {w x} {
224
+ variable State
225
+ $w drag $State(resizeColumn) $x
226
+ }
227
+
228
+ proc ttk::treeview::resize.release {w x} {
229
+ # no-op
230
+ }
231
+
232
+ ### Heading activation.
233
+ #
234
+
235
+ proc ttk::treeview::heading.press {w column} {
236
+ variable State
237
+ set State(pressMode) "heading"
238
+ set State(heading) $column
239
+ $w heading $column state pressed
240
+ }
241
+
242
+ proc ttk::treeview::heading.drag {w x y} {
243
+ variable State
244
+ lassign [$w identify $x $y] what where detail
245
+ if {$what eq "heading" && $where eq $State(heading)} {
246
+ $w heading $State(heading) state pressed
247
+ } else {
248
+ $w heading $State(heading) state !pressed
249
+ }
250
+ }
251
+
252
+ proc ttk::treeview::heading.release {w} {
253
+ variable State
254
+ if {[lsearch -exact [$w heading $State(heading) state] pressed] >= 0} {
255
+ after idle [$w heading $State(heading) -command]
256
+ }
257
+ $w heading $State(heading) state !pressed
258
+ }
259
+
260
+ ### Selection modes.
261
+ #
262
+
263
+ ## SelectOp $w $item [ choose | extend | toggle ] --
264
+ # Dispatch to appropriate selection operation
265
+ # depending on current value of -selectmode.
266
+ #
267
+ proc ttk::treeview::SelectOp {w item op} {
268
+ select.$op.[$w cget -selectmode] $w $item
269
+ }
270
+
271
+ ## -selectmode none:
272
+ #
273
+ proc ttk::treeview::select.choose.none {w item} { $w focus $item }
274
+ proc ttk::treeview::select.toggle.none {w item} { $w focus $item }
275
+ proc ttk::treeview::select.extend.none {w item} { $w focus $item }
276
+
277
+ ## -selectmode browse:
278
+ #
279
+ proc ttk::treeview::select.choose.browse {w item} { BrowseTo $w $item }
280
+ proc ttk::treeview::select.toggle.browse {w item} { BrowseTo $w $item }
281
+ proc ttk::treeview::select.extend.browse {w item} { BrowseTo $w $item }
282
+
283
+ ## -selectmode multiple:
284
+ #
285
+ proc ttk::treeview::select.choose.extended {w item} {
286
+ BrowseTo $w $item
287
+ }
288
+ proc ttk::treeview::select.toggle.extended {w item} {
289
+ $w selection toggle $item
290
+ }
291
+ proc ttk::treeview::select.extend.extended {w item} {
292
+ if {[set anchor [$w focus]] ne ""} {
293
+ $w selection set [between $w $anchor $item]
294
+ } else {
295
+ BrowseTo $item
296
+ }
297
+ }
298
+
299
+ ### Tree structure utilities.
300
+ #
301
+
302
+ ## between $tv $item1 $item2 --
303
+ # Returns a list of all items between $item1 and $item2,
304
+ # in preorder traversal order. $item1 and $item2 may be
305
+ # in either order.
306
+ #
307
+ # NOTES:
308
+ # This routine is O(N) in the size of the tree.
309
+ # There's probably a way to do this that's O(N) in the number
310
+ # of items returned, but I'm not clever enough to figure it out.
311
+ #
312
+ proc ttk::treeview::between {tv item1 item2} {
313
+ variable between [list]
314
+ variable selectingBetween 0
315
+ ScanBetween $tv $item1 $item2 {}
316
+ return $between
317
+ }
318
+
319
+ ## ScanBetween --
320
+ # Recursive worker routine for ttk::treeview::between
321
+ #
322
+ proc ttk::treeview::ScanBetween {tv item1 item2 item} {
323
+ variable between
324
+ variable selectingBetween
325
+
326
+ if {$item eq $item1 || $item eq $item2} {
327
+ lappend between $item
328
+ set selectingBetween [expr {!$selectingBetween}]
329
+ } elseif {$selectingBetween} {
330
+ lappend between $item
331
+ }
332
+ foreach child [$tv children $item] {
333
+ ScanBetween $tv $item1 $item2 $child
334
+ }
335
+ }
336
+
337
+ ### User interaction utilities.
338
+ #
339
+
340
+ ## OpenItem, CloseItem -- Set the open state of an item, generate event
341
+ #
342
+
343
+ proc ttk::treeview::OpenItem {w item} {
344
+ $w focus $item
345
+ event generate $w <<TreeviewOpen>>
346
+ $w item $item -open true
347
+ }
348
+
349
+ proc ttk::treeview::CloseItem {w item} {
350
+ $w item $item -open false
351
+ $w focus $item
352
+ event generate $w <<TreeviewClose>>
353
+ }
354
+
355
+ ## Toggle -- toggle opened/closed state of item
356
+ #
357
+ proc ttk::treeview::Toggle {w item} {
358
+ if {[$w item $item -open]} {
359
+ CloseItem $w $item
360
+ } else {
361
+ OpenItem $w $item
362
+ }
363
+ }
364
+
365
+ ## ToggleFocus -- toggle opened/closed state of focus item
366
+ #
367
+ proc ttk::treeview::ToggleFocus {w} {
368
+ set item [$w focus]
369
+ if {$item ne ""} {
370
+ Toggle $w $item
371
+ }
372
+ }
373
+
374
+ ## BrowseTo -- navigate to specified item; set focus and selection
375
+ #
376
+ proc ttk::treeview::BrowseTo {w item} {
377
+ $w see $item
378
+ $w focus $item
379
+ $w selection set [list $item]
380
+ }
381
+
382
+ #*EOF*
@@ -0,0 +1,254 @@
1
+ #
2
+ # utils.tcl,v 1.10 2007/10/22 03:21:25 jenglish Exp
3
+ #
4
+ # Utilities for widget implementations.
5
+ #
6
+
7
+ ### Focus management.
8
+ #
9
+
10
+ ## ttk::takefocus --
11
+ # This is the default value of the "-takefocus" option
12
+ # for widgets that participate in keyboard navigation.
13
+ #
14
+ # See also: tk::FocusOK
15
+ #
16
+ proc ttk::takefocus {w} {
17
+ expr {[$w instate !disabled] && [winfo viewable $w]}
18
+ }
19
+
20
+ ## ttk::traverseTo $w --
21
+ # Set the keyboard focus to the specified window.
22
+ #
23
+ proc ttk::traverseTo {w} {
24
+ set focus [focus]
25
+ if {$focus ne ""} {
26
+ event generate $focus <<TraverseOut>>
27
+ }
28
+ focus $w
29
+ event generate $w <<TraverseIn>>
30
+ }
31
+
32
+ ## ttk::clickToFocus $w --
33
+ # Utility routine, used in <ButtonPress-1> bindings --
34
+ # Assign keyboard focus to the specified widget if -takefocus is enabled.
35
+ #
36
+ proc ttk::clickToFocus {w} {
37
+ if {[ttk::takesFocus $w]} { focus $w }
38
+ }
39
+
40
+ ## ttk::takesFocus w --
41
+ # Test if the widget can take keyboard focus:
42
+ #
43
+ # + widget is viewable, AND:
44
+ # - if -takefocus is missing or empty, return 0, OR
45
+ # - if -takefocus is 0 or 1, return that value, OR
46
+ # - append the widget name to -takefocus and evaluate it
47
+ # as a script.
48
+ #
49
+ # See also: tk::FocusOK
50
+ #
51
+ # Note: This routine doesn't implement the same fallback heuristics
52
+ # as tk::FocusOK.
53
+ #
54
+ proc ttk::takesFocus {w} {
55
+
56
+ if {![winfo viewable $w]} { return 0 }
57
+
58
+ if {![catch {$w cget -takefocus} takefocus]} {
59
+ switch -- $takefocus {
60
+ 0 -
61
+ 1 { return $takefocus }
62
+ "" { return 0 }
63
+ default {
64
+ set value [uplevel #0 $takefocus [list $w]]
65
+ return [expr {$value eq 1}]
66
+ }
67
+ }
68
+ }
69
+
70
+ return 0
71
+ }
72
+
73
+ ## ttk::focusFirst $w --
74
+ # Return the first descendant of $w, in preorder traversal order,
75
+ # that can take keyboard focus, "" if none do.
76
+ #
77
+ # See also: tk_focusNext
78
+ #
79
+
80
+ proc ttk::focusFirst {w} {
81
+ if {[ttk::takesFocus $w]} {
82
+ return $w
83
+ }
84
+ foreach child [winfo children $w] {
85
+ if {[set c [ttk::focusFirst $child]] ne ""} {
86
+ return $c
87
+ }
88
+ }
89
+ return ""
90
+ }
91
+
92
+ ### Grabs.
93
+ #
94
+ # Rules:
95
+ # Each call to [grabWindow $w] or [globalGrab $w] must be
96
+ # matched with a call to [releaseGrab $w] in LIFO order.
97
+ #
98
+ # Do not call [grabWindow $w] for a window that currently
99
+ # appears on the grab stack.
100
+ #
101
+ # See #1239190 and #1411983 for more discussion.
102
+ #
103
+ namespace eval ttk {
104
+ variable Grab ;# map: window name -> grab token
105
+
106
+ # grab token details:
107
+ # Two-element list containing:
108
+ # 1) a script to evaluate to restore the previous grab (if any);
109
+ # 2) a script to evaluate to restore the focus (if any)
110
+ }
111
+
112
+ ## SaveGrab --
113
+ # Record current grab and focus windows.
114
+ #
115
+ proc ttk::SaveGrab {w} {
116
+ variable Grab
117
+
118
+ if {[info exists Grab($w)]} {
119
+ # $w is already on the grab stack.
120
+ # This should not happen, but bail out in case it does anyway:
121
+ #
122
+ return
123
+ }
124
+
125
+ set restoreGrab [set restoreFocus ""]
126
+
127
+ set grabbed [grab current $w]
128
+ if {[winfo exists $grabbed]} {
129
+ switch [grab status $grabbed] {
130
+ global { set restoreGrab [list grab -global $grabbed] }
131
+ local { set restoreGrab [list grab $grabbed] }
132
+ none { ;# grab window is really in a different interp }
133
+ }
134
+ }
135
+
136
+ set focus [focus]
137
+ if {$focus ne ""} {
138
+ set restoreFocus [list focus -force $focus]
139
+ }
140
+
141
+ set Grab($w) [list $restoreGrab $restoreFocus]
142
+ }
143
+
144
+ ## RestoreGrab --
145
+ # Restore previous grab and focus windows.
146
+ # If called more than once without an intervening [SaveGrab $w],
147
+ # does nothing.
148
+ #
149
+ proc ttk::RestoreGrab {w} {
150
+ variable Grab
151
+
152
+ if {![info exists Grab($w)]} { # Ignore
153
+ return;
154
+ }
155
+
156
+ # The previous grab/focus window may have been destroyed,
157
+ # unmapped, or some other abnormal condition; ignore any errors.
158
+ #
159
+ foreach script $Grab($w) {
160
+ catch $script
161
+ }
162
+
163
+ unset Grab($w)
164
+ }
165
+
166
+ ## ttk::grabWindow $w --
167
+ # Records the current focus and grab windows, sets an application-modal
168
+ # grab on window $w.
169
+ #
170
+ proc ttk::grabWindow {w} {
171
+ SaveGrab $w
172
+ grab $w
173
+ }
174
+
175
+ ## ttk::globalGrab $w --
176
+ # Same as grabWindow, but sets a global grab on $w.
177
+ #
178
+ proc ttk::globalGrab {w} {
179
+ SaveGrab $w
180
+ grab -global $w
181
+ }
182
+
183
+ ## ttk::releaseGrab --
184
+ # Release the grab previously set by [ttk::grabWindow]
185
+ # or [ttk::globalGrab].
186
+ #
187
+ proc ttk::releaseGrab {w} {
188
+ grab release $w
189
+ RestoreGrab $w
190
+ }
191
+
192
+ ### Auto-repeat.
193
+ #
194
+ # NOTE: repeating widgets do not have -repeatdelay
195
+ # or -repeatinterval resources as in standard Tk;
196
+ # instead a single set of settings is applied application-wide.
197
+ # (TODO: make this user-configurable)
198
+ #
199
+ # (@@@ Windows seems to use something like 500/50 milliseconds
200
+ # @@@ for -repeatdelay/-repeatinterval)
201
+ #
202
+
203
+ namespace eval ttk {
204
+ variable Repeat
205
+ array set Repeat {
206
+ delay 300
207
+ interval 100
208
+ timer {}
209
+ script {}
210
+ }
211
+ }
212
+
213
+ ## ttk::Repeatedly --
214
+ # Begin auto-repeat.
215
+ #
216
+ proc ttk::Repeatedly {args} {
217
+ variable Repeat
218
+ after cancel $Repeat(timer)
219
+ set script [uplevel 1 [list namespace code $args]]
220
+ set Repeat(script) $script
221
+ uplevel #0 $script
222
+ set Repeat(timer) [after $Repeat(delay) ttk::Repeat]
223
+ }
224
+
225
+ ## Repeat --
226
+ # Continue auto-repeat
227
+ #
228
+ proc ttk::Repeat {} {
229
+ variable Repeat
230
+ uplevel #0 $Repeat(script)
231
+ set Repeat(timer) [after $Repeat(interval) ttk::Repeat]
232
+ }
233
+
234
+ ## ttk::CancelRepeat --
235
+ # Halt auto-repeat.
236
+ #
237
+ proc ttk::CancelRepeat {} {
238
+ variable Repeat
239
+ after cancel $Repeat(timer)
240
+ }
241
+
242
+ ### Miscellaneous.
243
+ #
244
+
245
+ ## ttk::copyBindings $from $to --
246
+ # Utility routine; copies bindings from one bindtag onto another.
247
+ #
248
+ proc ttk::copyBindings {from to} {
249
+ foreach event [bind $from] {
250
+ bind $to $event [bind $from $event]
251
+ }
252
+ }
253
+
254
+ #*EOF*