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.
- data/.exrc +61 -0
- data/.gitignore +4 -0
- data/History.txt +6 -0
- data/Manifest.txt +46 -0
- data/Pratt.gemspec +351 -0
- data/README.txt +66 -0
- data/Rakefile +85 -0
- data/TODO +54 -0
- data/VERSION +1 -0
- data/bin/pratt.rb +13 -0
- data/config.rb +34 -0
- data/lib/pratt.rb +527 -0
- data/lib/pratt/array.rb +11 -0
- data/lib/pratt/string.rb +18 -0
- data/models/app.rb +40 -0
- data/models/customer.rb +24 -0
- data/models/payment.rb +22 -0
- data/models/pratt.rb +19 -0
- data/models/project.rb +82 -0
- data/models/whence.rb +70 -0
- data/pkgs/tile-0.8.2.tar.gz +0 -0
- data/pkgs/tile-0.8.2/ANNOUNCE.txt +95 -0
- data/pkgs/tile-0.8.2/ChangeLog +4651 -0
- data/pkgs/tile-0.8.2/Makefile +250 -0
- data/pkgs/tile-0.8.2/Makefile.in +250 -0
- data/pkgs/tile-0.8.2/README.txt +86 -0
- data/pkgs/tile-0.8.2/aclocal.m4 +2 -0
- data/pkgs/tile-0.8.2/altTheme.o +0 -0
- data/pkgs/tile-0.8.2/blink.o +0 -0
- data/pkgs/tile-0.8.2/button.o +0 -0
- data/pkgs/tile-0.8.2/cache.o +0 -0
- data/pkgs/tile-0.8.2/clamTheme.o +0 -0
- data/pkgs/tile-0.8.2/classicTheme.o +0 -0
- data/pkgs/tile-0.8.2/config.log +1330 -0
- data/pkgs/tile-0.8.2/config.status +795 -0
- data/pkgs/tile-0.8.2/configure +15248 -0
- data/pkgs/tile-0.8.2/configure.in +89 -0
- data/pkgs/tile-0.8.2/demos/autocomplete.tcl +59 -0
- data/pkgs/tile-0.8.2/demos/demo.tcl +870 -0
- data/pkgs/tile-0.8.2/demos/dirbrowser.tcl +167 -0
- data/pkgs/tile-0.8.2/demos/dlgtest.tcl +97 -0
- data/pkgs/tile-0.8.2/demos/iconlib.tcl +110 -0
- data/pkgs/tile-0.8.2/demos/repeater.tcl +117 -0
- data/pkgs/tile-0.8.2/demos/toolbutton.tcl +101 -0
- data/pkgs/tile-0.8.2/doc/Geometry.3 +230 -0
- data/pkgs/tile-0.8.2/doc/INDEX.MAP +153 -0
- data/pkgs/tile-0.8.2/doc/Makefile +36 -0
- data/pkgs/tile-0.8.2/doc/TILE.XML +45 -0
- data/pkgs/tile-0.8.2/doc/Theme.3 +34 -0
- data/pkgs/tile-0.8.2/doc/button.n +75 -0
- data/pkgs/tile-0.8.2/doc/checkbutton.n +61 -0
- data/pkgs/tile-0.8.2/doc/combobox.n +98 -0
- data/pkgs/tile-0.8.2/doc/converting.txt +97 -0
- data/pkgs/tile-0.8.2/doc/dialog.n +122 -0
- data/pkgs/tile-0.8.2/doc/entry.n +438 -0
- data/pkgs/tile-0.8.2/doc/frame.n +43 -0
- data/pkgs/tile-0.8.2/doc/html/Geometry.html +304 -0
- data/pkgs/tile-0.8.2/doc/html/Theme.html +48 -0
- data/pkgs/tile-0.8.2/doc/html/button.html +120 -0
- data/pkgs/tile-0.8.2/doc/html/category-index.html +18 -0
- data/pkgs/tile-0.8.2/doc/html/checkbutton.html +94 -0
- data/pkgs/tile-0.8.2/doc/html/combobox.html +164 -0
- data/pkgs/tile-0.8.2/doc/html/converting.txt +97 -0
- data/pkgs/tile-0.8.2/doc/html/dialog.html +159 -0
- data/pkgs/tile-0.8.2/doc/html/entry.html +613 -0
- data/pkgs/tile-0.8.2/doc/html/frame.html +76 -0
- data/pkgs/tile-0.8.2/doc/html/image.html +100 -0
- data/pkgs/tile-0.8.2/doc/html/index.html +25 -0
- data/pkgs/tile-0.8.2/doc/html/keyword-index.html +228 -0
- data/pkgs/tile-0.8.2/doc/html/label.html +133 -0
- data/pkgs/tile-0.8.2/doc/html/labelframe.html +91 -0
- data/pkgs/tile-0.8.2/doc/html/manpage.css +212 -0
- data/pkgs/tile-0.8.2/doc/html/menubutton.html +63 -0
- data/pkgs/tile-0.8.2/doc/html/notebook.html +280 -0
- data/pkgs/tile-0.8.2/doc/html/paned.html +149 -0
- data/pkgs/tile-0.8.2/doc/html/progressbar.html +138 -0
- data/pkgs/tile-0.8.2/doc/html/radiobutton.html +89 -0
- data/pkgs/tile-0.8.2/doc/html/scrollbar.html +221 -0
- data/pkgs/tile-0.8.2/doc/html/separator.html +48 -0
- data/pkgs/tile-0.8.2/doc/html/sizegrip.html +62 -0
- data/pkgs/tile-0.8.2/doc/html/style.html +172 -0
- data/pkgs/tile-0.8.2/doc/html/tile-intro.html +164 -0
- data/pkgs/tile-0.8.2/doc/html/treeview.html +634 -0
- data/pkgs/tile-0.8.2/doc/html/widget.html +342 -0
- data/pkgs/tile-0.8.2/doc/image.n +81 -0
- data/pkgs/tile-0.8.2/doc/internals.txt +409 -0
- data/pkgs/tile-0.8.2/doc/label.n +75 -0
- data/pkgs/tile-0.8.2/doc/labelframe.n +64 -0
- data/pkgs/tile-0.8.2/doc/man.macros +239 -0
- data/pkgs/tile-0.8.2/doc/menubutton.n +41 -0
- data/pkgs/tile-0.8.2/doc/notebook.n +188 -0
- data/pkgs/tile-0.8.2/doc/paned.n +95 -0
- data/pkgs/tile-0.8.2/doc/progressbar.n +79 -0
- data/pkgs/tile-0.8.2/doc/radiobutton.n +57 -0
- data/pkgs/tile-0.8.2/doc/scrollbar.n +160 -0
- data/pkgs/tile-0.8.2/doc/separator.n +30 -0
- data/pkgs/tile-0.8.2/doc/sizegrip.n +53 -0
- data/pkgs/tile-0.8.2/doc/style.n +119 -0
- data/pkgs/tile-0.8.2/doc/tile-intro.n +165 -0
- data/pkgs/tile-0.8.2/doc/tmml.options +4 -0
- data/pkgs/tile-0.8.2/doc/treeview.n +415 -0
- data/pkgs/tile-0.8.2/doc/widget.n +227 -0
- data/pkgs/tile-0.8.2/doc/xml/Geometry.tmml +379 -0
- data/pkgs/tile-0.8.2/doc/xml/INDEX.MAP +153 -0
- data/pkgs/tile-0.8.2/doc/xml/Theme.tmml +63 -0
- data/pkgs/tile-0.8.2/doc/xml/button.tmml +134 -0
- data/pkgs/tile-0.8.2/doc/xml/checkbutton.tmml +119 -0
- data/pkgs/tile-0.8.2/doc/xml/combobox.tmml +184 -0
- data/pkgs/tile-0.8.2/doc/xml/dialog.tmml +195 -0
- data/pkgs/tile-0.8.2/doc/xml/entry.tmml +630 -0
- data/pkgs/tile-0.8.2/doc/xml/frame.tmml +98 -0
- data/pkgs/tile-0.8.2/doc/xml/image.tmml +101 -0
- data/pkgs/tile-0.8.2/doc/xml/label.tmml +154 -0
- data/pkgs/tile-0.8.2/doc/xml/labelframe.tmml +116 -0
- data/pkgs/tile-0.8.2/doc/xml/menubutton.tmml +80 -0
- data/pkgs/tile-0.8.2/doc/xml/notebook.tmml +306 -0
- data/pkgs/tile-0.8.2/doc/xml/paned.tmml +154 -0
- data/pkgs/tile-0.8.2/doc/xml/progressbar.tmml +151 -0
- data/pkgs/tile-0.8.2/doc/xml/radiobutton.tmml +109 -0
- data/pkgs/tile-0.8.2/doc/xml/scrollbar.tmml +233 -0
- data/pkgs/tile-0.8.2/doc/xml/separator.tmml +59 -0
- data/pkgs/tile-0.8.2/doc/xml/sizegrip.tmml +82 -0
- data/pkgs/tile-0.8.2/doc/xml/style.tmml +171 -0
- data/pkgs/tile-0.8.2/doc/xml/tile-intro.tmml +192 -0
- data/pkgs/tile-0.8.2/doc/xml/treeview.tmml +604 -0
- data/pkgs/tile-0.8.2/doc/xml/widget.tmml +372 -0
- data/pkgs/tile-0.8.2/entry.o +0 -0
- data/pkgs/tile-0.8.2/frame.o +0 -0
- data/pkgs/tile-0.8.2/generic/Makefile.in +221 -0
- data/pkgs/tile-0.8.2/generic/TODO +493 -0
- data/pkgs/tile-0.8.2/generic/altTheme.c +1172 -0
- data/pkgs/tile-0.8.2/generic/blink.c +168 -0
- data/pkgs/tile-0.8.2/generic/button.c +858 -0
- data/pkgs/tile-0.8.2/generic/cache.c +354 -0
- data/pkgs/tile-0.8.2/generic/clamTheme.c +974 -0
- data/pkgs/tile-0.8.2/generic/classicTheme.c +518 -0
- data/pkgs/tile-0.8.2/generic/configure +10334 -0
- data/pkgs/tile-0.8.2/generic/configure.in +100 -0
- data/pkgs/tile-0.8.2/generic/entry.c +1922 -0
- data/pkgs/tile-0.8.2/generic/frame.c +648 -0
- data/pkgs/tile-0.8.2/generic/gunk.h +44 -0
- data/pkgs/tile-0.8.2/generic/image.c +416 -0
- data/pkgs/tile-0.8.2/generic/label.c +663 -0
- data/pkgs/tile-0.8.2/generic/layout.c +1215 -0
- data/pkgs/tile-0.8.2/generic/manager.c +554 -0
- data/pkgs/tile-0.8.2/generic/manager.h +91 -0
- data/pkgs/tile-0.8.2/generic/notebook.c +1380 -0
- data/pkgs/tile-0.8.2/generic/paned.c +958 -0
- data/pkgs/tile-0.8.2/generic/pkgIndex.tcl.in +7 -0
- data/pkgs/tile-0.8.2/generic/progress.c +549 -0
- data/pkgs/tile-0.8.2/generic/scale.c +526 -0
- data/pkgs/tile-0.8.2/generic/scroll.c +253 -0
- data/pkgs/tile-0.8.2/generic/scrollbar.c +346 -0
- data/pkgs/tile-0.8.2/generic/separator.c +132 -0
- data/pkgs/tile-0.8.2/generic/square.c +306 -0
- data/pkgs/tile-0.8.2/generic/tagset.c +147 -0
- data/pkgs/tile-0.8.2/generic/tile.c +296 -0
- data/pkgs/tile-0.8.2/generic/tkElements.c +1280 -0
- data/pkgs/tile-0.8.2/generic/tkTheme.c +1708 -0
- data/pkgs/tile-0.8.2/generic/tkTheme.h +419 -0
- data/pkgs/tile-0.8.2/generic/tkThemeInt.h +45 -0
- data/pkgs/tile-0.8.2/generic/tkstate.c +268 -0
- data/pkgs/tile-0.8.2/generic/trace.c +145 -0
- data/pkgs/tile-0.8.2/generic/track.c +174 -0
- data/pkgs/tile-0.8.2/generic/treeview.c +3211 -0
- data/pkgs/tile-0.8.2/generic/ttk.decls +154 -0
- data/pkgs/tile-0.8.2/generic/ttkDecls.h +340 -0
- data/pkgs/tile-0.8.2/generic/ttkStubInit.c +61 -0
- data/pkgs/tile-0.8.2/generic/ttkStubLib.c +70 -0
- data/pkgs/tile-0.8.2/generic/widget.c +785 -0
- data/pkgs/tile-0.8.2/generic/widget.h +263 -0
- data/pkgs/tile-0.8.2/image.o +0 -0
- data/pkgs/tile-0.8.2/label.o +0 -0
- data/pkgs/tile-0.8.2/layout.o +0 -0
- data/pkgs/tile-0.8.2/library/altTheme.tcl +101 -0
- data/pkgs/tile-0.8.2/library/aquaTheme.tcl +62 -0
- data/pkgs/tile-0.8.2/library/button.tcl +85 -0
- data/pkgs/tile-0.8.2/library/clamTheme.tcl +139 -0
- data/pkgs/tile-0.8.2/library/classicTheme.tcl +108 -0
- data/pkgs/tile-0.8.2/library/combobox.tcl +439 -0
- data/pkgs/tile-0.8.2/library/cursors.tcl +36 -0
- data/pkgs/tile-0.8.2/library/defaults.tcl +118 -0
- data/pkgs/tile-0.8.2/library/dialog.tcl +274 -0
- data/pkgs/tile-0.8.2/library/entry.tcl +580 -0
- data/pkgs/tile-0.8.2/library/fonts.tcl +153 -0
- data/pkgs/tile-0.8.2/library/icons.tcl +105 -0
- data/pkgs/tile-0.8.2/library/keynav.tcl +192 -0
- data/pkgs/tile-0.8.2/library/menubutton.tcl +171 -0
- data/pkgs/tile-0.8.2/library/notebook.tcl +193 -0
- data/pkgs/tile-0.8.2/library/paned.tcl +87 -0
- data/pkgs/tile-0.8.2/library/progress.tcl +51 -0
- data/pkgs/tile-0.8.2/library/scale.tcl +54 -0
- data/pkgs/tile-0.8.2/library/scrollbar.tcl +125 -0
- data/pkgs/tile-0.8.2/library/sizegrip.tcl +77 -0
- data/pkgs/tile-0.8.2/library/tile.tcl +211 -0
- data/pkgs/tile-0.8.2/library/treeview.tcl +382 -0
- data/pkgs/tile-0.8.2/library/utils.tcl +254 -0
- data/pkgs/tile-0.8.2/library/winTheme.tcl +77 -0
- data/pkgs/tile-0.8.2/library/xpTheme.tcl +63 -0
- data/pkgs/tile-0.8.2/libtile0.8.2.so +0 -0
- data/pkgs/tile-0.8.2/libttkstub.a +0 -0
- data/pkgs/tile-0.8.2/license.terms +24 -0
- data/pkgs/tile-0.8.2/macosx/aquaTheme.c +1076 -0
- data/pkgs/tile-0.8.2/manager.o +0 -0
- data/pkgs/tile-0.8.2/notebook.o +0 -0
- data/pkgs/tile-0.8.2/paned.o +0 -0
- data/pkgs/tile-0.8.2/pkgIndex.tcl +3 -0
- data/pkgs/tile-0.8.2/progress.o +0 -0
- data/pkgs/tile-0.8.2/scale.o +0 -0
- data/pkgs/tile-0.8.2/scroll.o +0 -0
- data/pkgs/tile-0.8.2/scrollbar.o +0 -0
- data/pkgs/tile-0.8.2/separator.o +0 -0
- data/pkgs/tile-0.8.2/tagset.o +0 -0
- data/pkgs/tile-0.8.2/tclconfig/install-sh +119 -0
- data/pkgs/tile-0.8.2/tclconfig/tcl.m4 +4069 -0
- data/pkgs/tile-0.8.2/tclconfig/teax.m4 +109 -0
- data/pkgs/tile-0.8.2/tests/all.tcl +18 -0
- data/pkgs/tile-0.8.2/tests/bwidget.test +103 -0
- data/pkgs/tile-0.8.2/tests/cbtest.tcl +125 -0
- data/pkgs/tile-0.8.2/tests/combobox.test +51 -0
- data/pkgs/tile-0.8.2/tests/compound.tcl +92 -0
- data/pkgs/tile-0.8.2/tests/entry.test +285 -0
- data/pkgs/tile-0.8.2/tests/entrytest.tcl +78 -0
- data/pkgs/tile-0.8.2/tests/image.test +94 -0
- data/pkgs/tile-0.8.2/tests/labelframe.tcl +41 -0
- data/pkgs/tile-0.8.2/tests/labelframe.test +137 -0
- data/pkgs/tile-0.8.2/tests/layout.test +33 -0
- data/pkgs/tile-0.8.2/tests/misc.test +35 -0
- data/pkgs/tile-0.8.2/tests/nbtest.tcl +66 -0
- data/pkgs/tile-0.8.2/tests/notebook.test +500 -0
- data/pkgs/tile-0.8.2/tests/paned.test +298 -0
- data/pkgs/tile-0.8.2/tests/progress.test +92 -0
- data/pkgs/tile-0.8.2/tests/pwtest.tcl +90 -0
- data/pkgs/tile-0.8.2/tests/sbtest.tcl +79 -0
- data/pkgs/tile-0.8.2/tests/scrollbar.test +77 -0
- data/pkgs/tile-0.8.2/tests/sgtest.tcl +52 -0
- data/pkgs/tile-0.8.2/tests/testutils.tcl +20 -0
- data/pkgs/tile-0.8.2/tests/tile.test +674 -0
- data/pkgs/tile-0.8.2/tests/treetags.test +78 -0
- data/pkgs/tile-0.8.2/tests/treeview.test +563 -0
- data/pkgs/tile-0.8.2/tests/tvtest.tcl +332 -0
- data/pkgs/tile-0.8.2/tests/validate.test +278 -0
- data/pkgs/tile-0.8.2/tile.o +0 -0
- data/pkgs/tile-0.8.2/tkElements.o +0 -0
- data/pkgs/tile-0.8.2/tkTheme.o +0 -0
- data/pkgs/tile-0.8.2/tkstate.o +0 -0
- data/pkgs/tile-0.8.2/tools/genStubs.tcl +861 -0
- data/pkgs/tile-0.8.2/trace.o +0 -0
- data/pkgs/tile-0.8.2/track.o +0 -0
- data/pkgs/tile-0.8.2/treeview.o +0 -0
- data/pkgs/tile-0.8.2/ttkStubInit.o +0 -0
- data/pkgs/tile-0.8.2/ttkStubLib.o +0 -0
- data/pkgs/tile-0.8.2/widget.o +0 -0
- data/pkgs/tile-0.8.2/win/Tile.dsp +261 -0
- data/pkgs/tile-0.8.2/win/makefile.vc +527 -0
- data/pkgs/tile-0.8.2/win/monitor.c +164 -0
- data/pkgs/tile-0.8.2/win/nmakehlp.c +483 -0
- data/pkgs/tile-0.8.2/win/rules.vc +512 -0
- data/pkgs/tile-0.8.2/win/tile.rc +40 -0
- data/pkgs/tile-0.8.2/win/winTheme.c +734 -0
- data/pkgs/tile-0.8.2/win/xpTheme.c +1029 -0
- data/spec/app_spec.rb +48 -0
- data/spec/customer_spec.rb +31 -0
- data/spec/fixtures/graph.expectation +18 -0
- data/spec/payment_spec.rb +19 -0
- data/spec/pratt_spec.rb +148 -0
- data/spec/project_spec.rb +163 -0
- data/spec/rcov.opts +0 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/whence_spec.rb +54 -0
- data/tasks/pratt.rb +84 -0
- data/templates/model.eruby +12 -0
- data/templates/spec.eruby +8 -0
- data/views/env.rb +22 -0
- data/views/graph.eruby +20 -0
- data/views/invoice.eruby +148 -0
- data/views/main.rb +92 -0
- data/views/pid.eruby +3 -0
- data/views/pop.rb +94 -0
- data/views/pop2.rb +75 -0
- data/views/raw.eruby +11 -0
- metadata +390 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#
|
|
2
|
+
# side-by-side interactive test of Tk vs. Tile scrollbars.
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
lappend auto_path .
|
|
6
|
+
|
|
7
|
+
package require Tk
|
|
8
|
+
package require tile
|
|
9
|
+
|
|
10
|
+
proc sbstub {sb cmd number {units units}} {
|
|
11
|
+
# puts [info level 0]
|
|
12
|
+
sbstub.$cmd $sb $number $units
|
|
13
|
+
}
|
|
14
|
+
proc sbstub.moveto {sb number _} {
|
|
15
|
+
$sb set $number [expr {$number + 0.5}]
|
|
16
|
+
# puts "[$sb get]"
|
|
17
|
+
}
|
|
18
|
+
proc sbstub.scroll {sb number units} {
|
|
19
|
+
if {$units eq "pages"} {
|
|
20
|
+
set delta 0.2
|
|
21
|
+
} else {
|
|
22
|
+
set delta 0.05
|
|
23
|
+
}
|
|
24
|
+
set current [$sb get]
|
|
25
|
+
set new0 [expr {[lindex $current 0] + $delta*$number}]
|
|
26
|
+
set new1 [expr {[lindex $current 1] + $delta*$number}]
|
|
27
|
+
$sb set $new0 $new1 ;
|
|
28
|
+
# puts "$current - $new0 $new1 - [$sb get]"
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
wm geometry . 400x200
|
|
32
|
+
|
|
33
|
+
pack [scrollbar .hsb -orient horizontal -command [list sbstub .hsb]] \
|
|
34
|
+
-side top -expand false -fill x
|
|
35
|
+
pack [tscrollbar .thsb -orient horizontal -command [list sbstub .thsb]] \
|
|
36
|
+
-side top -expand false -fill x
|
|
37
|
+
pack [scrollbar .vsb -orient vertical -command [list sbstub .vsb]] \
|
|
38
|
+
-side left -expand false -fill y
|
|
39
|
+
pack [tscrollbar .tvsb -orient vertical -command [list sbstub .tvsb]] \
|
|
40
|
+
-side left -expand false -fill y
|
|
41
|
+
|
|
42
|
+
pack [set c [frame .client]] -expand true -fill both
|
|
43
|
+
|
|
44
|
+
grid \
|
|
45
|
+
[label $c.li -text "Element:" -anchor w] \
|
|
46
|
+
[entry $c.i -textvariable ::identified] \
|
|
47
|
+
-sticky ew
|
|
48
|
+
|
|
49
|
+
grid \
|
|
50
|
+
[label $c.lf -text "Fraction:" -anchor w] \
|
|
51
|
+
[entry $c.f -textvariable ::fraction] \
|
|
52
|
+
-sticky ew
|
|
53
|
+
|
|
54
|
+
grid \
|
|
55
|
+
[label $c.lr -text "Range:" -anchor w] \
|
|
56
|
+
[entry $c.r -textvariable ::range] \
|
|
57
|
+
-sticky ew
|
|
58
|
+
|
|
59
|
+
grid columnconfigure $c 1 -weight 1
|
|
60
|
+
|
|
61
|
+
bind Test <ButtonPress-1> { sbdebug %W %x %y }
|
|
62
|
+
bind Test <B1-Motion> { sbdebug %W %x %y }
|
|
63
|
+
bind Test <B2-Motion> { sbdebug %W %x %y }
|
|
64
|
+
|
|
65
|
+
proc sbdebug {W x y} {
|
|
66
|
+
set ::identified [$W identify $x $y]
|
|
67
|
+
set ::fraction [$W fraction $x $y]
|
|
68
|
+
set ::range [$W get]
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
foreach w {.vsb .hsb .tvsb .thsb} {
|
|
72
|
+
bindtags $w [linsert [bindtags $w] 0 Test]
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.vsb set 0 0.5
|
|
76
|
+
.hsb set 0 0.5
|
|
77
|
+
.tvsb set 0 0.5
|
|
78
|
+
.thsb set 0 0.5
|
|
79
|
+
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#
|
|
2
|
+
# scrollbar.test,v 1.9 2007/11/18 17:09:35 jenglish Exp
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
package require Tk
|
|
6
|
+
package require tcltest ; namespace import -force tcltest::*
|
|
7
|
+
loadTestedCommands
|
|
8
|
+
|
|
9
|
+
lappend auto_path .
|
|
10
|
+
package require tile
|
|
11
|
+
|
|
12
|
+
testConstraint coreScrollbar [expr {[tk windowingsystem] eq "aqua"}]
|
|
13
|
+
|
|
14
|
+
test scrollbar-swapout-1 "Use core scrollbars on OSX..." -constraints {
|
|
15
|
+
coreScrollbar
|
|
16
|
+
} -body {
|
|
17
|
+
ttk::scrollbar .sb -command "yadda"
|
|
18
|
+
list [winfo class .sb] [.sb cget -command]
|
|
19
|
+
} -result [list Scrollbar yadda] -cleanup {
|
|
20
|
+
destroy .sb
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
test scrollbar-swapout-2 "... unless -style is specified ..." -constraints {
|
|
24
|
+
coreScrollbar
|
|
25
|
+
} -body {
|
|
26
|
+
ttk::style layout Vertical.Custom.TScrollbar \
|
|
27
|
+
[ttk::style layout Vertical.TScrollbar] ; # See #1833339
|
|
28
|
+
ttk::scrollbar .sb -command "yadda" -style Custom.TScrollbar
|
|
29
|
+
list [winfo class .sb] [.sb cget -command] [.sb cget -style]
|
|
30
|
+
} -result [list TScrollbar yadda Custom.TScrollbar] -cleanup {
|
|
31
|
+
destroy .sb
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
test scrollbar-swapout-3 "... or -class." -constraints {
|
|
35
|
+
coreScrollbar
|
|
36
|
+
} -body {
|
|
37
|
+
ttk::scrollbar .sb -command "yadda" -class Custom.TScrollbar
|
|
38
|
+
list [winfo class .sb] [.sb cget -command]
|
|
39
|
+
} -result [list Custom.TScrollbar yadda] -cleanup {
|
|
40
|
+
destroy .sb
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
test scrollbar-1.0 "Setup" -body {
|
|
45
|
+
ttk::scrollbar .tsb
|
|
46
|
+
} -result .tsb
|
|
47
|
+
|
|
48
|
+
test scrollbar-1.1 "Set method" -body {
|
|
49
|
+
.tsb set 0.2 0.4
|
|
50
|
+
.tsb get
|
|
51
|
+
} -result [list 0.2 0.4]
|
|
52
|
+
|
|
53
|
+
test scrollbar-1.2 "Set orientation" -body {
|
|
54
|
+
.tsb configure -orient vertical
|
|
55
|
+
set w [winfo reqwidth .tsb] ; set h [winfo reqheight .tsb]
|
|
56
|
+
expr {$h > $w}
|
|
57
|
+
} -result 1
|
|
58
|
+
|
|
59
|
+
test scrollbar-1.3 "Change orientation" -body {
|
|
60
|
+
.tsb configure -orient horizontal
|
|
61
|
+
set w [winfo reqwidth .tsb] ; set h [winfo reqheight .tsb]
|
|
62
|
+
expr {$h < $w}
|
|
63
|
+
} -result 1
|
|
64
|
+
|
|
65
|
+
#
|
|
66
|
+
# Scale tests:
|
|
67
|
+
#
|
|
68
|
+
|
|
69
|
+
test scale-1.0 "Self-destruction" -body {
|
|
70
|
+
trace variable v w { destroy .s ;# }
|
|
71
|
+
ttk::scale .s -variable v
|
|
72
|
+
pack .s ; update
|
|
73
|
+
.s set 1 ; update
|
|
74
|
+
} -returnCodes 1 -match glob -result "*"
|
|
75
|
+
|
|
76
|
+
tcltest::cleanupTests
|
|
77
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#
|
|
2
|
+
# sgtest.tcl,v 1.1 2006/08/05 23:18:30 jenglish Exp
|
|
3
|
+
#
|
|
4
|
+
# Interactive test driver for sizegrip widget.
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
package require Tk
|
|
8
|
+
package require tile
|
|
9
|
+
|
|
10
|
+
source [file join [file dirname [info script]] testutils.tcl]
|
|
11
|
+
|
|
12
|
+
variable setgrid 0
|
|
13
|
+
proc setsetgrid {w} { $w configure -setgrid $::setgrid }
|
|
14
|
+
|
|
15
|
+
variable wmgeometry
|
|
16
|
+
bind . <Configure> { set ::wmgeometry [wm geometry .] }
|
|
17
|
+
|
|
18
|
+
set tb [ttk::frame .toolbar]
|
|
19
|
+
pack \
|
|
20
|
+
[ttk::checkbutton $tb.cb -text "Setgrid?" \
|
|
21
|
+
-command [list setsetgrid .tt] -variable setgrid] \
|
|
22
|
+
[ttk::button $tb.tl -text "+50+50" \
|
|
23
|
+
-command [list wm geometry . +50+50]] \
|
|
24
|
+
[ttk::button $tb.br -text "-50-50" \
|
|
25
|
+
-command [list wm geometry . -50-50]] \
|
|
26
|
+
[ttk::button $tb.cg -text "Reset geometry" \
|
|
27
|
+
-command [list wm geometry . {}]] \
|
|
28
|
+
-side left -anchor w -padx 3 -pady 3
|
|
29
|
+
pack \
|
|
30
|
+
[ttk::label $tb.geometry -width 20 -textvariable wmgeometry] \
|
|
31
|
+
-side right
|
|
32
|
+
|
|
33
|
+
ttk::sizegrip .grip
|
|
34
|
+
ttk::scrollbar .vsb -orient vertical -command [list .tt yview]
|
|
35
|
+
ttk::scrollbar .hsb -orient horizontal -command [list .tt xview]
|
|
36
|
+
text .tt -setgrid $setgrid -wrap none \
|
|
37
|
+
-xscrollcommand [list .hsb set] -yscrollcommand [list .vsb set] \
|
|
38
|
+
-highlightthickness 0
|
|
39
|
+
|
|
40
|
+
.tt insert end [read [set fp [open [info script]]]] ; close $fp
|
|
41
|
+
|
|
42
|
+
grid .toolbar -row 0 -columnspan 2 -sticky nsew
|
|
43
|
+
grid .tt -row 1 -column 0 -sticky nsew
|
|
44
|
+
grid .vsb -row 1 -column 1 -sticky nse
|
|
45
|
+
grid .hsb -row 2 -column 0 -sticky sew
|
|
46
|
+
grid .grip -row 2 -column 1 -sticky senw ;# -sticky se
|
|
47
|
+
grid columnconfigure . 0 -weight 1
|
|
48
|
+
grid rowconfigure . 1 -weight 1
|
|
49
|
+
|
|
50
|
+
bind all <KeyPress-Escape> [list destroy .]
|
|
51
|
+
|
|
52
|
+
#*EOF*
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#
|
|
2
|
+
# testutils.tcl,v 1.2 2006/11/24 19:42:28 jenglish Exp
|
|
3
|
+
#
|
|
4
|
+
# Miscellaneous utilities for interactive tests.
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# Global binding: <Alt-KeyPress-t> cycles the current theme.
|
|
9
|
+
#
|
|
10
|
+
variable currentTheme alt
|
|
11
|
+
proc CycleTheme {} {
|
|
12
|
+
variable currentTheme
|
|
13
|
+
set themes [tile::availableThemes]
|
|
14
|
+
set i [expr {([lsearch $themes $currentTheme] + 1) % [llength $themes]}]
|
|
15
|
+
tile::setTheme [set currentTheme [lindex $themes $i]]
|
|
16
|
+
puts "Theme: $currentTheme"
|
|
17
|
+
}
|
|
18
|
+
bind all <Alt-KeyPress-t> { CycleTheme }
|
|
19
|
+
|
|
20
|
+
lappend auto_path /usr/local/lib
|
|
@@ -0,0 +1,674 @@
|
|
|
1
|
+
|
|
2
|
+
package require Tk
|
|
3
|
+
package require tcltest ; namespace import -force tcltest::*
|
|
4
|
+
loadTestedCommands
|
|
5
|
+
|
|
6
|
+
lappend auto_path .
|
|
7
|
+
package require tile
|
|
8
|
+
|
|
9
|
+
proc skip args {}
|
|
10
|
+
proc ok {} { return }
|
|
11
|
+
|
|
12
|
+
variable widgetClasses {
|
|
13
|
+
button checkbutton radiobutton menubutton label entry
|
|
14
|
+
frame labelframe scrollbar
|
|
15
|
+
notebook progressbar combobox separator
|
|
16
|
+
panedwindow treeview sizegrip
|
|
17
|
+
scale
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
proc bgerror {error} {
|
|
21
|
+
variable bgerror $error
|
|
22
|
+
variable bgerrorInfo $::errorInfo
|
|
23
|
+
variable bgerrorCode $::errorCode
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
# Self-destruct tests.
|
|
27
|
+
# Do these early, so any memory corruption has a longer time to cause a crash.
|
|
28
|
+
#
|
|
29
|
+
proc selfdestruct {w args} {
|
|
30
|
+
destroy $w
|
|
31
|
+
}
|
|
32
|
+
test ttk-6.1 "Self-destructing checkbutton" -body {
|
|
33
|
+
pack [ttk::checkbutton .sd -text "Self-destruction" -variable ::sd]
|
|
34
|
+
trace variable sd w [list selfdestruct .sd]
|
|
35
|
+
update
|
|
36
|
+
.sd invoke
|
|
37
|
+
} -returnCodes 1
|
|
38
|
+
test ttk-6.2 "Checkbutton self-destructed" -body {
|
|
39
|
+
winfo exists .sd
|
|
40
|
+
} -result 0
|
|
41
|
+
|
|
42
|
+
test ttk-6.3 "Test package cleanup" -body {
|
|
43
|
+
interp create foo
|
|
44
|
+
foo eval { if {[catch {package require Tk}]} { load {} Tk } }
|
|
45
|
+
foo eval [package ifneeded tile [package provide tile]]
|
|
46
|
+
foo eval { destroy . }
|
|
47
|
+
interp delete foo
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
test ttk-6.4 "Defeat evil intentions" -body {
|
|
51
|
+
trace variable OUCH r { kill.b }
|
|
52
|
+
proc kill.b {args} { destroy .b }
|
|
53
|
+
pack [ttk::checkbutton .b]
|
|
54
|
+
.b configure -variable OUCH
|
|
55
|
+
# At this point, .b should be gone.
|
|
56
|
+
.b invoke
|
|
57
|
+
list [set OUCH] [winfo exists .b]
|
|
58
|
+
# Mostly we just care that we haven't crashed the interpreter.
|
|
59
|
+
#
|
|
60
|
+
} -returnCodes error -match glob -result "*"
|
|
61
|
+
|
|
62
|
+
test ttk-6.5 "Clean up -textvariable traces" -body {
|
|
63
|
+
foreach class {ttk::button ttk::checkbutton ttk::radiobutton} {
|
|
64
|
+
$class .b1 -textvariable V
|
|
65
|
+
set V "asdf"
|
|
66
|
+
destroy .b1
|
|
67
|
+
set V ""
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
test ttk-6.6 "Bad color spec in styles" -body {
|
|
72
|
+
pack [ttk::button .b1 -text Hi!]
|
|
73
|
+
ttk::style configure TButton -foreground badColor
|
|
74
|
+
event generate .b1 <Expose>
|
|
75
|
+
update
|
|
76
|
+
ttk::style configure TButton -foreground black
|
|
77
|
+
destroy .b1
|
|
78
|
+
set ::bgerror
|
|
79
|
+
} -result {unknown color name "badColor"}
|
|
80
|
+
|
|
81
|
+
test ttk-6.7 "Basic destruction test" -body {
|
|
82
|
+
foreach widget $widgetClasses {
|
|
83
|
+
ttk::$widget .w
|
|
84
|
+
pack .w
|
|
85
|
+
destroy .w
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
test ttk-6.8 "Button command removes itself" -body {
|
|
90
|
+
ttk::button .b -command ".b configure -command {}; set ::A {it worked}"
|
|
91
|
+
.b invoke
|
|
92
|
+
destroy .b
|
|
93
|
+
set ::A
|
|
94
|
+
} -result {it worked}
|
|
95
|
+
|
|
96
|
+
test ttk-6.9 "Bad font spec in styles" -setup {
|
|
97
|
+
ttk::style theme create badfont -settings {
|
|
98
|
+
ttk::style configure . -font {Helvetica 12 Bogus}
|
|
99
|
+
}
|
|
100
|
+
ttk::style theme use badfont
|
|
101
|
+
} -cleanup {
|
|
102
|
+
ttk::style theme use default
|
|
103
|
+
} -body {
|
|
104
|
+
pack [ttk::label .l -text Hi! -font {}]
|
|
105
|
+
|
|
106
|
+
# SEE ALSO: #1583038 - "-font {}" makes test suite pass
|
|
107
|
+
# but does not fix the underlying problem.
|
|
108
|
+
|
|
109
|
+
event generate .l <Expose>
|
|
110
|
+
update
|
|
111
|
+
destroy .l
|
|
112
|
+
set ::bgerror
|
|
113
|
+
} -result {unknown font style "Bogus"}
|
|
114
|
+
|
|
115
|
+
#
|
|
116
|
+
# Basic tests.
|
|
117
|
+
#
|
|
118
|
+
|
|
119
|
+
test ttk-1.1 "Create button" -body {
|
|
120
|
+
pack [ttk::button .t] -expand true -fill both
|
|
121
|
+
update
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
test ttk-1.2 "Check style" -body {
|
|
125
|
+
.t cget -style
|
|
126
|
+
} -result {}
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
test ttk-1.4 "Restore default style" -body {
|
|
130
|
+
.t cget -style
|
|
131
|
+
} -result ""
|
|
132
|
+
|
|
133
|
+
proc checkstate {w} {
|
|
134
|
+
foreach statespec {
|
|
135
|
+
{!active !disabled}
|
|
136
|
+
{!active disabled}
|
|
137
|
+
{active !disabled}
|
|
138
|
+
{active disabled}
|
|
139
|
+
active
|
|
140
|
+
disabled
|
|
141
|
+
} {
|
|
142
|
+
lappend result [$w instate $statespec]
|
|
143
|
+
}
|
|
144
|
+
set result
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
# NB: this will fail if the top-level window pops up underneath the cursor
|
|
148
|
+
test ttk-2.0 "Check state" -body {
|
|
149
|
+
checkstate .t
|
|
150
|
+
} -result [list 1 0 0 0 0 0]
|
|
151
|
+
|
|
152
|
+
test ttk-2.1 "Change state" -body {
|
|
153
|
+
.t state active
|
|
154
|
+
} -result !active
|
|
155
|
+
|
|
156
|
+
test ttk-2.2 "Check state again" -body {
|
|
157
|
+
checkstate .t
|
|
158
|
+
} -result [list 0 0 1 0 1 0]
|
|
159
|
+
|
|
160
|
+
test ttk-2.3 "Change state again" -body {
|
|
161
|
+
.t state {!active disabled}
|
|
162
|
+
} -result {active !disabled}
|
|
163
|
+
|
|
164
|
+
test ttk-2.4 "Check state again" -body {
|
|
165
|
+
checkstate .t
|
|
166
|
+
} -result [list 0 1 0 0 0 1]
|
|
167
|
+
|
|
168
|
+
test ttk-2.5 "Change state again" -body {
|
|
169
|
+
.t state !disabled
|
|
170
|
+
} -result {disabled}
|
|
171
|
+
|
|
172
|
+
test ttk-2.6 "instate scripts, false" -body {
|
|
173
|
+
set x 0
|
|
174
|
+
.t instate disabled { set x 1 }
|
|
175
|
+
set x
|
|
176
|
+
} -result 0
|
|
177
|
+
|
|
178
|
+
test ttk-2.7 "instate scripts, true" -body {
|
|
179
|
+
set x 0
|
|
180
|
+
.t instate !disabled { set x 1 }
|
|
181
|
+
set x
|
|
182
|
+
} -result 1
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
# misc. error detection
|
|
186
|
+
test ttk-3.0 "Bad option" -body {
|
|
187
|
+
ttk::button .bad -badoption foo
|
|
188
|
+
} -returnCodes 1 -result {unknown option "-badoption"} -match glob
|
|
189
|
+
|
|
190
|
+
test ttk-3.1 "Make sure widget command not created" -body {
|
|
191
|
+
.bad state disabled
|
|
192
|
+
} -returnCodes 1 -result {invalid command name ".bad"} -match glob
|
|
193
|
+
|
|
194
|
+
test ttk-3.2 "Propagate errors from variable traces" -body {
|
|
195
|
+
set A 0
|
|
196
|
+
trace add variable A write {error "failure" ;# }
|
|
197
|
+
ttk::checkbutton .cb -variable A
|
|
198
|
+
.cb invoke
|
|
199
|
+
} -cleanup {
|
|
200
|
+
unset ::A ; destroy .cb
|
|
201
|
+
} -returnCodes error -result {can't set "A": failure}
|
|
202
|
+
|
|
203
|
+
test ttk-3.3 "Constructor failure with cursor" -constraints KNOWNBUG -body {
|
|
204
|
+
# This raises an X error.
|
|
205
|
+
# See also: test 15.1
|
|
206
|
+
# Also: ttk::sizegrip .g -style BadStyle
|
|
207
|
+
|
|
208
|
+
ttk::button .b -cursor bottom_right_corner -style BadStyle
|
|
209
|
+
|
|
210
|
+
} -returnCodes 1 -result "Layout BadStyle not found"
|
|
211
|
+
|
|
212
|
+
# Test resource allocation
|
|
213
|
+
# (@@@ "-font" is a compatibility option now, so tests 4.1-4.3
|
|
214
|
+
# don't really test anything useful at the moment.)
|
|
215
|
+
#
|
|
216
|
+
|
|
217
|
+
test ttk-4.0 "Setup" -body {
|
|
218
|
+
catch { destroy .t }
|
|
219
|
+
pack [ttk::label .t -text "Button 1"]
|
|
220
|
+
testConstraint fontOption [expr ![catch { set prevFont [.t cget -font] }]]
|
|
221
|
+
ok
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
test ttk-4.1 "Change font" -constraints fontOption -body {
|
|
225
|
+
.t configure -font "Helvetica 18 bold"
|
|
226
|
+
}
|
|
227
|
+
test ttk-4.2 "Check font" -constraints fontOption -body {
|
|
228
|
+
.t cget -font
|
|
229
|
+
} -result "Helvetica 18 bold"
|
|
230
|
+
|
|
231
|
+
test ttk-4.3 "Restore font" -constraints fontOption -body {
|
|
232
|
+
.t configure -font $prevFont
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
test ttk-4.4 "Bad resource specifications" -body {
|
|
236
|
+
ttk::style theme settings alt {
|
|
237
|
+
ttk::style configure TButton -font {Bad font}
|
|
238
|
+
# @@@ it would be best to raise an error at this point,
|
|
239
|
+
# @@@ but that's not really feasible in the current framework.
|
|
240
|
+
}
|
|
241
|
+
pack [ttk::button .tb1 -text "Ouch"]
|
|
242
|
+
ttk::style theme use alt
|
|
243
|
+
update;
|
|
244
|
+
# As long as we haven't crashed, everything's OK
|
|
245
|
+
ttk::style theme settings alt {
|
|
246
|
+
ttk::style configure TButton -font TkDefaultFont
|
|
247
|
+
}
|
|
248
|
+
ttk::style theme use default
|
|
249
|
+
destroy .tb1
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
#
|
|
253
|
+
# checkbutton tests
|
|
254
|
+
#
|
|
255
|
+
test ttk-5.1 "Checkbutton check" -body {
|
|
256
|
+
pack [ttk::checkbutton .cb -text "TCheckbutton" -variable cb]
|
|
257
|
+
}
|
|
258
|
+
test ttk-5.2 "Checkbutton invoke" -body {
|
|
259
|
+
.cb invoke
|
|
260
|
+
list [set ::cb] [.cb instate selected]
|
|
261
|
+
} -result [list 1 1]
|
|
262
|
+
test ttk-5.3 "Checkbutton reinvoke" -body {
|
|
263
|
+
.cb invoke
|
|
264
|
+
list [set ::cb] [.cb instate selected]
|
|
265
|
+
} -result [list 0 0]
|
|
266
|
+
|
|
267
|
+
test ttk-5.4 "Checkbutton variable" -body {
|
|
268
|
+
set result []
|
|
269
|
+
set ::cb 1
|
|
270
|
+
lappend result [.cb instate selected]
|
|
271
|
+
set ::cb 0
|
|
272
|
+
lappend result [.cb instate selected]
|
|
273
|
+
} -result {1 0}
|
|
274
|
+
|
|
275
|
+
test ttk-5.5 "Unset checkbutton variable" -body {
|
|
276
|
+
set result []
|
|
277
|
+
unset ::cb
|
|
278
|
+
lappend result [.cb instate alternate] [info exists ::cb]
|
|
279
|
+
set ::cb 1
|
|
280
|
+
lappend result [.cb instate alternate] [info exists ::cb]
|
|
281
|
+
} -result {1 0 0 1}
|
|
282
|
+
|
|
283
|
+
# See #1257319
|
|
284
|
+
test ttk-5.6 "Checkbutton default variable" -body {
|
|
285
|
+
destroy .cb ; unset -nocomplain {} ; set result [list]
|
|
286
|
+
ttk::checkbutton .cb -onvalue on -offvalue off
|
|
287
|
+
lappend result [.cb cget -variable] [info exists .cb] [.cb state]
|
|
288
|
+
.cb invoke
|
|
289
|
+
lappend result [info exists .cb] [set .cb] [.cb state]
|
|
290
|
+
.cb invoke
|
|
291
|
+
lappend result [info exists .cb] [set .cb] [.cb state]
|
|
292
|
+
} -result [list .cb 0 alternate 1 on selected 1 off {}]
|
|
293
|
+
|
|
294
|
+
#
|
|
295
|
+
# radiobutton tests
|
|
296
|
+
#
|
|
297
|
+
test ttk-7.1 "Radiobutton check" -body {
|
|
298
|
+
pack \
|
|
299
|
+
[ttk::radiobutton .rb1 -text "One" -variable choice -value 1] \
|
|
300
|
+
[ttk::radiobutton .rb2 -text "Two" -variable choice -value 2] \
|
|
301
|
+
[ttk::radiobutton .rb3 -text "Three" -variable choice -value 3] \
|
|
302
|
+
;
|
|
303
|
+
}
|
|
304
|
+
test ttk-7.2 "Radiobutton invoke" -body {
|
|
305
|
+
.rb1 invoke
|
|
306
|
+
set ::choice
|
|
307
|
+
} -result 1
|
|
308
|
+
|
|
309
|
+
test ttk-7.3 "Radiobutton state" -body {
|
|
310
|
+
.rb1 instate selected
|
|
311
|
+
} -result 1
|
|
312
|
+
|
|
313
|
+
test ttk-7.4 "Other radiobutton invoke" -body {
|
|
314
|
+
.rb2 invoke
|
|
315
|
+
set ::choice
|
|
316
|
+
} -result 2
|
|
317
|
+
|
|
318
|
+
test ttk-7.5 "Other radiobutton state" -body {
|
|
319
|
+
.rb2 instate selected
|
|
320
|
+
} -result 1
|
|
321
|
+
|
|
322
|
+
test ttk-7.6 "First radiobutton state" -body {
|
|
323
|
+
.rb1 instate selected
|
|
324
|
+
} -result 0
|
|
325
|
+
|
|
326
|
+
test ttk-7.7 "Unset radiobutton variable" -body {
|
|
327
|
+
unset ::choice
|
|
328
|
+
list [info exists ::choice] [.rb1 instate alternate] [.rb2 instate alternate]
|
|
329
|
+
} -result {0 1 1}
|
|
330
|
+
|
|
331
|
+
test ttk-7.8 "Reset radiobutton variable" -body {
|
|
332
|
+
set ::choice 2
|
|
333
|
+
list [info exists ::choice] [.rb1 instate alternate] [.rb2 instate alternate]
|
|
334
|
+
} -result {1 0 0}
|
|
335
|
+
|
|
336
|
+
#
|
|
337
|
+
# -compound tests:
|
|
338
|
+
#
|
|
339
|
+
variable iconData \
|
|
340
|
+
{R0lGODlhIAAgAKIAANnZ2YQAAP8AAISEhP///////////////yH5BAEAAAAALAAAAAAgACAA
|
|
341
|
+
AAP/CLoMGLqKoMvtGIqiqxEYCLrcioGiyxwIusyBgaLLLRiBoMsQKLrcjYGgu4Giy+2CAkFX
|
|
342
|
+
A0WX2wXFIOgGii7trkCEohsDCACBoktEKLpKhISiGwAIECiqSKooukiqKKoxgACBooukKiIo
|
|
343
|
+
SKooujGDECi6iqQqsopEV2MQAkV3kXQZRXdjEAJFl5F0FUWXY3ACRZcFSRdFlyVwJlB0WZB0
|
|
344
|
+
UXRZAmcCRZeRdBVFl2NwAkV3kXQZRXdjcAJFV5FURVaR6GoMDgSKLpKqiKAgqaLoxgwOBIoq
|
|
345
|
+
kiqKLpIqimrM4ECg6BIRiq4SIaHoxgyCBoou7a5AhKIbMzgAAIGiy+2CTWJmBhAAAkWX2wXF
|
|
346
|
+
zCDoBooud2PMDIKuRqDocgtGzMwg6O4Eii5z4Kgi6DIMhqLoagQGjiqCLvPgYOgqji6CLrfi
|
|
347
|
+
6DIj6HI7jq4i6DIkADs=}
|
|
348
|
+
|
|
349
|
+
variable compoundStrings {text image center top bottom left right none}
|
|
350
|
+
|
|
351
|
+
if {0} {
|
|
352
|
+
proc now {} { set ::now [clock clicks -milliseconds] }
|
|
353
|
+
proc tick {} { puts -nonewline stderr "+" ; flush stderr }
|
|
354
|
+
proc tock {} {
|
|
355
|
+
set then $::now; set ::now [clock clicks -milliseconds]
|
|
356
|
+
puts stderr " [expr {$::now - $then}] ms"
|
|
357
|
+
}
|
|
358
|
+
} else {
|
|
359
|
+
proc now {} {} ; proc tick {} {} ; proc tock {} {}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
now ; tick
|
|
363
|
+
test ttk-8.0 "Setup for 8.X" -body {
|
|
364
|
+
ttk::button .ctb
|
|
365
|
+
image create photo icon -data $::iconData;
|
|
366
|
+
pack .ctb
|
|
367
|
+
}
|
|
368
|
+
tock
|
|
369
|
+
|
|
370
|
+
now
|
|
371
|
+
test ttk-8.1 "Test -compound options" -body {
|
|
372
|
+
# Exhaustively test each combination.
|
|
373
|
+
# Main goal is to make sure no code paths crash.
|
|
374
|
+
foreach image {icon ""} {
|
|
375
|
+
foreach text {"Hi!" ""} {
|
|
376
|
+
foreach compound $::compoundStrings {
|
|
377
|
+
.ctb configure -image $image -text $text -compound $compound
|
|
378
|
+
update; tick
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
tock
|
|
384
|
+
|
|
385
|
+
test ttk-8.2 "Test -compound options with regular button" -body {
|
|
386
|
+
button .rtb
|
|
387
|
+
pack .rtb
|
|
388
|
+
|
|
389
|
+
foreach image {"" icon} {
|
|
390
|
+
foreach text {"Hi!" ""} {
|
|
391
|
+
foreach compound [lrange $::compoundStrings 2 end] {
|
|
392
|
+
.rtb configure -image $image -text $text -compound $compound
|
|
393
|
+
update; tick
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
tock
|
|
399
|
+
|
|
400
|
+
test ttk-8.3 "Rerun test 8.1" -body {
|
|
401
|
+
foreach image {icon ""} {
|
|
402
|
+
foreach text {"Hi!" ""} {
|
|
403
|
+
foreach compound $::compoundStrings {
|
|
404
|
+
.ctb configure -image $image -text $text -compound $compound
|
|
405
|
+
update; tick
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
tock
|
|
411
|
+
|
|
412
|
+
test ttk-8.4 "ImageChanged" -body {
|
|
413
|
+
ttk::button .b -image icon
|
|
414
|
+
icon blank
|
|
415
|
+
} -cleanup { destroy .b }
|
|
416
|
+
|
|
417
|
+
#------------------------------------------------------------------------
|
|
418
|
+
|
|
419
|
+
test ttk-9.1 "Traces on nonexistant namespaces" -body {
|
|
420
|
+
ttk::checkbutton .tcb -variable foo::bar
|
|
421
|
+
} -returnCodes 1 -result "*parent namespace doesn't exist*" -match glob
|
|
422
|
+
|
|
423
|
+
test ttk-9.2 "Traces on nonexistant namespaces II" -body {
|
|
424
|
+
ttk::checkbutton .tcb -variable X
|
|
425
|
+
.tcb configure -variable foo::bar
|
|
426
|
+
} -returnCodes 1 -result "*parent namespace doesn't exist*" -match glob
|
|
427
|
+
|
|
428
|
+
test ttk-9.3 "Restore saved options on configure error" -body {
|
|
429
|
+
.tcb cget -variable
|
|
430
|
+
} -result X
|
|
431
|
+
|
|
432
|
+
test ttk-9.4 "Textvariable tests" -body {
|
|
433
|
+
set tcbLabel "Testing..."
|
|
434
|
+
.tcb configure -textvariable tcbLabel
|
|
435
|
+
.tcb cget -text
|
|
436
|
+
} -result "Testing..."
|
|
437
|
+
|
|
438
|
+
# Changing -text has no effect if there is a linked -textvariable.
|
|
439
|
+
# Compatible with core widget.
|
|
440
|
+
test ttk-9.5 "Change -text" -body {
|
|
441
|
+
.tcb configure -text "Changed -text"
|
|
442
|
+
.tcb cget -text
|
|
443
|
+
} -result "Testing..."
|
|
444
|
+
|
|
445
|
+
# Unset -textvariable clears the text.
|
|
446
|
+
# NOTE: this is different from core widgets, which automagically reinitalize
|
|
447
|
+
# the -textvariable to the last value of -text.
|
|
448
|
+
#
|
|
449
|
+
test ttk-9.6 "Unset -textvariable" -body {
|
|
450
|
+
unset tcbLabel
|
|
451
|
+
list [info exists tcbLabel] [.tcb cget -text]
|
|
452
|
+
} -result [list 0 ""]
|
|
453
|
+
|
|
454
|
+
test ttk-9.7 "Unset textvariable, comparison" -body {
|
|
455
|
+
#
|
|
456
|
+
# NB: the tile label behaves differently from the standard label here;
|
|
457
|
+
# NB: this is on purpose: I believe the standard behaviour is the Wrong Thing
|
|
458
|
+
#
|
|
459
|
+
unset -nocomplain V1 V2
|
|
460
|
+
label .l -text Foo ; ttk::label .tl -text Foo
|
|
461
|
+
|
|
462
|
+
.l configure -textvariable V1 ; .tl configure -textvariable V2
|
|
463
|
+
list [set V1] [info exists V2]
|
|
464
|
+
} -cleanup { destroy .l .tl } -result [list Foo 0]
|
|
465
|
+
|
|
466
|
+
test ttk-9.8 "-textvariable overrides -text" -body {
|
|
467
|
+
ttk::label .tl -textvariable TV
|
|
468
|
+
set TV Foo
|
|
469
|
+
.tl configure -text Bar
|
|
470
|
+
.tl cget -text
|
|
471
|
+
} -cleanup { destroy .tl } -result "Foo"
|
|
472
|
+
|
|
473
|
+
#
|
|
474
|
+
# Frame widget tests:
|
|
475
|
+
#
|
|
476
|
+
|
|
477
|
+
test ttk-10.1 "ttk::frame -class resource" -body {
|
|
478
|
+
ttk::frame .f -class Foo
|
|
479
|
+
} -result .f
|
|
480
|
+
|
|
481
|
+
test ttk-10.2 "Check widget class" -body {
|
|
482
|
+
winfo class .f
|
|
483
|
+
} -result Foo
|
|
484
|
+
|
|
485
|
+
test ttk-10.3 "Check class resource" -body {
|
|
486
|
+
.f cget -class
|
|
487
|
+
} -result Foo
|
|
488
|
+
|
|
489
|
+
test ttk-10.4 "Try to modify class resource" -body {
|
|
490
|
+
.f configure -class Bar
|
|
491
|
+
} -returnCodes 1 -match glob -result "*read-only option*"
|
|
492
|
+
|
|
493
|
+
test ttk-10.5 "Check class resource again" -body {
|
|
494
|
+
.f cget -class
|
|
495
|
+
} -result Foo
|
|
496
|
+
|
|
497
|
+
test ttk-11.1 "-state test, setup" -body {
|
|
498
|
+
ttk::button .b
|
|
499
|
+
.b instate disabled
|
|
500
|
+
} -result 0
|
|
501
|
+
|
|
502
|
+
test ttk-11.2 "-state test, disable" -body {
|
|
503
|
+
.b configure -state disabled
|
|
504
|
+
.b instate disabled
|
|
505
|
+
} -result 1
|
|
506
|
+
|
|
507
|
+
test ttk-11.3 "-state test, reenable" -body {
|
|
508
|
+
.b configure -state normal
|
|
509
|
+
.b instate disabled
|
|
510
|
+
} -result 0
|
|
511
|
+
|
|
512
|
+
test ttk-11.4 "-state test, unrecognized -state value" -body {
|
|
513
|
+
.b configure -state bogus
|
|
514
|
+
.b state
|
|
515
|
+
} -result [list]
|
|
516
|
+
|
|
517
|
+
test ttk-11.5 "-state test, 'active'" -body {
|
|
518
|
+
.b configure -state active
|
|
519
|
+
.b state
|
|
520
|
+
} -result [list active] -cleanup { .b state !active }
|
|
521
|
+
|
|
522
|
+
test ttk-11.6 "-state test, 'readonly'" -body {
|
|
523
|
+
.b configure -state readonly
|
|
524
|
+
.b state
|
|
525
|
+
} -result [list readonly] -cleanup { .b state !readonly }
|
|
526
|
+
|
|
527
|
+
test ttk-11.7 "-state test, cleanup" -body {
|
|
528
|
+
destroy .b
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
test ttk-12.1 "-cursor option" -body {
|
|
532
|
+
ttk::button .b
|
|
533
|
+
.b cget -cursor
|
|
534
|
+
} -result {}
|
|
535
|
+
|
|
536
|
+
test ttk-12.2 "-cursor option" -body {
|
|
537
|
+
.b configure -cursor arrow
|
|
538
|
+
.b cget -cursor
|
|
539
|
+
} -result arrow
|
|
540
|
+
|
|
541
|
+
test ttk-12.3 "-borderwidth frame option" -body {
|
|
542
|
+
destroy .t
|
|
543
|
+
toplevel .t
|
|
544
|
+
raise .t
|
|
545
|
+
pack [set t [ttk::frame .t.f]] -expand true -fill x ;
|
|
546
|
+
pack [ttk::label $t.l -text "ASDF QWERTY"] -expand true -fill both
|
|
547
|
+
foreach theme {default alt} {
|
|
548
|
+
ttk::style theme use $theme
|
|
549
|
+
foreach relief {flat raised sunken ridge groove solid} {
|
|
550
|
+
$t configure -relief $relief
|
|
551
|
+
for {set i 5} {$i >= 0} {incr i -1} {
|
|
552
|
+
$t configure -borderwidth $i
|
|
553
|
+
update
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
test ttk-12.4 "-borderwidth frame option" -body {
|
|
560
|
+
.t.f configure -relief raised
|
|
561
|
+
.t.f configure -borderwidth 1
|
|
562
|
+
ttk::style theme use alt
|
|
563
|
+
update
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
test ttk-13.1 "Custom styles -- bad -style option" -body {
|
|
568
|
+
ttk::button .tb1 -style badstyle
|
|
569
|
+
} -returnCodes 1 -result "*badstyle not found*" -match glob
|
|
570
|
+
|
|
571
|
+
test ttk-13.4 "Custom styles -- bad -style option" -body {
|
|
572
|
+
ttk::button .tb1
|
|
573
|
+
.tb1 configure -style badstyle
|
|
574
|
+
} -cleanup {
|
|
575
|
+
destroy .tb1
|
|
576
|
+
} -returnCodes 1 -result "*badstyle not found*" -match glob
|
|
577
|
+
|
|
578
|
+
test ttk-13.5 "Custom layouts -- missing element definition" -body {
|
|
579
|
+
ttk::style layout badstyle {
|
|
580
|
+
NoSuchElement
|
|
581
|
+
}
|
|
582
|
+
ttk::button .tb1 -style badstyle
|
|
583
|
+
} -cleanup {
|
|
584
|
+
destroy .tb1
|
|
585
|
+
} -result .tb1
|
|
586
|
+
# @@@ Should: signal an error, possibly a background error.
|
|
587
|
+
|
|
588
|
+
#
|
|
589
|
+
# See #793909
|
|
590
|
+
#
|
|
591
|
+
|
|
592
|
+
test ttk-14.1 "-variable in nonexistant namespace" -body {
|
|
593
|
+
ttk::checkbutton .tw -variable ::nsn::foo
|
|
594
|
+
} -returnCodes 1 -result {can't trace *: parent namespace doesn't exist} \
|
|
595
|
+
-match glob -cleanup { destroy .tw }
|
|
596
|
+
|
|
597
|
+
test ttk-14.2 "-textvariable in nonexistant namespace" -body {
|
|
598
|
+
ttk::label .tw -textvariable ::nsn::foo
|
|
599
|
+
} -returnCodes 1 -result {can't trace *: parent namespace doesn't exist} \
|
|
600
|
+
-match glob -cleanup { destroy .tw }
|
|
601
|
+
|
|
602
|
+
test ttk-14.3 "-textvariable in nonexistant namespace" -body {
|
|
603
|
+
ttk::entry .tw -textvariable ::nsn::foo
|
|
604
|
+
} -returnCodes 1 -result {can't trace *: parent namespace doesn't exist} \
|
|
605
|
+
-match glob -cleanup { destroy .tw }
|
|
606
|
+
|
|
607
|
+
test ttk-15.1 "style element create: insufficient args" -body {
|
|
608
|
+
ttk::style element create
|
|
609
|
+
} -returnCodes 1 -result "wrong # args: should be \"ttk::style element create name type ?options...?\""
|
|
610
|
+
test ttk-15.2 "style element create: insufficient args" -body {
|
|
611
|
+
ttk::style element create plain.background
|
|
612
|
+
} -returnCodes 1 -result "wrong # args: should be \"ttk::style element create name type ?options...?\""
|
|
613
|
+
test ttk-15.3 "style element create: insufficient args" -body {
|
|
614
|
+
ttk::style element create plain.background from
|
|
615
|
+
} -returnCodes 1 -result "wrong # args: should be \"theme ?element?\""
|
|
616
|
+
test ttk-15.4 "style element create: valid" -body {
|
|
617
|
+
ttk::style element create plain.background from default
|
|
618
|
+
} -returnCodes 0 -result ""
|
|
619
|
+
|
|
620
|
+
# GetLayout tests:
|
|
621
|
+
test ttk-getlayout-1 "GetLayout - setup" -body {
|
|
622
|
+
set theme1 alt
|
|
623
|
+
set theme2 clam
|
|
624
|
+
ttk::style theme settings $theme2 {
|
|
625
|
+
ttk::style layout BadLayout { background }
|
|
626
|
+
}
|
|
627
|
+
ttk::setTheme $theme1
|
|
628
|
+
return
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
foreach wc $widgetClasses {
|
|
632
|
+
|
|
633
|
+
if {$wc eq "sizegrip"} { continue } ;# see
|
|
634
|
+
|
|
635
|
+
test ttk-getlayout-2-$wc "GetLayout - bad layout, widget constructor" -body {
|
|
636
|
+
ttk::$wc .g -style BadLayout
|
|
637
|
+
} -returnCodes error -match regexp -result \
|
|
638
|
+
"Layout (Vertical.|Horizontal.)?BadLayout not found"
|
|
639
|
+
|
|
640
|
+
# See #1603506
|
|
641
|
+
test ttk-getlayout-2a-$wc "GetLayout - update after failure" -body { update }
|
|
642
|
+
|
|
643
|
+
test ttk-getlayout-3-$wc "GetLayout - bad layout, widget configure" -body {
|
|
644
|
+
pack [ttk::$wc .g]
|
|
645
|
+
.g configure -style BadLayout
|
|
646
|
+
} -returnCodes error -match regexp -result \
|
|
647
|
+
"Layout (Vertical.|Horizontal.)?BadLayout not found"
|
|
648
|
+
|
|
649
|
+
# See #1603506
|
|
650
|
+
test ttk-getlayout-3a-$wc "GetLayout - update after failure" -body { update }
|
|
651
|
+
|
|
652
|
+
test ttk-getlayout-4-$wc "GetLayout - bad layout, put the rug down" -body {
|
|
653
|
+
ttk::setTheme $theme2
|
|
654
|
+
.g configure -style BadLayout
|
|
655
|
+
.g cget -style
|
|
656
|
+
} -result BadLayout
|
|
657
|
+
|
|
658
|
+
test ttk-getlayout-5-$wc "GetLayout - bad layout, yank the rug out" -body {
|
|
659
|
+
ttk::setTheme $theme1
|
|
660
|
+
pack .g
|
|
661
|
+
update
|
|
662
|
+
.g cget -style
|
|
663
|
+
} -result BadLayout
|
|
664
|
+
|
|
665
|
+
test ttk-getlayout-6-$wc "GetLayout - cleanup" -body {
|
|
666
|
+
destroy .g
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
} ;# foreach wc $widgetClasses ...
|
|
670
|
+
|
|
671
|
+
eval destroy [winfo children .]
|
|
672
|
+
tcltest::cleanupTests
|
|
673
|
+
|
|
674
|
+
#*EOF*
|