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,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*
|