Pratt 1.5.6
Sign up to get free protection for your applications and to get access to all the features.
- 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,167 @@
|
|
1
|
+
#
|
2
|
+
# dirbrowser.tcl,v 1.2 2004/10/05 23:42:07 jenglish Exp
|
3
|
+
#
|
4
|
+
# treeview widget demonstration.
|
5
|
+
#
|
6
|
+
#
|
7
|
+
|
8
|
+
lappend auto_path ../generic ..
|
9
|
+
package require tile
|
10
|
+
|
11
|
+
# Create a treeview widget:
|
12
|
+
#
|
13
|
+
set f [ttk::frame .f]
|
14
|
+
ttk::scrollbar $f.vsb -orient vertical -command [list $f.tv yview]
|
15
|
+
|
16
|
+
set tv [ttk::treeview $f.tv -columns {size mtime} \
|
17
|
+
-yscrollcommand [list $f.vsb set] ]
|
18
|
+
|
19
|
+
grid $f.tv $f.vsb -sticky news
|
20
|
+
grid columnconfigure $f 0 -weight 1
|
21
|
+
grid rowconfigure $f 0 -weight 1
|
22
|
+
|
23
|
+
#
|
24
|
+
# Set column headings:
|
25
|
+
#
|
26
|
+
# Column #0 is the tree colum.
|
27
|
+
#
|
28
|
+
$tv heading #0 -text "Name" -command [list sortBy $tv #0]
|
29
|
+
$tv heading size -text "Size" -command [list sortBy $tv size]
|
30
|
+
$tv heading mtime -text "Modified" -command [list sortBy $tv mtime]
|
31
|
+
|
32
|
+
$tv column size -anchor e
|
33
|
+
$tv column mtime -anchor e
|
34
|
+
|
35
|
+
#
|
36
|
+
# Create some images to use as tree icons:
|
37
|
+
# (images taken from tkfbox.tcl)
|
38
|
+
#
|
39
|
+
|
40
|
+
foreach {icon data} {
|
41
|
+
folder {R0lGODlhEAAMAKEAAAD//wAAAPD/gAAAACH5\
|
42
|
+
BAEAAAAALAAAAAAQAAwAAAIghINhyycvVFsB\
|
43
|
+
QtmS3rjaH1Hg141WaT5ouprt2HHcUgAAOw==}
|
44
|
+
file {R0lGODlhDAAMAKEAALLA3AAAAP//8wAAACH5\
|
45
|
+
BAEAAAAALAAAAAAMAAwAAAIgRI4Ha+IfWHsO\
|
46
|
+
rSASvJTGhnhcV3EJlo3kh53ltF5nAhQAOw==}
|
47
|
+
} {
|
48
|
+
set Icons($icon) [image create photo -data $data]
|
49
|
+
}
|
50
|
+
|
51
|
+
# scanDirectory --
|
52
|
+
# Scan a directory and add items to the treeview widget.
|
53
|
+
#
|
54
|
+
# To prevent a long initial delay, subdirectories are
|
55
|
+
# scanned "on demand" in the <<TreeviewOpen>> binding.
|
56
|
+
# The "Pending" array holds a script to be evaluated
|
57
|
+
# when an item is first opened.
|
58
|
+
#
|
59
|
+
proc scanDirectory {tv parent dir} {
|
60
|
+
variable Icons
|
61
|
+
variable Pending
|
62
|
+
|
63
|
+
foreach subdir [glob -nocomplain -type d -directory $dir *] {
|
64
|
+
set item [$tv insert $parent end \
|
65
|
+
-text [file tail $subdir] -image $Icons(folder) \
|
66
|
+
-values [list {} [datestamp [file mtime $subdir]] ] ]
|
67
|
+
set Pending($item) [list scanDirectory $tv $item $subdir]
|
68
|
+
}
|
69
|
+
foreach file [glob -nocomplain -type f -directory $dir *] {
|
70
|
+
|
71
|
+
set item [$tv insert $parent end \
|
72
|
+
-text [file tail $file] -image $Icons(file)]
|
73
|
+
|
74
|
+
$tv set $item size [file size $file]
|
75
|
+
$tv set $item mtime [datestamp [file mtime $file]]
|
76
|
+
}
|
77
|
+
}
|
78
|
+
|
79
|
+
bind $tv <<TreeviewOpen>> { itemOpened %W }
|
80
|
+
|
81
|
+
proc itemOpened {w} {
|
82
|
+
variable Pending
|
83
|
+
set item [$w focus]
|
84
|
+
if {[info exists Pending($item)]} {
|
85
|
+
uplevel #0 $Pending($item)
|
86
|
+
unset Pending($item)
|
87
|
+
}
|
88
|
+
}
|
89
|
+
|
90
|
+
# scanAll --
|
91
|
+
# Force the tree to be fully populated, by repeatedly
|
92
|
+
# evaluating the contents of the Pending array.
|
93
|
+
#
|
94
|
+
proc scanAll {} {
|
95
|
+
variable Pending
|
96
|
+
. configure -cursor watch
|
97
|
+
while {[llength [set pending [array get Pending]]]} {
|
98
|
+
array unset Pending
|
99
|
+
foreach {_ script} $pending { uplevel #0 $script }
|
100
|
+
}
|
101
|
+
. configure -cursor {}
|
102
|
+
}
|
103
|
+
|
104
|
+
# openAll --
|
105
|
+
# Recursively open all nodes in the tree.
|
106
|
+
#
|
107
|
+
proc openAll {tv {item {}}} {
|
108
|
+
foreach child [$tv children $item] {
|
109
|
+
$tv item $child -open true
|
110
|
+
openAll $tv $child
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
114
|
+
# datestamp --
|
115
|
+
# Convert clock values to a human-readable format
|
116
|
+
#
|
117
|
+
proc datestamp {clockValue} {
|
118
|
+
variable clockfmt "%Y-%m-%d %H:%M"
|
119
|
+
clock format $clockValue -format $clockfmt
|
120
|
+
}
|
121
|
+
|
122
|
+
# sortBy --
|
123
|
+
# Sort the children of each item by the specified column,
|
124
|
+
# or by the -text label if $column is {}.
|
125
|
+
#
|
126
|
+
proc sortBy {tv column {parent {}}} {
|
127
|
+
foreach child [$tv children $parent] {
|
128
|
+
sortBy $tv $column $child
|
129
|
+
}
|
130
|
+
set items [list]
|
131
|
+
if {$column eq "#0"} {
|
132
|
+
# Sort by -text label:
|
133
|
+
foreach child [$tv children $parent] {
|
134
|
+
lappend items [list $child [$tv item $child -text]]
|
135
|
+
}
|
136
|
+
} else {
|
137
|
+
foreach child [$tv children $parent] {
|
138
|
+
lappend items [list $child [$tv set $child $column]]
|
139
|
+
}
|
140
|
+
}
|
141
|
+
|
142
|
+
set children [list]
|
143
|
+
foreach item [lsort -dictionary -index 1 $items] {
|
144
|
+
lappend children [lindex $item 0]
|
145
|
+
}
|
146
|
+
$tv children $parent $children
|
147
|
+
}
|
148
|
+
|
149
|
+
# Rest of GUI.
|
150
|
+
#
|
151
|
+
set cmd [ttk::frame .cmd]
|
152
|
+
grid x \
|
153
|
+
[ttk::button $cmd.open -text "Open all" -command [list openAll $tv]] \
|
154
|
+
[ttk::button $cmd.scan -text "Scan all" -command {scanAll} ] \
|
155
|
+
[ttk::button $cmd.close -text "Close" -command [list destroy .]] \
|
156
|
+
-padx 6 ;
|
157
|
+
grid columnconfigure $cmd 0 -weight 1
|
158
|
+
|
159
|
+
bind . <KeyPress-Escape> [list event generate $cmd.close <<Invoke>>]
|
160
|
+
|
161
|
+
pack $cmd -side bottom -expand false -fill x -padx 6 -pady 6
|
162
|
+
pack $f -side top -expand true -fill both
|
163
|
+
|
164
|
+
# Load the initial directory:
|
165
|
+
#
|
166
|
+
scanDirectory $tv {} ~
|
167
|
+
|
@@ -0,0 +1,97 @@
|
|
1
|
+
#
|
2
|
+
# test/demo script for dialog.tcl
|
3
|
+
#
|
4
|
+
|
5
|
+
package require tile
|
6
|
+
|
7
|
+
array set DLG {
|
8
|
+
icon question
|
9
|
+
title "Quit..."
|
10
|
+
message "Are you sure you want to quit?"
|
11
|
+
detail "Quitting the application will cause it to stop running. \
|
12
|
+
You will lose any unsaved data, and make the application \
|
13
|
+
feel unloved. Please consider leaving it open."
|
14
|
+
}
|
15
|
+
|
16
|
+
proc displayDialog {} {
|
17
|
+
variable DLG
|
18
|
+
|
19
|
+
if {[winfo exists .dlg]} { ttk::dialog::dismiss .dlg }
|
20
|
+
|
21
|
+
ttk::dialog .dlg \
|
22
|
+
-icon $DLG(icon) \
|
23
|
+
-title $DLG(title) \
|
24
|
+
-message $DLG(message) \
|
25
|
+
-detail $DLG(detail) \
|
26
|
+
-type yesnocancel \
|
27
|
+
-default yes \
|
28
|
+
-cancel cancel \
|
29
|
+
;
|
30
|
+
|
31
|
+
if {0} {
|
32
|
+
set f [ttk::dialog::clientframe .dlg]
|
33
|
+
pack [ttk::progressbar $f.progress -value 50] -expand false -fill x
|
34
|
+
tile::progressbar::start $f.progress
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
# displayMessageBox --
|
39
|
+
# Display standard Tk mesageDialog, for comparison.
|
40
|
+
#
|
41
|
+
proc displayMessageBox {} {
|
42
|
+
variable DLG
|
43
|
+
tk_messageBox -parent . \
|
44
|
+
-type yesnocancel \
|
45
|
+
-icon $DLG(icon) \
|
46
|
+
-title $DLG(title) \
|
47
|
+
-message $DLG(message) \
|
48
|
+
-detail $DLG(detail) \
|
49
|
+
-default yes \
|
50
|
+
;
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
proc dialogDemo {t} {
|
55
|
+
variable DLG
|
56
|
+
|
57
|
+
ttk::frame $t
|
58
|
+
set f [ttk::frame $t.f]
|
59
|
+
foreach field {title message detail} {
|
60
|
+
grid \
|
61
|
+
[ttk::label $f.l$field -text "[string totitle $field]:" -anchor e] \
|
62
|
+
[ttk::entry $f.$field -textvariable ::DLG($field) -width 60] \
|
63
|
+
-sticky new -padx 3
|
64
|
+
}
|
65
|
+
|
66
|
+
grid \
|
67
|
+
[ttk::label $f.licon -text "Icon:" -anchor e] \
|
68
|
+
[ttk::combobox $f.icon -state readonly -textvariable DLG(icon) \
|
69
|
+
-values [list info question warning error]] \
|
70
|
+
-sticky new -padx 3
|
71
|
+
|
72
|
+
grid columnconfigure $f 0 -weight 1
|
73
|
+
grid columnconfigure $f 1 -weight 5
|
74
|
+
grid rowconfigure $f 99 -weight 1
|
75
|
+
|
76
|
+
set cmd [ttk::frame $t.cmd]
|
77
|
+
grid x \
|
78
|
+
[ttk::button $cmd.go -text "Display" -command displayDialog] \
|
79
|
+
[ttk::button $cmd.alt -text "Message" -command displayMessageBox] \
|
80
|
+
[ttk::button $cmd.quit -text "Close" \
|
81
|
+
-command [list destroy [winfo toplevel $t]]] \
|
82
|
+
-padx [list 6 0] -pady 6 -sticky ew;
|
83
|
+
grid columnconfigure $cmd 0 -weight 1
|
84
|
+
bind . <KeyPress-Escape> [list event generate $cmd.quit <<Invoke>>]
|
85
|
+
keynav::defaultButton $cmd.go
|
86
|
+
|
87
|
+
pack $t.cmd -side bottom -expand false -fill x -padx 6 -pady 6
|
88
|
+
pack $t.f -side top -expand true -fill both -padx 12 -pady 12
|
89
|
+
|
90
|
+
return $t
|
91
|
+
}
|
92
|
+
|
93
|
+
proc dlgtest-main {} {
|
94
|
+
pack [dialogDemo .t] -expand true -fill both
|
95
|
+
}
|
96
|
+
|
97
|
+
if {[info exists argv0] && $argv0 eq [info script]} { dlgtest-main }
|
@@ -0,0 +1,110 @@
|
|
1
|
+
array set ImgData {
|
2
|
+
bold {R0lGODlhEAAQAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAQABAAAAI6hI+py60U3wj+
|
3
|
+
RYQFJYRvEWFBCeFbRFhQQvhG8YPgX0RYUEL4FhEWlBC+RYQFJYQPFN8IPqYut/8hBQA7}
|
4
|
+
copy {R0lGODlhEAAQAJEAANnZ2QAAAP///wAAhCH5BAEAAAAALAAAAAAQABAAAAJUhI8JFJ/gY4iI
|
5
|
+
UEL4FyIiFIXgW0iEUDgfACBI9pzMAAGRiIghWSMDECR7JEKGtkFIRFBG+TIQKDQxtgzcDcmX
|
6
|
+
IfgwQrFlCD4MyZch+EDzj+Bj6mYBADs=}
|
7
|
+
cut {R0lGODlhEAAQAJEAANnZ2QAAAAAAhP///yH5BAEAAAAALAAAAAAQABAAAAJFhI+pcUHwEeIi
|
8
|
+
E0gACIKPEAFBIXy0gMg8EhM+YmQiKSL4eAIiJMI/EQEhQGYGYiQIQAg+iAkIATIzECMBIgT/
|
9
|
+
RBARERlSADs=}
|
10
|
+
dragfile {R0lGODlhGAAYAKIAANnZ2TMzM////wAAAJmZmf///////////yH5BAEAAAAALAAAAAAYABgA
|
11
|
+
AAPACBi63IqgC4GiyxwogaAbKLrMgSKBoBoousyBogEACIGiyxwoKgGAECI4uiyCExMTOACB
|
12
|
+
osuNpDoAGCI4uiyCIkREOACBosutSDoAgSI4usyCIjQAGCi63Iw0ACEoOLrMgiI0ABgoutyM
|
13
|
+
NAAhKDi6zIIiNAAYKLrcjDQAISg4usyCIjQAGCi63Iw0AIGiiqPLIyhCA4CBosvNSAMQKKo4
|
14
|
+
ujyCIjQAGCi63Iw0AIGiy81IAxCBpMu9GAMAgKPL3QgJADs=}
|
15
|
+
dragicon {R0lGODlhGAAYALMAANnZ2TMzM/////8zM8zMzGYAAAAAAJmZmQCZMwAzZgCZzGZmZv//////
|
16
|
+
/////////yH5BAEAAAAALAAAAAAYABgAAAT/EMAgJ60SAjlBgEJOSoMIEMgZoJCT0iADBFIG
|
17
|
+
KOSkNMwAAABhwiHnIEKIIIQQAQIZhBBwyDmKEMIEE0yABoAghIBDzlGEENDIaQAIQgg45BwF
|
18
|
+
CinPOccAECYcUiKEEBFCiHPgMQAEIcQYYyABBUGIQCHlMQCEScZAAhKEEApCECGOARAEIQQp
|
19
|
+
BRGIpAyCJCGOASBAISdEcqJAVBLiGABggELOAJGUKyiVhDgGABigkJMEhNAKSqkEhTgGgCCl
|
20
|
+
FCQEGIJSSiUhjgEgQCEnJVBJmYQ4BoAAhZyTQCVnEuIYAAIUckoCk5xSiGMACFDISSs9BoBg
|
21
|
+
rRXQMQAEKOSklR4DEUAI8MhJ6wwGAACgkZNWCkAEADs=}
|
22
|
+
error {R0lGODlhIAAgAKIAANnZ2YQAAP8AAISEhP///////////////yH5BAEAAAAALAAAAAAgACAA
|
23
|
+
AAP/CLoMGLqKoMvtGIqiqxEYCLrcioGiyxwIusyBgaLLLRiBoMsQKLrcjYGgu4Giy+2CAkFX
|
24
|
+
A0WX2wXFIOgGii7trkCEohsDCACBoktEKLpKhISiGwAIECiqSKooukiqKKoxgACBooukKiIo
|
25
|
+
SKooujGDECi6iqQqsopEV2MQAkV3kXQZRXdjEAJFl5F0FUWXY3ACRZcFSRdFlyVwJlB0WZB0
|
26
|
+
UXRZAmcCRZeRdBVFl2NwAkV3kXQZRXdjcAJFV5FURVaR6GoMDgSKLpKqiKAgqaLoxgwOBIoq
|
27
|
+
kiqKLpIqimrM4ECg6BIRiq4SIaHoxgyCBoou7a5AhKIbMzgAAIGiy+2CTWJmBhAAAkWX2wXF
|
28
|
+
zCDoBooud2PMDIKuRqDocgtGzMwg6O4Eii5z4Kgi6DIMhqLoagQGjiqCLvPgYOgqji6CLrfi
|
29
|
+
6DIj6HI7jq4i6DIkADs=}
|
30
|
+
file {R0lGODlhCwANAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAALAA0AAAIyhI9G8Q0AguSH
|
31
|
+
AMQdxQgxEyEFQfItICQokYgEBMm3gBCKLRIQJN8CQii2SECQfAug+FgAOw==}
|
32
|
+
folder {R0lGODlhEAANAKIAANnZ2YSEhMbGxv//AP///wAAAP///////yH5BAEAAAAALAAAAAAQAA0A
|
33
|
+
AANjCIqhiqDLITgyEgi6GoIjIyMYugCBpMsaWBA0giMjIzgyUYBBMjIoIyODEgVBODIygiMj
|
34
|
+
E1gQJIMyMjIoI1GAQSMjODIyghMFQSgjI4MyMhJYEDSCIyMjODJRgKHLXAiApcucADs=}
|
35
|
+
hourglass {R0lGODlhIAAgAKIAANnZ2YAAAAAAAP8AAP///8DAwICAgP///yH5BAEAAAAALAAAAAAgACAA
|
36
|
+
AAPZCLrc/jDKSau9OGcUuqyCoMvNGENVhaMrCLrcjaLLgqDL7WhFVIVVZoKgy+1oRUSFVWaC
|
37
|
+
oMvtaEVEhVVmgqDL7WhFRIVVZoKgy+1oVVaCJWaCoMvtgKxISrBMEHS5fZEVSRkKgi63NzIq
|
38
|
+
EwRdbndkVCYIutzeyIqqDAVBl9sXWRFJYZkg6HI7ICsiKqwyEwRdbkcrIhKsMhMEXW5HKyIp
|
39
|
+
lDITBF1uRysyEiwxEwRdbkcrIyuUEhMEXW5H0WVB0OVujKGqwtEVBF1uRtHlRdDl9odRTlrt
|
40
|
+
xRmjBAA7}
|
41
|
+
info {R0lGODlhIAAgAKIAANnZ2YSEhMbGxv///wAA/wAAAP///////yH5BAEAAAAALAAAAAAgACAA
|
42
|
+
AAP/CLoMGLqKoMvtGCo4uhKBgaDLDRghOLqsghEIuryBgqPLPSiBoMsQOLojhEQkOLpTCLob
|
43
|
+
OLqKpIujq4WgC4Gju0i6OLpbCKohOLorhEQkOLorhaAQOLrc3qgCIARHl9sbSQUEji4j6RKO
|
44
|
+
Lk9hQODosiKp4ujyFIbi6LIiqeLo8hSG4uiyIqni6PIUhuLosiKp4ujyFIYKji4PkiqOLkth
|
45
|
+
BASOLg+SKo4uV2AEhODoMpIqju5KYShA4Ogqku7i6E4FRgAAYOHocvugiohAUC0cXe7GiohA
|
46
|
+
0IUSHF3uQamICATdrULB0WUVrIqIQNBlCCwVHF2pwsJQRdDlDYyoKsHRPMLQDQRdbsDQqBmc
|
47
|
+
wlBF0OV2jJqZwggEXW5vVDMVgaDL7Y5qKgJBl9sfVUUg6HL7AxSKoMvtr1AEgi5DAgA7}
|
48
|
+
italic {R0lGODlhEAAQAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAQABAAAAIrhI+py+1A4hN8
|
49
|
+
hIjINBITPlpEZBqJCR8tIjKNxISPFhGZQOITfExdbv9FCgA7}
|
50
|
+
new {R0lGODlhEAAQAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAQABAAAAJFhI95FN8IvgXJ
|
51
|
+
jyD4ECQ/JAh+kPyICIIdJP+CYAfJvyDYQfIvCHaQ/AuCHST/gmAHyb8g2EHyLwh2kPwLgk3x
|
52
|
+
MQg+pu4WADs=}
|
53
|
+
open {R0lGODlhEAAQAKIAANnZ2QAAAP//AP///4SEAP///////////yH5BAEAAAAALAAAAAAQABAA
|
54
|
+
AANZCLrczigUQZc1EDQgEHSZAwMgIhB0NQIDQkYwdANBNUZwZGQEJxBUQwZlZGRQAkE1RnAE
|
55
|
+
Q5dVcCSQdDcAYySQdDcAISSQdDcAASKQdDcAAQBDlwNBl9sfApQAOw==}
|
56
|
+
openfold {R0lGODlhEAANAKIAANnZ2YSEhP///8bGxv//AAAAAP///////yH5BAEAAAAALAAAAAAQAA0A
|
57
|
+
AANgCIqhiqDLgaIaCLoagkNDIxi6AIFCQ0M4KKpRgCFDQzg0NIQThaHLSxgVKLochRMVMkhD
|
58
|
+
Q4M0VBFYEDKEQ0NDOFFRgCE0NEhDQ4MVBRAoNDSEQ0NRWAAYuqyFBQBYurwJADs=}
|
59
|
+
overstrike {R0lGODlhEAAQAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAQABAAAAI3hI+py80Uh+Aj
|
60
|
+
RFhQCP8iMILgWwRGEHyLwAiCbxEYQfCB4iPBhwiMIPgXYREEHyEiguBj6nI7FQA7}
|
61
|
+
palette {R0lGODlhEAAQAKIAANnZ2QAAAP//AP////8A/4QAhP8AAAD//yH5BAEAAAAALAAAAAAQABAA
|
62
|
+
AANtCLrcjqGBoMsRKCMTgaALMSgDAYMSCKoxgAFBITgSAIAQEhUIARCAEgAQOBAwghMQEwga
|
63
|
+
MoIjIxAIEgCAEBEyKBAgg4GgGxAIYTGCgaALcRgQIIGgCwEYICODgaALITgyEoGguxiqCLrc
|
64
|
+
/lChBAA7}
|
65
|
+
passwd {R0lGODlhIAAgAMQAANnZ2QAAAICAgICAAP///7CwsMDAwMjIAPjIAOjo6Pj4AODg4HBwcMj4
|
66
|
+
ANjY2JiYANDQ0MjIyPj4yKCgoMiYAMjImDAwAMjIMJiYmJCQkP//////////////////////
|
67
|
+
/yH5BAEAAAAALAAAAAAgACAAAAX/ICCOIhiIIgiII1maZSCMQnCeJyAIQiAIAiAMwxCcJwkk
|
68
|
+
EAQRCIUwGMSBDEEAAuJIlgKRJEEgGAMRBIGiDENQlqNAJAsYCEwgEEEgBAHSIEMAAuJIAgKR
|
69
|
+
LEsgGEMgCEJgBMqhHENQlgJILMsSCMRABEFgGAESHMcRgIA4kgKxOIsTBAOhKAITKEGDHMhD
|
70
|
+
kqIAEqAjisJAgIooBkpwNMcTgIA4jgLhOBAkEAOhKIoSKEGDIMcTkKQICgQEQQIxEIqiBEpw
|
71
|
+
IMdxPAEIiCMJCEQUMUQ0EIqiHIfSIM3xBGUpCiABCUQyEMqhHMiBHMjxBCAgjuQoEAKxRANB
|
72
|
+
HMqhHM1x/zxDUJajQIACsUTDQBAEIR3IcQRDAALiSIoCYQiEE03gII7HQR3BEICAOJICYRSC
|
73
|
+
QDjRNE1CAAzVQR3WE5AkAAqEUQiFQEARBAUAAAzHQR3BEICAOI4CUQhFIBAREwXjUFUHdQRD
|
74
|
+
QJJAABbCFAhEJBgBAADAMAwXdQRDAALiCAhEIRQCYRiCEZDjUFFHMAQkIBAFOAmTQBiFUAQg
|
75
|
+
II7AUFXUEQwBCQjEJExBkBRCEZCjMIBD9RxDAALiGEzCFBBYIRTBOI7AQB1DMIoCMQkYGAjL
|
76
|
+
JEwBCIgjOVDDEJCAQGACJiTTJEwBSY5BEJAiSCCwTAiCZBKmAATEkSzNQBCCYCDBJgELTNMk
|
77
|
+
g0AMEgwTAhAQR7I0zYARgvM8TyAIznMMAQA7}
|
78
|
+
paste {R0lGODlhEAAQAKIAANnZ2QAAAP//AISEAISEhP///wAAhP///yH5BAEAAAAALAAAAAAQABAA
|
79
|
+
AANwCLrcjqGBoKsYqiKrCDSGBkMiJJCGAgCDKBB0gwYDIKYwdJUIAyBokIaGBmloAhBiaAgH
|
80
|
+
TdcCEIKGBsmwVM0AIYaGcAxL1coQgoYGySoisMzMAoeGxrB01QJpaMiwMHTLAEPVsHTVEHTR
|
81
|
+
dBlBlxswAQA7}
|
82
|
+
print {R0lGODlhEAAQAKIAANnZ2QAAAP///4SEhP//AP///////////yH5BAEAAAAALAAAAAAQABAA
|
83
|
+
AANZCLrcjqG7CLqBoquBoBuCoSqBoBsouhoIuiEYqrKBoIGiqwEYEIChyxAIEYGgywEYgKHL
|
84
|
+
DAgRCLozgwABARgIukSEABEBGLq8gAEQCLobgAEAgKHLgaDLzZgAOw==}
|
85
|
+
question {R0lGODlhIAAgAKIAANnZ2YSEhMbGxv///wAAAAAA/////////yH5BAEAAAAALAAAAAAgACAA
|
86
|
+
AAP/CLoMGLqKoMvtGCo4uhKBgaDLDRghOLqsghEIuryBgqPLPSiBoMsQOLrcjYSgu4GjO4Kl
|
87
|
+
Kzi6Qwi6EDi6I4UyU1VYgqM7hKAagqM7VTg6VYWFoztCCAqBo6tVWDVThVU4ukqBACE4ulqF
|
88
|
+
VSNVWIWjq0IYEDi6K4UlU1VYOLpMgRA4uryCpTi6PIShOLq8hVU4uqyEoTi6vIUlOLqshKE4
|
89
|
+
uryFhaPLSxgqOLrc3kgoAgJHl0ewSnB0eQhDIQRHl6uwCkeXhTAUIHB0uQqrcHSZAiMAAJBw
|
90
|
+
dFcKS3B0lwIjAkGVcHS5GykiAkEXSHB0uQeFIiIQdJcIBUeXVZAoIgJBT5chkFRwdIUICUMV
|
91
|
+
QZc3MIKIBEcJQzcQdLkBQ4NmcAhDFUGX2zFoZggjEHS5vRHNUASCLrc7oqEIBF1uf0QUgaDL
|
92
|
+
7Q9QKIIut79CEQi6DAkAOw==}
|
93
|
+
redo {R0lGODlhEAAQAJEAANnZ2QAAhP///////yH5BAEAAAAALAAAAAAQABAAAAIvhI+py+1vSByC
|
94
|
+
jxAYQXDMwsyAggQAQBB8iwgMgg8REQgUwqbYBDsIPqYutz+MgBQAOw==}
|
95
|
+
save {R0lGODlhEAAQAJEAANnZ2QAAAISEAP///yH5BAEAAAAALAAAAAAQABAAAAJWhI9pFB8RIIRC
|
96
|
+
+BYQFqQQvkWEBSmEbyFhQQrhW0hYkEL4FhIWpBC+hYQFSYxvIgFAoXy0AAiSGP8kAIIkxgcI
|
97
|
+
CSBEQvEBQgIIkVB8gJAAAhgfj+BjWgEAOw==}
|
98
|
+
underline {R0lGODlhEAAQAJEAANnZ2QAAAP///////yH5BAEAAAAALAAAAAAQABAAAAI3hI+py60UBy4I
|
99
|
+
vkVcBMG/iIsg+BdxEQT/Ii6C4F/ERRD8i7gIgn8RF0HwkWITfExFin8EH1OXCwA7}
|
100
|
+
undo {R0lGODlhEAAQAJEAANnZ2QAAhP///////yH5BAEAAAAALAAAAAAQABAAAAIuhI+py+2vSByC
|
101
|
+
HxdxQCHsCIg7oAAAEUHwLTAiKIQPgRSbYMfd3VEIH1OX2x8mUgA7}
|
102
|
+
warning {R0lGODlhIAAgAKIAANnZ2YSEAP//AMbGxgAAAISEhP///////yH5BAEAAAAALAAAAAAgACAA
|
103
|
+
AAP/CLq8gREIutz+KESGEHS5vVGIiAxSIehy+6JAUaUqBF1uBxQoukOFhaDL7RgoukKFhaDL
|
104
|
+
3RgoujqEVQi63IyBortUWAi63IuBostDWIWgy60YIjKERCMiSFUIutyAISKCpCoiOFSFoMsd
|
105
|
+
KCpIqiKCQlUIusyBooqkKiIoQ1UIuryBooqkiqJKVQi6rIGii6SKojpUWAi6DIGiG0RIgaJL
|
106
|
+
VQi6HCi6MoREg6I7VFgIuhsoukqEhKKrVFgIuhoouhuEgaKrQ1iFoAuBortDOCi6S4WFoBso
|
107
|
+
uiyEostDWIWgGii63K6IqgAAIVB0WQaJBkV3h7AKAAJFl4WQiFB0mQoLRyBQdFkJiQhFl4ew
|
108
|
+
CgJFl3WQaFB0WQirIFB0ud0RVVWg6HJ7o6GqAgwUXW5fNFRVhQCBpMvti0oVABCwdLndEehi
|
109
|
+
6XI7I4AEADs=}
|
110
|
+
}
|
@@ -0,0 +1,117 @@
|
|
1
|
+
#
|
2
|
+
# repeater.tcl,v 1.1 2004/09/21 02:34:32 jenglish Exp
|
3
|
+
#
|
4
|
+
# Demonstration of custom classes.
|
5
|
+
#
|
6
|
+
# The Tile button doesn't have built-in support for autorepeat.
|
7
|
+
# Instead of adding -repeatdelay and -repeatinterval options,
|
8
|
+
# and all the extra binding scripts required to deal with them,
|
9
|
+
# we create a custom widget class for autorepeating buttons.
|
10
|
+
#
|
11
|
+
# Usage:
|
12
|
+
# ttk::button .b -class Repeater [... other options ...]
|
13
|
+
#
|
14
|
+
# TODO:
|
15
|
+
# Use system settings for repeat interval and initial delay.
|
16
|
+
#
|
17
|
+
# Notes:
|
18
|
+
# Repeater buttons work more like scrollbar arrows than
|
19
|
+
# Tk repeating buttons: they fire once immediately when
|
20
|
+
# first pressed, and $State(delay) specifies the initial
|
21
|
+
# interval before the button starts autorepeating.
|
22
|
+
#
|
23
|
+
|
24
|
+
namespace eval tile::Repeater {
|
25
|
+
variable State
|
26
|
+
set State(timer) {} ;# [after] id of repeat script
|
27
|
+
set State(interval) 100 ;# interval between repetitions
|
28
|
+
set State(delay) 300 ;# delay after initial invocation
|
29
|
+
}
|
30
|
+
|
31
|
+
### Class bindings.
|
32
|
+
#
|
33
|
+
|
34
|
+
bind Repeater <Enter> { %W state active }
|
35
|
+
bind Repeater <Leave> { %W state !active }
|
36
|
+
|
37
|
+
bind Repeater <Key-space> { tile::Repeater::Activate %W }
|
38
|
+
bind Repeater <<Invoke>> { tile::Repeater::Activate %W }
|
39
|
+
|
40
|
+
bind Repeater <ButtonPress-1> { tile::Repeater::Press %W }
|
41
|
+
bind Repeater <ButtonRelease-1> { tile::Repeater::Release %W }
|
42
|
+
bind Repeater <B1-Leave> { tile::Repeater::Pause %W }
|
43
|
+
bind Repeater <B1-Enter> { tile::Repeater::Resume %W } ;# @@@ see below
|
44
|
+
|
45
|
+
# @@@ Workaround for metacity-induced bug:
|
46
|
+
bind Repeater <B1-Enter> \
|
47
|
+
{ if {"%d" ne "NotifyUngrab"} { tile::Repeater::Resume %W } }
|
48
|
+
|
49
|
+
### Binding procedures.
|
50
|
+
#
|
51
|
+
|
52
|
+
## Activate -- Keyboard activation binding.
|
53
|
+
# Simulate clicking the button, and invoke the command once.
|
54
|
+
#
|
55
|
+
proc tile::Repeater::Activate {w} {
|
56
|
+
$w instate disabled { return }
|
57
|
+
set oldState [$w state pressed]
|
58
|
+
update idletasks; after 100
|
59
|
+
$w state $oldState
|
60
|
+
after idle [list $w invoke]
|
61
|
+
}
|
62
|
+
|
63
|
+
## Press -- ButtonPress-1 binding.
|
64
|
+
# Invoke the command once and start autorepeating after
|
65
|
+
# $State(delay) milliseconds.
|
66
|
+
#
|
67
|
+
proc tile::Repeater::Press {w} {
|
68
|
+
variable State
|
69
|
+
$w instate disabled { return }
|
70
|
+
$w state pressed
|
71
|
+
$w invoke
|
72
|
+
after cancel $State(timer)
|
73
|
+
set State(timer) [after $State(delay) [list tile::Repeater::Repeat $w]]
|
74
|
+
}
|
75
|
+
|
76
|
+
## Release -- ButtonRelease binding.
|
77
|
+
# Stop repeating.
|
78
|
+
#
|
79
|
+
proc tile::Repeater::Release {w} {
|
80
|
+
variable State
|
81
|
+
$w state !pressed
|
82
|
+
after cancel $State(timer)
|
83
|
+
}
|
84
|
+
|
85
|
+
## Pause -- B1-Leave binding
|
86
|
+
# Temporarily suspend autorepeat.
|
87
|
+
#
|
88
|
+
proc tile::Repeater::Pause {w} {
|
89
|
+
variable State
|
90
|
+
$w state !pressed
|
91
|
+
after cancel $State(timer)
|
92
|
+
}
|
93
|
+
|
94
|
+
## Resume -- B1-Enter binding
|
95
|
+
# Resume autorepeat.
|
96
|
+
#
|
97
|
+
proc tile::Repeater::Resume {w} {
|
98
|
+
variable State
|
99
|
+
$w instate disabled { return }
|
100
|
+
$w state pressed
|
101
|
+
$w invoke
|
102
|
+
after cancel $State(timer)
|
103
|
+
set State(timer) [after $State(interval) [list tile::Repeater::Repeat $w]]
|
104
|
+
}
|
105
|
+
|
106
|
+
## Repeat -- Timer script
|
107
|
+
# Invoke the command and reschedule another repetition
|
108
|
+
# after $State(interval) milliseconds.
|
109
|
+
#
|
110
|
+
proc tile::Repeater::Repeat {w} {
|
111
|
+
variable State
|
112
|
+
$w instate disabled { return }
|
113
|
+
$w invoke
|
114
|
+
set State(timer) [after $State(interval) [list tile::Repeater::Repeat $w]]
|
115
|
+
}
|
116
|
+
|
117
|
+
#*EOF*
|