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,77 @@
1
+ #
2
+ # winTheme.tcl,v 1.39 2007/11/18 18:09:26 jenglish Exp
3
+ #
4
+ # Settings for 'winnative' theme.
5
+ #
6
+
7
+ namespace eval ttk::theme::winnative {
8
+ ttk::style theme settings winnative {
9
+
10
+ ttk::style configure "." \
11
+ -background SystemButtonFace \
12
+ -foreground SystemWindowText \
13
+ -selectforeground SystemHighlightText \
14
+ -selectbackground SystemHighlight \
15
+ -troughcolor SystemScrollbar \
16
+ -font TkDefaultFont \
17
+ ;
18
+
19
+ ttk::style map "." -foreground [list disabled SystemGrayText] ;
20
+ ttk::style map "." -embossed [list disabled 1] ;
21
+
22
+ ttk::style configure TButton \
23
+ -anchor center -width -11 -relief raised -shiftrelief 1
24
+ ttk::style configure TCheckbutton -padding "2 4"
25
+ ttk::style configure TRadiobutton -padding "2 4"
26
+ ttk::style configure TMenubutton \
27
+ -padding "8 4" -arrowsize 3 -relief raised
28
+
29
+ ttk::style map TButton -relief {{!disabled pressed} sunken}
30
+
31
+ ttk::style configure TEntry \
32
+ -padding 2 -selectborderwidth 0 -insertwidth 1
33
+ ttk::style map TEntry \
34
+ -fieldbackground \
35
+ [list readonly SystemButtonFace disabled SystemButtonFace] \
36
+ -selectbackground [list !focus SystemWindow] \
37
+ -selectforeground [list !focus SystemWindowText] \
38
+ ;
39
+
40
+ ttk::style configure TCombobox -padding 2
41
+ ttk::style map TCombobox \
42
+ -selectbackground [list !focus SystemWindow] \
43
+ -selectforeground [list !focus SystemWindowText] \
44
+ -foreground [list {readonly focus} SystemHighlightText] \
45
+ -focusfill [list {readonly focus} SystemHighlight] \
46
+ ;
47
+
48
+ ttk::style configure TLabelframe -borderwidth 2 -relief groove
49
+
50
+ ttk::style configure Toolbutton -relief flat -padding {8 4}
51
+ ttk::style map Toolbutton -relief \
52
+ {disabled flat selected sunken pressed sunken active raised}
53
+
54
+ ttk::style configure TScale -groovewidth 4
55
+
56
+ ttk::style configure TNotebook -tabmargins {2 2 2 0}
57
+ ttk::style configure TNotebook.Tab -padding {3 1} -borderwidth 1
58
+ ttk::style map TNotebook.Tab -expand [list selected {2 2 2 0}]
59
+
60
+ # Treeview:
61
+ ttk::style configure Heading -font TkHeadingFont -relief raised
62
+ ttk::style configure Row -background SystemWindow
63
+ ttk::style configure Cell -background SystemWindow
64
+ ttk::style map Row \
65
+ -background [list selected SystemHighlight] \
66
+ -foreground [list selected SystemHighlightText] ;
67
+ ttk::style map Cell \
68
+ -background [list selected SystemHighlight] \
69
+ -foreground [list selected SystemHighlightText] ;
70
+ ttk::style map Item \
71
+ -background [list selected SystemHighlight] \
72
+ -foreground [list selected SystemHighlightText] ;
73
+
74
+ ttk::style configure TProgressbar \
75
+ -background SystemHighlight -borderwidth 0 ;
76
+ }
77
+ }
@@ -0,0 +1,63 @@
1
+ #
2
+ # xpTheme.tcl,v 1.39 2007/11/18 18:09:26 jenglish Exp
3
+ #
4
+ # Settings for 'xpnative' theme
5
+ #
6
+
7
+ namespace eval ttk::theme::xpnative {
8
+ ttk::style theme settings xpnative {
9
+
10
+ ttk::style configure . \
11
+ -background SystemButtonFace \
12
+ -foreground SystemWindowText \
13
+ -selectforeground SystemHighlightText \
14
+ -selectbackground SystemHighlight \
15
+ -font TkDefaultFont \
16
+ ;
17
+
18
+ ttk::style map "." \
19
+ -foreground [list disabled SystemGrayText] \
20
+ ;
21
+
22
+ ttk::style configure TButton -anchor center -padding {1 1} -width -11
23
+ ttk::style configure TRadiobutton -padding 2
24
+ ttk::style configure TCheckbutton -padding 2
25
+ ttk::style configure TMenubutton -padding {8 4}
26
+
27
+ ttk::style configure TNotebook -tabmargins {2 2 2 0}
28
+ ttk::style map TNotebook.Tab \
29
+ -expand [list selected {2 2 2 2}]
30
+
31
+ # Treeview:
32
+ ttk::style configure Heading -font TkHeadingFont
33
+ ttk::style configure Row -background SystemWindow
34
+ ttk::style configure Cell -background SystemWindow
35
+ ttk::style map Row \
36
+ -background [list selected SystemHighlight] \
37
+ -foreground [list selected SystemHighlightText] ;
38
+ ttk::style map Cell \
39
+ -background [list selected SystemHighlight] \
40
+ -foreground [list selected SystemHighlightText] ;
41
+ ttk::style map Item \
42
+ -background [list selected SystemHighlight] \
43
+ -foreground [list selected SystemHighlightText] ;
44
+
45
+ ttk::style configure TLabelframe -foreground "#0046d5"
46
+
47
+ # OR: -padding {3 3 3 6}, which some apps seem to use.
48
+ ttk::style configure TEntry -padding {2 2 2 4}
49
+ ttk::style map TEntry \
50
+ -selectbackground [list !focus SystemWindow] \
51
+ -selectforeground [list !focus SystemWindowText] \
52
+ ;
53
+ ttk::style configure TCombobox -padding 2
54
+ ttk::style map TCombobox \
55
+ -selectbackground [list !focus SystemWindow] \
56
+ -selectforeground [list !focus SystemWindowText] \
57
+ -foreground [list {readonly focus} SystemHighlightText] \
58
+ -focusfill [list {readonly focus} SystemHighlight] \
59
+ ;
60
+
61
+ ttk::style configure Toolbutton -padding {4 4}
62
+ }
63
+ }
@@ -0,0 +1,24 @@
1
+ LICENSE ("MIT-style")
2
+
3
+ This software is Copyright (C) 2003 Joe English and other parties.
4
+
5
+ The following terms apply to all files associated with this software
6
+ unless explicitly disclaimed in individual files.
7
+
8
+ The author(s) hereby grant permission to use, copy, modify, distribute,
9
+ and license this software and its documentation for any purpose, provided
10
+ that existing copyright notices are retained in all copies and that this
11
+ notice is included in any distributions. No written agreement,
12
+ license, or royalty fee is required for any of the authorized uses.
13
+ Modifications to this software may be copyrighted by their authors
14
+ and need not follow the licensing terms described here, provided that
15
+ the new terms are clearly indicated on the first page of each file where
16
+ they apply.
17
+
18
+ This program is distributed in the hope that it will be useful,
19
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ MERCHANTABILITY or FITNESS for a PARTICULAR PURPOSE. IN NO EVENT
21
+ shall the AUTHORS of THIS SOFTWARE be LIABLE to ANY PARTY for
22
+ DIRECT, INDIRECT, SPECIAL, INCIDENTAL, or CONSEQUENTIAL DAMAGES
23
+ arising out of the USE of THIS SOFTWARE and its DOCUMENTATION.
24
+
@@ -0,0 +1,1076 @@
1
+ /*
2
+ * aquaTheme.c,v 1.49 2007/12/06 17:58:02 jenglish Exp
3
+ *
4
+ * Tk theme engine for Mac OSX, using the Appearance Manager API.
5
+ *
6
+ * Copyright (c) 2004 Joe English
7
+ * Copyright (c) 2005 Neil Madden
8
+ * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net>
9
+ *
10
+ * See the file "license.terms" for information on usage and redistribution
11
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
12
+ *
13
+ * See also:
14
+ *
15
+ * <URL: http://developer.apple.com/documentation/Carbon/Reference/
16
+ * Appearance_Manager/appearance_manager/APIIndex.html >
17
+ *
18
+ * Notes:
19
+ * "Active" means different things in Mac and Tk terminology --
20
+ * On Aqua, widgets are "Active" if they belong to the foreground window,
21
+ * "Inactive" if they are in a background window.
22
+ * Tk uses the term "active" to mean that the mouse cursor
23
+ * is over a widget; aka "hover", "prelight", or "hot-tracked".
24
+ * Aqua doesn't use this kind of feedback.
25
+ *
26
+ * The QuickDraw/Carbon coordinate system is relative to the
27
+ * top-level window, not to the Tk_Window. BoxToRect()
28
+ * accounts for this.
29
+ */
30
+
31
+ #include <Carbon/Carbon.h>
32
+ #include <tk.h>
33
+ #include <tkInt.h>
34
+ #include <tkMacOSX.h>
35
+ #include <tkMacOSXInt.h>
36
+ #include "tkTheme.h"
37
+
38
+ /* Define a constant that was renamed for Mac OS X 10.4 */
39
+ #if MAC_OS_X_VERSION_MAX_ALLOWED < 1040
40
+ #define kThemeDisclosureTriangle kThemeDisclosureButton
41
+ #endif
42
+
43
+ #if !defined(BUILD_tile)
44
+ /*
45
+ * Use this version in the core:
46
+ */
47
+ #define BEGIN_DRAWING(d) { \
48
+ TkMacOSXDrawingContext dc; \
49
+ if (!TkMacOSXSetupDrawingContext((d), NULL, 0, &dc)) {return;}
50
+ #define END_DRAWING \
51
+ TkMacOSXRestoreDrawingContext(&dc); }
52
+ #else /* BUILD_tile */
53
+ /*
54
+ * TkMacOSXSetupDrawingContext is not available to extensions,
55
+ * need to do this the hard way in Tile:
56
+ */
57
+ #define BEGIN_DRAWING(d) { \
58
+ CGrafPtr saveWorld; GDHandle saveDevice; \
59
+ GetGWorld(&saveWorld, &saveDevice); \
60
+ SetGWorld(TkMacOSXGetDrawablePort(d), 0); \
61
+ TkMacOSXSetUpClippingRgn(d);
62
+ #define END_DRAWING \
63
+ SetGWorld(saveWorld,saveDevice); }
64
+ #endif /* defined(BUILD_TILE) */
65
+
66
+ /*----------------------------------------------------------------------
67
+ * +++ Utilities.
68
+ */
69
+
70
+ /*
71
+ * BoxToRect --
72
+ * Convert a Ttk_Box in Tk coordinates relative to the given Drawable
73
+ * to a native Rect relative to the containing port.
74
+ */
75
+ static inline Rect BoxToRect(Drawable d, Ttk_Box b)
76
+ {
77
+ MacDrawable *md = (MacDrawable*)d;
78
+ Rect rect;
79
+
80
+ rect.top = b.y + md->yOff;
81
+ rect.left = b.x + md->xOff;
82
+ rect.bottom = rect.top + b.height;
83
+ rect.right = rect.left + b.width;
84
+
85
+ return rect;
86
+ }
87
+
88
+ /*
89
+ * PatternOrigin --
90
+ * Compute brush pattern origin for a Drawable relative to a Tk_Window.
91
+ *
92
+ * Notes: This will only be nonzero if the Drawable is an off-screen pixmap.
93
+ * See also SF bug #1157739.
94
+ */
95
+ static Point PatternOrigin(Tk_Window tkwin, Drawable d)
96
+ {
97
+ MacDrawable *md = (MacDrawable*)d;
98
+ Rect bounds;
99
+ Point origin;
100
+
101
+ TkMacOSXWinBounds((TkWindow *) tkwin, &bounds);
102
+ origin.h = md->xOff - bounds.left;
103
+ origin.v = md->yOff - bounds.top;
104
+
105
+ return origin;
106
+ }
107
+
108
+ /*
109
+ * DontErase --
110
+ * No-op ThemeEraseProc, can be passed to DrawThemeButton &c.
111
+ */
112
+ static void DontErase(
113
+ const Rect *bounds, UInt32 eraseData, SInt16 depth, Boolean isColorDev)
114
+ { }
115
+
116
+ /*
117
+ * Table mapping Tk states to Appearance manager ThemeStates
118
+ */
119
+
120
+ static Ttk_StateTable ThemeStateTable[] = {
121
+ {kThemeStateUnavailable, TTK_STATE_DISABLED, 0},
122
+ {kThemeStatePressed, TTK_STATE_PRESSED, 0},
123
+ {kThemeStateInactive, TTK_STATE_BACKGROUND, 0},
124
+ {kThemeStateActive, 0, 0}
125
+ /* Others: Not sure what these are supposed to mean.
126
+ Up/Down have something to do with "little arrow" increment controls...
127
+ Dunno what a "Rollover" is.
128
+ NEM: Rollover is TTK_STATE_ACTIVE... but we don't handle that yet, by the
129
+ looks of things
130
+ {kThemeStateRollover, 0, 0},
131
+ {kThemeStateUnavailableInactive, 0, 0}
132
+ {kThemeStatePressedUp, 0, 0},
133
+ {kThemeStatePressedDown, 0, 0}
134
+ */
135
+ };
136
+
137
+ /*----------------------------------------------------------------------
138
+ * +++ Button element: Used for elements drawn with DrawThemeButton.
139
+ */
140
+
141
+ /*
142
+ * Extra margins to account for drop shadow.
143
+ */
144
+ static Ttk_Padding ButtonMargins = {2,2,2,2};
145
+
146
+ #define NoThemeMetric 0xFFFFFFFF
147
+
148
+ typedef struct {
149
+ ThemeButtonKind kind;
150
+ ThemeMetric heightMetric;
151
+ } ThemeButtonParms;
152
+
153
+ static ThemeButtonParms
154
+ PushButtonParms = { kThemePushButton, kThemeMetricPushButtonHeight },
155
+ CheckBoxParms = { kThemeCheckBox, kThemeMetricCheckBoxHeight },
156
+ RadioButtonParms = { kThemeRadioButton, kThemeMetricRadioButtonHeight },
157
+ BevelButtonParms = { kThemeBevelButton, NoThemeMetric },
158
+ PopupButtonParms = { kThemePopupButton, kThemeMetricPopupButtonHeight },
159
+ DisclosureParms = { kThemeDisclosureButton, kThemeMetricDisclosureTriangleHeight },
160
+ ListHeaderParms = { kThemeListHeaderButton, kThemeMetricListHeaderHeight };
161
+
162
+ static Ttk_StateTable ButtonValueTable[] = {
163
+ { kThemeButtonMixed, TTK_STATE_ALTERNATE, 0 },
164
+ { kThemeButtonOn, TTK_STATE_SELECTED, 0 },
165
+ { kThemeButtonOff, 0, 0 }
166
+ /* Others: kThemeDisclosureRight, kThemeDisclosureDown, kThemeDisclosureLeft */
167
+ };
168
+
169
+ static Ttk_StateTable ButtonAdornmentTable[] = {
170
+ { kThemeAdornmentDefault, TTK_STATE_ALTERNATE, 0 },
171
+ { kThemeAdornmentFocus, TTK_STATE_FOCUS, 0 },
172
+ { kThemeAdornmentNone, 0, 0 }
173
+ };
174
+
175
+ /*
176
+ * computeButtonDrawInfo --
177
+ * Fill in an appearance manager ThemeButtonDrawInfo record.
178
+ */
179
+ static ThemeButtonDrawInfo computeButtonDrawInfo(
180
+ ThemeButtonParms *parms, Ttk_State state)
181
+ {
182
+ ThemeButtonDrawInfo info;
183
+
184
+ info.state = Ttk_StateTableLookup(ThemeStateTable, state);
185
+ info.value = Ttk_StateTableLookup(ButtonValueTable, state);
186
+ info.adornment = Ttk_StateTableLookup(ButtonAdornmentTable, state);
187
+ return info;
188
+ }
189
+
190
+ static void ButtonElementSizeNoPadding(
191
+ void *clientData, void *elementRecord, Tk_Window tkwin,
192
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
193
+ {
194
+ ThemeButtonParms *parms = clientData;
195
+
196
+ if (parms->heightMetric != NoThemeMetric) {
197
+ SInt32 height;
198
+
199
+ GetThemeMetric(parms->heightMetric, &height);
200
+ *heightPtr = height;
201
+ }
202
+ }
203
+
204
+ static void ButtonElementSize(
205
+ void *clientData, void *elementRecord, Tk_Window tkwin,
206
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
207
+ {
208
+ ThemeButtonParms *parms = clientData;
209
+ ThemeButtonDrawInfo info = computeButtonDrawInfo(parms, 0);
210
+ static const Rect scratchBounds = {0, 0, 100, 100};
211
+ Rect contentBounds;
212
+
213
+ ButtonElementSizeNoPadding(
214
+ clientData, elementRecord, tkwin,
215
+ widthPtr, heightPtr, paddingPtr);
216
+
217
+ /*
218
+ * To compute internal padding, query the appearance manager
219
+ * for the content bounds of a dummy rectangle, then use
220
+ * the difference as the padding.
221
+ */
222
+ GetThemeButtonContentBounds(
223
+ &scratchBounds, parms->kind, &info, &contentBounds);
224
+
225
+ paddingPtr->left = contentBounds.left;
226
+ paddingPtr->top = contentBounds.top;
227
+ paddingPtr->right = scratchBounds.right - contentBounds.right + 1;
228
+ paddingPtr->bottom = scratchBounds.bottom - contentBounds.bottom;
229
+
230
+ /*
231
+ * Now add a little extra padding to account for drop shadows.
232
+ * @@@ SHOULD: call GetThemeButtonBackgroundBounds() instead.
233
+ */
234
+
235
+ *paddingPtr = Ttk_AddPadding(*paddingPtr, ButtonMargins);
236
+ *widthPtr += Ttk_PaddingWidth(ButtonMargins);
237
+ *heightPtr += Ttk_PaddingHeight(ButtonMargins);
238
+ }
239
+
240
+ static void ButtonElementDraw(
241
+ void *clientData, void *elementRecord, Tk_Window tkwin,
242
+ Drawable d, Ttk_Box b, Ttk_State state)
243
+ {
244
+ ThemeButtonParms *parms = clientData;
245
+ ThemeButtonDrawInfo info = computeButtonDrawInfo(parms, state);
246
+ Rect bounds = BoxToRect(d, Ttk_PadBox(b, ButtonMargins));
247
+
248
+ BEGIN_DRAWING(d)
249
+ DrawThemeButton(&bounds, parms->kind, &info, NULL, NULL, NULL, 0);
250
+ END_DRAWING
251
+ }
252
+
253
+ static Ttk_ElementSpec ButtonElementSpec = {
254
+ TK_STYLE_VERSION_2,
255
+ sizeof(NullElement),
256
+ TtkNullElementOptions,
257
+ ButtonElementSize,
258
+ ButtonElementDraw
259
+ };
260
+
261
+ /*----------------------------------------------------------------------
262
+ * +++ Notebook elements.
263
+ */
264
+
265
+ static Ttk_StateTable TabStyleTable[] = {
266
+ { kThemeTabFrontInactive, TTK_STATE_SELECTED|TTK_STATE_BACKGROUND, 0 },
267
+ { kThemeTabNonFrontInactive, TTK_STATE_BACKGROUND, 0 },
268
+ { kThemeTabFrontUnavailable, TTK_STATE_DISABLED|TTK_STATE_SELECTED, 0 },
269
+ { kThemeTabNonFrontUnavailable, TTK_STATE_DISABLED, 0 },
270
+ { kThemeTabFront, TTK_STATE_SELECTED, 0 },
271
+ { kThemeTabNonFrontPressed, TTK_STATE_PRESSED, 0 },
272
+ { kThemeTabNonFront, 0,0 }
273
+ };
274
+
275
+ /*
276
+ * Quoth DrawThemeTab() reference manual:
277
+ * "Small tabs have a height of 16 pixels large tabs have a height of
278
+ * 21 pixels. (The widths of tabs are variable.) Additionally, the
279
+ * distance that the tab overlaps the pane must be included in the tab
280
+ * rectangle this overlap distance is always 3 pixels, although the
281
+ * 3-pixel overlap is only drawn for the front tab."
282
+ */
283
+ static const int TAB_HEIGHT = 21;
284
+ static const int TAB_OVERLAP = 3;
285
+
286
+ static void TabElementSize(
287
+ void *clientData, void *elementRecord, Tk_Window tkwin,
288
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
289
+ {
290
+ *heightPtr = TAB_HEIGHT + TAB_OVERLAP - 1;
291
+ }
292
+
293
+ static void TabElementDraw(
294
+ void *clientData, void *elementRecord, Tk_Window tkwin,
295
+ Drawable d, Ttk_Box b, Ttk_State state)
296
+ {
297
+ Rect bounds = BoxToRect(d, b);
298
+ ThemeTabStyle tabStyle = Ttk_StateTableLookup(TabStyleTable, state);
299
+
300
+ bounds.bottom += TAB_OVERLAP;
301
+ BEGIN_DRAWING(d)
302
+ DrawThemeTab(&bounds, tabStyle, kThemeTabNorth, 0, 0);
303
+ END_DRAWING
304
+ }
305
+
306
+ static Ttk_ElementSpec TabElementSpec = {
307
+ TK_STYLE_VERSION_2,
308
+ sizeof(NullElement),
309
+ TtkNullElementOptions,
310
+ TabElementSize,
311
+ TabElementDraw
312
+ };
313
+
314
+ /*
315
+ * Notebook panes:
316
+ */
317
+ static void PaneElementSize(
318
+ void *clientData, void *elementRecord, Tk_Window tkwin,
319
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
320
+ {
321
+ /* Padding determined by trial-and-error */
322
+ *paddingPtr = Ttk_MakePadding(2,8,2,2);
323
+ }
324
+
325
+ static void PaneElementDraw(
326
+ void *clientData, void *elementRecord, Tk_Window tkwin,
327
+ Drawable d, Ttk_Box b, Ttk_State state)
328
+ {
329
+ Rect bounds = BoxToRect(d, b);
330
+ ThemeDrawState drawState = Ttk_StateTableLookup(ThemeStateTable, state);
331
+
332
+ BEGIN_DRAWING(d)
333
+ DrawThemeTabPane(&bounds, drawState);
334
+ END_DRAWING
335
+ }
336
+
337
+ static Ttk_ElementSpec PaneElementSpec = {
338
+ TK_STYLE_VERSION_2,
339
+ sizeof(NullElement),
340
+ TtkNullElementOptions,
341
+ PaneElementSize,
342
+ PaneElementDraw
343
+ };
344
+
345
+ /*
346
+ * Labelframe borders:
347
+ * Use "primary group box ..."
348
+ * Quoth DrawThemePrimaryGroup reference:
349
+ * "The primary group box frame is drawn inside the specified
350
+ * rectangle and is a maximum of 2 pixels thick."
351
+ *
352
+ * "Maximum of 2 pixels thick" is apparently a lie;
353
+ * looks more like 4 to me with shading.
354
+ */
355
+ static void GroupElementSize(
356
+ void *clientData, void *elementRecord, Tk_Window tkwin,
357
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
358
+ {
359
+ *paddingPtr = Ttk_UniformPadding(4);
360
+ }
361
+
362
+ static void GroupElementDraw(
363
+ void *clientData, void *elementRecord, Tk_Window tkwin,
364
+ Drawable d, Ttk_Box b, Ttk_State state)
365
+ {
366
+ Rect bounds = BoxToRect(d, b);
367
+ ThemeDrawState drawState = Ttk_StateTableLookup(ThemeStateTable, state);
368
+
369
+ BEGIN_DRAWING(d)
370
+ DrawThemePrimaryGroup(&bounds, drawState);
371
+ END_DRAWING
372
+ }
373
+
374
+ static Ttk_ElementSpec GroupElementSpec = {
375
+ TK_STYLE_VERSION_2,
376
+ sizeof(NullElement),
377
+ TtkNullElementOptions,
378
+ GroupElementSize,
379
+ GroupElementDraw
380
+ };
381
+
382
+ /*----------------------------------------------------------------------
383
+ * +++ Entry element --
384
+ * 3 pixels padding for focus rectangle
385
+ * 2 pixels padding for EditTextFrame
386
+ */
387
+
388
+ typedef struct {
389
+ Tcl_Obj *backgroundObj;
390
+ } EntryElement;
391
+
392
+ static Ttk_ElementOptionSpec EntryElementOptions[] = {
393
+ { "-background", TK_OPTION_BORDER,
394
+ Tk_Offset(EntryElement,backgroundObj), "white" },
395
+ {0}
396
+ };
397
+
398
+ static void EntryElementSize(
399
+ void *clientData, void *elementRecord, Tk_Window tkwin,
400
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
401
+ {
402
+ *paddingPtr = Ttk_UniformPadding(5);
403
+ }
404
+
405
+ static void EntryElementDraw(
406
+ void *clientData, void *elementRecord, Tk_Window tkwin,
407
+ Drawable d, Ttk_Box b, Ttk_State state)
408
+ {
409
+ EntryElement *e = elementRecord;
410
+ Tk_3DBorder backgroundPtr = Tk_Get3DBorderFromObj(tkwin,e->backgroundObj);
411
+ Ttk_Box inner = Ttk_PadBox(b, Ttk_UniformPadding(3));
412
+ Rect bounds = BoxToRect(d, inner);
413
+ ThemeDrawState drawState = Ttk_StateTableLookup(ThemeStateTable, state);
414
+
415
+ /*
416
+ * Erase w/background color:
417
+ */
418
+ XFillRectangle(Tk_Display(tkwin), d,
419
+ Tk_3DBorderGC(tkwin, backgroundPtr, TK_3D_FLAT_GC),
420
+ inner.x,inner.y, inner.width, inner.height);
421
+
422
+ BEGIN_DRAWING(d)
423
+ DrawThemeEditTextFrame(&bounds, drawState);
424
+ if (state & TTK_STATE_FOCUS) {
425
+ DrawThemeFocusRect(&bounds, 1);
426
+ }
427
+ END_DRAWING
428
+ }
429
+
430
+ static Ttk_ElementSpec EntryElementSpec = {
431
+ TK_STYLE_VERSION_2,
432
+ sizeof(EntryElement),
433
+ EntryElementOptions,
434
+ EntryElementSize,
435
+ EntryElementDraw
436
+ };
437
+
438
+ /*----------------------------------------------------------------------
439
+ * +++ Combobox:
440
+ *
441
+ * NOTES:
442
+ * kThemeMetricComboBoxLargeDisclosureWidth -> 17
443
+ * Padding and margins guesstimated by trial-and-error.
444
+ */
445
+
446
+ static Ttk_Padding ComboboxPadding = { 2, 3, 17, 1 };
447
+ static Ttk_Padding ComboboxMargins = { 3, 3, 4, 4 };
448
+
449
+ static void ComboboxElementSize(
450
+ void *clientData, void *elementRecord, Tk_Window tkwin,
451
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
452
+ {
453
+ *widthPtr = 0;
454
+ *heightPtr = 0;
455
+ *paddingPtr = Ttk_AddPadding(ComboboxMargins, ComboboxPadding);
456
+ }
457
+
458
+ static void ComboboxElementDraw(
459
+ void *clientData, void *elementRecord, Tk_Window tkwin,
460
+ Drawable d, Ttk_Box b, Ttk_State state)
461
+ {
462
+ ThemeButtonParms *parms = clientData;
463
+ ThemeButtonDrawInfo info = computeButtonDrawInfo(parms, state);
464
+ Rect bounds = BoxToRect(d, Ttk_PadBox(b, ComboboxMargins));
465
+
466
+ BEGIN_DRAWING(d)
467
+ DrawThemeButton(
468
+ &bounds, kThemeComboBox, &info, NULL, NULL, NULL, 0);
469
+ END_DRAWING
470
+ }
471
+
472
+ static Ttk_ElementSpec ComboboxElementSpec = {
473
+ TK_STYLE_VERSION_2,
474
+ sizeof(NullElement),
475
+ TtkNullElementOptions,
476
+ ComboboxElementSize,
477
+ ComboboxElementDraw
478
+ };
479
+
480
+ /*----------------------------------------------------------------------
481
+ * +++ DrawThemeTrack-based elements --
482
+ * Progress bars and scales. (See also: <<NOTE-TRACKS>>)
483
+ */
484
+
485
+ static Ttk_StateTable ThemeTrackEnableTable[] = {
486
+ { kThemeTrackDisabled, TTK_STATE_DISABLED, 0 },
487
+ { kThemeTrackInactive, TTK_STATE_BACKGROUND, 0 },
488
+ { kThemeTrackActive, 0, 0 }
489
+ /* { kThemeTrackNothingToScroll, ?, ? }, */
490
+ };
491
+
492
+ typedef struct { /* TrackElement client data */
493
+ ThemeTrackKind kind;
494
+ SInt32 thicknessMetric;
495
+ } TrackElementData;
496
+
497
+ static TrackElementData ScaleData = {
498
+ kThemeSlider, kThemeMetricHSliderHeight
499
+ };
500
+
501
+ typedef struct {
502
+ Tcl_Obj *fromObj; /* minimum value */
503
+ Tcl_Obj *toObj; /* maximum value */
504
+ Tcl_Obj *valueObj; /* current value */
505
+ Tcl_Obj *orientObj; /* horizontal / vertical */
506
+ } TrackElement;
507
+
508
+ static Ttk_ElementOptionSpec TrackElementOptions[] = {
509
+ { "-from", TK_OPTION_DOUBLE, Tk_Offset(TrackElement,fromObj) },
510
+ { "-to", TK_OPTION_DOUBLE, Tk_Offset(TrackElement,toObj) },
511
+ { "-value", TK_OPTION_DOUBLE, Tk_Offset(TrackElement,valueObj) },
512
+ { "-orient", TK_OPTION_STRING, Tk_Offset(TrackElement,orientObj) },
513
+ {0,0,0}
514
+ };
515
+
516
+ static void TrackElementSize(
517
+ void *clientData, void *elementRecord, Tk_Window tkwin,
518
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
519
+ {
520
+ TrackElementData *data = clientData;
521
+ SInt32 size = 24; /* reasonable default ... */
522
+
523
+ GetThemeMetric(data->thicknessMetric, &size);
524
+ *widthPtr = *heightPtr = size;
525
+ }
526
+
527
+ static void TrackElementDraw(
528
+ void *clientData, void *elementRecord, Tk_Window tkwin,
529
+ Drawable d, Ttk_Box b, Ttk_State state)
530
+ {
531
+ TrackElementData *data = clientData;
532
+ TrackElement *elem = elementRecord;
533
+ double from = 0, to = 100, value = 0;
534
+ int orientation = TTK_ORIENT_HORIZONTAL;
535
+ ThemeTrackDrawInfo info;
536
+
537
+ Tcl_GetDoubleFromObj(NULL, elem->fromObj, &from);
538
+ Tcl_GetDoubleFromObj(NULL, elem->toObj, &to);
539
+ Tcl_GetDoubleFromObj(NULL, elem->valueObj, &value);
540
+ Ttk_GetOrientFromObj(NULL, elem->orientObj, &orientation);
541
+
542
+ /* @@@ BUG: min, max, and value should account for resolution:
543
+ * @@@ if finer than 1.0, conversion to int breaks.
544
+ */
545
+ info.kind = data->kind;
546
+ info.bounds = BoxToRect(d, b);
547
+ info.min = (int)from; /* @@@ */
548
+ info.max = (int)to; /* @@@ */
549
+ info.value = (int)value; /* @@@ */
550
+
551
+ info.attributes = orientation == TTK_ORIENT_HORIZONTAL
552
+ ? kThemeTrackHorizontal : 0;
553
+ info.attributes |= kThemeTrackShowThumb;
554
+ info.enableState = Ttk_StateTableLookup(ThemeTrackEnableTable, state);
555
+
556
+ switch (data->kind) {
557
+ case kThemeProgressBar:
558
+ info.trackInfo.progress.phase = 0; /* 1-4: animation phase */
559
+ break;
560
+ case kThemeSlider:
561
+ info.trackInfo.slider.pressState = 0; /* @@@ fill this in */
562
+ info.trackInfo.slider.thumbDir = kThemeThumbPlain;
563
+ /* kThemeThumbUpward, kThemeThumbDownward, kThemeThumbPlain */
564
+ break;
565
+ }
566
+
567
+ BEGIN_DRAWING(d)
568
+ DrawThemeTrack(&info, NULL, NULL, 0);
569
+ END_DRAWING
570
+ }
571
+
572
+ static Ttk_ElementSpec TrackElementSpec = {
573
+ TK_STYLE_VERSION_2,
574
+ sizeof(TrackElement),
575
+ TrackElementOptions,
576
+ TrackElementSize,
577
+ TrackElementDraw
578
+ };
579
+
580
+ /*
581
+ * Slider element -- <<NOTE-TRACKS>>
582
+ * Has geometry only. The Scale widget adjusts the position of this element,
583
+ * and uses it for hit detection. In the Aqua theme, the slider is actually
584
+ * drawn as part of the trough element.
585
+ *
586
+ * Also buggy: The geometry here is a Wild-Assed-Guess; I can't
587
+ * figure out how to get the Appearance Manager to tell me the
588
+ * slider size.
589
+ */
590
+ static void SliderElementSize(
591
+ void *clientData, void *elementRecord, Tk_Window tkwin,
592
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
593
+ {
594
+ *widthPtr = *heightPtr = 24;
595
+ }
596
+
597
+ static Ttk_ElementSpec SliderElementSpec = {
598
+ TK_STYLE_VERSION_2,
599
+ sizeof(NullElement),
600
+ TtkNullElementOptions,
601
+ SliderElementSize,
602
+ TtkNullElementDraw
603
+ };
604
+
605
+ /*----------------------------------------------------------------------
606
+ * +++ Progress bar element (new):
607
+ *
608
+ * @@@ NOTE: According to an older revision of the Aqua reference docs,
609
+ * @@@ the 'phase' field is between 0 and 4. Newer revisions say
610
+ * @@@ that it can be any UInt8 value.
611
+ */
612
+
613
+ typedef struct {
614
+ Tcl_Obj *orientObj; /* horizontal / vertical */
615
+ Tcl_Obj *valueObj; /* current value */
616
+ Tcl_Obj *maximumObj; /* maximum value */
617
+ Tcl_Obj *phaseObj; /* animation phase */
618
+ Tcl_Obj *modeObj; /* progress bar mode */
619
+ } PbarElement;
620
+
621
+ static Ttk_ElementOptionSpec PbarElementOptions[] = {
622
+ { "-orient", TK_OPTION_STRING,
623
+ Tk_Offset(PbarElement,orientObj), "horizontal" },
624
+ { "-value", TK_OPTION_DOUBLE,
625
+ Tk_Offset(PbarElement,valueObj), "0" },
626
+ { "-maximum", TK_OPTION_DOUBLE,
627
+ Tk_Offset(PbarElement,maximumObj), "100" },
628
+ { "-phase", TK_OPTION_INT,
629
+ Tk_Offset(PbarElement,phaseObj), "0" },
630
+ { "-mode", TK_OPTION_STRING,
631
+ Tk_Offset(PbarElement,modeObj), "determinate" },
632
+ {0,0,0,0}
633
+ };
634
+
635
+ static void PbarElementSize(
636
+ void *clientData, void *elementRecord, Tk_Window tkwin,
637
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
638
+ {
639
+ SInt32 size = 24; /* @@@ Check HIG for correct default */
640
+
641
+ GetThemeMetric(kThemeMetricLargeProgressBarThickness, &size);
642
+ *widthPtr = *heightPtr = size;
643
+ }
644
+
645
+ static void PbarElementDraw(
646
+ void *clientData, void *elementRecord, Tk_Window tkwin,
647
+ Drawable d, Ttk_Box b, Ttk_State state)
648
+ {
649
+ PbarElement *pbar = elementRecord;
650
+ int orientation = TTK_ORIENT_HORIZONTAL;
651
+ double value = 0, maximum = 100;
652
+ int phase = 0;
653
+ ThemeTrackDrawInfo info;
654
+
655
+ Ttk_GetOrientFromObj(NULL, pbar->orientObj, &orientation);
656
+ Tcl_GetDoubleFromObj(NULL, pbar->valueObj, &value);
657
+ Tcl_GetDoubleFromObj(NULL, pbar->maximumObj, &maximum);
658
+ Tcl_GetIntFromObj(NULL, pbar->phaseObj, &phase);
659
+
660
+ if (!strcmp("indeterminate", Tcl_GetString(pbar->modeObj)) && value) {
661
+ info.kind = kThemeIndeterminateBar;
662
+ } else {
663
+ info.kind = kThemeProgressBar;
664
+ }
665
+ info.bounds = BoxToRect(d, b);
666
+ info.min = 0;
667
+ info.max = (int)maximum; /* @@@ See note above */
668
+ info.value = (int)value;
669
+ info.attributes = orientation == TTK_ORIENT_HORIZONTAL
670
+ ? kThemeTrackHorizontal : 0;
671
+ info.attributes |= kThemeTrackShowThumb;
672
+ info.enableState = Ttk_StateTableLookup(ThemeTrackEnableTable, state);
673
+ info.trackInfo.progress.phase = phase;
674
+
675
+ BEGIN_DRAWING(d)
676
+ DrawThemeTrack(&info, NULL, NULL, 0);
677
+ END_DRAWING
678
+ }
679
+
680
+ static Ttk_ElementSpec PbarElementSpec = {
681
+ TK_STYLE_VERSION_2,
682
+ sizeof(PbarElement),
683
+ PbarElementOptions,
684
+ PbarElementSize,
685
+ PbarElementDraw
686
+ };
687
+
688
+ /*----------------------------------------------------------------------
689
+ * +++ Separator element.
690
+ *
691
+ * DrawThemeSeparator() guesses the orientation of the line from
692
+ * the width and height of the rectangle, so the same element can
693
+ * can be used for horizontal, vertical, and general separators.
694
+ */
695
+
696
+ static void SeparatorElementSize(
697
+ void *clientData, void *elementRecord, Tk_Window tkwin,
698
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
699
+ {
700
+ *widthPtr = *heightPtr = 1;
701
+ }
702
+
703
+ static void SeparatorElementDraw(
704
+ void *clientData, void *elementRecord, Tk_Window tkwin,
705
+ Drawable d, Ttk_Box b, unsigned int state)
706
+ {
707
+ Rect bounds = BoxToRect(d, b);
708
+ ThemeDrawState drawState = Ttk_StateTableLookup(ThemeStateTable, state);
709
+
710
+ /*
711
+ * DrawThemeSeparator only supports kThemeStateActive / kThemeStateInactive
712
+ */
713
+ state &= TTK_STATE_BACKGROUND;
714
+ BEGIN_DRAWING(d)
715
+ DrawThemeSeparator(&bounds, drawState);
716
+ END_DRAWING
717
+ }
718
+
719
+ static Ttk_ElementSpec SeparatorElementSpec = {
720
+ TK_STYLE_VERSION_2,
721
+ sizeof(NullElement),
722
+ TtkNullElementOptions,
723
+ SeparatorElementSize,
724
+ SeparatorElementDraw
725
+ };
726
+
727
+ /*----------------------------------------------------------------------
728
+ * +++ Size grip element.
729
+ */
730
+ static const ThemeGrowDirection sizegripGrowDirection
731
+ = kThemeGrowRight|kThemeGrowDown;
732
+
733
+ static void SizegripElementSize(
734
+ void *clientData, void *elementRecord, Tk_Window tkwin,
735
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
736
+ {
737
+ Point origin = {0, 0};
738
+ Rect bounds;
739
+
740
+ GetThemeStandaloneGrowBoxBounds(
741
+ origin, sizegripGrowDirection, false, &bounds);
742
+ *widthPtr = bounds.right - bounds.left;
743
+ *heightPtr = bounds.bottom - bounds.top;
744
+ }
745
+
746
+ static void SizegripElementDraw(
747
+ void *clientData, void *elementRecord, Tk_Window tkwin,
748
+ Drawable d, Ttk_Box b, unsigned int state)
749
+ {
750
+ Rect bounds = BoxToRect(d, b);
751
+ Point origin = {bounds.top, bounds.left};
752
+
753
+ /* Grow box only supports kThemeStateActive, kThemeStateInactive */
754
+ state &= TTK_STATE_BACKGROUND;
755
+
756
+ BEGIN_DRAWING(d)
757
+ DrawThemeStandaloneGrowBox(
758
+ origin, sizegripGrowDirection, false,
759
+ Ttk_StateTableLookup(ThemeStateTable, state));
760
+ END_DRAWING
761
+ }
762
+
763
+ static Ttk_ElementSpec SizegripElementSpec = {
764
+ TK_STYLE_VERSION_2,
765
+ sizeof(NullElement),
766
+ TtkNullElementOptions,
767
+ SizegripElementSize,
768
+ SizegripElementDraw
769
+ };
770
+
771
+ /*----------------------------------------------------------------------
772
+ * +++ Background and fill elements.
773
+ *
774
+ * This isn't quite right: In Aqua, the correct background for
775
+ * a control depends on what kind of container it belongs to,
776
+ * and the type of the top-level window.
777
+ *
778
+ * Also: patterned backgrounds should be aligned with the coordinate
779
+ * system of the top-level window. If we're drawing into an
780
+ * off-screen graphics port this leads to alignment glitches.
781
+ */
782
+
783
+ static void FillElementDraw(
784
+ void *clientData, void *elementRecord, Tk_Window tkwin,
785
+ Drawable d, Ttk_Box b, Ttk_State state)
786
+ {
787
+ Rect bounds = BoxToRect(d, b);
788
+ ThemeBrush brush = (state & TTK_STATE_BACKGROUND)
789
+ ? kThemeBrushModelessDialogBackgroundInactive
790
+ : kThemeBrushModelessDialogBackgroundActive ;
791
+
792
+ BEGIN_DRAWING(d)
793
+ SetThemeBackground(brush, 32, true);
794
+ QDSetPatternOrigin(PatternOrigin(tkwin, d));
795
+ EraseRect(&bounds);
796
+ END_DRAWING
797
+ }
798
+
799
+ static void BackgroundElementDraw(
800
+ void *clientData, void *elementRecord, Tk_Window tkwin,
801
+ Drawable d, Ttk_Box b, unsigned int state)
802
+ {
803
+ FillElementDraw(
804
+ clientData, elementRecord, tkwin,
805
+ d, Ttk_WinBox(tkwin), state);
806
+ }
807
+
808
+ static Ttk_ElementSpec FillElementSpec = {
809
+ TK_STYLE_VERSION_2,
810
+ sizeof(NullElement),
811
+ TtkNullElementOptions,
812
+ TtkNullElementSize,
813
+ FillElementDraw
814
+ };
815
+
816
+ static Ttk_ElementSpec BackgroundElementSpec = {
817
+ TK_STYLE_VERSION_2,
818
+ sizeof(NullElement),
819
+ TtkNullElementOptions,
820
+ TtkNullElementSize,
821
+ BackgroundElementDraw
822
+ };
823
+
824
+ /*----------------------------------------------------------------------
825
+ * +++ ToolbarBackground element -- toolbar style for frames.
826
+ *
827
+ * This is very similar to the normal background element, but uses a
828
+ * different ThemeBrush in order to get the lighter pinstripe effect
829
+ * used in toolbars. We use SetThemeBackground() rather than
830
+ * ApplyThemeBackground() in order to get the right style.
831
+ *
832
+ * <URL: http://developer.apple.com/documentation/Carbon/Reference/
833
+ * Appearance_Manager/appearance_manager/constant_7.html#/
834
+ * /apple_ref/doc/uid/TP30000243/C005321>
835
+ *
836
+ */
837
+ static void ToolbarBackgroundElementDraw(
838
+ void *clientData, void *elementRecord, Tk_Window tkwin,
839
+ Drawable d, Ttk_Box b, Ttk_State state)
840
+ {
841
+ ThemeBrush brush = kThemeBrushToolbarBackground;
842
+ Rect bounds = BoxToRect(d, Ttk_WinBox(tkwin));
843
+
844
+ BEGIN_DRAWING(d)
845
+ SetThemeBackground(brush, 32, true);
846
+ QDSetPatternOrigin(PatternOrigin(tkwin, d));
847
+ EraseRect(&bounds);
848
+ END_DRAWING
849
+ }
850
+
851
+ static Ttk_ElementSpec ToolbarBackgroundElementSpec = {
852
+ TK_STYLE_VERSION_2,
853
+ sizeof(NullElement),
854
+ TtkNullElementOptions,
855
+ TtkNullElementSize,
856
+ ToolbarBackgroundElementDraw
857
+ };
858
+
859
+ /*----------------------------------------------------------------------
860
+ * +++ Treeview header
861
+ * Redefine the header to use a kThemeListHeaderButton.
862
+ */
863
+
864
+ static Ttk_StateTable TreeHeaderAdornmentTable[] = {
865
+ { kThemeAdornmentHeaderButtonSortUp, TTK_STATE_ALTERNATE, 0 },
866
+ { kThemeAdornmentFocus, TTK_STATE_FOCUS, 0 },
867
+ { kThemeAdornmentNone, 0, 0 }
868
+ };
869
+
870
+ static void TreeHeaderElementDraw(
871
+ void *clientData, void *elementRecord, Tk_Window tkwin,
872
+ Drawable d, Ttk_Box b, Ttk_State state)
873
+ {
874
+ ThemeButtonParms *parms = clientData;
875
+ Rect bounds = BoxToRect(d, b);
876
+ ThemeButtonDrawInfo info;
877
+
878
+ info.state = Ttk_StateTableLookup(ThemeStateTable, state);
879
+ info.value = Ttk_StateTableLookup(ButtonValueTable, state);
880
+ info.adornment = Ttk_StateTableLookup(TreeHeaderAdornmentTable, state);
881
+
882
+ BEGIN_DRAWING(d)
883
+ DrawThemeButton(&bounds, parms->kind, &info, NULL, NULL, NULL, 0);
884
+ END_DRAWING
885
+ }
886
+
887
+ static Ttk_ElementSpec TreeHeaderElementSpec = {
888
+ TK_STYLE_VERSION_2,
889
+ sizeof(NullElement),
890
+ TtkNullElementOptions,
891
+ ButtonElementSizeNoPadding,
892
+ TreeHeaderElementDraw
893
+ };
894
+
895
+ /*
896
+ * Disclosure triangle:
897
+ */
898
+ #define TTK_TREEVIEW_STATE_OPEN TTK_STATE_USER1
899
+ #define TTK_TREEVIEW_STATE_LEAF TTK_STATE_USER2
900
+ static Ttk_StateTable DisclosureValueTable[] = {
901
+ { kThemeDisclosureDown, TTK_TREEVIEW_STATE_OPEN, 0 },
902
+ { kThemeDisclosureRight, 0, 0 },
903
+ };
904
+
905
+ static void DisclosureElementSize(
906
+ void *clientData, void *elementRecord, Tk_Window tkwin,
907
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
908
+ {
909
+ SInt32 s;
910
+ GetThemeMetric(kThemeMetricDisclosureTriangleWidth, &s); *widthPtr = s;
911
+ GetThemeMetric(kThemeMetricDisclosureTriangleHeight, &s); *heightPtr = s;
912
+ }
913
+
914
+ static void DisclosureElementDraw(
915
+ void *clientData, void *elementRecord, Tk_Window tkwin,
916
+ Drawable d, Ttk_Box b, Ttk_State state)
917
+ {
918
+ Rect bounds = BoxToRect(d, b);
919
+ ThemeButtonDrawInfo info;
920
+
921
+ if (state & TTK_TREEVIEW_STATE_LEAF) {
922
+ return;
923
+ }
924
+
925
+ info.state = Ttk_StateTableLookup(ThemeStateTable, state);
926
+ info.value = Ttk_StateTableLookup(DisclosureValueTable, state);
927
+ info.adornment = kThemeAdornmentDrawIndicatorOnly;
928
+
929
+ BEGIN_DRAWING(d)
930
+ DrawThemeButton(
931
+ &bounds, kThemeDisclosureTriangle, &info, NULL, DontErase, NULL, 0);
932
+ END_DRAWING
933
+ }
934
+
935
+ static Ttk_ElementSpec DisclosureElementSpec = {
936
+ TK_STYLE_VERSION_2,
937
+ sizeof(NullElement),
938
+ TtkNullElementOptions,
939
+ DisclosureElementSize,
940
+ DisclosureElementDraw
941
+ };
942
+
943
+ /*----------------------------------------------------------------------
944
+ * +++ Widget layouts.
945
+ */
946
+
947
+ TTK_BEGIN_LAYOUT_TABLE(LayoutTable)
948
+
949
+ TTK_LAYOUT("Toolbar",
950
+ TTK_NODE("Toolbar.background", TTK_FILL_BOTH))
951
+
952
+ TTK_LAYOUT("TButton",
953
+ TTK_GROUP("Button.button", TTK_FILL_BOTH,
954
+ TTK_GROUP("Button.padding", TTK_FILL_BOTH,
955
+ TTK_NODE("Button.label", TTK_FILL_BOTH))))
956
+
957
+ TTK_LAYOUT("TRadiobutton",
958
+ TTK_GROUP("Radiobutton.button", TTK_FILL_BOTH,
959
+ TTK_GROUP("Radiobutton.padding", TTK_FILL_BOTH,
960
+ TTK_NODE("Radiobutton.label", TTK_PACK_LEFT))))
961
+
962
+ TTK_LAYOUT("TCheckbutton",
963
+ TTK_GROUP("Checkbutton.button", TTK_FILL_BOTH,
964
+ TTK_GROUP("Checkbutton.padding", TTK_FILL_BOTH,
965
+ TTK_NODE("Checkbutton.label", TTK_PACK_LEFT))))
966
+
967
+ TTK_LAYOUT("TMenubutton",
968
+ TTK_GROUP("Menubutton.button", TTK_FILL_BOTH,
969
+ TTK_GROUP("Menubutton.padding", TTK_FILL_BOTH,
970
+ TTK_NODE("Menubutton.label", TTK_PACK_LEFT))))
971
+
972
+ TTK_LAYOUT("TCombobox",
973
+ TTK_GROUP("Combobox.button", TTK_PACK_TOP|TTK_FILL_X,
974
+ TTK_GROUP("Combobox.padding", TTK_FILL_BOTH,
975
+ TTK_NODE("Combobox.textarea", TTK_FILL_X))))
976
+
977
+ /* Notebook tabs -- no focus ring */
978
+ TTK_LAYOUT("Tab",
979
+ TTK_GROUP("Notebook.tab", TTK_FILL_BOTH,
980
+ TTK_GROUP("Notebook.padding", TTK_EXPAND|TTK_FILL_BOTH,
981
+ TTK_NODE("Notebook.label", TTK_EXPAND|TTK_FILL_BOTH))))
982
+
983
+ /* Progress bars -- track only */
984
+ TTK_LAYOUT("TProgressbar",
985
+ TTK_NODE("Progressbar.track", TTK_EXPAND|TTK_FILL_BOTH))
986
+
987
+ /* Tree heading -- no border, fixed height */
988
+ TTK_LAYOUT("Heading",
989
+ TTK_NODE("Treeheading.cell", TTK_FILL_X)
990
+ TTK_NODE("Treeheading.image", TTK_PACK_RIGHT)
991
+ TTK_NODE("Treeheading.text", 0))
992
+
993
+ /* Tree items -- omit focus ring */
994
+ TTK_LAYOUT("Item",
995
+ TTK_GROUP("Treeitem.padding", TTK_FILL_BOTH,
996
+ TTK_NODE("Treeitem.indicator", TTK_PACK_LEFT)
997
+ TTK_NODE("Treeitem.image", TTK_PACK_LEFT)
998
+ TTK_NODE("Treeitem.text", TTK_PACK_LEFT)))
999
+
1000
+ TTK_END_LAYOUT_TABLE
1001
+
1002
+ /*----------------------------------------------------------------------
1003
+ * +++ Initialization.
1004
+ */
1005
+
1006
+ static int AquaTheme_Init(Tcl_Interp *interp)
1007
+ {
1008
+ Ttk_Theme themePtr = Ttk_CreateTheme(interp, "aqua", NULL);
1009
+
1010
+ if (!themePtr) {
1011
+ return TCL_ERROR;
1012
+ }
1013
+
1014
+ /*
1015
+ * Elements:
1016
+ */
1017
+ Ttk_RegisterElementSpec(themePtr, "background", &BackgroundElementSpec, 0);
1018
+ Ttk_RegisterElementSpec(themePtr, "fill", &FillElementSpec, 0);
1019
+ Ttk_RegisterElementSpec(themePtr, "Toolbar.background",
1020
+ &ToolbarBackgroundElementSpec, 0);
1021
+
1022
+ Ttk_RegisterElementSpec(themePtr, "Button.button",
1023
+ &ButtonElementSpec, &PushButtonParms);
1024
+ Ttk_RegisterElementSpec(themePtr, "Checkbutton.button",
1025
+ &ButtonElementSpec, &CheckBoxParms);
1026
+ Ttk_RegisterElementSpec(themePtr, "Radiobutton.button",
1027
+ &ButtonElementSpec, &RadioButtonParms);
1028
+ Ttk_RegisterElementSpec(themePtr, "Toolbutton.border",
1029
+ &ButtonElementSpec, &BevelButtonParms);
1030
+ Ttk_RegisterElementSpec(themePtr, "Menubutton.button",
1031
+ &ButtonElementSpec, &PopupButtonParms);
1032
+ Ttk_RegisterElementSpec(themePtr, "Combobox.button",
1033
+ &ComboboxElementSpec, 0);
1034
+ Ttk_RegisterElementSpec(themePtr, "Treeitem.indicator",
1035
+ &DisclosureElementSpec, &DisclosureParms);
1036
+ Ttk_RegisterElementSpec(themePtr, "Treeheading.cell",
1037
+ &TreeHeaderElementSpec, &ListHeaderParms);
1038
+
1039
+ Ttk_RegisterElementSpec(themePtr, "Notebook.tab", &TabElementSpec, 0);
1040
+ Ttk_RegisterElementSpec(themePtr, "Notebook.client", &PaneElementSpec, 0);
1041
+
1042
+ Ttk_RegisterElementSpec(themePtr, "Labelframe.border",&GroupElementSpec,0);
1043
+ Ttk_RegisterElementSpec(themePtr, "Entry.field",&EntryElementSpec,0);
1044
+
1045
+ Ttk_RegisterElementSpec(themePtr, "separator",&SeparatorElementSpec,0);
1046
+ Ttk_RegisterElementSpec(themePtr, "hseparator",&SeparatorElementSpec,0);
1047
+ Ttk_RegisterElementSpec(themePtr, "vseparator",&SeparatorElementSpec,0);
1048
+
1049
+ Ttk_RegisterElementSpec(themePtr, "sizegrip",&SizegripElementSpec,0);
1050
+
1051
+ /*
1052
+ * <<NOTE-TRACKS>>
1053
+ * The Progressbar widget adjusts the size of the pbar element.
1054
+ * In the Aqua theme, the appearance manager computes the bar geometry;
1055
+ * we do all the drawing in the ".track" element and leave the .pbar out.
1056
+ */
1057
+ Ttk_RegisterElementSpec(themePtr,"Scale.trough",
1058
+ &TrackElementSpec, &ScaleData);
1059
+ Ttk_RegisterElementSpec(themePtr,"Scale.slider",&SliderElementSpec,0);
1060
+ Ttk_RegisterElementSpec(themePtr,"Progressbar.track", &PbarElementSpec, 0);
1061
+
1062
+ /*
1063
+ * Layouts:
1064
+ */
1065
+ Ttk_RegisterLayouts(themePtr, LayoutTable);
1066
+
1067
+ Tcl_PkgProvide(interp, "ttk::theme::aqua", TILE_VERSION);
1068
+ return TCL_OK;
1069
+ }
1070
+
1071
+ MODULE_SCOPE
1072
+ int Ttk_MacOSXPlatformInit(Tcl_Interp *interp)
1073
+ {
1074
+ return AquaTheme_Init(interp);
1075
+ }
1076
+