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,518 @@
1
+ /* classicTheme.c,v 1.12 2007/12/02 04:34:30 jenglish Exp
2
+ *
3
+ * Copyright (c) 2004, Joe English
4
+ *
5
+ * Tile widget set: classic theme.
6
+ *
7
+ * Implements the "classic" Motif-like Tk look.
8
+ *
9
+ */
10
+
11
+ #include <tk.h>
12
+ #include <X11/Xlib.h>
13
+ #include <X11/Xutil.h>
14
+ #include "tkTheme.h"
15
+
16
+ #define DEFAULT_BORDERWIDTH "2"
17
+ #define DEFAULT_ARROW_SIZE "15"
18
+
19
+ /*----------------------------------------------------------------------
20
+ * +++ Highlight element implementation.
21
+ * Draw a solid highlight border to indicate focus.
22
+ */
23
+
24
+ typedef struct {
25
+ Tcl_Obj *highlightColorObj;
26
+ Tcl_Obj *highlightThicknessObj;
27
+ } HighlightElement;
28
+
29
+ static Ttk_ElementOptionSpec HighlightElementOptions[] = {
30
+ { "-highlightcolor",TK_OPTION_COLOR,
31
+ Tk_Offset(HighlightElement,highlightColorObj), DEFAULT_BACKGROUND },
32
+ { "-highlightthickness",TK_OPTION_PIXELS,
33
+ Tk_Offset(HighlightElement,highlightThicknessObj), "0" },
34
+ {NULL}
35
+ };
36
+
37
+ static void HighlightElementSize(
38
+ void *clientData, void *elementRecord, Tk_Window tkwin,
39
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
40
+ {
41
+ HighlightElement *hl = elementRecord;
42
+ int highlightThickness = 0;
43
+
44
+ Tcl_GetIntFromObj(NULL,hl->highlightThicknessObj,&highlightThickness);
45
+ *paddingPtr = Ttk_UniformPadding((short)highlightThickness);
46
+ }
47
+
48
+ static void HighlightElementDraw(
49
+ void *clientData, void *elementRecord, Tk_Window tkwin,
50
+ Drawable d, Ttk_Box b, unsigned int state)
51
+ {
52
+ HighlightElement *hl = elementRecord;
53
+ int highlightThickness = 0;
54
+ XColor *highlightColor = Tk_GetColorFromObj(tkwin, hl->highlightColorObj);
55
+
56
+ Tcl_GetIntFromObj(NULL,hl->highlightThicknessObj,&highlightThickness);
57
+ if (highlightColor && highlightThickness > 0) {
58
+ GC gc = Tk_GCForColor(highlightColor, d);
59
+ Tk_DrawFocusHighlight(tkwin, gc, highlightThickness, d);
60
+ }
61
+ }
62
+
63
+ static Ttk_ElementSpec HighlightElementSpec =
64
+ {
65
+ TK_STYLE_VERSION_2,
66
+ sizeof(HighlightElement),
67
+ HighlightElementOptions,
68
+ HighlightElementSize,
69
+ HighlightElementDraw
70
+ };
71
+
72
+ /*------------------------------------------------------------------------
73
+ * +++ Button Border element:
74
+ *
75
+ * The Motif-style button border on X11 consists of (from outside-in):
76
+ *
77
+ * + focus indicator (controlled by -highlightcolor and -highlightthickness),
78
+ * + default ring (if -default active; blank if -default normal)
79
+ * + shaded border (controlled by -background, -borderwidth, and -relief)
80
+ */
81
+
82
+ typedef struct {
83
+ Tcl_Obj *borderObj;
84
+ Tcl_Obj *borderWidthObj;
85
+ Tcl_Obj *reliefObj;
86
+ Tcl_Obj *defaultStateObj;
87
+ } ButtonBorderElement;
88
+
89
+ static Ttk_ElementOptionSpec ButtonBorderElementOptions[] =
90
+ {
91
+ { "-background", TK_OPTION_BORDER,
92
+ Tk_Offset(ButtonBorderElement,borderObj), DEFAULT_BACKGROUND },
93
+ { "-borderwidth", TK_OPTION_PIXELS,
94
+ Tk_Offset(ButtonBorderElement,borderWidthObj), DEFAULT_BORDERWIDTH },
95
+ { "-relief", TK_OPTION_RELIEF,
96
+ Tk_Offset(ButtonBorderElement,reliefObj), "flat" },
97
+ { "-default", TK_OPTION_ANY,
98
+ Tk_Offset(ButtonBorderElement,defaultStateObj), "disabled" },
99
+ {NULL}
100
+ };
101
+
102
+ static void ButtonBorderElementSize(
103
+ void *clientData, void *elementRecord, Tk_Window tkwin,
104
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
105
+ {
106
+ ButtonBorderElement *bd = elementRecord;
107
+ int defaultState = TTK_BUTTON_DEFAULT_DISABLED;
108
+ int borderWidth = 0;
109
+
110
+ Tcl_GetIntFromObj(NULL, bd->borderWidthObj, &borderWidth);
111
+ Ttk_GetButtonDefaultStateFromObj(NULL, bd->defaultStateObj, &defaultState);
112
+
113
+ if (defaultState != TTK_BUTTON_DEFAULT_DISABLED) {
114
+ borderWidth += 5;
115
+ }
116
+ *paddingPtr = Ttk_UniformPadding((short)borderWidth);
117
+ }
118
+
119
+ /*
120
+ * (@@@ Note: ButtonBorderElement still still still buggy:
121
+ * padding for default ring is drawn in the wrong color
122
+ * when the button is active.)
123
+ */
124
+ static void ButtonBorderElementDraw(
125
+ void *clientData, void *elementRecord, Tk_Window tkwin,
126
+ Drawable d, Ttk_Box b, unsigned int state)
127
+ {
128
+ ButtonBorderElement *bd = elementRecord;
129
+ Tk_3DBorder border = NULL;
130
+ int borderWidth = 1, relief = TK_RELIEF_FLAT;
131
+ int defaultState = TTK_BUTTON_DEFAULT_DISABLED;
132
+ int inset = 0;
133
+
134
+ /*
135
+ * Get option values.
136
+ */
137
+ border = Tk_Get3DBorderFromObj(tkwin, bd->borderObj);
138
+ Tcl_GetIntFromObj(NULL, bd->borderWidthObj, &borderWidth);
139
+ Tk_GetReliefFromObj(NULL, bd->reliefObj, &relief);
140
+ Ttk_GetButtonDefaultStateFromObj(NULL, bd->defaultStateObj, &defaultState);
141
+
142
+ /*
143
+ * Default ring:
144
+ */
145
+ switch (defaultState)
146
+ {
147
+ case TTK_BUTTON_DEFAULT_DISABLED :
148
+ break;
149
+ case TTK_BUTTON_DEFAULT_NORMAL :
150
+ inset += 5;
151
+ break;
152
+ case TTK_BUTTON_DEFAULT_ACTIVE :
153
+ Tk_Draw3DRectangle(tkwin, d, border,
154
+ b.x+inset, b.y+inset, b.width - 2*inset, b.height - 2*inset,
155
+ 2, TK_RELIEF_FLAT);
156
+ inset += 2;
157
+ Tk_Draw3DRectangle(tkwin, d, border,
158
+ b.x+inset, b.y+inset, b.width - 2*inset, b.height - 2*inset,
159
+ 1, TK_RELIEF_SUNKEN);
160
+ ++inset;
161
+ Tk_Draw3DRectangle(tkwin, d, border,
162
+ b.x+inset, b.y+inset, b.width - 2*inset, b.height - 2*inset,
163
+ 2, TK_RELIEF_FLAT);
164
+ inset += 2;
165
+ break;
166
+ }
167
+
168
+ /*
169
+ * 3-D border:
170
+ */
171
+ if (border && borderWidth > 0) {
172
+ Tk_Draw3DRectangle(tkwin, d, border,
173
+ b.x+inset, b.y+inset, b.width - 2*inset, b.height - 2*inset,
174
+ borderWidth,relief);
175
+ }
176
+ }
177
+
178
+ static Ttk_ElementSpec ButtonBorderElementSpec =
179
+ {
180
+ TK_STYLE_VERSION_2,
181
+ sizeof(ButtonBorderElement),
182
+ ButtonBorderElementOptions,
183
+ ButtonBorderElementSize,
184
+ ButtonBorderElementDraw
185
+ };
186
+
187
+ /*----------------------------------------------------------------------
188
+ * +++ Arrow element(s).
189
+ *
190
+ * Draws a 3-D shaded triangle.
191
+ * clientData is an enum ArrowDirection pointer.
192
+ */
193
+
194
+ static int ArrowElements[] = { ARROW_UP, ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT };
195
+ typedef struct
196
+ {
197
+ Tcl_Obj *sizeObj;
198
+ Tcl_Obj *borderObj;
199
+ Tcl_Obj *borderWidthObj;
200
+ Tcl_Obj *reliefObj;
201
+ } ArrowElement;
202
+
203
+ static Ttk_ElementOptionSpec ArrowElementOptions[] =
204
+ {
205
+ { "-arrowsize", TK_OPTION_PIXELS, Tk_Offset(ArrowElement,sizeObj),
206
+ DEFAULT_ARROW_SIZE },
207
+ { "-background", TK_OPTION_BORDER, Tk_Offset(ArrowElement,borderObj),
208
+ DEFAULT_BACKGROUND },
209
+ { "-borderwidth", TK_OPTION_PIXELS, Tk_Offset(ArrowElement,borderWidthObj),
210
+ DEFAULT_BORDERWIDTH },
211
+ { "-relief", TK_OPTION_RELIEF, Tk_Offset(ArrowElement,reliefObj),"raised" },
212
+ { NULL }
213
+ };
214
+
215
+ static void ArrowElementSize(
216
+ void *clientData, void *elementRecord, Tk_Window tkwin,
217
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
218
+ {
219
+ ArrowElement *arrow = elementRecord;
220
+ int size = 12;
221
+
222
+ Tk_GetPixelsFromObj(NULL, tkwin, arrow->sizeObj, &size);
223
+ *widthPtr = *heightPtr = size;
224
+ }
225
+
226
+ static void ArrowElementDraw(
227
+ void *clientData, void *elementRecord, Tk_Window tkwin,
228
+ Drawable d, Ttk_Box b, unsigned int state)
229
+ {
230
+ int direction = *(int *)clientData;
231
+ ArrowElement *arrow = elementRecord;
232
+ Tk_3DBorder border;
233
+ int borderWidth;
234
+ int relief = TK_RELIEF_RAISED;
235
+ int size;
236
+ XPoint points[3];
237
+
238
+ Tk_GetPixelsFromObj(NULL, tkwin, arrow->borderWidthObj, &borderWidth);
239
+ border = Tk_Get3DBorderFromObj(tkwin, arrow->borderObj);
240
+ Tk_GetReliefFromObj(NULL, arrow->reliefObj, &relief);
241
+
242
+ size = b.width < b.height ? b.width : b.height;
243
+
244
+ /*
245
+ * @@@ There are off-by-one pixel errors in the way these are drawn;
246
+ * @@@ need to take a look at Tk_Fill3DPolygon and X11 to find the
247
+ * @@@ exact rules.
248
+ */
249
+ switch (direction)
250
+ {
251
+ case ARROW_UP:
252
+ points[2].x = b.x; points[2].y = b.y + size;
253
+ points[1].x = b.x + size/2; points[1].y = b.y;
254
+ points[0].x = b.x + size; points[0].y = b.y + size;
255
+ break;
256
+ case ARROW_DOWN:
257
+ points[0].x = b.x; points[0].y = b.y;
258
+ points[1].x = b.x + size/2; points[1].y = b.y + size;
259
+ points[2].x = b.x + size; points[2].y = b.y;
260
+ break;
261
+ case ARROW_LEFT:
262
+ points[0].x = b.x; points[0].y = b.y + size / 2;
263
+ points[1].x = b.x + size; points[1].y = b.y + size;
264
+ points[2].x = b.x + size; points[2].y = b.y;
265
+ break;
266
+ case ARROW_RIGHT:
267
+ points[0].x = b.x + size; points[0].y = b.y + size / 2;
268
+ points[1].x = b.x; points[1].y = b.y;
269
+ points[2].x = b.x; points[2].y = b.y + size;
270
+ break;
271
+ }
272
+
273
+ Tk_Fill3DPolygon(tkwin, d, border, points, 3, borderWidth, relief);
274
+ }
275
+
276
+ static Ttk_ElementSpec ArrowElementSpec =
277
+ {
278
+ TK_STYLE_VERSION_2,
279
+ sizeof(ArrowElement),
280
+ ArrowElementOptions,
281
+ ArrowElementSize,
282
+ ArrowElementDraw
283
+ };
284
+
285
+
286
+ /*------------------------------------------------------------------------
287
+ * +++ Sash element (for ttk::panedwindow)
288
+ *
289
+ * NOTES:
290
+ *
291
+ * panedwindows with -orient horizontal use vertical sashes, and vice versa.
292
+ *
293
+ * Interpretation of -sashrelief 'groove' and 'ridge' are
294
+ * swapped wrt. the core panedwindow, which (I think) has them backwards.
295
+ *
296
+ * Default -sashrelief is sunken; the core panedwindow has default
297
+ * -sashrelief raised, but that looks wrong to me.
298
+ */
299
+
300
+ static Ttk_Orient SashClientData[] = {
301
+ TTK_ORIENT_HORIZONTAL, TTK_ORIENT_VERTICAL
302
+ };
303
+
304
+ typedef struct {
305
+ Tcl_Obj *borderObj; /* background color */
306
+ Tcl_Obj *sashReliefObj; /* sash relief */
307
+ Tcl_Obj *sashThicknessObj; /* overall thickness of sash */
308
+ Tcl_Obj *sashPadObj; /* padding on either side of handle */
309
+ Tcl_Obj *handleSizeObj; /* handle width and height */
310
+ Tcl_Obj *handlePadObj; /* handle's distance from edge */
311
+ } SashElement;
312
+
313
+ static Ttk_ElementOptionSpec SashOptions[] = {
314
+ { "-background", TK_OPTION_BORDER,
315
+ Tk_Offset(SashElement,borderObj), DEFAULT_BACKGROUND },
316
+ { "-sashrelief", TK_OPTION_RELIEF,
317
+ Tk_Offset(SashElement,sashReliefObj), "sunken" },
318
+ { "-sashthickness", TK_OPTION_PIXELS,
319
+ Tk_Offset(SashElement,sashThicknessObj), "6" },
320
+ { "-sashpad", TK_OPTION_PIXELS,
321
+ Tk_Offset(SashElement,sashPadObj), "2" },
322
+ { "-handlesize", TK_OPTION_PIXELS,
323
+ Tk_Offset(SashElement,handleSizeObj), "8" },
324
+ { "-handlepad", TK_OPTION_PIXELS,
325
+ Tk_Offset(SashElement,handlePadObj), "8" },
326
+ {0,0,0}
327
+ };
328
+
329
+ static void SashElementSize(
330
+ void *clientData, void *elementRecord, Tk_Window tkwin,
331
+ int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
332
+ {
333
+ SashElement *sash = elementRecord;
334
+ int sashPad = 2, sashThickness = 6, handleSize = 8;
335
+ int horizontal = *((Ttk_Orient*)clientData) == TTK_ORIENT_HORIZONTAL;
336
+
337
+ Tk_GetPixelsFromObj(NULL, tkwin, sash->sashThicknessObj, &sashThickness);
338
+ Tk_GetPixelsFromObj(NULL, tkwin, sash->handleSizeObj, &handleSize);
339
+ Tk_GetPixelsFromObj(NULL, tkwin, sash->sashPadObj, &sashPad);
340
+
341
+ if (sashThickness < handleSize + 2*sashPad)
342
+ sashThickness = handleSize + 2*sashPad;
343
+
344
+ if (horizontal)
345
+ *heightPtr = sashThickness;
346
+ else
347
+ *widthPtr = sashThickness;
348
+ }
349
+
350
+ static void SashElementDraw(
351
+ void *clientData, void *elementRecord, Tk_Window tkwin,
352
+ Drawable d, Ttk_Box b, Ttk_State state)
353
+ {
354
+ SashElement *sash = elementRecord;
355
+ Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, sash->borderObj);
356
+ GC gc1,gc2;
357
+ int relief = TK_RELIEF_RAISED;
358
+ int handleSize = 8, handlePad = 8;
359
+ int horizontal = *((Ttk_Orient*)clientData) == TTK_ORIENT_HORIZONTAL;
360
+ Ttk_Box hb;
361
+
362
+ Tk_GetPixelsFromObj(NULL, tkwin, sash->handleSizeObj, &handleSize);
363
+ Tk_GetPixelsFromObj(NULL, tkwin, sash->handlePadObj, &handlePad);
364
+ Tk_GetReliefFromObj(NULL, sash->sashReliefObj, &relief);
365
+
366
+ switch (relief) {
367
+ case TK_RELIEF_RAISED: case TK_RELIEF_RIDGE:
368
+ gc1 = Tk_3DBorderGC(tkwin, border, TK_3D_LIGHT_GC);
369
+ gc2 = Tk_3DBorderGC(tkwin, border, TK_3D_DARK_GC);
370
+ break;
371
+ case TK_RELIEF_SUNKEN: case TK_RELIEF_GROOVE:
372
+ gc1 = Tk_3DBorderGC(tkwin, border, TK_3D_DARK_GC);
373
+ gc2 = Tk_3DBorderGC(tkwin, border, TK_3D_LIGHT_GC);
374
+ break;
375
+ case TK_RELIEF_SOLID:
376
+ gc1 = gc2 = Tk_3DBorderGC(tkwin, border, TK_3D_DARK_GC);
377
+ break;
378
+ case TK_RELIEF_FLAT:
379
+ default:
380
+ gc1 = gc2 = Tk_3DBorderGC(tkwin, border, TK_3D_FLAT_GC);
381
+ break;
382
+ }
383
+
384
+ /* Draw sash line:
385
+ */
386
+ if (horizontal) {
387
+ int y = b.y + b.height/2 - 1;
388
+ XDrawLine(Tk_Display(tkwin), d, gc1, b.x, y, b.x+b.width, y); ++y;
389
+ XDrawLine(Tk_Display(tkwin), d, gc2, b.x, y, b.x+b.width, y);
390
+ } else {
391
+ int x = b.x + b.width/2 - 1;
392
+ XDrawLine(Tk_Display(tkwin), d, gc1, x, b.y, x, b.y+b.height); ++x;
393
+ XDrawLine(Tk_Display(tkwin), d, gc2, x, b.y, x, b.y+b.height);
394
+ }
395
+
396
+ /* Draw handle:
397
+ */
398
+ if (handleSize >= 0) {
399
+ if (horizontal) {
400
+ hb = Ttk_StickBox(b, handleSize, handleSize, TTK_STICK_W);
401
+ hb.x += handlePad;
402
+ } else {
403
+ hb = Ttk_StickBox(b, handleSize, handleSize, TTK_STICK_N);
404
+ hb.y += handlePad;
405
+ }
406
+ Tk_Fill3DRectangle(tkwin, d, border,
407
+ hb.x, hb.y, hb.width, hb.height, 1, TK_RELIEF_RAISED);
408
+ }
409
+ }
410
+
411
+ static Ttk_ElementSpec SashElementSpec = {
412
+ TK_STYLE_VERSION_2,
413
+ sizeof(SashElement),
414
+ SashOptions,
415
+ SashElementSize,
416
+ SashElementDraw
417
+ };
418
+
419
+ /*------------------------------------------------------------------------
420
+ * +++ Widget layouts.
421
+ */
422
+
423
+ TTK_BEGIN_LAYOUT_TABLE(LayoutTable)
424
+
425
+ TTK_LAYOUT("TButton",
426
+ TTK_GROUP("Button.highlight", TTK_FILL_BOTH,
427
+ TTK_GROUP("Button.border", TTK_FILL_BOTH|TTK_BORDER,
428
+ TTK_GROUP("Button.padding", TTK_FILL_BOTH,
429
+ TTK_NODE("Button.label", TTK_FILL_BOTH)))))
430
+
431
+ TTK_LAYOUT("TCheckbutton",
432
+ TTK_GROUP("Checkbutton.highlight", TTK_FILL_BOTH,
433
+ TTK_GROUP("Checkbutton.border", TTK_FILL_BOTH,
434
+ TTK_GROUP("Checkbutton.padding", TTK_FILL_BOTH,
435
+ TTK_NODE("Checkbutton.indicator", TTK_PACK_LEFT)
436
+ TTK_NODE("Checkbutton.label", TTK_PACK_LEFT|TTK_FILL_BOTH)))))
437
+
438
+ TTK_LAYOUT("TRadiobutton",
439
+ TTK_GROUP("Radiobutton.highlight", TTK_FILL_BOTH,
440
+ TTK_GROUP("Radiobutton.border", TTK_FILL_BOTH,
441
+ TTK_GROUP("Radiobutton.padding", TTK_FILL_BOTH,
442
+ TTK_NODE("Radiobutton.indicator", TTK_PACK_LEFT)
443
+ TTK_NODE("Radiobutton.label", TTK_PACK_LEFT|TTK_FILL_BOTH)))))
444
+
445
+ TTK_LAYOUT("TMenubutton",
446
+ TTK_GROUP("Menubutton.highlight", TTK_FILL_BOTH,
447
+ TTK_GROUP("Menubutton.border", TTK_FILL_BOTH,
448
+ TTK_NODE("Menubutton.indicator", TTK_PACK_RIGHT)
449
+ TTK_GROUP("Menubutton.padding", TTK_PACK_LEFT|TTK_EXPAND|TTK_FILL_X,
450
+ TTK_NODE("Menubutton.label", 0)))))
451
+
452
+ /* "classic" entry, includes highlight border */
453
+ TTK_LAYOUT("TEntry",
454
+ TTK_GROUP("Entry.highlight", TTK_FILL_BOTH,
455
+ TTK_GROUP("Entry.field", TTK_FILL_BOTH|TTK_BORDER,
456
+ TTK_GROUP("Entry.padding", TTK_FILL_BOTH,
457
+ TTK_NODE("Entry.textarea", TTK_FILL_BOTH)))))
458
+
459
+ /* Notebook tabs -- omit focus ring */
460
+ TTK_LAYOUT("Tab",
461
+ TTK_GROUP("Notebook.tab", TTK_FILL_BOTH,
462
+ TTK_GROUP("Notebook.padding", TTK_FILL_BOTH,
463
+ TTK_NODE("Notebook.label", TTK_FILL_BOTH))))
464
+
465
+ TTK_END_LAYOUT_TABLE
466
+
467
+ /* POSSIBLY: include Scale layouts w/focus border
468
+ */
469
+
470
+ /*------------------------------------------------------------------------
471
+ * TtkClassicTheme_Init --
472
+ * Install classic theme.
473
+ */
474
+
475
+ int TtkClassicTheme_Init(Tcl_Interp *interp)
476
+ {
477
+ Ttk_Theme theme = Ttk_CreateTheme(interp, "classic", NULL);
478
+
479
+ if (!theme) {
480
+ return TCL_ERROR;
481
+ }
482
+
483
+ /*
484
+ * Register elements:
485
+ */
486
+ Ttk_RegisterElement(interp, theme, "highlight",
487
+ &HighlightElementSpec, NULL);
488
+
489
+ Ttk_RegisterElement(interp, theme, "Button.border",
490
+ &ButtonBorderElementSpec, NULL);
491
+
492
+ Ttk_RegisterElement(interp, theme, "uparrow",
493
+ &ArrowElementSpec, &ArrowElements[0]);
494
+ Ttk_RegisterElement(interp, theme, "downarrow",
495
+ &ArrowElementSpec, &ArrowElements[1]);
496
+ Ttk_RegisterElement(interp, theme, "leftarrow",
497
+ &ArrowElementSpec, &ArrowElements[2]);
498
+ Ttk_RegisterElement(interp, theme, "rightarrow",
499
+ &ArrowElementSpec, &ArrowElements[3]);
500
+ Ttk_RegisterElement(interp, theme, "arrow",
501
+ &ArrowElementSpec, &ArrowElements[0]);
502
+
503
+ Ttk_RegisterElement(interp, theme, "hsash",
504
+ &SashElementSpec, &SashClientData[0]);
505
+ Ttk_RegisterElement(interp, theme, "vsash",
506
+ &SashElementSpec, &SashClientData[1]);
507
+
508
+ /*
509
+ * Register layouts:
510
+ */
511
+ Ttk_RegisterLayouts(theme, LayoutTable);
512
+
513
+ Tcl_PkgProvide(interp, "ttk::theme::classic", TILE_VERSION);
514
+
515
+ return TCL_OK;
516
+ }
517
+
518
+ /*EOF*/