Tk Library Source Code
Check-in [25fbd1c0aa]
Not logged in
Bounty program for improvements to Tcl and certain Tcl packages.

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Updated plotchart work with latest from release and trunk.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | subtitles-and-corrected-tests
Files: files | file ages | folders
SHA1:25fbd1c0aabd9f0d7c1c637c2c1ca6bf2dd5c241
User & Date: aku 2013-03-26 03:28:43
Context
2013-05-25
12:13
Implementing the options -timeformat and -gmt for the x-axis as per bug 3613718 check-in: 201ff1170b user: markus tags: subtitles-and-corrected-tests
2013-03-26
03:28
Updated plotchart work with latest from release and trunk. check-in: 25fbd1c0aa user: aku tags: subtitles-and-corrected-tests
03:27
Merged release back into the main line. check-in: c1420d949e user: aku tags: trunk
2013-03-14
16:15
Since the support for subtexts to the axes requires options for the right axis when determining the margins, we need to use the rightaxis component for all relevant plot/chart types. check-in: 8c13632e14 user: markus tags: subtitles-and-corrected-tests
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to ChangeLog.







1
2
3
4
5
6
7






2012-08-27  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	* support/installation/modules.tcl: Added the new widgetl module.
	* support/installation/modules.tcl: Added the new widgetv module.

2012-06-21  Andreas Kupries  <andreask@activestate.com>

>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2012-08-27  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	* support/installation/modules.tcl: Added the new widgetl module.
	* support/installation/modules.tcl: Added the new widgetv module.

2012-06-21  Andreas Kupries  <andreask@activestate.com>

Added DESCRIPTION.txt.























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Identifier: tklib
Title:  Tk Standard Library
Description: This package is intended to be a collection of
    Tcl packages that provide utility functions useful to a
    large collection of Tk programmers.
Rights: BSD
Version: 0.6
URL: http://core.tcl.tk/tklib/
Architecture: tcl
Contributor: Aaron Faupell <afaupell at users dot sourceforge dot net>
Contributor: Andreas Kupries <andreas_kupries at users dot sourceforge dot net>
Contributor: Arjen Markus <arjenmarkus at users dot sourceforge dot net>
Contributor: Csaba Nemethi <csaba dot nemethi at t-online dot de>
Contributor: David N. Welton <davidw at dedasys dot com>
Contributor: George Peter Staplin <georgeps at users dot sourceforge dot net>
Contributor: Jean-Luc Fontaine <jfontain at free dot fr>
Contributor: Jeff Hobbs <jeffh at ActiveState dot com>
Contributor: Keith Nash <kjnash at users dot sourceforge dot net>
Contributor: Keith Vetter <keith at ebook dot gemstar dot com>
Contributor: Kevin B. Kenny <kennykb at acm dot org>
Contributor: Kevin Kenny <kennykb at acm dot org>
Contributor: Marty Backe <marty at lucidway dot org>
Contributor: Nemethi <csaba dot nemethi at t-online dot de>
Contributor: Pat Thoyts <patthoyts at users dot sourceforge dot net>
Contributor: Ruediger Haertel <r_haertel at gmx dot de>
Contributor: Rüdiger Härtel <r_haertel at gmx dot de>
Contributor: Torsten Berg <berg at marilim dot de>

Changes to README.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
RCS: @(#) $Id: README,v 1.3 2003/11/28 22:42:03 andreas_kupries Exp $

Welcome to the tklib, the Tk Standard Library.  This package is
intended to be a collection of Tcl packages that provide utility
functions useful to a large collection of Tcl programmers.

The home web site for this code is http://tcllib.sourceforge.net/ .
At this web site, you will find mailing lists, web forums, databases
for bug reports and feature requests, the CVS repository (browsable on
the web, or read-only accessible via CVS ), and more.

Please note that tklib depends on tcllib, the Tcl Standard Library.
This is true for both installation and runtime.







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
RCS: @(#) $Id: README,v 1.3 2003/11/28 22:42:03 andreas_kupries Exp $

Welcome to the tklib, the Tk Standard Library.  This package is
intended to be a collection of Tcl packages that provide utility
functions useful to a large collection of Tcl programmers.

The home web site for this code is http://core.tcl.tk/tklib/ .
At this web site, you will find mailing lists, web forums, databases
for bug reports and feature requests, the CVS repository (browsable on
the web, or read-only accessible via CVS ), and more.

Please note that tklib depends on tcllib, the Tcl Standard Library.
This is true for both installation and runtime.

Added embedded/man/files/apps/bitmap-editor.n.



























































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/apps/bitmap-editor\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c)
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "bitmap-editor" n 1\&.0 tklib "Bitmap handling"
.BS
.SH NAME
bitmap-editor \- Editor for XBM images
.SH SYNOPSIS
\fBbitmap-editor\fR ?\fIxbmfile\fR?
.sp
.BE
.SH DESCRIPTION
.PP
The application described by this document, \fBbitmap-editor\fR, is
a simple editor for XBM based bitmap images\&.
Written by Keith Vetter the original code can be found at
\fIhttp://wiki\&.tcl\&.tk/6298\fR\&.
.SS "COMMAND LINE"
.TP
\fBbitmap-editor\fR ?\fIxbmfile\fR?
Invoked without argument the editor GUI will be opened and show a
standard bitmap to edit\&. Invoked with an argument it is expected to be
the path to a bitmap file in XBM format, and the contained bitmap is
shown\&.
.RS
.TP
path \fIxbmfile\fR (in/out)
This argument specifies the path to a bitmap file in XBM format, whose
contents is to shown and edited by the application\&.
.RE
.sp
.PP
.SH "BUGS, IDEAS, FEEDBACK"
This document, and the application it describes, will undoubtedly
contain bugs and other problems\&.
Please report such in the category \fIbitmap\fR of the
\fITcllib SF Trackers\fR [http://sourceforge\&.net/tracker/?group_id=12883]\&.
Please also report any ideas for enhancements you may have for either
application and/or documentation\&.
.SH KEYWORDS
bitmap, editor, image, pixel, xbm
.SH CATEGORY
Image processing
.SH COPYRIGHT
.nf
Copyright (c)

.fi

Added embedded/man/files/apps/dia.n.



































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/apps/dia\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c) 2010 Andreas Kupries <andreas_kupries@users\&.sourceforge\&.net>
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "dia" n 1\&.0 tklib "Documentation toolbox"
.BS
.SH NAME
dia \- Lightweight Diagram Processor
.SH SYNOPSIS
\fBdia\fR \fBshow\fR \fIinputfile\fR\&.\&.\&.
.sp
\fBdia\fR \fBconvert\fR \fB-o\fR \fIoutput\fR \fIformat\fR \fIinputfile\fR\&.\&.\&.
.sp
.BE
.SH DESCRIPTION
.PP
The application described by this document, \fBdia\fR, is a
lightweight processor for tklib diagram files
.PP
\fBdia\fR is based upon the package \fBdiagram\fR\&.
See it for examples and language reference\&.
.SS "USE CASES"
\fBdia\fR was written with the following two use cases in
mind\&.
.PP
.IP [1]
Processing and display of one or more diagram files\&.
.IP [2]
Batch conversion of one or more diagram files into raster image files\&.
.PP
.PP
.SS "COMMAND LINE"
.TP
\fBdia\fR \fBshow\fR \fIinputfile\fR\&.\&.\&.
This is the form for use case [1]\&. The application opens a gui
showing the list of input files to the left, allowing the user to
choose which of them to render to the canvas on the right\&.
.TP
\fBdia\fR \fBconvert\fR \fB-o\fR \fIoutput\fR \fIformat\fR \fIinputfile\fR\&.\&.\&.
This is the form for use case [2]\&. The application converts
the input files into raster image of the specified \fIformat\fR\&.
.RS
.TP
path \fIoutput\fR (in)
This argument specifies where to write the generated image\&. It can
be the path to a file or directory\&.
.sp
If the \fIoutput\fR does not exist then [file dirname $output]
has to exist and must be a writable directory\&.
.sp
In case of multiple input files the generated image will be written to
a file in the directory, and the name of that file will be derived
from the \fIinputfile\fR, and \fIformat\fR\&.
.sp
In case of a single input file the generated image will be written to
the file\&.
.TP
(handle) \fIformat\fR (in)
This argument specifies the image format to convert the diagrams into
when processing the input\&. The application recognizes all formats
supported by the \fBImg\fR package, i\&.e\&. for which it can load a
package \fBimg::\fBformat\fR\fR
.TP
path \fIinputfile\fR (in)
This argument specifies the path to the diagram file to process\&. It
has to exist, must be readable, and written in \fIdiagram\fR format\&.
.RE
.sp
.PP
.SH "BUGS, IDEAS, FEEDBACK"
This document, and the application it describes, will undoubtedly
contain bugs and other problems\&.
Please report such in the category \fIdiagram\fR of the
\fITcllib SF Trackers\fR [http://sourceforge\&.net/tracker/?group_id=12883]\&.
Please also report any ideas for enhancements you may have for either
application and/or documentation\&.
.SH KEYWORDS
canvas, conversion, diagram, vector
.SH CATEGORY
Documentation tools
.SH COPYRIGHT
.nf
Copyright (c) 2010 Andreas Kupries <andreas_kupries@users\&.sourceforge\&.net>

.fi

Added embedded/man/files/modules/autoscroll/autoscroll.n.



































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/autoscroll/autoscroll\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "autoscroll" n 1\&.1 tklib "Automatic mapping of scrollbars"
.BS
.SH NAME
autoscroll \- Provides for a scrollbar to automatically mapped and unmapped as needed
.SH SYNOPSIS
package require \fBTcl \fR
.sp
package require \fBautoscroll  ?1\&.1?\fR
.sp
\fB::autoscroll::autoscroll\fR \fIscrollbar\fR
.sp
\fB::autoscroll::unautoscroll\fR \fIscrollbar\fR
.sp
\fB::autoscroll::wrap\fR
.sp
\fB::autoscroll::unwrap\fR
.sp
.BE
.SH DESCRIPTION
This package allows scrollbars to be mapped and
unmapped as needed depending on the size and
content of the scrollbars scrolled widget\&. The
scrollbar must be managed by either pack or grid,
other geometry managers are not supported\&.
.PP
When managed by pack, any geometry changes made in the
scrollbars parent between the time a scrollbar is
unmapped, and when it is mapped will be lost\&. It is
an error to destroy any of the scrollbars siblings while the
scrollbar is unmapped\&. When managed by grid, if anything
becomes gridded in the same row and column the scrollbar
occupied it will be replaced by the scrollbar when remapped\&.
.PP
This package may be used on any scrollbar-like widget
as long as it supports the \fBset\fR subcommand in the same
style as scrollbar\&. If the \fBset\fR subcommand is not used
then this package will have no effect\&.
.PP
.TP
\fB::autoscroll::autoscroll\fR \fIscrollbar\fR
Arranges for the already existing scrollbar \fBscrollbar\fR
to be mapped and unmapped as needed\&.
.TP
\fB::autoscroll::unautoscroll\fR \fIscrollbar\fR
Returns the named scrollbar to its original static state\&.
.TP
\fB::autoscroll::wrap\fR
Arranges for all scrollbars created after this command is run
to be automatically mapped and unmapped as needed\&.
.TP
\fB::autoscroll::unwrap\fR
Turns off the automatic autoscrolling of all new scrollbars\&.
Does not effect existing scrollbars
.PP
.CS


text \&.t -yscrollcommand "\&.scrolly set"
scrollbar \&.scrolly -orient v -command "\&.t yview"
pack \&.scrolly -side right -fill y
pack \&.t -side left -fill both -expand 1
::autoscroll::autoscroll \&.scrolly

.CE
.SH KEYWORDS
scroll, scrollbar

Added embedded/man/files/modules/canvas/canvas_drag.n.























































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/canvas/canvas_drag\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "canvas::drag" n 0\&.1 tklib "Variations on a canvas"
.BS
.SH NAME
canvas::drag \- Manage the dragging of canvas items or item groups
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBcanvas::drag  ?0\&.1?\fR
.sp
\fB::canvas::drag\fR \fBon\fR \fIcanvas\fR \fItagOrId\fR \fIcmd\fR \fIoption\fR\&.\&.\&.
.sp
\fB::canvas::drag\fR \fBoff\fR \fIcanvas\fR \fItagOrId\fR
.sp
\fB::canvas::drag\fR \fBitem\fR \fIcanvas\fR \fItagOrId\fR \fIoption\fR\&.\&.\&.
.sp
\fB::canvas::drag\fR \fBgroup\fR \fIcanvas\fR \fItagOrId\fR \fIcmd\fR \fIoption\fR\&.\&.\&.
.sp
\fB{*}cmd\fR \fBstart\fR \fIcanvas\fR \fIitem\fR
.sp
\fB{*}cmd\fR \fBmove\fR \fIcanvas\fR \fIclientdata\fR \fIdx\fR \fIdy\fR
.sp
\fB{*}cmd\fR \fBdone\fR \fIcanvas\fR \fIclientdata\fR
.sp
.BE
.SH DESCRIPTION
This package provides utility commands to setup and rmeove dragging of
items or item groups on a canvas, hiding all complexity regarding
bindings from the user\&.
.SH API
.TP
\fB::canvas::drag\fR \fBon\fR \fIcanvas\fR \fItagOrId\fR \fIcmd\fR \fIoption\fR\&.\&.\&.
This command initializes item dragging on the \fIcanvas\fR widget,
with the items used as drag handles identified by \fItagOrId\fR\&.
The command prefix \fIcmd\fR, invoked for drag start and movement, is
responsible for the initialization and actual execution of the drag
operation\&.
.sp
The signature of the command prefix is described later, in
section \fBDrag callback\fR\&.
.sp
Similarly, the accepted options and their values are described
in section \fBOptions\fR
.sp
The result of the command is the empty string\&.
.TP
\fB::canvas::drag\fR \fBoff\fR \fIcanvas\fR \fItagOrId\fR
This command removes any drag operation set on the items of canvas
\fIcanvas\fR identified by \fItagOrId\fR\&.
.sp
The result of the command is the empty string\&.
.TP
\fB::canvas::drag\fR \fBitem\fR \fIcanvas\fR \fItagOrId\fR \fIoption\fR\&.\&.\&.
This is a convenience command wrapped around method \fBon\fR (see above)
to drag single items of the \fIcanvas\fR widget, identified by \fItagOrId\fR\&.
.sp
It uses an internal standard callback for this\&.
.sp
The result of the command is the empty string\&.
.TP
\fB::canvas::drag\fR \fBgroup\fR \fIcanvas\fR \fItagOrId\fR \fIcmd\fR \fIoption\fR\&.\&.\&.
This is a convenience command wrapped around method \fBon\fR (see above)
to drag single items of the \fIcanvas\fR widget, identified by \fItagOrId\fR\&.
.sp
It uses an internal standard callback for this\&. The callback
\fIcmd\fR specified has the same signature as the \fBDrag callback\fR,
except that
.RS
.IP [1]
The \fBmove\fR method is not invoked\&.
.IP [2]
The result of the \fBstart\fR method \fIhas to be\fR a
canvas tag refering to the whole group of items to move\&. In other words,
it must convert from drag handle (item id) to dragged groupt (tag)\&.
.RE
.sp
The result of the command is the empty string\&.
.PP
.SS "DRAG CALLBACK"
The drag callback is a command prefix invoked in the following two
ways:
.TP
\fB{*}cmd\fR \fBstart\fR \fIcanvas\fR \fIitem\fR
This form is invoked when has initiated dragging using drag handle
identified by the canvas \fIitem\fR id\&.
The callback now has to perform anything necessary for its type of
drag operation\&.
.sp
The result of the command can be anything\&. It is stored by the
system as client information and passed unchanged to the movement
callback for its use\&. In this manner the drag callback is able to
maintain custom state from start to movement\&.
.TP
\fB{*}cmd\fR \fBmove\fR \fIcanvas\fR \fIclientdata\fR \fIdx\fR \fIdy\fR
This form is invoked when the mouse moved during a drag operation\&.
It is invoked with the client data from the start callback (or the
previous move callback) and the distances the mouse has traveled in
horizontal and vertical directions\&.
.sp
The result of the command can be anything\&. It is stored by the
system as client information and passed unchanged to the next movement
callback for its use\&. In this manner the drag callback is able to
maintain custom state from movement to movement\&.
.TP
\fB{*}cmd\fR \fBdone\fR \fIcanvas\fR \fIclientdata\fR
This form is invoked when the drag operation ends\&.
It is invoked with the client data from the last movement callback (or
start callback if there had been no motion)\&.
.sp
The result of the command is ignored\&.
.PP
.SS OPTIONS
The commands to create drag operations (\fBon\fR, \fBitem\fR,
and \fBgroup\fR) all accept the following options to configure the
new drag\&.
.TP
\fB-event\fR \fIspec\fR
The value of this option specifies the mouse button used to initiate
the drag operation, and the keyboard modifier, if any\&. Examples of
specifications:
.sp
To initiate a drag operation by pressing mouse button 3 on a
drag handle, use:
.CS

 -event 3
.CE
.IP
This is the default as well, if the option is not specified\&.
.sp
To initiate a drag operation by pressing mouse button 2 on a
drag handle while holding down the Control key, use:
.CS

 -event Control-2
.CE
.PP
.SH KEYWORDS
canvas, dragging

Added embedded/man/files/modules/canvas/canvas_epoints.n.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/canvas/canvas_epoints\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "canvas::edit::points" n 0\&.1 tklib "Variations on a canvas"
.BS
.SH NAME
canvas::edit::points \- Editing a cloud of points on a canvas
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBcanvas::edit::points  ?0\&.1?\fR
.sp
\fB::canvas::edit\fR \fBpoints\fR \fIobjectName\fR \fIcanvas\fR \fIoptions\fR\&.\&.\&.
.sp
\fBobjectName\fR \fBdestroy\fR
.sp
\fBobjectName\fR \fBenable\fR
.sp
\fBobjectName\fR \fBdisable\fR
.sp
\fBobjectName\fR \fBactive\fR
.sp
\fBobjectName\fR \fBadd\fR \fIx\fR \fIy\fR
.sp
\fBobjectName\fR \fBclear\fR
.sp
\fBcreateCmd\fR \fIcanvas\fR \fIx\fR \fIy\fR
.sp
\fBhighlightCmd\fR \fBon\fR \fIcanvas\fR \fIitem\fR
.sp
\fBhighlightCmd\fR \fBoff\fR \fIcanvas\fR \fIstate\fR
.sp
\fBdataCmd\fR \fBadd\fR \fIeditorObj\fR \fIid\fR \fIx\fR \fIy\fR
.sp
\fBdataCmd\fR \fBremove\fR \fIeditorObj\fR \fIid\fR
.sp
\fBdataCmd\fR \fBmove start\fR \fIeditorObj\fR \fIid\fR
.sp
\fBdataCmd\fR \fBmove delta\fR \fIeditorObj\fR \fIid\fR \fIx\fR \fIy\fR \fIdx\fR \fIdy\fR
.sp
\fBdataCmd\fR \fBmove done\fR \fIeditorObj\fR \fIid\fR
.sp
.BE
.SH DESCRIPTION
This package provides a class whose instances handle editing a cloud
of point markers on a canvas\&. Instances can be configured with regard
to the visual appearance of markers (regular, and highlighted)\&. Note
that instances do not store the edited points themselves, but delegate
this to a configurable object\&.
.SH "CLASS API"
.TP
\fB::canvas::edit\fR \fBpoints\fR \fIobjectName\fR \fIcanvas\fR \fIoptions\fR\&.\&.\&.
This, the class command, creates and configures a new instance of a
point cloud editor, named \fIobjectName\fR\&. The instance will be
connected to the specified \fIcanvas\fR widget\&.
.sp
The result of the command is the fully qualified name of the
instance command\&.
.sp
The options accepted here, and their values, are explained in
the section \fBOptions\fR\&.
.PP
.SH "INSTANCE API"
Instances of the point cloud editors provide the following API:
.TP
\fBobjectName\fR \fBdestroy\fR
This method destroys the point cloud editor and releases all its
internal resources\&.
.sp
Note that this operation does not destroy the items of the
point markers the editor managed on the attached canvas, nor the
canvas itself\&.
.sp
The result of the method is an empty string\&.
.TP
\fBobjectName\fR \fBenable\fR
This method activates editing of the point cloud on the canvas\&. This
is the default after instance creation\&. A call is ignored if the
editor is already active\&.
.sp
The result of the method is an empty string\&.
.sp
The complementary method is \fBdisable\fR\&. The interogatory
method for the current state is \fBactive\fR\&.
.TP
\fBobjectName\fR \fBdisable\fR
This method disables editing of the point cloud on the canvas\&. A call
is ignored if the editor is already disabled\&.
.sp
The result of the method is an empty string\&.
.sp
The complementary method is \fBenable\fR\&. The interogatory
method for the current state is \fBactive\fR\&.
.TP
\fBobjectName\fR \fBactive\fR
This method queries the editor state\&.
.sp
The result of the method is a boolean value, \fBtrue\fR if
the editor is active, and \fBfalse\fR otherwise, i\&.e\&. disabled\&.
.sp
The methods to change the state are \fBenable\fR and
\fBdisable\fR\&.
.TP
\fBobjectName\fR \fBadd\fR \fIx\fR \fIy\fR
This method programmatically creates a point at the specified location\&.
.sp
The result of the method is an empty string\&.
.sp
Note that this method goes through the whole set of callbacks
invoked when the user interactively creates a point, i\&.e\&.
\fB-create-cmd\fR, and, more importantly, \fB-data-cmd\fR\&.
.sp
This is the method through which to load pre-existing points
into an editor instance\&.
.TP
\fBobjectName\fR \fBclear\fR
This method programmatically removes all points from the editor\&.
.sp
The result of the method is an empty string\&.
.sp
Note that this method goes through the same callback invoked
when the user interactively removes a point, i\&.e\&. \fB-data-cmd\fR\&.
.PP
.SH OPTIONS
The class command accepts the following options
.TP
\fB-tag\fR \fIstring\fR
The value of this option is the name of the canvas tag with which to
identify all items of all points managed by the editor\&.
.sp
This option can only be set at construction time\&.
.sp
If not specified it defaults to \fBPOINT\fR
.TP
\fB-create-cmd\fR \fIcommand-prefix\fR
The value of this option is a command prefix the editor will invoke
when it has to create a new point\&.
.sp
This option can only be set at construction time\&.
.sp
If not specified it defaults to a command which will create a
black-bordered blue circle of radius 3 centered on the location of the
new point\&.
.sp
The signature of this command prefix is
.RS
.TP
\fBcreateCmd\fR \fIcanvas\fR \fIx\fR \fIy\fR
The result of the command prefix \fImust\fR be a list of the canvas
items it created to represent the marker\&. Note here that the visual
representation of a "point" may consist of multiple canvas items in an
arbitrary shape\&.
.sp
The returned list of items is allowed to be empty, and such is
taken as signal that the callback vetoed the creation of the point\&.
.RE
.TP
\fB-highlight-cmd\fR \fIcommand-prefix\fR
The value of this option is a command prefix the editor will invoke
when it has to (un)highlight a point\&.
.sp
This option can only be set at construction time\&.
.sp
If not specified it defaults to a command which will re-color
the item to highlight in red (and restores the color for
unhighlighting)\&.
.sp
The two signatures of this command prefix are
.RS
.TP
\fBhighlightCmd\fR \fBon\fR \fIcanvas\fR \fIitem\fR
.sp
This method of the command prefix has to perform whatever is
needed to highlight the point the \fIitem\fR is a part of (remember
the note above about points allowed to be constructed from multiple
canvas items)\&.
.sp
The result of the command can be anything and will be passed as
is as argument \fIstate\fR to the \fBoff\fR method\&.
.TP
\fBhighlightCmd\fR \fBoff\fR \fIcanvas\fR \fIstate\fR
.sp
This method is invoked to unhighlight a point described by the
\fIstate\fR, which is the unchanged result of the \fBon\fR method
of the command prefix\&. The result of this method is ignored\&.
.sp
Note any interaction between dragging and highlighting of
points is handled within the editor, and that the callback bears no
responsibility for doing such\&.
.RE
.TP
\fB-data-cmd\fR \fIcommand-prefix\fR
The value of this option is a command prefix the editor will invoke
when a point was edited in some way\&. This is how the editor delegates
the actual storage of point information to an outside object\&.
.sp
This option can only be set at construction time\&.
.sp
If not specified it defaults to an empty string and is ignored
by the editor, i\&.e\&. not invoked\&.
.sp
The signatures of this command prefix are
.RS
.TP
\fBdataCmd\fR \fBadd\fR \fIeditorObj\fR \fIid\fR \fIx\fR \fIy\fR
This callback is invoked when a new point was added to the instance,
either interactively, or programmatically\&.
See instance method \fBadd\fR for the latter\&.
.sp
The \fIid\fR identifies the point within the editor and will be
used by the two other callbacks to specify which point to modify\&.
.sp
The last two arguments \fIx\fR and \fIy\fR specify the location
of the new point in canvas coordinates\&.
.sp
The result of this method is ignored\&.
.TP
\fBdataCmd\fR \fBremove\fR \fIeditorObj\fR \fIid\fR
This callback is invoked when a point removed from the editor
instance\&.
.sp
The \fIid\fR identifies the removed point within the editor\&.
.sp
The result of this method is ignored\&.
.TP
\fBdataCmd\fR \fBmove start\fR \fIeditorObj\fR \fIid\fR
This callback is invoked when the movement of a point in the editor
instance has started\&.
.sp
The \fIid\fR identifies the point within the editor about to be
moved\&.
.sp
The result of this method is ignored\&.
.TP
\fBdataCmd\fR \fBmove delta\fR \fIeditorObj\fR \fIid\fR \fIx\fR \fIy\fR \fIdx\fR \fIdy\fR
This callback is invoked when the point moved in the editor instance\&.
.sp
The \fIid\fR identifies the moved point within the editor, and
the remaining arguments \fIx\fR, \fIy\fR, \fIdx\fR, and \fIdy\fR
provide the new absolute location of the point, and full delta to the
original location\&.
.sp
At the time of the calls the system is \fInot\fR committed to
the move yet\&. Only after method \fBmove done\fR was invoked and
has accepted or rejected the last position will the editor update its
internal data structures, either committing to the new location, or
rolling the move back to the original one\&.
.sp
Given this the location data provided here should be saved only
in temporary storage until then\&.
.sp
The result of this method is ignored\&.
.TP
\fBdataCmd\fR \fBmove done\fR \fIeditorObj\fR \fIid\fR
This callback is invoked when the movement of a point in the editor
instance is complete\&.
.sp
The \fIid\fR identifies the moved point within the editor\&.
.sp
The result of this method must be a boolean value\&. If the
method returns \fBfalse\fR the move is vetoed and rollbed back\&.
.RE
.PP
.SH KEYWORDS
canvas, editing, point cloud, points

Added embedded/man/files/modules/canvas/canvas_epolyline.n.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/canvas/canvas_epolyline\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "canvas::edit::polyline" n 0\&.1 tklib "Variations on a canvas"
.BS
.SH NAME
canvas::edit::polyline \- Editing a polyline on a canvas
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBcanvas::edit::points  ?0\&.1?\fR
.sp
package require \fBcanvas::edit::polyline  ?0\&.1?\fR
.sp
\fB::canvas::edit\fR \fBpolyline\fR \fIobjectName\fR \fIcanvas\fR \fIoptions\fR\&.\&.\&.
.sp
\fBobjectName\fR \fBdestroy\fR
.sp
\fBobjectName\fR \fBenable\fR
.sp
\fBobjectName\fR \fBdisable\fR
.sp
\fBobjectName\fR \fBactive\fR
.sp
\fBobjectName\fR \fBadd\fR \fIx\fR \fIy\fR
.sp
\fBobjectName\fR \fBclear\fR
.sp
\fBcreateCmd\fR \fIcanvas\fR \fIx\fR \fIy\fR
.sp
\fBhighlightCmd\fR \fBon\fR \fIcanvas\fR \fIitem\fR
.sp
\fBhighlightCmd\fR \fBoff\fR \fIcanvas\fR \fIstate\fR
.sp
\fBdataCmd\fR \fIeditorObj\fR \fIcoordinates\fR
.sp
.BE
.SH DESCRIPTION
This package provides a class whose instances handle editing a single
poly-line on a canvas\&. Instances can be configured with regard to the
visual appearance (regular, and highlighted) of the markers denoting
the line's vertices\&. Note that instances do not store the edited
polyline themselves, but delegate this to a configurable object\&.
.SH "CLASS API"
.TP
\fB::canvas::edit\fR \fBpolyline\fR \fIobjectName\fR \fIcanvas\fR \fIoptions\fR\&.\&.\&.
This, the class command, creates and configures a new instance of a
polyline editor, named \fIobjectName\fR\&. The instance will be
connected to the specified \fIcanvas\fR widget\&.
.sp
The result of the command is the fully qualified name of the
instance command\&.
.sp
The options accepted here, and their values, are explained in
the section \fBOptions\fR\&.
.PP
.SH "INSTANCE API"
Instances of the polyline editors provide the following API:
.TP
\fBobjectName\fR \fBdestroy\fR
This method destroys the polyline editor and releases all its
internal resources\&.
.sp
Note that this operation does not destroy the items the editor
managed on the attached canvas, nor the canvas itself\&.
.sp
The result of the method is an empty string\&.
.TP
\fBobjectName\fR \fBenable\fR
This method activates editing of the polyline on the canvas\&. This
is the default after instance creation\&. A call is ignored if the
editor is already active\&.
.sp
The result of the method is an empty string\&.
.sp
The complementary method is \fBdisable\fR\&. The interogatory
method for the current state is \fBactive\fR\&.
.TP
\fBobjectName\fR \fBdisable\fR
This method disables editing of the polyline on the canvas\&. A call
is ignored if the editor is already disabled\&.
.sp
The result of the method is an empty string\&.
.sp
The complementary method is \fBenable\fR\&. The interogatory
method for the current state is \fBactive\fR\&.
.TP
\fBobjectName\fR \fBactive\fR
This method queries the editor state\&.
.sp
The result of the method is a boolean value, \fBtrue\fR if
the editor is active, and \fBfalse\fR otherwise, i\&.e\&. disabled\&.
.sp
The methods to change the state are \fBenable\fR and
\fBdisable\fR\&.
.TP
\fBobjectName\fR \fBadd\fR \fIx\fR \fIy\fR
This method programmatically adds a vertex at the specified location to the line\&.
.sp
The result of the method is an empty string\&.
.sp
Note that this method goes through the whole set of callbacks
invoked when the user interactively creates a vertex, i\&.e\&.
\fB-create-cmd\fR, and, more importantly, \fB-data-cmd\fR\&.
.sp
One important difference however\&. The new vertex is always added
at the end of the line, whereas interactive creation uses heuristics
to splice it into the line at a suitable location\&.
.sp
This is the method through which to load the vertices of a
pre-existing line into an editor instance\&.
.TP
\fBobjectName\fR \fBclear\fR
This method programmatically removes all vertices from the editor,
essentially removing the whole line\&.
.sp
The result of the method is an empty string\&.
.sp
Note that this method goes through the same callbacks invoked
when the user interactively removes a vertex, i\&.e\&. \fB-data-cmd\fR\&.
.PP
.SH OPTIONS
The class command accepts the following options
.TP
\fB-tag\fR \fIstring\fR
The value of this option is the name of the canvas tag with which to
identify all items of all vertices managed by the editor\&.
.sp
This option can only be set at construction time\&.
.sp
If not specified it defaults to \fBPOLYLINE\fR
.TP
\fB-create-cmd\fR \fIcommand-prefix\fR
The value of this option is a command prefix the editor will invoke
when it has to create a new vertex\&.
.sp
This option can only be set at construction time\&.
.sp
If not specified it defaults to a command which will create a
black-bordered blue circle of radius 3 centered on the location of the
new point\&.
.sp
The signature of this command prefix is
.RS
.TP
\fBcreateCmd\fR \fIcanvas\fR \fIx\fR \fIy\fR
The result of the command prefix \fImust\fR be a list of the canvas
items it created to represent the marker\&. Note here that the visual
representation of a "vertex" may consist of multiple canvas items in
an arbitrary shape\&.
.sp
The returned list of items is allowed to be empty, and such is
taken as signal that the callback vetoed the creation of the vertex\&.
.RE
.TP
\fB-highlight-cmd\fR \fIcommand-prefix\fR
The value of this option is a command prefix the editor will invoke
when it has to (un)highlight a vertex\&.
.sp
This option can only be set at construction time\&.
.sp
If not specified it defaults to a command which will re-color
the item to highlight in red (and restores the color for
unhighlighting)\&.
.sp
The two signatures of this command prefix are
.RS
.TP
\fBhighlightCmd\fR \fBon\fR \fIcanvas\fR \fIitem\fR
.sp
This method of the command prefix has to perform whatever is
needed to highlight the vertex the \fIitem\fR is a part of (remember
the note above about points allowed to be constructed from multiple
canvas items)\&.
.sp
The result of the command can be anything and will be passed as
is as argument \fIstate\fR to the \fBoff\fR method\&.
.TP
\fBhighlightCmd\fR \fBoff\fR \fIcanvas\fR \fIstate\fR
.sp
This method is invoked to unhighlight a vertex described by the
\fIstate\fR, which is the unchanged result of the \fBon\fR method
of the command prefix\&. The result of this method is ignored\&.
.sp
Note any interaction between dragging and highlighting of
vertices is handled within the editor, and that the callback bears no
responsibility for doing such\&.
.RE
.TP
\fB-data-cmd\fR \fIcommand-prefix\fR
The value of this option is a command prefix the editor will invoke
when the line was edited in some way (vertex added, removed,
moved)\&. This is how the editor delegates the actual storage of the
line information to an outside object\&.
.sp
This option can only be set at construction time\&.
.sp
If not specified it defaults to an empty string and is ignored
by the editor, i\&.e\&. not invoked\&.
.sp
The signature of this command prefix is
.RS
.TP
\fBdataCmd\fR \fIeditorObj\fR \fIcoordinates\fR
This callback is invoked when the line was changed either interactively,
or programmatically\&.
See instance method \fBadd\fR for the latter\&.
.sp
The \fIeditorObj\fR identifies the instance invoking the
callback, whereas \fIcoordinates\fR is a list of vertex locations,
with each location a pair of x- and y-coordinates\&.
.sp
The result of this method is ignored\&.
.RE
.PP
.SH KEYWORDS
canvas, editing, polyline

Added embedded/man/files/modules/canvas/canvas_equad.n.



























































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/canvas/canvas_equad\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "canvas::edit::quadrilateral" n 0\&.1 tklib "Variations on a canvas"
.BS
.SH NAME
canvas::edit::quadrilateral \- Editing a quadrilateral on a canvas
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBcanvas::edit::points  ?0\&.1?\fR
.sp
package require \fBcanvas::edit::quadrilateral  ?0\&.1?\fR
.sp
\fB::canvas::edit\fR \fBquadrilateral\fR \fIobjectName\fR \fIcanvas\fR \fIoptions\fR\&.\&.\&.
.sp
\fBobjectName\fR \fBdestroy\fR
.sp
\fBobjectName\fR \fBenable\fR
.sp
\fBobjectName\fR \fBdisable\fR
.sp
\fBobjectName\fR \fBactive\fR
.sp
\fBobjectName\fR \fBadd\fR \fIx\fR \fIy\fR
.sp
\fBobjectName\fR \fBclear\fR
.sp
\fBcreateCmd\fR \fIcanvas\fR \fIx\fR \fIy\fR
.sp
\fBhighlightCmd\fR \fBon\fR \fIcanvas\fR \fIitem\fR
.sp
\fBhighlightCmd\fR \fBoff\fR \fIcanvas\fR \fIstate\fR
.sp
\fBdataCmd\fR \fIeditorObj\fR \fIcoordinates\fR
.sp
.BE
.SH DESCRIPTION
This package provides a class whose instances handle the editing of a
quadrilateral on a canvas\&. Instances can be configured with regard to
the visual appearance (regular, and highlighted) of vertex
markers\&. Note that instances do not store the edited quadrilateral
themselves, but delegate this to a configurable object\&.
.SH "CLASS API"
.TP
\fB::canvas::edit\fR \fBquadrilateral\fR \fIobjectName\fR \fIcanvas\fR \fIoptions\fR\&.\&.\&.
This, the class command, creates and configures a new instance of a
quadrilateral editor, named \fIobjectName\fR\&. The instance will be
connected to the specified \fIcanvas\fR widget\&.
.sp
The result of the command is the fully qualified name of the
instance command\&.
.sp
The options accepted here, and their values, are explained in
the section \fBOptions\fR\&.
.PP
.SH "INSTANCE API"
Instances of the quadrilateral editors provide the following API:
.TP
\fBobjectName\fR \fBdestroy\fR
This method destroys the quadrilateral editor and releases all its
internal resources\&.
.sp
Note that this operation does not destroy the items the editor
managed on the attached canvas, nor the canvas itself\&.
.sp
The result of the method is an empty string\&.
.TP
\fBobjectName\fR \fBenable\fR
This method activates editing of the quadrilateral on the canvas\&. This
is the default after instance creation\&. A call is ignored if the
editor is already active\&.
.sp
The result of the method is an empty string\&.
.sp
The complementary method is \fBdisable\fR\&. The interogatory
method for the current state is \fBactive\fR\&.
.TP
\fBobjectName\fR \fBdisable\fR
This method disables editing of the quadrilateral on the canvas\&. A call
is ignored if the editor is already disabled\&.
.sp
The result of the method is an empty string\&.
.sp
The complementary method is \fBenable\fR\&. The interogatory
method for the current state is \fBactive\fR\&.
.TP
\fBobjectName\fR \fBactive\fR
This method queries the editor state\&.
.sp
The result of the method is a boolean value, \fBtrue\fR if
the editor is active, and \fBfalse\fR otherwise, i\&.e\&. disabled\&.
.sp
The methods to change the state are \fBenable\fR and
\fBdisable\fR\&.
.TP
\fBobjectName\fR \fBadd\fR \fIx\fR \fIy\fR
This method programmatically adds a vertex at the specified location
to the quadrilateral\&.
.sp
The result of the method is an empty string\&.
.sp
Note that this method goes through the whole set of callbacks
invoked when the user interactively creates a vertex, i\&.e\&.
\fB-create-cmd\fR, and, more importantly, \fB-data-cmd\fR\&.
.sp
This is the method through which to load the vertices of a
pre-existing quadrilateral into an editor instance\&.
.sp
Note that at most 4 vertices can be specified, and at least 4
must be specified for the quadrilateral to be complete\&.
.TP
\fBobjectName\fR \fBclear\fR
This method programmatically unset the quadrilateral in the editor\&.
.sp
The result of the method is an empty string\&.
.sp
Note that this method goes through the same callback invoked
when the user interactively removes a vertex, i\&.e\&. \fB-data-cmd\fR\&.
.PP
.SH OPTIONS
The class command accepts the following options
.TP
\fB-convex\fR \fIboolean\fR
The value of this option is a boolean flag\&. When the flag is set the
editor will accept only convex quadrilaterals and reject all
operations which would result in a violation of convexity\&.
.sp
This option can only be set at construction time\&.
.sp
If not specified it defaults to \fBfalse\fR, i\&.e\&. acceptance
of any quadrilateral\&.
.TP
\fB-tag\fR \fIstring\fR
The value of this option is the name of the canvas tag with which to
identify all items of all quadrilateral managed by the editor\&.
.sp
This option can only be set at construction time\&.
.sp
If not specified it defaults to \fBQUADRILATERAL\fR
.TP
\fB-create-cmd\fR \fIcommand-prefix\fR
The value of this option is a command prefix the editor will invoke
when it has to create a new vertex\&.
.sp
This option can only be set at construction time\&.
.sp
If not specified it defaults to a command which will create a
black-bordered blue circle of radius 3 centered on the location of the
new point\&.
.sp
The signature of this command prefix is
.RS
.TP
\fBcreateCmd\fR \fIcanvas\fR \fIx\fR \fIy\fR
The result of the command prefix \fImust\fR be a list of the canvas
items it created to represent the marker\&. Note here that the visual
representation of a "vertex" may consist of multiple canvas items in an
arbitrary shape\&.
.RE
.TP
\fB-highlight-cmd\fR \fIcommand-prefix\fR
The value of this option is a command prefix the editor will invoke
when it has to (un)highlight a vertex\&.
.sp
This option can only be set at construction time\&.
.sp
If not specified it defaults to a command which will re-color
the item to highlight in red (and restores the color for
unhighlighting)\&.
.sp
The two signatures of this command prefix are
.RS
.TP
\fBhighlightCmd\fR \fBon\fR \fIcanvas\fR \fIitem\fR
.sp
This method of the command prefix has to perform whatever is
needed to highlight the vertex the \fIitem\fR is a part of (remember
the note above about quadrilateral allowed to be constructed from multiple
canvas items)\&.
.sp
The result of the command can be anything and will be passed as
is as argument \fIstate\fR to the \fBoff\fR method\&.
.TP
\fBhighlightCmd\fR \fBoff\fR \fIcanvas\fR \fIstate\fR
.sp
This method is invoked to unhighlight a vertex described by the
\fIstate\fR, which is the unchanged result of the \fBon\fR method
of the command prefix\&. The result of this method is ignored\&.
.sp
Note any interaction between dragging and highlighting of
quadrilateral is handled within the editor, and that the callback bears no
responsibility for doing such\&.
.RE
.TP
\fB-data-cmd\fR \fIcommand-prefix\fR
The value of this option is a command prefix the editor will invoke
when the quadrilateral was edited in some way\&. This is how the editor
delegates the actual storage of quadrilateral information to an
outside object\&.
.sp
This option can only be set at construction time\&.
.sp
If not specified it defaults to an empty string and is ignored
by the editor, i\&.e\&. not invoked\&.
.sp
The signatures of this command prefix are
.RS
.TP
\fBdataCmd\fR \fIeditorObj\fR \fIcoordinates\fR
This callback is invoked when the quarilateral was changed either
interactively, or programmatically\&.
See instance method \fBadd\fR for the latter\&.
.sp
The \fIeditorObj\fR identifies the instance invoking the
callback, whereas \fIcoordinates\fR is a list of vertex locations,
with each location a pair of x- and y-coordinates\&.
.sp
The result of this method is ignored\&.
.RE
.PP
.SH KEYWORDS
canvas, concave, convex, editing, non-convex, quadrilateral

Added embedded/man/files/modules/canvas/canvas_highlight.n.



































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/canvas/canvas_highlight\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "canvas::highlight" n 0\&.1 tklib "Variations on a canvas"
.BS
.SH NAME
canvas::highlight \- Manage the highlighting of canvas items or item groups
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBcanvas::highlight  ?0\&.1?\fR
.sp
\fB::canvas::highlight\fR \fBon\fR \fIcanvas\fR \fItagOrId\fR \fIcmd\fR
.sp
\fB::canvas::highlight\fR \fBoff\fR \fIcanvas\fR \fItagOrId\fR
.sp
\fB{*}cmd\fR \fBon\fR \fIcanvas\fR \fIitem\fR
.sp
\fB{*}cmd\fR \fBoff\fR \fIcanvas\fR \fIclientdata\fR
.sp
.BE
.SH DESCRIPTION
This package provides utility commands for setting up and tearing down
of highlights for canvas items or item groups, the latter identified
by a tag\&.
.SH API
.TP
\fB::canvas::highlight\fR \fBon\fR \fIcanvas\fR \fItagOrId\fR \fIcmd\fR
This command sets up a general highlight, with the items of canvas
\fIcanvas\fR to highlight in this manner identified by \fItagOrId\fR
and the \fIcmd\fR prefix providing the implementation, i\&.e\&. the how to
perform the highlight\&.
.sp
The signature of the command prefix is described later, in
section \fBHighlight callback\fR\&.
.sp
The result of the command is the empty string\&.
.sp
Limitations:
.RS
.IP [1]
When a highlight is active no other highlight can be activated\&.
This means that nested highlights are not possible\&.
.IP [2]
The system may break if a highlight is removed from within its
highlight callback\&.
.RE
.TP
\fB::canvas::highlight\fR \fBoff\fR \fIcanvas\fR \fItagOrId\fR
This command removes any highlight set on the items of canvas
\fIcanvas\fR identified by \fItagOrId\fR\&.
.sp
The result of the command is the empty string\&.
.PP
.SS "HIGHLIGHT CALLBACK"
The highlight callback is a command prefix invoked in the following
two ways:
.TP
\fB{*}cmd\fR \fBon\fR \fIcanvas\fR \fIitem\fR
This form is invoked when the mouse has entered (one of) the item(s)
the highlight was set up for\&. The callback now has to perform any
reconfiguration necessary to highlight the item (group)\&.
.sp
The result of the command can be anything\&. It is stored by the
system as client information and passed unchanged to the un-highlight
callback for its use\&. In this manner the highlight callback is able to
maintain custom state from highlighting to un-highlighting\&.
.sp
Note that the callback does not have to maintain state, nor
does it have to actually reconfigure the item (group)\&. In the latter
case the callback simply serves as easy enter/leave notification\&.
.TP
\fB{*}cmd\fR \fBoff\fR \fIcanvas\fR \fIclientdata\fR
This form is invoked when the mouse has left (one of) the item(s) of
the currently active the highlight\&. The callback now has to perform
any reconfiguration necessary to un-highlight the item (group)\&.
.sp
The result of the command must be a boolean value with the
usual value to be \fBtrue\fR\&. By returning \fBfalse\fR instead the
callback can veto the removal of the highlight\&.
.PP
.SH KEYWORDS
canvas, enter callback, highlighting, leave callback

Added embedded/man/files/modules/canvas/canvas_mvg.n.

































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/canvas/canvas_mvg\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c) 2010 Wolf-Dieter Busch (http://wiki\&.tcl\&.tk/15505)
'\" Copyright (c) 2010 Documentation, Andreas Kupries
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "canvas::mvg" n 1\&.0\&.1 tklib "Variations on a canvas"
.BS
.SH NAME
canvas::mvg \- Canvas to ImageMagick MVG vector format
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBcanvas::mvg  ?1?\fR
.sp
\fB::canvas::mvg\fR \fIpathName\fR
.sp
.BE
.SH DESCRIPTION
This package provides a command to convert a canvas' contents to
ImageMagick's MVG vector format\&.
.SH API
.TP
\fB::canvas::mvg\fR \fIpathName\fR
Dump the contents of the canvas \fIpathName\fR\&. The result is a string
in ImageMagick's MVG vector format\&.
.PP
.SH KEYWORDS
canvas, graphics, imagemagick, magick vector graphics, mvg, print screen, serialization, vector graphics
.SH COPYRIGHT
.nf
Copyright (c) 2010 Wolf-Dieter Busch (http://wiki\&.tcl\&.tk/15505)
Copyright (c) 2010 Documentation, Andreas Kupries

.fi

Added embedded/man/files/modules/canvas/canvas_snap.n.















































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/canvas/canvas_snap\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c) 2004 George Petasis (http://wiki\&.tcl\&.tk/1404)
'\" Copyright (c) 2010 Documentation, Andreas Kupries
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "canvas::snap" n 1\&.0\&.1 tklib "Variations on a canvas"
.BS
.SH NAME
canvas::snap \- Canvas snapshot to Tk photo image
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBcanvas::snap  ?1\&.0\&.1?\fR
.sp
package require \fBimg::window \fR
.sp
\fB::canvas::snap\fR \fIpathName\fR
.sp
.BE
.SH DESCRIPTION
This package provides a command to take snapshots of arbitrary
canvases\&.
.SH API
.TP
\fB::canvas::snap\fR \fIpathName\fR
Takes a snapshot of the canvas \fIpathName\fR\&. The result is the name
of a new Tk photo image containing the snapshot\&.
.sp
\fINote\fR that this command has a side-effect\&. To avoid having white
rectangles where other windows may overlap the canvas this command
forces the toplevel window the canvas is in to the top of the stacking
order\&.
.PP
.SH KEYWORDS
canvas, image, photo, print screen, snapshot
.SH COPYRIGHT
.nf
Copyright (c) 2004 George Petasis (http://wiki\&.tcl\&.tk/1404)
Copyright (c) 2010 Documentation, Andreas Kupries

.fi

Added embedded/man/files/modules/canvas/canvas_sqmap.n.



















































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/canvas/canvas_sqmap\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "canvas::sqmap" n 0\&.3\&.1 tklib "Variations on a canvas"
.BS
.SH NAME
canvas::sqmap \- Canvas with map background based on square tiles
.SH SYNOPSIS
package require \fBTcl  8\&.4\fR
.sp
package require \fBTk  8\&.4\fR
.sp
package require \fBsnit \fR
.sp
package require \fBuevent::onidle \fR
.sp
package require \fBcache::async \fR
.sp
package require \fBcanvas::sqmap  ?0\&.3\&.1?\fR
.sp
\fB::canvas::sqmap\fR \fIpathName\fR ?options?
.sp
\fIcanvasName\fR \fBimage set\fR \fIcell\fR \fIimage\fR
.sp
\fIcanvasName\fR \fBimage unset\fR \fIcell\fR
.sp
\fIcanvasName\fR \fBflush\fR
.sp
.BE
.SH DESCRIPTION
This package provides an extended canvas widget for the display of
maps based on a set of square image tiles\&. The tiles are the
background of the canvas, with all other canvas items added always
shown in front of them\&. The number of tiles shown, tile size, and
where to get the images to show are all configurable\&.
.SH API
.TP
\fB::canvas::sqmap\fR \fIpathName\fR ?options?
Creates the canvas \fIpathName\fR and configures it\&. The new widget
supports all of the options and methods of a regular canvas, plus the
options and methods described below\&.
.sp
The result of the command is \fIpathName\fR\&.
.PP
.SS OPTIONS
.TP
\fB-grid-cell-width\fR
The value for this option is a non-negative integer\&. It specifies the
width of the cells the background is made up of\&.
.TP
\fB-grid-cell-height\fR
The value for this option is a non-negative integer\&. It specifies the
height of the cells the background is made up of\&.
.TP
\fB-grid-cell-command\fR
The value for this option is a command prefix\&. It is invoked whenever
the canvas needs the image for a specific cell of the background, with
two additional arguments, the id of the cell, and a command prefix to
invoke when the image is ready, or known to not exist\&.
.sp
The id of the cell is a 2-element list containing the row and column
number of the cell, in this order\&. The result command prefix (named
"$result" in the example below) has to be invoked with either two or
three arguments, i\&.e\&.
.CS


    $result set   $cellid $image ; # image is known and ready
    $result unset $cellid        ; # image does not exist

.CE
.IP
This option may be left undefined, i\&.e\&. the canvas can operate without
it\&. In that case the only images shown in grid cells are those
explicitly set with the method \fBimage set\fR, see the next
section\&. All other grid cells will simply be empty\&.
.TP
\fB-viewport-command\fR
This option specifies a command prefix to invoke when the viewport of
the canvas is changed, to allow users keep track of where in the
scroll-region we are at all times\&. This can be used, for example, to
drive derivate displays, or to keep items in view by moving them as
the viewport moves\&.
.TP
\fB-image-on-load\fR
The value for this option is an image\&. If specified the image is shown
in a cell while the actual image for that cell is getting loaded
through the callback specified by the \fB-grid-cell-command\fR\&.
.TP
\fB-image-on-unset\fR
The value for this option is an image\&. If specified the image is shown
in a cell for which the callback specified by the \fB-grid-cell-command\fR
reported that there is no actual image to be shown\&.
.PP
.SS METHODS
.TP
\fIcanvasName\fR \fBimage set\fR \fIcell\fR \fIimage\fR
Invoking this method places the \fIimage\fR into the specified
\fIcell\fR of the background\&. The cell is given as a 2-element list
containing row and column number, in this order\&.
.sp
Note that an image is allowed to be associated with and displayed in
multiple cells of the canvas\&.
.TP
\fIcanvasName\fR \fBimage unset\fR \fIcell\fR
Invoking this method declares the specified \fIcell\fR of the
background as empty, an existing image shown by this cell will be
forgotten\&.  The cell is given as a 2-element list containing row and
column number, in this order\&.
.TP
\fIcanvasName\fR \fBflush\fR
Invoking this method forces the canvas to completely reload the images
for all cells\&. Do not use this method if the canvas is operated
without a \fB-grid-cell-command\fR, as in that case the canvas will
simply forget all images without being able to reload them\&.
.PP
.SH "IMAGE OWNERSHIP"
Note that the canvas \fIdoes not\fR take ownership of the images it
shows in the background\&. In other words, when we say that the canvas
forgets an image this means only that the association between a grid
cell and shown image is broken\&. The image is \fInot\fR
deleted\&. Managing the lifecycle of the images shown by the canvas is
responsibility of the user of the canvas\&.
.SH KEYWORDS
canvas, cell, grid, image, map, square map, tile

Added embedded/man/files/modules/canvas/canvas_tags.n.























































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/canvas/canvas_tags\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "canvas::tag" n 0\&.1 tklib "Variations on a canvas"
.BS
.SH NAME
canvas::tag \- Easier management of the tags on canvas items or item groups
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBcanvas::tag  ?0\&.1?\fR
.sp
\fB::canvas::tag\fR \fBappend\fR \fIcanvas\fR \fItagOrId\fR \fItag\fR\&.\&.\&.
.sp
\fB::canvas::tag\fR \fBprepend\fR \fIcanvas\fR \fItagOrId\fR \fItag\fR\&.\&.\&.
.sp
\fB::canvas::tag\fR \fBappend\fR \fIcanvas\fR \fItagOrId\fR \fIindex\fR \fItag\fR\&.\&.\&.
.sp
\fB::canvas::tag\fR \fBremove\fR \fIcanvas\fR \fItagOrId\fR \fItag\fR\&.\&.\&.
.sp
\fB::canvas::tag\fR \fBmatch\fR \fIcanvas\fR \fItagOrId\fR \fIpattern\fR
.sp
.BE
.SH DESCRIPTION
This package provides utility commands for easier management of the
tag lists associated with canvas items or item groups\&.
.PP
The problem with the existing canvas API is that a tag list can
only be set as a whole, making adding and removing of tags from such
lists relatively complex operations reading the current tag list,
modifying it, and then writing the changed list back\&.
.PP
The commands provided by this package hide all this complexity
from the user\&.
.SH API
.TP
\fB::canvas::tag\fR \fBappend\fR \fIcanvas\fR \fItagOrId\fR \fItag\fR\&.\&.\&.
This command adds the tags \fItag\fR\&.\&.\&. to the tag list for the items
identified by the \fItagOrId\fR in the \fIcanvas\fR widget\&. The new
tags are added at the end of the list\&.
.sp
The result of the command is the empty string\&.
.TP
\fB::canvas::tag\fR \fBprepend\fR \fIcanvas\fR \fItagOrId\fR \fItag\fR\&.\&.\&.
This command adds the tags \fItag\fR\&.\&.\&. to the tag list for the items
identified by the \fItagOrId\fR in the \fIcanvas\fR widget\&. The new
tags are added at the beginning of the list\&.
.sp
The result of the command is the empty string\&.
.TP
\fB::canvas::tag\fR \fBappend\fR \fIcanvas\fR \fItagOrId\fR \fIindex\fR \fItag\fR\&.\&.\&.
This command adds the tags \fItag\fR\&.\&.\&. to the tag list for the items
identified by the \fItagOrId\fR in the \fIcanvas\fR widget\&. The new
tags are inserted before the element at \fIindex\fR\&.
.sp
\fIindex\fR \fB0\fR refers to the beginning of the list\&.
.sp
\fIindex\fR \fBend\fR refers to after the end of the list\&.
.sp
The result of the command is the empty string\&.
.TP
\fB::canvas::tag\fR \fBremove\fR \fIcanvas\fR \fItagOrId\fR \fItag\fR\&.\&.\&.
This command removes the named tags \fItag\fR\&.\&.\&. from the tag list for the items
identified by the \fItagOrId\fR in the \fIcanvas\fR widget\&.
.sp
The result of the command is the empty string\&.
.TP
\fB::canvas::tag\fR \fBmatch\fR \fIcanvas\fR \fItagOrId\fR \fIpattern\fR
This command finds all tags for the items identified by the
\fItagOrId\fR in the \fIcanvas\fR widget which match the glob
\fIpattern\fR\&.
.sp
The result of the command is a list of the matching tags\&. Which
may be empty\&.
.PP
.SH KEYWORDS
append tag, canvas, insert tag, remove tag, tags

Added embedded/man/files/modules/canvas/canvas_trlines.n.

















































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/canvas/canvas_trlines\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "canvas::track::lines" n 0\&.1 tklib "Variations on a canvas"
.BS
.SH NAME
canvas::track::lines \- Manage a group of rubber band lines
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBcanvas::tag  ?0\&.1?\fR
.sp
\fB::canvas::track\fR \fBlines\fR \fIobjectName\fR \fIcanvas\fR
.sp
\fBobjectName\fR \fBdestroy\fR
.sp
\fBobjectName\fR \fBstart\fR \fIcurrent\fR \fIp\fR\&.\&.\&.
.sp
\fBobjectName\fR \fBmove\fR \fIcurrent\fR
.sp
\fBobjectName\fR \fBdone\fR
.sp
.BE
.SH DESCRIPTION
This package provides a utility class managing the drawing of set of semi-crosshair (rubberband) lines\&.
.SH "CLASS API"
.TP
\fB::canvas::track\fR \fBlines\fR \fIobjectName\fR \fIcanvas\fR
This, the class command, creates and configures a new instance of the
tracker, named \fIobjectName\fR\&. The instance will be
connected to the specified \fIcanvas\fR widget\&.
.sp
The result of the command is the fully qualified name of the
instance command\&.
.PP
.SH "INSTANCE API"
Instances of this class provide the following API:
.TP
\fBobjectName\fR \fBdestroy\fR
This method destroys the instance and releases all its
internal resources\&.
.sp
This operation does destroy the items representing the
tracked lines\&. It does not destroy the attached canvas\&.
.sp
The result of the method is an empty string\&.
.TP
\fBobjectName\fR \fBstart\fR \fIcurrent\fR \fIp\fR\&.\&.\&.
This method starts the tracking of a set of lines, one line per
point \fIp\fR, which specifies the destination end-point of each
line\&. All lines will have \fIcurrent\fR as a common end-point\&.
.sp
Note that a previously tracked set of lines is removed\&.
.sp
The result of the method is an empty string\&.
.sp
Each point is specified through a 2-element list containing its
x- and y-coordinates, in this order\&.
.TP
\fBobjectName\fR \fBmove\fR \fIcurrent\fR
This method updates the shared end-point of all rubberbands and redraws
them\&.
.sp
The result of the method is an empty string\&.
.sp
The point is specified through a 2-element list containing its
x- and y-coordinates, in this order\&.
.TP
\fBobjectName\fR \fBdone\fR
This method ends the tracking of the current set of lines and removes
them from the canvas\&.
.PP
.SH KEYWORDS
canvas, crosshair, rubberband, tracking

Added embedded/man/files/modules/canvas/canvas_zoom.n.



















































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/canvas/canvas_zoom\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "canvas::zoom" n 0\&.2\&.1 tklib "Variations on a canvas"
.BS
.SH NAME
canvas::zoom \- Zoom control for canvas::sqmap
.SH SYNOPSIS
package require \fBTcl  8\&.4\fR
.sp
package require \fBTk  8\&.4\fR
.sp
package require \fBsnit \fR
.sp
package require \fBuevent::onidle \fR
.sp
package require \fBcanvas::zoom  ?0\&.2\&.1?\fR
.sp
\fB::canvas::zoom\fR \fIpathName\fR ?options?
.sp
.BE
.SH DESCRIPTION
This package provides a widget to enable the user of a map display to
control the zoom level\&.
.SH API
.TP
\fB::canvas::zoom\fR \fIpathName\fR ?options?
Creates the zoom control widget \fIpathName\fR and configures it\&. The
methods and options supported by the new widget are described in the
following sections\&.
.sp
The result of the command is \fIpathName\fR\&.
.PP
.SS OPTIONS
.TP
\fB-orient\fR
The value for this option is either \fBvertical\fR, or
\fBhorizontal\fR, specifying the orientation of the major axis of
the widget\&. The default is \fBvertical\fR\&.
.TP
\fB-levels\fR
The value for this option is a non-negative integer\&. It specifies the
number of zoom levels to support\&.
.TP
\fB-variable\fR
The value for this option is the name of a global or namespaced
variable which is connected with the widget\&. changes to the zoom level
made the widget are propagated to this variable, and in turn changes
to the variable are imported into the widget\&.
.TP
\fB-command\fR
This option specifies a command prefix\&. This callback will be invoked
whenever the zoom level is changed\&. It is called with two additional
arguments, the zoom control widget, and the new zoom level, in this
order\&.
.PP
.SS METHODS
The widget supports no methods beyond the standard (\fBconfigure\fR,
\fBcget\fR, etc\&.)\&.
.SH KEYWORDS
zoom

Added embedded/man/files/modules/chatwidget/chatwidget.n.

























































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/chatwidget/chatwidget\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "chatwidget" n 1\&.0\&.0 tklib "Composite widget for chat applications"
.BS
.SH NAME
chatwidget \- Provides a multi-paned view suitable for display of chat room or irc channel information
.SH SYNOPSIS
package require \fBTk  8\&.5\fR
.sp
package require \fBchatwidget  ?1\&.0\&.0?\fR
.sp
\fB::chatwidget::chatwidget\fR \fIpath\fR ?\fIoptions\fR?
.sp
\fB$widget\fR topic \fIcommand\fR \fIargs\fR
.sp
\fB$widget\fR name \fInick\fR \fIargs\fR
.sp
\fB$widget\fR message \fItext\fR \fIargs\fR
.sp
\fB$widget\fR hook \fIcommand\fR \fIargs\fR
.sp
\fB$widget\fR names \fIargs\fR
.sp
\fB$widget\fR entry \fIargs\fR
.sp
\fB$widget\fR chat \fIargs\fR
.sp
.BE
.SH DESCRIPTION
This is a composite widget designed to simplify the construction of
chat applications\&. The widget contains display areas for chat
messages, user names and topic and an entry area\&. It automatically
handles colourization of messages per nick and manages nick
completion\&. A system of hooks permit the application author to adjust
display features\&. The main chat display area may be split for use
displaying history or for searching\&.
.PP
The widget is made up of a number of text widget and panedwindow
widgets so that the size of each part of the display may be adjusted
by the user\&. All the text widgets may be accessed via widget
passthrough commands if fine adjustment is required\&. The topic and
names sections can also be hidden if desired\&.
.SH COMMANDS
.TP
\fB::chatwidget::chatwidget\fR \fIpath\fR ?\fIoptions\fR?
Create a new chatwidget using the Tk window id \fIpath\fR\&. Any options
provided are currently passed directly to the main chat text widget\&.
.PP
.SH "WIDGET COMMANDS"
.TP
\fB$widget\fR topic \fIcommand\fR \fIargs\fR
The chat widget can display a topic string, for instance the topic or
name given to a multi-user chatroom or irc channel\&.
.RS
.TP
\fBshow\fR
Enable display of the topic\&.
.TP
\fBhide\fR
Disable display of the topic
.TP
\fBset \fItopic\fR\fR
Set the topic text to \fItopic\fR\&.
.RE
.TP
\fB$widget\fR name \fInick\fR \fIargs\fR
Control the names and tags associated with names\&.
.RS
.TP
\fBlist ?\fI-full\fR?\fR
Returns a list of all the user names from the names view\&. If ?-full? is given then the list returned is a list of lists where each
sublist is made up of the nick followed by any options that have been
set on this nick entry\&. This may be used to examine any application
specific options that may be applied to a nick when using the
\fBadd\fR command\&.
.TP
\fBadd \fInick\fR ?\fIoptions\fR?\fR
.TP
\fBdelete \fInick\fR\fR
.RE
.TP
\fB$widget\fR message \fItext\fR \fIargs\fR
Add messages to the display\&. options are -nick, -time, -type, -mark
-tags
.TP
\fB$widget\fR hook \fIcommand\fR \fIargs\fR
Manage hooks\&. add (message, post names_group, names_nick, chatstate), remove, run
.TP
\fB$widget\fR names \fIargs\fR
Passthrough to the name display text widget\&. See the \fBtext\fR widget manual
for all available commands\&. The chatwidget provides two additional
commands \fBshow\fR and \fBhide\fR which are used to control the
display of this element in the widget\&.
.TP
\fB$widget\fR entry \fIargs\fR
Passthrough to the entry text widget\&. See the \fBtext\fR widget manual
for all available commands\&.
.TP
\fB$widget\fR chat \fIargs\fR
Passthrough to the chat text widget\&. See the \fBtext\fR widget manual for
all available commands\&.
.PP
.SH EXAMPLE
.CS


chatwidget::chatwidget \&.chat
proc speak {w msg} {$w message $msg -nick user}
\&.chat hook add post [list speak \&.chat]
pack \&.chat -side top -fill both -expand 1
\&.chat topic show
\&.chat topic set "Chat widget demo"
\&.chat name add "admin" -group admin
\&.chat name add "user" -group users -color tomato
\&.chat message "Chatwidget ready" -type system
\&.chat message "Hello, user" -nick admin
\&.chat message "Hello, admin" -nick user

.CE
.PP
A more extensive example is available by examining the code for the picoirc
program in the tclapps repository which ties the tcllib \fBpicoirc\fR package to this
\fBchatwidget\fR package to create a simple irc client\&.
.SH "SEE ALSO"
text(n)
.SH KEYWORDS
chat, chatwidget, composite widget, irc, mega-widget, widget

Added embedded/man/files/modules/controlwidget/controlwidget.n.



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/controlwidget/controlwidget\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c) 2010 Ron Fox <rfox@\&.\&.\&.>
'\" Copyright (c) 2010 Gerhard Reithofer <\&.\&.\&.@\&.\&.\&.>
'\" Copyright (c) 2010 Marco Maggi <\&.\&.\&.@\&.\&.\&.>
'\" Copyright (c) 2010 Arjen Markus <arjenmarkus@users\&.sourceforge\&.net>
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "controlwidget" n 0\&.1 tklib "controlwidget"
.BS
.SH NAME
controlwidget \- Collection of widgets for displaying and controlling numerical values
.SH SYNOPSIS
package require \fBTcl  ?8\&.5?\fR
.sp
package require \fBTk  ?8\&.5?\fR
.sp
package require \fBsnit  ?2\&.0?\fR
.sp
package require \fBcontrolwidget  ?0\&.1?\fR
.sp
\fB::controlwidget::meter\fR \fIw\fR \fIargs\fR
.sp
\fB::controlwidget::slider\fR \fIw\fR \fIargs\fR
.sp
\fB::controlwidget::equalizerBar\fR \fIw\fR \fIargs\fR
.sp
\fB::controlwidget::thermometer\fR \fIw\fR \fIargs\fR
.sp
\fB::controlwidget::voltmeter\fR \fIw\fR \fIargs\fR
.sp
\fB::controlwidget::tachometer\fR \fIw\fR \fIargs\fR
.sp
\fB::controlwidget::rdial\fR \fIw\fR \fIargs\fR
.sp
\fB$widget\fR get
.sp
\fB$widget\fR set \fIvalue\fR
.sp
\fB::controlwidget::led\fR \fIw\fR \fIargs\fR
.sp
\fB::controlwidget::radioMatrix\fR \fIw\fR \fIargs\fR
.sp
\fB$led\fR on
.sp
\fB$led\fR off
.sp
\fB$led\fR setstate \fIstate\fR
.sp
\fB$matrix\fR get
.sp
\fB$matrix\fR set \fIindex\fR
.sp
.BE
.SH DESCRIPTION
.PP
The controlwidget package focuses on the display and interactive control of numerical values\&.
It mimicks several of the meters and controls found in laboratory settings but also
daily life: volt meters, equalizers and tachometers to name a few\&. They can be seen as alternatives
for the \fIscale widget\fR\&.
.PP
\fINote:\fR The package has not sofar been tested extensively, and that may result in
an unexpected appearance if you use sizes that are different than the defaults\&. Also
not all options for the coloring of the various parts and fonts and so on have been tested, so that
may be another source of bugs\&.
.PP
A last note: some parts have not been included in any option, most notably the colors of
parts that require lighter and darker shades to cooperate\&.
.SH "TYPES OF WIDGETS"
The package distinguishes several typed of widgets:
.IP \(bu
Vertical meters: the value of the variable is translated into a vertical position, like with
the coloured bars you find on your stereo installation\&.
.IP \(bu
Angle displays: the value of the variable is related to the angle of a needle, like with tachometers\&.
.IP \(bu
Interactive widgets: most widgets allow you to change the value of the variable by pressing the mouse button
on the needle and shifting it up and down or left and right\&.
.IP \(bu
Non-interactive widgets: some widgets, like the thermometer widget, do not allow such interaction\&.
.IP \(bu
Logical or choice widgets: some widgets display the values as either on/off (or true/false) or as
one of a set of discrete choices\&.
.PP
All widgets have in common, however, that you can connect them to a variable and that changing the variable
changes the display\&. Forthermore, all widgets have the set and get methods to interact with the value that
the widget displays (whether that is stored in a global variable or not)\&.
.PP
They also have in common that their appearance and behaviour is determined by one or more options that
you can set at creation time and often later on as well\&. The widgets are all based on the \fIsnit\fR
package, so that the methods \fBconfigure\fR and \fBcget\fR are available to set and get these options\&.
.SH COMMANDS
Currently the package contains these widgets of the \fIvertical meter\fR type:
.TP
\fB::controlwidget::meter\fR \fIw\fR \fIargs\fR
Create a vertical meter consisting of an axis and a moveable arrow\&.
.RS
.TP
widget \fIw\fR (in)
Name of the widget to be created\&.
.TP
arguments \fIargs\fR (in)
List of key-value pairs, controlling the appearance and behaviour of the widget:
.RS
.TP
\fBvariable\fR name
Name of the variable to be associated with the meter
.TP
\fBbackground\fR color
Background color for the widget
.TP
\fBheight\fR pixels
Height of the widget
.TP
\fBwidth\fR pixels
Width of the widget
.TP
\fBarrowthickness\fR pixels
Thickness of the displayed arrow in pixels
.TP
\fBarrowcolor\fR color
Color of the displayed arrow
.TP
\fBreadonly\fR boolean
Whether the arrow can be moved interactively or not
.RE
.RE
.TP
\fB::controlwidget::slider\fR \fIw\fR \fIargs\fR
Create a widget containing one or more vertical sliders and an axis\&. You can shift the slider handles
interactively via the mouse\&.
.RS
.TP
widget \fIw\fR (in)
Name of the widget to be created\&.
.TP
arguments \fIargs\fR (in)
List of key-value pairs, controlling the appearance and behaviour of the widget:
.RS
.TP
\fBvariable\fR name
Name of the (list) variable to be associated with the widget
.TP
\fBnumber\fR integer
Number of sliders in the widget
.TP
\fBbackground\fR color
Background color for the widget
.TP
\fBheight\fR pixels
Height of the widget
.TP
\fBwidth\fR pixels
Width of the widget
.TP
\fBsliderthickness\fR pixels
Thickness of the slider handles
.TP
\fBsliderwidth\fR color
Width of the slider handles
.TP
\fBtroughwidth\fR color
Width of the troughs holding the sliders
.RE
.RE
.TP
\fB::controlwidget::equalizerBar\fR \fIw\fR \fIargs\fR
Create a widget containing one or more vertical bars resembling those found on hifi graphical equalizers\&.
Note that it is a read-only widget\&.
.RS
.TP
widget \fIw\fR (in)
Name of the widget to be created\&.
.TP
arguments \fIargs\fR (in)
List of key-value pairs, controlling the appearance and behaviour of the widget:
.RS
.TP
\fBvariable\fR name
Name of the (list) variable to be associated with the widget
.TP
\fBnumber\fR integer
Number of bars in the widget
.TP
\fBbackground\fR color
Background color for the widget
.TP
\fBheight\fR pixels
Height of the widget
.TP
\fBwidth\fR pixels
Width of the widget
.TP
\fBbarwidth\fR pixels
Width of the bars
.TP
\fBsegments\fR integer
Number of segments the bars are divided in
.TP
\fBsafecolor\fR color
Color for values lower than the warning level
.TP
\fBwarningcolor\fR color
Color for values greater than the warning level
.TP
\fBwarninglevel\fR double
Threshold value, determines at what level the color changes
.RE
.RE
.TP
\fB::controlwidget::thermometer\fR \fIw\fR \fIargs\fR
Create a thermometer widget (read-only)
.RS
.TP
widget \fIw\fR (in)
Name of the widget to be created\&.
.TP
arguments \fIargs\fR (in)
List of key-value pairs, controlling the appearance and behaviour of the widget:
.RS
.TP
\fBvariable\fR name
Name of the (list) variable to be associated with the widget
.TP
\fBbackground\fR color
Background color for the widget
.TP
\fBheight\fR pixels
Height of the widget
.TP
\fBwidth\fR pixels
Width of the widget
.TP
\fBlinethickness\fR pixels
Thickness of the line representing the "temperature"
.TP
\fBlinecolor\fR color
Color of the line
.RE
.RE
.PP
These widgets all use a vertical axis and have the following options in common for configuring the
axis:
.TP
\fBaxisformat\fR string
Format string for formatting the numbers along the axis
.TP
\fBaxisfont\fR string
Name of the font to be used for the numbers
.TP
\fBaxiscolor\fR color
Color of the axis (including the numbers)
.TP
\fBfrom\fR color
Lower value for the axis
.TP
\fBto\fR color
Upper value for the axis
.TP
\fBmajorticks\fR integer
Number of major tickmarks to draw (each is labelled)
.TP
\fBminorticks\fR integer
Number of minor tickmarks to draw between two major tickmarks
.TP
\fBlog\fR boolean
Use a logarithmic axis (true) or a linear axis (false)
.PP
The package contains the following widget based on angle displays:
.TP
\fB::controlwidget::voltmeter\fR \fIw\fR \fIargs\fR
Create a voltmeter-like widget\&.
.RS
.TP
widget \fIw\fR (in)
Name of the widget to be created\&.
.TP
arguments \fIargs\fR (in)
List of key-value pairs, controlling the appearance and behaviour of the widget:
.RS
.TP
\fBvariable\fR name
Name of the variable to be associated with the meter
.TP
\fBvalue\fR value
Value for the meter (if not associated with a variable)
.TP
\fBmin\fR value
The minimum value for data in the display
.TP
\fBmax\fR value
The maximum value for data in the display
.TP
\fBlabels\fR list
The labels to be shown along the scale\&. (These are simply considered texts, so no
relation with the minimum and maximum perse)
.TP
\fBtitle\fR string
String to be shown below the dial
.TP
\fBwidth\fR pixels
The width of the widget
.TP
\fBheight\fR pixels
The height of the widget
.TP
\fBborderwidth\fR pixels
The width of the border surrounding the entire widget
.TP
\fBrelief\fR string
The relief of the border surrounding the entire widget
.TP
\fBhighlightthickness\fR pixels
The width of the border to indicate the widget has keyboard focus
.TP
\fBlabelfont\fR fontname
Font of the labels to the scale
.TP
\fBtitlefont\fR fontname
Font of the title below the dial
.TP
\fBdialcolor\fR color
Color of the dial holding the needle
.TP
\fBneedlecolor\fR color
Color of the needle
.TP
\fBscalecolor\fR color
Color of the scale (arc and tickmarks)
.TP
\fBlabelcolor\fR color
Color of the labels to the scale
.TP
\fBtitlecolor\fR color
Color of the title below the dial
.RE
.RE
.TP
\fB::controlwidget::tachometer\fR \fIw\fR \fIargs\fR
Create a tachometer-like widget\&.
.RS
.TP
widget \fIw\fR (in)
Name of the widget to be created\&.
.TP
arguments \fIargs\fR (in)
List of key-value pairs, controlling the appearance and behaviour of the widget\&. In addition
to the ones given for the voltmeter widget:
.RS
.TP
\fBvariable\fR name
Name of the variable to be associated with the meter
.TP
\fBvalue\fR value
Value for the meter (if not associated with a variable)
.TP
\fBdangerlevel\fR value
Level above which values are indicated with a different color
.TP
\fBdangercolor\fR color
Color for the values above the "danger level"
.TP
\fBdangerwidth\fR pixels
Width for the colored band indicating the "danger level"
.TP
\fBpincolor\fR color
Color for the needle and the pin
.RE
.RE
.TP
\fB::controlwidget::rdial\fR \fIw\fR \fIargs\fR
Create a rotating dial\&. You can drag the dial to change the value\&. With the shift button
depressed the value changes slowly, with the control button depressed it changes fast\&.
.RS
.TP
widget \fIw\fR (in)
Name of the widget to be created\&.
.TP
arguments \fIargs\fR (in)
List of key-value pairs, controlling the appearance and behaviour of the widget:
.RS
.TP
\fBvariable\fR name
Name of the variable to be associated with the dial
.TP
\fBvalue\fR value
Value for the dial (if not associated with a variable)
.TP
\fBorient\fR string
Whether a horizontal disk/dial is required ("horizontal") or a vertical one ("vertical")
.TP
\fBstep\fR value
Initial step for incrementing or decrementing the value
.TP
\fBslow\fR value
Factor on the step size for incrementing or decrementing the value slowly
.TP
\fBfast\fR value
Factor on the step size for incrementing or decrementing the value fast
.TP
\fBscale\fR value
Scale value to be applied to the actual value
.TP
\fBcallback\fR command
Command to be called when the value changes
.TP
\fBwidth\fR pixels
The width of the widget
.TP
\fBheight\fR pixels
The height of the widget
.TP
\fBbackground\fR color
The background color of the widget (coloring of the disk/dial)
.TP
\fBforeground\fR color
The foreground color of the widget (the marker lines)
.RE
.RE
.PP
All these widgets have the following methods:
.TP
\fB$widget\fR get
Return the current value or values shown in the widget
.TP
\fB$widget\fR set \fIvalue\fR
Reset the value or values shown in the widget\&. If the widget is associated with
a variable, that variable is set as well\&.
.RS
.TP
value \fIdouble/list\fR
New value or values for the widget
.RE
.PP
Two further widgets are available, meant to display logical values:
.TP
\fB::controlwidget::led\fR \fIw\fR \fIargs\fR
Create a LED-like widget\&.
.RS
.TP
widget \fIw\fR (in)
Name of the widget to be created\&.
.TP
arguments \fIargs\fR (in)
List of key-value pairs, controlling the appearance and behaviour of the widget\&. In addition
to the ones given for the voltmeter widget:
.RS
.TP
\fBvariable\fR name
Name of the variable to be associated with the LED
.TP
\fBsize\fR pixels
Diameter of the LED widget
.TP
\fBon\fR color
Color to use for the "on" state
.TP
\fBoff\fR color
Color to use for the "off" state
.RE
.RE
.TP
\fB::controlwidget::radioMatrix\fR \fIw\fR \fIargs\fR
Create a matrix of radio buttons that behaves as a single widget\&.
.RS
.TP
widget \fIw\fR (in)
Name of the widget to be created\&.
.TP
arguments \fIargs\fR (in)
List of key-value pairs, controlling the appearance and behaviour of the widget\&. In addition
to the ones given for the voltmeter widget:
.RS
.TP
\fBvariable\fR name
Name of the variable to be associated with the matrix
.TP
\fBorient\fR string
The way the radio buttons are to be arranged (horizontal or vertical first)
.TP
\fBrows\fR integer
Number of rows in the matrix
.TP
\fBcolumns\fR integer
Number of columns in the matrix
.TP
\fBcommand\fR list
Command associated with the radio buttons\&. Invoked when the active radio button changes\&.
.RE
.RE
.PP
The LED widget has the following public methods:
.TP
\fB$led\fR on
Set the state to "on"
.TP
\fB$led\fR off
Set the state to "off"
.TP
\fB$led\fR setstate \fIstate\fR
Set the state according to the value of "state"
.RS
.TP
state \fIboolean\fR (in)
New state for the LED widget
.RE
.PP
The radioMatrix widget has two public methods:
.TP
\fB$matrix\fR get
Return the index of the currently selected radio button
.TP
\fB$matrix\fR set \fIindex\fR
Select the radio button with index "index"
.RS
.TP
index \fIinteger\fR
Index of the radio button to be set
.RE
.PP
.SH ACKNOWLEDGMENTS
The code for most of these widgets first appeared on the Wiki\&. In many cases, Arjen Markus merely
refactored the code a bit and "snitified" some of them\&. The original code was developed by the following people:
.IP \(bu
Vertical meter, LED display, radio matrix: Ron Fox
.IP \(bu
Rotating dials: Gerhard Reithofer
.IP \(bu
Voltmeter and tachometer: Marco Maggi
.IP \(bu
Code for moving the needle: ?
.PP
.SH KEYWORDS
controlling, displaying, numerical values, scale widget
.SH COPYRIGHT
.nf
Copyright (c) 2010 Ron Fox <rfox@\&.\&.\&.>
Copyright (c) 2010 Gerhard Reithofer <\&.\&.\&.@\&.\&.\&.>
Copyright (c) 2010 Marco Maggi <\&.\&.\&.@\&.\&.\&.>
Copyright (c) 2010 Arjen Markus <arjenmarkus@users\&.sourceforge\&.net>

.fi

Added embedded/man/files/modules/crosshair/crosshair.n.















































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/crosshair/crosshair\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c) 2003 Kevin Kenny
'\" Copyright (c) 2008 (docs) Andreas Kupries <andreas_kupries@users\&.sourceforge\&.net>
'\" Copyright (c) 2013 Frank Gover, Andreas Kupries
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "crosshair" n 1\&.1 tklib "Crosshairs"
.BS
.SH NAME
crosshair \- Crosshairs for Tk canvas
.SH SYNOPSIS
package require \fBTcl  ?8\&.4?\fR
.sp
package require \fBTk  ?8\&.4?\fR
.sp
package require \fBcrosshair  ?1\&.1?\fR
.sp
\fBcrosshair::crosshair\fR \fIw\fR ?\fIarg\fR\&.\&.\&.?
.sp
\fBcrosshair::off\fR \fIw\fR
.sp
\fBcrosshair::configure\fR \fIw\fR ?\fIarg\fR\&.\&.\&.?
.sp
\fBcrosshair::track\fR \fBon\fR \fIw\fR \fIcmdprefix\fR
.sp
\fBcrosshair::track\fR \fBoff\fR \fIw\fR
.sp
\fBcrosshair::bbox_add\fR \fIw\fR \fIbbox\fR
.sp
\fBcrosshair::bbox_remove\fR \fItoken\fR
.sp
.BE
.SH DESCRIPTION
The \fBcrosshair\fR package provides commands to (de)activate and
track crosshairs on canvas widgets\&.
.SH API
The following commands are exported to the public:
.TP
\fBcrosshair::crosshair\fR \fIw\fR ?\fIarg\fR\&.\&.\&.?
This command activates the display of a pair of cross-hairs for the
canvas widget \fIw\fR\&. The cross-hairs track the pointing device\&. The
result of the command is the empty string\&.
.sp
All arguments after the widget \fIw\fR are treated as options as for a
canvas line item in \fIw\fR\&. Of particular interest are \fB-fill\fR
and \fB-dash\fR\&.
.TP
\fBcrosshair::off\fR \fIw\fR
This command removes the cross-hairs from the canvas widget \fIw\fR\&.
Nothing is done if the widget had no cross-hairs\&. The result of the
command is the empty string\&.
.TP
\fBcrosshair::configure\fR \fIw\fR ?\fIarg\fR\&.\&.\&.?
This command changes the appearance of the cross-hairs in the canvas
widget \fIw\fR\&. It is an error to call it for a canvas which has no
cross-hairs\&.
.sp
All arguments after the widget \fIw\fR are treated as options as for a
canvas line item in \fIw\fR\&. Of particular interest are \fB-fill\fR
and \fB-dash\fR\&.
.sp
The result of the command are the current configuration settings\&.
.TP
\fBcrosshair::track\fR \fBon\fR \fIw\fR \fIcmdprefix\fR
This command activates reporting of the location of the cross-hairs in
the canvas widget \fIw\fR\&. It is an error to use this command for a
canvas which has no cross-hairs\&. The result of the command is the
empty string\&.
.sp
After the invokation of this command the specified command prefix
\fIcmdprefix\fR will be called whenever the mouse moves within the
canvas, with 7 arguments\&. These are, in order:
.RS
.IP [1]
The widget \fIw\fR
.IP [2]
The x-location of the cross-hairs, in pixels\&.
.IP [3]
The y-location of the cross-hairs, in pixels\&.
.IP [4]
The x-location of the top-left corner of the viewport, in pixels\&.
.IP [5]
The y-location of the top-left corner of the viewport, in pixels\&.
.IP [6]
The x-location of the bottom-right corner of the viewport, in pixels\&.
.IP [7]
The y-location of the bottom-right corner of the viewport, in pixels\&.
.RE
.IP
A previously existing callback for \fIw\fR will be disabled\&. I\&.e\&. per
canvas widget with cross-hairs only one callback reporting their
location is possible\&.
.TP
\fBcrosshair::track\fR \fBoff\fR \fIw\fR
This command disables the reporting of the location of the cross-hairs
in the canvas widget \fIw\fR\&. It is an error to use this command for a
canvas which has no cross-hairs\&. The result of the command is the
empty string\&.
.TP
\fBcrosshair::bbox_add\fR \fIw\fR \fIbbox\fR
This command adds a bounding box to the crosshairs for canvas \fIw\fR\&.
The crosshairs will only be active within that area\&.
.sp
The result of the command is a token with which the bounding
box can be removed again, see \fBcrosshair::bbox_remove\fR below\&.
.sp
The bounding box \fIbbox\fR is specified thorugh a list of 4
values, the lower left and upper right corners of the box\&. The order
of values in the list is:
.CS

llx lly urx ury
.CE
.sp
Note that this command can be used multiple times, each call
adding one more bounding box\&. In such a case the visible area is the
\fIunion\fR of all the specified bounding boxes\&.
.TP
\fBcrosshair::bbox_remove\fR \fItoken\fR
This command removes the bounding box specified by the \fItoken\fR (a
result of \fBcrosshair::bbox_add\fR) from the crosshairs for its
canvas widget\&.
.PP
.SH "BUGS, IDEAS, FEEDBACK"
This document, and the package it describes, will undoubtedly contain
bugs and other problems\&.
Please report such in the category \fItklib :: crosshair\fR of the
\fITcllib SF Trackers\fR [http://sourceforge\&.net/tracker/?group_id=12883]\&.
Please also report any ideas for enhancements you may have for either
package and/or documentation\&.
.SH KEYWORDS
canvas, cross-hairs, location, tracking, viewport
.SH COPYRIGHT
.nf
Copyright (c) 2003 Kevin Kenny
Copyright (c) 2008 (docs) Andreas Kupries <andreas_kupries@users\&.sourceforge\&.net>
Copyright (c) 2013 Frank Gover, Andreas Kupries

.fi

Added embedded/man/files/modules/ctext/ctext.n.









































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/ctext/ctext\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c) George Peter Staplin <GeorgePS@XMission\&.com>
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "ctext" n 3\&.3 tklib "Ctext a text widget with highlighting support"
.BS
.SH NAME
ctext \- Ctext a text widget with highlighting support
.SH SYNOPSIS
package require \fBTk \fR
.sp
package require \fBctext  ?3\&.3?\fR
.sp
\fBctext\fR \fIpathName\fR ?\fIoptions\fR?
.sp
\fB::ctext::addHighlightClass\fR \fIpathName\fR \fIclass\fR \fIcolor\fR \fIkeywordlist\fR
.sp
\fB::ctext::addHighlightClassWithOnlyCharStart\fR \fIpathName\fR \fIclass\fR \fIcolor\fR \fIchar\fR
.sp
\fB::ctext::addHighlightClassForSpecialChars\fR \fIpathName\fR \fIclass\fR \fIcolor\fR \fIcharstring\fR
.sp
\fB::ctext::addHighlightClassForRegexp\fR \fIpathName\fR \fIclass\fR \fIcolor\fR \fIpattern\fR
.sp
\fB::ctext::clearHighlightClasses\fR \fIpathName\fR
.sp
\fB::ctext::getHighlightClasses\fR \fIpathName\fR
.sp
\fB::ctext::deleteHighlightClass\fR \fIpathName\fR \fIclass\fR
.sp
\fB::ctext::enableComments\fR \fIenable\fR
.sp
\fB::ctext::disableComments\fR \fIenable\fR
.sp
\fIpathName\fR \fBhighlight\fR \fIstartIndex\fR \fIendIndex\fR
.sp
\fIpathName\fR \fBfastdelete\fR \fIindex1\fR ?\fIindex2\fR?
.sp
\fIpathName\fR \fBfastinsert\fR
.sp
\fIpathName\fR \fBcopy\fR
.sp
\fIpathName\fR \fBcut\fR
.sp
\fIpathName\fR \fBpaste\fR
.sp
\fIpathName\fR \fBappend\fR
.sp
\fIpathName\fR \fBconfigure\fR \fIoption\fR \fIvalue\fR ?\&.\&.\&.?
.sp
.BE
.SH DESCRIPTION
The \fBctext\fR package provides the ctext widget which
is an enhanced text widget with support for configurable syntax
highlighting and some extra commands\&.
.PP
Ctext overloads the text widget and provides
new commands, named \fBhighlight\fR, \fBcopy\fR, \fBpaste\fR,\fBcut\fR,
\fBappend\fR, and \fBedit\fR\&.  It also provides several
commands that allow you to define classes\&.
Each class corresponds to a tag in the widget\&.
.SH COMMANDS
.TP
\fBctext\fR \fIpathName\fR ?\fIoptions\fR?
Creates and configures a ctext widget\&.
.PP
.SH HIGHLIGHTING
Highlighting is controlled with text widget tags, that are called highlight classes\&.
The \fIclass\fR is a tag name and can be configured like any text widget tag\&.
Four types of highlight classes are supported\&. All highlight classes are automatically used
by the \fBhighlight\fR method of the widget\&.
.TP
\fB::ctext::addHighlightClass\fR \fIpathName\fR \fIclass\fR \fIcolor\fR \fIkeywordlist\fR
Add a highlighting class \fIclass\fR to the ctext widget \fIpathName\fR\&.
The highligthing will be done with the color \fIcolor\fR\&. All words in the \fIkeywordlist\fR will be
highlighted\&.
.CS


	# highlight some tcl keywords
	::ctext::addHighlightClass \&.t tclkeywords red [list set info interp uplevel upvar]]

.CE
.TP
\fB::ctext::addHighlightClassWithOnlyCharStart\fR \fIpathName\fR \fIclass\fR \fIcolor\fR \fIchar\fR
Add a highlighting class \fIclass\fR to the ctext widget \fIpathName\fR\&.
The highligthing will be done with the color \fIcolor\fR\&. All words starting with \fIchar\fR will be
highlighted\&.
.CS


	::ctext::addHighlightClassWithOnlyCharStart \&.t vars blue \\$

.CE
.TP
\fB::ctext::addHighlightClassForSpecialChars\fR \fIpathName\fR \fIclass\fR \fIcolor\fR \fIcharstring\fR
Add a highlighting class \fIclass\fR to the ctext widget \fIpathName\fR\&.
The highligthing will be done with the color \fIcolor\fR\&. All chars in \fIcharstring\fR will be
highlighted\&.
.TP
\fB::ctext::addHighlightClassForRegexp\fR \fIpathName\fR \fIclass\fR \fIcolor\fR \fIpattern\fR
Add a highlighting class \fIclass\fR to the ctext widget \fIpathName\fR\&.
The highligthing will be done with the color \fIcolor\fR\&. All text parts matching the regexp \fIpattern\fR
will be highligthed\&.
.TP
\fB::ctext::clearHighlightClasses\fR \fIpathName\fR
Remove all highlight classes from the widget \fIpathName\fR\&.
.TP
\fB::ctext::getHighlightClasses\fR \fIpathName\fR
List all highlight classes for the widget \fIpathName\fR\&.
.TP
\fB::ctext::deleteHighlightClass\fR \fIpathName\fR \fIclass\fR
Delete the highlight class \fIclass\fR from the widget \fIpathName\fR
.TP
\fB::ctext::enableComments\fR \fIenable\fR
Enable C comment highlighting\&. The \fIclass\fR for c-style comments is \fB_cComment\fR\&.
The C comment highlighting is disabled by default\&.
.TP
\fB::ctext::disableComments\fR \fIenable\fR
Disable C comment highlighting\&.
.PP
.SH "WIDGET COMMANDS"
Each ctext widget created with the above command supports the following
commands and options in addition to the standard text widget commands and
options\&.
.TP
\fIpathName\fR \fBhighlight\fR \fIstartIndex\fR \fIendIndex\fR
Highlight the text between \fIstartIndex\fR and \fIendIndex\fR\&.
.TP
\fIpathName\fR \fBfastdelete\fR \fIindex1\fR ?\fIindex2\fR?
Delete text range without updating the highlighting\&. Arguments
are identical to the \fIpathName\fR \fBdelete\fR command inherited from
the standard text widget\&.
.TP
\fIpathName\fR \fBfastinsert\fR
Insert text without updating the highlighting\&. Arguments
are identical to the \fIpathName\fR \fBinsert\fR command inherited from
the standard text widget\&.
.TP
\fIpathName\fR \fBcopy\fR
Call \fBtk_textCopy\fR for the ctext instance\&.
.TP
\fIpathName\fR \fBcut\fR
Call \fBtk_textCut\fR for the ctext instance\&.
.TP
\fIpathName\fR \fBpaste\fR
Call \fBtk_textPaste\fR for the ctext instance\&.
.TP
\fIpathName\fR \fBappend\fR
Append the current selection to the clipboard\&.
.TP
\fIpathName\fR \fBconfigure\fR \fIoption\fR \fIvalue\fR ?\&.\&.\&.?
Set the options for the ctext widget\&. Each option name must be followed
the new value\&.
.PP
.SH "WIDGET OPTIONS"
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-linemap\fR
Database Name:	\fB\fR
Database Class:	\fB\fR

.fi
.IP
Creates (-linemap 1) or deletes (-linemap 0) a line number list on the
left of the widget\&. The default is to have a linemap displayed\&.
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-linemapfg\fR
Database Name:	\fB\fR
Database Class:	\fB\fR

.fi
.IP
Changes the foreground of the linemap\&.
The default is the same color as the main text
widget\&.
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-linemapbg\fR
Database Name:	\fB\fR
Database Class:	\fB\fR

.fi
.IP
Changes the background of the linemap\&.
The default is the same color as the main text
widget\&.
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-linemap_select_fg\fR
Database Name:	\fB\fR
Database Class:	\fB\fR

.fi
.IP
Changes the selected
line foreground\&.  The default is black\&.
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-linemap_select_bg\fR
Database Name:	\fB\fR
Database Class:	\fB\fR

.fi
.IP
Changes the selected line
background\&.  The default is yellow\&.
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-linemap_mark_command\fR
Database Name:	\fB\fR
Database Class:	\fB\fR

.fi
.IP
Calls a procedure or command
with the \fIpathName\fR of the ctext window, the \fItype\fR which is
either \fBmarked\fR or \fBunmarked\fR, and finally the line
number selected\&.
The proc prototype is:
.CS


proc linemark_cmd {win type line}\&.

.CE
.IP
See also
ctext_test_interactive\&.tcl
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-highlight\fR
Database Name:	\fB\fR
Database Class:	\fB\fR

.fi
.IP
Takes a boolean value which defines
whether or not to highlight text which is inserted
or deleted\&.  The default is 1\&.
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-linemap_markable\fR
Database Name:	\fB\fR
Database Class:	\fB\fR

.fi
.IP
Takes a boolean value which
specifies whether or not lines in the linemap
are markable with the mouse\&.  The default is 1\&.
.PP
.SH EXAMPLE
.CS


	package require Tk
	package require ctext

	proc main {} {
	pack [frame \&.f] -fill both -expand 1
	pack [scrollbar \&.f\&.s -command {\&.f\&.t yview}] -side right -fill y

	pack [ctext \&.f\&.t -bg black -fg white -insertbackground yellow  -yscrollcommand {\&.f\&.s set}] -fill both -expand 1

	ctext::addHighlightClass \&.f\&.t widgets purple  [list ctext button label text frame toplevel  scrollbar checkbutton canvas listbox menu menubar menubutton  radiobutton scale entry message tk_chooseDir tk_getSaveFile  tk_getOpenFile tk_chooseColor tk_optionMenu]

	ctext::addHighlightClass \&.f\&.t flags orange  [list -text -command -yscrollcommand  -xscrollcommand -background -foreground -fg -bg  -highlightbackground -y -x -highlightcolor -relief -width  -height -wrap -font -fill -side -outline -style -insertwidth  -textvariable -activebackground -activeforeground -insertbackground  -anchor -orient -troughcolor -nonewline -expand -type -message  -title -offset -in -after -yscroll -xscroll -forward -regexp -count  -exact -padx -ipadx -filetypes -all -from -to -label -value -variable  -regexp -backwards -forwards -bd -pady -ipady -state -row -column  -cursor -highlightcolors -linemap -menu -tearoff -displayof -cursor  -underline -tags -tag]

	ctext::addHighlightClass \&.f\&.t stackControl red  {proc uplevel namespace while for foreach if else}
	ctext::addHighlightClassWithOnlyCharStart \&.f\&.t vars mediumspringgreen "\\$"
	ctext::addHighlightClass \&.f\&.t variable_funcs gold {set global variable unset}
	ctext::addHighlightClassForSpecialChars \&.f\&.t brackets green {[]{}}
	ctext::addHighlightClassForRegexp \&.f\&.t paths lightblue {\\\&.[a-zA-Z0-9\\_\\-]+}
	ctext::addHighlightClassForRegexp \&.f\&.t comments khaki {#[^\\n\\r]*}
	\&.f\&.t fastinsert end [info body main]

	pack [frame \&.f1] -fill x

	\&.f\&.t highlight 1\&.0 end

	pack [button \&.f1\&.exit -text Exit -command exit] -side left

	pack [entry \&.e] -side bottom -fill x
	\&.e insert end "ctext::deleteHighlightClass \&.f\&.t "
	bind \&.e <Return> {eval [\&.e get]}
	}
	main


.CE
Further examples are in the source package for ctext\&.
.SH THANKS
Kevin Kenny, Neil Madden, Jeffrey Hobbs, Richard Suchenwirth,
Johan Bengtsson, Mac Cody, Günther, Andreas Sievers, and Michael Schlenker\&.
.SH "SEE ALSO"
re_syntax, text
.SH KEYWORDS
syntax highlighting, text, widget
.SH COPYRIGHT
.nf
Copyright (c) George Peter Staplin <GeorgePS@XMission\&.com>

.fi

Added embedded/man/files/modules/cursor/cursor.n.



























































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/cursor/cursor\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c) Jeffrey Hobbs <jeff@hobbs\&.org>
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "cursor" n 0\&.3\&.1 tklib "Tk cursor routines"
.BS
.SH NAME
cursor \- Procedures to handle CURSOR data
.SH SYNOPSIS
package require \fBTk \fR
.sp
package require \fBcursor  ?0\&.3\&.1?\fR
.sp
\fB::cursor::propagate\fR \fIwidget\fR \fIcursor\fR
.sp
\fB::cursor::restore\fR \fIwidget\fR ?\fIcursor\fR?
.sp
\fB::cursor::display\fR ?\fIparent\fR?
.sp
.BE
.SH DESCRIPTION
The \fBcursor\fR package provides commands to handle Tk cursors\&.
.SH COMMANDS
The following commands are available:
.TP
\fB::cursor::propagate\fR \fIwidget\fR \fIcursor\fR
Sets the cursor for the specified \fIwidget\fR and all its descendants
to \fIcursor\fR\&.
.TP
\fB::cursor::restore\fR \fIwidget\fR ?\fIcursor\fR?
Restore the original or previously set cursor for the specified
\fIwidget\fR and all its descendants\&.  If \fIcursor\fR is specified,
that will be used if on any widget that did not have a preset cursor
(set by a previous call to \fB::cursor::propagate\fR)\&.
.TP
\fB::cursor::display\fR ?\fIparent\fR?
Pops up a dialog with a listbox containing all the cursor names\&.
Selecting a cursor name will display it in that dialog\&.  This is
simply for viewing any available cursors on the platform\&.
.PP
.SH "SEE ALSO"
Tk_GetCursor(3), cursors(n), options(n)
.SH KEYWORDS
cursor
.SH COPYRIGHT
.nf
Copyright (c) Jeffrey Hobbs <jeff@hobbs\&.org>

.fi

Added embedded/man/files/modules/datefield/datefield.n.



























































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/datefield/datefield\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c) Keith Vetter <keith@ebook\&.gemstar\&.com>
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "datefield" n 0\&.2 tklib "Tk datefield widget"
.BS
.SH NAME
datefield \- Tk datefield widget
.SH SYNOPSIS
package require \fBTk \fR
.sp
package require \fBdatefield  ?0\&.2?\fR
.sp
\fB::datefield::datefield\fR \fIwidgetpath\fR ?\fIoptions\fR?
.sp
.BE
.SH DESCRIPTION
The \fBdatefield\fR package provides the datefield widget which
is an enhanced text entry widget for the purpose of date entry\&. Only
valid dates of the form MM/DD/YYYY can be entered\&.
.PP
The datefield widget is, in fact, just an entry widget with
specialized bindings\&. This means all the command and options for an
entry widget apply equally here\&.
.SH COMMANDS
.TP
\fB::datefield::datefield\fR \fIwidgetpath\fR ?\fIoptions\fR?
Creates and configures a date field widget\&.
.PP
.SH OPTIONS
See the \fBentry\fR manual entry for details on all available options\&.
.SH EXAMPLE
.CS


 package require datefield

 wm title \&. "Datefield example"
 proc DayOfWeek {args} {
     set now [clock scan $::myDate]
     set ::myDate2 [clock format $now -format %A]
 }
 trace variable myDate w DayOfWeek

 ::datefield::datefield \&.df -textvariable myDate
 label \&.l1 -text "Enter a date:"   -anchor e
 label \&.l2 -text "That date is a:" -anchor e
 label \&.l3 -textvariable myDate2 -relief sunken -width 12

 grid \&.l1 \&.df -sticky ew
 grid \&.l2 \&.l3 -sticky ew
 focus \&.df

.CE
.SH "SEE ALSO"
clock(n), entry(n)
.SH KEYWORDS
clock, date, dateentry, entry, widget
.SH CATEGORY
Widget
.SH COPYRIGHT
.nf
Copyright (c) Keith Vetter <keith@ebook\&.gemstar\&.com>

.fi

Added embedded/man/files/modules/diagrams/diagram.n.























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/diagrams/diagram\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "diagram" n 0\&.3 tklib "Documentation toolbox"
.BS
.SH NAME
diagram \- Diagram drawing
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBdiagram  1\fR
.sp
\fB::diagram\fR \fIobjectName\fR \fIcanvas\fR ?\fIscript\fR?
.sp
\fIdiagramObject\fR \fBnew direction\fR \fIname\fR ?\fIkey\fR \fIvalue\fR\&.\&.\&.?
.sp
\fIdiagramObject\fR \fBnew element\fR \fIname\fR \fIattributes\fR \fIcmdprefix\fR
.sp
\fIdiagramObject\fR \fBnew alias\fR \fIname\fR \fIcmdprefix\fR
.sp
\fIdiagramObject\fR \fBnew command\fR \fIname\fR \fIarguments\fR \fIbody\fR
.sp
\fIdiagramObject\fR \fBnew attribute\fR \fIname\fR ?\fIkey\fR \fIvalue\fR\&.\&.\&.?
.sp
\fIdiagramObject\fR \fBunknown attribute\fR \fIcmdprefix\fR
.sp
\fIdiagramObject\fR \fBdraw\fR \fIscript\fR
.sp
\fBarc\fR \fIattr\fR\&.\&.\&.
.sp
\fBarrow\fR \fIattr\fR\&.\&.\&.
.sp
\fB-->\fR \fIattr\fR\&.\&.\&.
.sp
\fB<-->\fR \fIattr\fR\&.\&.\&.
.sp
\fB<-->\fR \fIattr\fR\&.\&.\&.
.sp
\fBblock\fR \fIscript\fR \fIattr\fR\&.\&.\&.
.sp
\fBbox\fR \fIattr\fR\&.\&.\&.
.sp
\fBcircle\fR \fIattr\fR\&.\&.\&.
.sp
\fBO\fR \fIattr\fR\&.\&.\&.
.sp
\fBdiamond\fR \fIattr\fR\&.\&.\&.
.sp
\fB<>\fR \fIattr\fR\&.\&.\&.
.sp
\fBdrum\fR \fIattr\fR\&.\&.\&.
.sp
\fBellipse\fR \fIattr\fR\&.\&.\&.
.sp
\fBline\fR \fIattr\fR\&.\&.\&.
.sp
\fB--\fR \fIattr\fR\&.\&.\&.
.sp
\fBmove\fR \fIattr\fR
.sp
\fBspline\fR \fIattr\fR\&.\&.\&.
.sp
\fBtext\fR \fIattr\fR\&.\&.\&.
.sp
\fBwest\fR
.sp
\fBw\fR
.sp
\fBleft\fR
.sp
\fBl\fR
.sp
\fBsouth\fR
.sp
\fBs\fR
.sp
\fBdown\fR
.sp
\fBbottom\fR
.sp
\fBbot\fR
.sp
\fBb\fR
.sp
\fBeast\fR
.sp
\fBe\fR
.sp
\fBright\fR
.sp
\fBr\fR
.sp
\fBnorth\fR
.sp
\fBn\fR
.sp
\fBup\fR
.sp
\fBtop\fR
.sp
\fBt\fR
.sp
\fBnorthwest\fR
.sp
\fBnw\fR
.sp
\fBup-left\fR
.sp
\fBupleft\fR
.sp
\fBleftup\fR
.sp
\fBnortheast\fR
.sp
\fBne\fR
.sp
\fBup-right\fR
.sp
\fBupright\fR
.sp
\fBrightup\fR
.sp
\fBsouthwest\fR
.sp
\fBsw\fR
.sp
\fBdown-left\fR
.sp
\fBdownleft\fR
.sp
\fBleftdown\fR
.sp
\fBsoutheast\fR
.sp
\fBse\fR
.sp
\fBdown-right\fR
.sp
\fBdownright\fR
.sp
\fBrightdown\fR
.sp
\fInumber\fR \fBcm\fR
.sp
\fInumber\fR \fBmm\fR
.sp
\fInumber\fR \fBinch\fR
.sp
\fInumber\fR \fBpt\fR
.sp
\fInumber\fR \fInumber\fR
.sp
\fBby\fR \fIdistance\fR \fIdirection\fR
.sp
\fIpoint1\fR \fB+\fR \fIpoint2\fR
.sp
\fIpoint1\fR \fB-\fR \fIpoint2\fR
.sp
\fIpoint\fR \fBby\fR \fIdistance\fR \fIdirection\fR
.sp
\fIpoint1\fR \fB|\fR \fIpoint2\fR
.sp
\fIn\fR \fBbetween\fR \fIpoin1\fR \fIpoint2\fR
.sp
\fBintersect\fR \fIelem1\fR \fIelem2\fR
.sp
\fIelement\fR \fBnames\fR ?\fIpattern\fR?
.sp
\fIelement\fR \fIcorner\fR
.sp
\fIelement\fR \fIcorner1\fR \fIcorner2\fR\&.\&.\&.
.sp
\fIelement\fR ?\fIcorner1\fR\&.\&.\&. ?\fBnames\fR ?\fIpattern\fR??]?
.sp
\fB\fBn\fRth\fR ?\fIcorner\fR?
.sp
\fB\fBn\fRth\fR \fBlast\fR ?\fIcorner\fR?
.sp
\fB\fBn\fRth\fR \fIshape\fR ?\fIcorner\fR?
.sp
\fB\fBn\fRth\fR \fBlast\fR \fIshape\fR ?\fIcorner\fR?
.sp
\fBlast\fR ?\fIcorner\fR?
.sp
\fBlast\fR \fIshape\fR ?\fIcorner\fR?
.sp
\fB1st\fR
.sp
\fB2nd\fR
.sp
\fB3rd\fR
.sp
.BE
.SH DESCRIPTION
Welcome to \fBdiagram\fR, a package for the easy construction of
diagrams (sic), i\&.e\&. 2D vector graphics, sometimes also called \fIpictures\fR\&.
Note that this package is not a replacement for \fBTk\fR's canvas,
but rather a layer sitting on top of it, to make it easier to use\&.
In other words, using the canvas as the core graphics engine \fBdiagram\fR abstracts away from the minutiae of handling coordinates to
position and size the drawn elements, allowing the user to concentrate
on the content of the diagram instead\&.
.PP
This is similar to Brian Kernighan's PIC language for troff, which is
the spiritual ancestor of this package\&.
.PP
This document contains the reference to the API and drawing (language)
commands\&. Its intended audience are users of the package wishing to
refresh their memory\&.
Newcomers should read the \fIDiagram Language Tutorial\fR first\&.
Developers wishing to work on the internals of the package and its
supporting packages should look at section
\fBDiagram Classes\fR
first, and then the comments in the sources of the packages itself\&.
.PP
In the remainder of the document we first describe the APIs of the
diagram class and its instances, followed by the language reference
for the drawing language itself\&.
.SH API
.SS "CLASS API"
The package exports the API described here\&.
.TP
\fB::diagram\fR \fIobjectName\fR \fIcanvas\fR ?\fIscript\fR?
The command creates a new instance of a diagram
controller and returns the fully qualified name of the
object command as its result\&.
The new instance is connected to the specified
\fIcanvas\fR object, which is used as the diagrams
graphics engine\&. This is usually an instance of Tk's
canvas, however any object which is API compatible to
Tk's canvas can be used here\&.
.sp
The API of this object command is described in the
following section, \fBObject API\fR\&. It may be
used to invoke various operations on the object\&.
.sp
If the \fIscript\fR argument is specified then method
\fBdraw\fR will be invoked on it\&.
.PP
.SS "OBJECT API"
Instances of the diagram class support the following
methods:
.TP
\fIdiagramObject\fR \fBnew direction\fR \fIname\fR ?\fIkey\fR \fIvalue\fR\&.\&.\&.?
This method defines a new named direction and its
attributes\&. The latter is given through the
\fIkey\fR/\fIvalue\fR pairs coming after the \fIname\fR\&.
.sp
Users are mostly free to specify arbitrary attributes
with whatever meaning they desire\&. The exception are
the names \fIangle\fR and \fIopposite\fR\&. They are
special to the diagram package and have a fixed meaning\&.
.RS
.TP
angle
This attribute specifies the angle of the direction in
degrees, where 0 points east (to the right) and 90 points
north (up)\&.
.TP
opposite
This attribute specifies the name of the direction
which should be considered as complementary to the
named one\&.
.RE
.TP
\fIdiagramObject\fR \fBnew element\fR \fIname\fR \fIattributes\fR \fIcmdprefix\fR
This method defines a new graphics element for the
drawing language\&. I\&.e\&. \fIname\fR will become a new
command in the language, and the specified command
prefix (\fIcmdprefix\fR) will be called to perform
the actual drawing\&.
.sp
\fIattributes\fR specifies the set of attributes for which
data has to be available\&. I\&.e\&. the system will run the
\&.\&.\&.-callbacks for these attributes\&.
See the method \fBnew attribute\fR for more information
on attribute definitions\&.
.sp
The command prefix is expected to conform to the
following signature:
.RS
.TP
\fBcmdprefix\fR \fIcanvas\fR \fIattributes\fR
Where \fIcanvas\fR is the handle of the canvas widget
to draw to, and \fIattributes\fR is a dictionary
holding the attributes for the element, be they
user-specified, or defaults\&.
.sp
The results of the command has to be a list containing
at least two and at most four items\&. These are, in order:
.RS
.IP [1]
The list of canvas items the drawn element consists of\&.
.IP [2]
The dictionary of named locations in the element, its
\fIcorners\fR\&.
.IP [3]
An optional mode, either "relative" or "absolute"\&.
When not returned "relative" is assumed\&. In the
case of a relative element position the attributes
"with" and "at" are used to determine the final
position of the new element\&.
.IP [4]
An optional name of a direction\&. If not the
empty string this is handed to the automatic
layouter as the new direction to follow\&.
.RE
.RE
.TP
\fIdiagramObject\fR \fBnew alias\fR \fIname\fR \fIcmdprefix\fR
This method defines a new command for the drawing
language\&. I\&.e\&. \fIname\fR will become a new command in
the language, and the specified command prefix
(\fIcmdprefix\fR) will be called on use of this new
command\&. Any arguments given to the command are
simply passed to the prefix\&. There is no fixed siganture\&.
.sp
Note that the prefix is run in the context of the
drawing language, allowing the direct use of any
existing commands\&.
.TP
\fIdiagramObject\fR \fBnew command\fR \fIname\fR \fIarguments\fR \fIbody\fR
This is like \fBnew alias\fR except that the new
command is defined as a procedure in the language's
context, with regular argument list and body\&.
.TP
\fIdiagramObject\fR \fBnew attribute\fR \fIname\fR ?\fIkey\fR \fIvalue\fR\&.\&.\&.?
This method defines a new named attribute which can be
used by graphical elements\&. The handling of the
attribute by the processor is declared through the
\fIkey\fR/\fIvalue\fR pairs coming after the \fIname\fR\&.
.sp
The accepted keys and their meanings are:
.RS
.TP
\fBkey\fR
The value of this key is the name of the key
under which the attribute's value shall be
stored in the attribute dictionary given to
the drawing command after attribute processing
is complete\&.
.sp
This key is optional\&. If it is not specified it
defaults to the name of the attribute\&.
.TP
\fBget\fR
The value of this key is a command prefix
which will be invoked to retrieve the
attribute's argument(s) from the command
line\&.
.sp
This key is optional\&. If it is not specified a
default is used which takes the single word
after the attribute name as the attribute's
value\&.
.sp
The signature of the command prefix is
.RS
.TP
\fBcmdprefix\fR \fIwordqueue\fR
Where \fIwordqueue\fR is the handle of
a queue object conforming to the API
of the queues provided by package
\fBstruct::queue\fR\&. This queue
contains the not-yet-processed part of
the attribute definitions, with one
entry per word, with the first entry
the word \fIafter\fR name of the
attribute\&. In other words, the
attribute's name has already been
removed from the queue\&.
.sp
The result of the command is the value
of the attribute, which may have been
taken from the queue, or not\&.
.RE
.TP
\fBtransform\fR
The value of this key is a command prefix
which will be invoked to transform the
retrieved value (See \fBget\fR) into their
final form\&.
.sp
This key is optional\&. If it is not specified
no transformation is done\&.
The signature of the command prefix is
.RS
.TP
\fBcmdprefix\fR \fIvalue\fR
Where \fIvalue\fR is the value to transform\&.
.sp
The result of the command is the final
value of the attribute\&.
.RE
.TP
\fBtype\fR
The value of this key is a command prefix
which will be invoked to validate the
attribute's argument(s)\&.
.sp
This key is optional\&. If it is not specified
no validation is done\&.
.sp
The signature of the command prefix is that of
snit validation types\&. See the documentation
of the \fBsnit\fR package\&.
.TP
\fBmerge\fR
The value of this key is a command prefix
which will be invoked to insert the
transformed and validated attribute value into
the dictionary of collected attributes\&.
.sp
This key is optional\&. If it is not specified
a default merge is chosen, based on the data
for key \fBaggregate\fR, see below\&.
The signature of the command prefix is
.RS
.TP
\fBcmdprefix\fR \fIvalue\fR \fIdict\fR
Where \fIvalue\fR is the value to
insert, and \fIdict\fR the dictionary
of attributes and values collected so
far\&.
.sp
The result of the command is the new
dictionary of attributes\&.
.RE
.TP
\fBaggregate\fR
The value of this key is a boolean flag\&. It
has an effect if and only if the key \fBmerge\fR was not specified\&. This key is
optional\&. If it is not specified it defaults
to \fBFalse\fR\&.
.sp
If the key is effective, the value of \fBFalse\fR means that the attribute's value is
\fIset\fR into the dictionary using the value
of key \fIkey\fR (see above) as index,
\fIoverwriting\fR any previously specified value\&.
.sp
If the key is effective, the value of \fBTrue\fR means that the attribute's value is
\fIadded\fR to the dictionary using the value
of key \fIkey\fR (see above) as index,
\fIextending\fR any previously specified value\&.
This means that the final value of the
attribute as seen after processing will be a
list of the collected values\&.
.TP
\fBdefault\fR
The value of this key is a command prefix
which will be invoked after collection of
attributes has been completed and this
attribute is in the list of required
attributes for the drawing element (See
argument \fIattributes\fR of method
\fBnew element\fR)\&.
.sp
Note that the connection is made through the
value of key \fIkey\fR, not through the
attribute name per se\&.
.sp
Further note that this command prefix is
invoked even if a user specified attribute
value is present\&. This allows the command
to go beyond simply setting defaults, it
can calculate and store derived values as
well\&.
.sp
This key is optional\&. If an element requires
this attribute, but \fIdefault\fR is not
specified then nothing will be done\&.
.sp
The signature of the command prefix is
.RS
.TP
\fBcmdprefix\fR \fBinit\fR
This method is run when the attribute
is defined, its responsibility is to
initialize anything in the language
namespace for the attribute and
default processing\&.
.sp
The result of this method is ignored\&.
.TP
\fBcmdprefix\fR \fBfill\fR \fIvarname\fR
This method is run to put defaults, or
derived values into the attribute dictionary
named by \fIvarname\fR\&. This variable will
be found in the calling context\&.
.sp
The result of this method is ignored\&.
.TP
\fBcmdprefix\fR \fBset\fR \fIname\fR \fIvalue\fR
This method is run to push current a
attribute value into the language
namespace, to make it the new default\&.
.sp
The result of this method is ignored\&.
.RE
.TP
\fBlinked\fR
This key is effective if and only if key
\fBdefault\fR is not specified\&. In that
case is supplies a default handling for
\fBdefault\fR, linking the attribute to a
variable in the language context\&.
.sp
The value for this key is a 2-element list
containing the name of the variable to link
to, and its initial value, in this order\&.
.RE
.TP
\fIdiagramObject\fR \fBunknown attribute\fR \fIcmdprefix\fR
This method registers the command prefix with the
subsystem processing the attributes for element
commands, telling it to call it when it encounters an
attribute it is unable to handle on its on\&.
.sp
It is allowed to register more than callback, these
will be called in order of registration (i\&.e\&. first to
last), until one of the callbacks accepts the current
input\&.
The command prefix is expected to conform to the
following signature:
.RS
.TP
\fBcmdprefix\fR \fIwordqueue\fR
Where \fIwordqueue\fR is the handle of a queue
object conforming to the API of the queues
provided by package \fBstruct::queue\fR\&.
This queue contains the not-yet-processed part
of the attribute definitions, with one entry
per word, with the first entry the name of the
attribute which could not be processed\&.
.sp
The results of the command has to be a boolean
value where \fBTrue\fR signals that this
callback has accepted the attribute, processed
it, and the new state of the \fIwordqueue\fR
is where the general processing shall continue\&.
.sp
Given the signature the command has basically
two ways of handling (rewriting) the attributes
it recognizes:
.RS
.IP [1]
Replace the attribute (and arguments)
with a different attribute and arguments\&.
.IP [2]
Push additional words in front to get
the general processing unstuck\&.
.RE
.RE
.TP
\fIdiagramObject\fR \fBdraw\fR \fIscript\fR
This method runs the given \fIscript\fR in the
context of the drawing language definitions\&.
See section \fBLanguage Reference\fR for
details on the available commands\&.
.sp
\fINote\fR that \fIscript\fR is \fItrusted\fR\&.
It is executed in the current interpreter with
access to its full abilities\&.
For the execution of untrusted diagram scripts this
interpreter should be a safe one\&.
.PP
.SH "LANGUAGE REFERENCE"
.SS ELEMENTS
This section lists the commands for the predefined drawing elements,
aka shapes\&. These commands are all defined in the language's context\&.
All commands of this section return the handle of the newly created
element as their result\&. This handle also exists as a command which
can be used to query the element for its corners (names, values)\&.
See section \fBMiscellaneous Commands\fR\&.
IMAGE: figure-02-basic-shapes
.TP
\fBarc\fR \fIattr\fR\&.\&.\&.
IMAGE: figure-02-arc
An open element with the corresponding corners, i\&.e\&. "start", "end",
and "center"\&.
Note however that it also has the compass rose of closed elements as
its corners, with the center of the arc's circle as the center of the
compass and the other points on the circle the arc is part of\&.
It handles the attributes
.RS
.TP
\fBanchor\fR \fIname\fR
.TP
\fBljust\fR
.TP
\fBrjust\fR
.TP
\fBabove\fR
.TP
\fBbelow\fR
IMAGE: figure-22-text-anchoring-3
Specifies the anchor of the text which is to be placed at the
element's center, by name\&. I\&.e\&. this attribute defines the text's
position relative to the element's center\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBanchor\fR, which itself defaults to
\fBcenter\fR\&.
The legal values are all those accepted by
\fITk_GetAnchor\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetAnchor\&.htm]\&.
The commands without arguments are all shorthands with the anchor
implied\&. Note that they do not combine, only the last is used\&. For
comined directions the main attribute command, \fBanchor\fR has to be
used\&.
.RS
.TP
\fBljust\fR
"anchor west"
.TP
\fBrjust\fR
"anchor east"
.TP
\fBabove\fR
"anchor south"
.TP
\fBbelow\fR
"anchor north"
.RE
.TP
\fBclockwise\fR
.TP
\fBcw\fR
Specifies the direction of the \fBarc\fR element, here going
clockwise\&.
The complementary attribute is \fBcounterclockwise\fR\&.
If not specified the system falls back to the value taken from the
language variable \fBclockwise\fR, which itself defaults to
\fBfalse\fR, for counter-clockwise direction\&.
.TP
\fBcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinecolor\fR, which itself defaults to \fBblack\fR\&.
.TP
\fBcounterclockwise\fR
.TP
\fBccw\fR
Specifies the direction of the \fBarc\fR element, here
counter-clockwise\&.
The complementary attribute is \fBclockwise\fR\&.
If not specified the system falls back to the value taken from the
language variable \fBclockwise\fR, which itself defaults to
\fBfalse\fR, for counter-clockwise direction\&.
.TP
\fBfillcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the inside of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBfillcolor\fR, which itself defaults to the empty
string, signaling "no filling"\&.
.TP
\fBfrom\fR \fIlocation\fR
Specifies the location where the \fBarc\fR element begins\&.
Defaults to the current location as maintained by the layouting
system\&.
.TP
\fBjustify\fR \fBleft\fR|\fBcenter\fR|\fBright\fR
Specifies how multi-line text associated with the element is
positioned within its box\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBjustify\fR, which itself defaults to
\fBleft\fR\&.
The legal values are \fBleft\fR, \fBright\fR, and \fBcenter\fR\&.
.TP
\fBradius\fR \fIlength\fR
Specifies the radius of the \fBarc\fR element, or rather, the radius
of the circle the shown arc is a part of\&.
If not specified the system falls back to the value taken from the
language variable \fBarcradius\fR, which itself defaults to the pixel
equivalent of \fB1 cm\fR\&.
.TP
\fBstroke\fR \fIwidth\fR
IMAGE: figure-20-style-stroke
Specifies the width of the lines drawn for the the element, in pixels\&.
If not specified the system falls back to the value taken from the
language variable \fBlinewidth\fR, which itself defaults to \fB1\fR\&.
.TP
\fBstyle\fR \fIspec\fR
IMAGE: figure-18-style-dash
Specifies the style used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinestyle\fR, which itself defaults to
\fBsolid\fR lines\&.
The legal values are all those accepted by
\fITk_GetDash\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetDash\&.htm],
and additionally all which are listed below:
.RS
.TP
\fBsolid\fR, empty string
Draw solid line\&.
.TP
\fBdash\fR, \fBdashed\fR, \fB-\fR
Draw a dashed line\&.
.TP
\fBdot\fR, \fBdotted\fR, \fB\&.\fR
Draw a dotted line\&.
.TP
\fBdash-dot\fR, \fB-\&.\fR
Draw a dash-dotted line
.TP
\fBdash-dot-dot\fR, \fB-\&.\&.\fR
Draw a dash-dot-dotted line\&.
.RE
.IP
Note that the values "solid", "dot(ted)", "dash(ed)", "dash-dot", and
"dash-dot-dot" are all accepted as shorthands for the \fBstyle\fR
command using them as argument\&.
.TP
\fBtext\fR \fIstring\fR
Specifies the text to associate with the element\&.
Defaults to nothing\&.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element\&.
.TP
\fBtextcolor\fR \fIspec\fR
Specifies the color used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextcolor\fR, which itself defaults to
\fBblack\fR\&.
.TP
\fBtextfont\fR \fIspec\fR
Specifies the font used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextfont\fR, which itself defaults to
\fBHelvetica 12pt\fR\&.
.TP
\fBto\fR \fIlocation\fR
Specifies the location where the \fBarc\fR element ends\&.
Defaults to a location such that a 90-degree arc is drawn in the
chosen direction, starting at \fBfrom\fR\&.
.RE
.TP
\fBarrow\fR \fIattr\fR\&.\&.\&.
.TP
\fB-->\fR \fIattr\fR\&.\&.\&.
.TP
\fB<-->\fR \fIattr\fR\&.\&.\&.
.TP
\fB<-->\fR \fIattr\fR\&.\&.\&.
IMAGE: figure-02-arrow
An alias for the \fBline\fR element (see below), with the attribute
\fBarrowhead\fR preset to \fB->\fR, \fB<->\fR, or \fB<-\fR\&.  The
\fBarrow\fR is equivalent to \fB-->\fR\&.
.TP
\fBblock\fR \fIscript\fR \fIattr\fR\&.\&.\&.
A closed element with the corresponding corners, i\&.e\&. the eight
directions of the compass rose, and "center"\&.
The main effect is the aggregration of all elements created by the
\fIscript\fR into one element\&.
This also means that while the elements created by the script are
visible in the element history while the script is executing,
afterward the history contains only the block itself, and not the
elements it is composed of\&.
.sp
The script has access to the current state of all variables in the
language context\&.
Any changes to the variables will be reverted after execution of the
block\&.
However, also, any variables set in the script will be exported as
corners of the element, allowing users to define their own named
locations in the block\&.
.sp
Regarding the layout mechanism any changes made by the script are
reverted after the element is done\&.
In other words, a block is an implicit \fBgroup\fR\&.
.sp
Blocks handle all attributes, propgating their settings into the
script as the default values active during script execution\&.
.TP
\fBbox\fR \fIattr\fR\&.\&.\&.
IMAGE: figure-02-box
A closed element with the corresponding corners, i\&.e\&. the eight
directions of the compass rose, and "center"\&.
It handles the attributes
.RS
.TP
\fBanchor\fR \fIname\fR
.TP
\fBljust\fR
.TP
\fBrjust\fR
.TP
\fBabove\fR
.TP
\fBbelow\fR
IMAGE: figure-22-text-anchoring-3
Specifies the anchor of the text which is to be placed at the
element's center, by name\&. I\&.e\&. this attribute defines the text's
position relative to the element's center\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBanchor\fR, which itself defaults to
\fBcenter\fR\&.
The legal values are all those accepted by
\fITk_GetAnchor\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetAnchor\&.htm]\&.
The commands without arguments are all shorthands with the anchor
implied\&. Note that they do not combine, only the last is used\&. For
comined directions the main attribute command, \fBanchor\fR has to be
used\&.
.RS
.TP
\fBljust\fR
"anchor west"
.TP
\fBrjust\fR
"anchor east"
.TP
\fBabove\fR
"anchor south"
.TP
\fBbelow\fR
"anchor north"
.RE
.TP
\fBat\fR \fIlocation\fR
Specifies the location of the element's corner named by the attribute
\fBwith\fR\&.
Defaults to the current location as maintained by the layouting
system\&.
.TP
\fBcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinecolor\fR, which itself defaults to \fBblack\fR\&.
.TP
\fBfillcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the inside of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBfillcolor\fR, which itself defaults to the empty
string, signaling "no filling"\&.
.TP
\fBheight\fR \fIlength\fR
.TP
\fBht\fR \fIlength\fR
Specifies the height of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBboxheight\fR, which itself defaults to the
pixel equivalent of \fB2 cm\fR\&.
.TP
\fBjustify\fR \fBleft\fR|\fBcenter\fR|\fBright\fR
Specifies how multi-line text associated with the element is
positioned within its box\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBjustify\fR, which itself defaults to
\fBleft\fR\&.
The legal values are \fBleft\fR, \fBright\fR, and \fBcenter\fR\&.
.TP
\fBslant\fR \fIangle\fR
Specifies the angle by which the \fBbox\fR element is slanted, in
degrees\&.
If not specified the system falls back to the value taken from the
language variable \fBslant\fR, which itself defaults to \fB90\fR,
i\&.e\&. vertical, no slant\&.
0 degrees is slanting straight east, pointing to the right\&.
90 degrees is slanting to the north, pointing straight up\&.
.TP
\fBstroke\fR \fIwidth\fR
IMAGE: figure-20-style-stroke
Specifies the width of the lines drawn for the the element, in pixels\&.
If not specified the system falls back to the value taken from the
language variable \fBlinewidth\fR, which itself defaults to \fB1\fR\&.
.TP
\fBstyle\fR \fIspec\fR
IMAGE: figure-18-style-dash
Specifies the style used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinestyle\fR, which itself defaults to
\fBsolid\fR lines\&.
The legal values are all those accepted by
\fITk_GetDash\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetDash\&.htm],
and additionally all which are listed below:
.RS
.TP
\fBsolid\fR, empty string
Draw solid line\&.
.TP
\fBdash\fR, \fBdashed\fR, \fB-\fR
Draw a dashed line\&.
.TP
\fBdot\fR, \fBdotted\fR, \fB\&.\fR
Draw a dotted line\&.
.TP
\fBdash-dot\fR, \fB-\&.\fR
Draw a dash-dotted line
.TP
\fBdash-dot-dot\fR, \fB-\&.\&.\fR
Draw a dash-dot-dotted line\&.
.RE
.IP
Note that the values "solid", "dot(ted)", "dash(ed)", "dash-dot", and
"dash-dot-dot" are all accepted as shorthands for the \fBstyle\fR
command using them as argument\&.
.TP
\fBtext\fR \fIstring\fR
Specifies the text to associate with the element\&.
Defaults to nothing\&.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element\&.
.TP
\fBtextcolor\fR \fIspec\fR
Specifies the color used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextcolor\fR, which itself defaults to
\fBblack\fR\&.
.TP
\fBtextfont\fR \fIspec\fR
Specifies the font used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextfont\fR, which itself defaults to
\fBHelvetica 12pt\fR\&.
.TP
\fBwidth\fR \fIlength\fR
.TP
\fBwid\fR \fIlength\fR
Specifies the width of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBboxwidth\fR, which itself defaults to the pixel
equivalent of \fB2 cm\fR\&.
.TP
\fBwith\fR \fIcorner\fR
Specifies the corner of the element to place at the location given by
the attribute \fBat\fR\&.
Defaults to the current corner as maintained by the layouting system,
except if the value for \fBat\fR was specified by the user\&. In that
case it defaults to \fBcenter\fR\&.
.RE
.TP
\fBcircle\fR \fIattr\fR\&.\&.\&.
.TP
\fBO\fR \fIattr\fR\&.\&.\&.
IMAGE: figure-02-circle
A closed element with the corresponding corners, i\&.e\&. the eight
directions of the compass rose, and "center"\&.
It handles the attributes
.RS
.TP
\fBanchor\fR \fIname\fR
.TP
\fBljust\fR
.TP
\fBrjust\fR
.TP
\fBabove\fR
.TP
\fBbelow\fR
IMAGE: figure-22-text-anchoring-3
Specifies the anchor of the text which is to be placed at the
element's center, by name\&. I\&.e\&. this attribute defines the text's
position relative to the element's center\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBanchor\fR, which itself defaults to
\fBcenter\fR\&.
The legal values are all those accepted by
\fITk_GetAnchor\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetAnchor\&.htm]\&.
The commands without arguments are all shorthands with the anchor
implied\&. Note that they do not combine, only the last is used\&. For
comined directions the main attribute command, \fBanchor\fR has to be
used\&.
.RS
.TP
\fBljust\fR
"anchor west"
.TP
\fBrjust\fR
"anchor east"
.TP
\fBabove\fR
"anchor south"
.TP
\fBbelow\fR
"anchor north"
.RE
.TP
\fBat\fR \fIlocation\fR
Specifies the location of the element's corner named by the attribute
\fBwith\fR\&.
Defaults to the current location as maintained by the layouting
system\&.
.TP
\fBcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinecolor\fR, which itself defaults to \fBblack\fR\&.
.TP
\fBdiameter\fR \fIlength\fR
.TP
\fBdiam\fR \fIlength\fR
Specifies the diameter of the \fBcircle\fR element, as an alternative
way to specify its \fBradius\fR\&.
Effective if and only if the radius was not specified\&. I\&.e\&. if both
diameter and radius are specified then the radius infomration has
precendence\&.
This attribute has no default, because the defaults are taken from the
radius\&.
.TP
\fBfillcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the inside of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBfillcolor\fR, which itself defaults to the empty
string, signaling "no filling"\&.
.TP
\fBjustify\fR \fBleft\fR|\fBcenter\fR|\fBright\fR
Specifies how multi-line text associated with the element is
positioned within its box\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBjustify\fR, which itself defaults to
\fBleft\fR\&.
The legal values are \fBleft\fR, \fBright\fR, and \fBcenter\fR\&.
.TP
\fBradius\fR \fIlength\fR
.TP
\fBrad\fR \fIlength\fR
Specifies the radius of the \fBcircle\fR element\&.
If not specified the system falls back to the value taken from the
language variable \fBcircleradius\fR, which itself defaults to the
pixel equivalent of \fB1 cm\fR\&.
.TP
\fBstroke\fR \fIwidth\fR
IMAGE: figure-20-style-stroke
Specifies the width of the lines drawn for the the element, in pixels\&.
If not specified the system falls back to the value taken from the
language variable \fBlinewidth\fR, which itself defaults to \fB1\fR\&.
.TP
\fBstyle\fR \fIspec\fR
IMAGE: figure-18-style-dash
Specifies the style used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinestyle\fR, which itself defaults to
\fBsolid\fR lines\&.
The legal values are all those accepted by
\fITk_GetDash\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetDash\&.htm],
and additionally all which are listed below:
.RS
.TP
\fBsolid\fR, empty string
Draw solid line\&.
.TP
\fBdash\fR, \fBdashed\fR, \fB-\fR
Draw a dashed line\&.
.TP
\fBdot\fR, \fBdotted\fR, \fB\&.\fR
Draw a dotted line\&.
.TP
\fBdash-dot\fR, \fB-\&.\fR
Draw a dash-dotted line
.TP
\fBdash-dot-dot\fR, \fB-\&.\&.\fR
Draw a dash-dot-dotted line\&.
.RE
.IP
Note that the values "solid", "dot(ted)", "dash(ed)", "dash-dot", and
"dash-dot-dot" are all accepted as shorthands for the \fBstyle\fR
command using them as argument\&.
.TP
\fBtext\fR \fIstring\fR
Specifies the text to associate with the element\&.
Defaults to nothing\&.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element\&.
.TP
\fBtextcolor\fR \fIspec\fR
Specifies the color used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextcolor\fR, which itself defaults to
\fBblack\fR\&.
.TP
\fBtextfont\fR \fIspec\fR
Specifies the font used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextfont\fR, which itself defaults to
\fBHelvetica 12pt\fR\&.
.TP
\fBwith\fR \fIcorner\fR
Specifies the corner of the element to place at the location given by
the attribute \fBat\fR\&.
Defaults to the current corner as maintained by the layouting system,
except if the value for \fBat\fR was specified by the user\&. In that
case it defaults to \fBcenter\fR\&.
.RE
.TP
\fBdiamond\fR \fIattr\fR\&.\&.\&.
.TP
\fB<>\fR \fIattr\fR\&.\&.\&.
IMAGE: figure-02-diamond
A closed element with the corresponding corners, i\&.e\&. the eight
directions of the compass rose, and "center"\&.
It handles the attributes
.RS
.TP
\fBanchor\fR \fIname\fR
.TP
\fBljust\fR
.TP
\fBrjust\fR
.TP
\fBabove\fR
.TP
\fBbelow\fR
IMAGE: figure-22-text-anchoring-3
Specifies the anchor of the text which is to be placed at the
element's center, by name\&. I\&.e\&. this attribute defines the text's
position relative to the element's center\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBanchor\fR, which itself defaults to
\fBcenter\fR\&.
The legal values are all those accepted by
\fITk_GetAnchor\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetAnchor\&.htm]\&.
The commands without arguments are all shorthands with the anchor
implied\&. Note that they do not combine, only the last is used\&. For
comined directions the main attribute command, \fBanchor\fR has to be
used\&.
.RS
.TP
\fBljust\fR
"anchor west"
.TP
\fBrjust\fR
"anchor east"
.TP
\fBabove\fR
"anchor south"
.TP
\fBbelow\fR
"anchor north"
.RE
.TP
\fBaspect\fR \fInumber\fR
Specifies the aspect ratio, i\&.e ratio of width to height, of the
\fBdiamond\fR element\&.
The manner in which a default is calculated when not specified also
depends on the specifications of the attributes \fBwidth\fR and
\fBheight\fR, if any\&.
.sp
If both \fBwidth\fR, and \fBheight\fR are specified then any
specification of \fBaspect\fR is ignored, as it is implicitly defined
in the width and height as well, and this takes precedence\&. A missing
specification is ignored in that case well, i\&.e\&. no defaults are
required\&.
.sp
If the \fBaspect\fR is specified, and one of the attributes
\fBwidth\fR or \fBheight\fR, then the missing attribute is calculated
from the two which are specified\&. No defaults are required for these
cases either\&.
.sp
If only one of the attributes \fBwidth\fR or \fBheight\fR is specified
then the system uses a fallback for the \fBaspect\fR, the value taken
from the language variable \fBdiamondaspect\fR, which itselfs defaults
to \fB2\fR\&.
.sp
If none of of the attributes \fBwidth\fR or \fBheight\fR is specified
then the system uses a fallback for the \fBwidth\fR, the value taken
from the language variable \fBboxwidth\fR, which itselfs defaults to
the pixel equivalent of \fB2 cm\fR\&. For the aspect it uses either
the user-specified value or the default taken as described in the
previous paragraph\&.
.TP
\fBat\fR \fIlocation\fR
Specifies the location of the element's corner named by the attribute
\fBwith\fR\&.
Defaults to the current location as maintained by the layouting
system\&.
.TP
\fBcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinecolor\fR, which itself defaults to \fBblack\fR\&.
.TP
\fBfillcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the inside of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBfillcolor\fR, which itself defaults to the empty
string, signaling "no filling"\&.
.TP
\fBheight\fR \fIlength\fR
Specifies the height of the \fBdiamond\fR element\&.
The manner in which a default is calculated when not specified also
depends on the specifications of the attributes \fBaspect\fR and
\fBwidth\fR, if any\&.
.sp
If both \fBwidth\fR, and \fBheight\fR are specified then any
specification of \fBaspect\fR is ignored, as it is implicitly defined
in the width and height as well, and this takes precedence\&. A missing
specification is ignored in that case well, i\&.e\&. no defaults are
required\&.
.sp
If the \fBaspect\fR is specified, and one of the attributes
\fBwidth\fR or \fBheight\fR, then the missing attribute is calculated
from the two which are specified\&. No defaults are required for these
cases either\&.
.sp
If only one of the attributes \fBwidth\fR or \fBheight\fR is specified
then the system uses a fallback for the \fBaspect\fR, the value taken
from the language variable \fBdiamondaspect\fR, which itselfs defaults
to \fB2\fR\&.
.sp
If none of of the attributes \fBwidth\fR or \fBheight\fR is specified
then the system uses a fallback for the \fBwidth\fR, the value taken
from the language variable \fBboxwidth\fR, which itselfs defaults to
the pixel equivalent of \fB2 cm\fR\&. For the aspect it uses either
the user-specified value or the default taken as described in the
previous paragraph\&.
.TP
\fBjustify\fR \fBleft\fR|\fBcenter\fR|\fBright\fR
Specifies how multi-line text associated with the element is
positioned within its box\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBjustify\fR, which itself defaults to
\fBleft\fR\&.
The legal values are \fBleft\fR, \fBright\fR, and \fBcenter\fR\&.
.TP
\fBstroke\fR \fIwidth\fR
IMAGE: figure-20-style-stroke
Specifies the width of the lines drawn for the the element, in pixels\&.
If not specified the system falls back to the value taken from the
language variable \fBlinewidth\fR, which itself defaults to \fB1\fR\&.
.TP
\fBstyle\fR \fIspec\fR
IMAGE: figure-18-style-dash
Specifies the style used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinestyle\fR, which itself defaults to
\fBsolid\fR lines\&.
The legal values are all those accepted by
\fITk_GetDash\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetDash\&.htm],
and additionally all which are listed below:
.RS
.TP
\fBsolid\fR, empty string
Draw solid line\&.
.TP
\fBdash\fR, \fBdashed\fR, \fB-\fR
Draw a dashed line\&.
.TP
\fBdot\fR, \fBdotted\fR, \fB\&.\fR
Draw a dotted line\&.
.TP
\fBdash-dot\fR, \fB-\&.\fR
Draw a dash-dotted line
.TP
\fBdash-dot-dot\fR, \fB-\&.\&.\fR
Draw a dash-dot-dotted line\&.
.RE
.IP
Note that the values "solid", "dot(ted)", "dash(ed)", "dash-dot", and
"dash-dot-dot" are all accepted as shorthands for the \fBstyle\fR
command using them as argument\&.
.TP
\fBtext\fR \fIstring\fR
Specifies the text to associate with the element\&.
Defaults to nothing\&.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element\&.
.TP
\fBtextcolor\fR \fIspec\fR
Specifies the color used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextcolor\fR, which itself defaults to
\fBblack\fR\&.
.TP
\fBtextfont\fR \fIspec\fR
Specifies the font used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextfont\fR, which itself defaults to
\fBHelvetica 12pt\fR\&.
.TP
\fBwidth\fR \fIlength\fR
Specifies the width of the \fBdiamond\fR element\&.
The manner in which a default is calculated when not specified also
depends on the specifications of the attributes \fBaspect\fR and
\fBheight\fR, if any\&.
.sp
If both \fBwidth\fR, and \fBheight\fR are specified then any
specification of \fBaspect\fR is ignored, as it is implicitly defined
in the width and height as well, and this takes precedence\&. A missing
specification is ignored in that case well, i\&.e\&. no defaults are
required\&.
.sp
If the \fBaspect\fR is specified, and one of the attributes
\fBwidth\fR or \fBheight\fR, then the missing attribute is calculated
from the two which are specified\&. No defaults are required for these
cases either\&.
.sp
If only one of the attributes \fBwidth\fR or \fBheight\fR is specified
then the system uses a fallback for the \fBaspect\fR, the value taken
from the language variable \fBdiamondaspect\fR, which itselfs defaults
to \fB2\fR\&.
.sp
If none of of the attributes \fBwidth\fR or \fBheight\fR is specified
then the system uses a fallback for the \fBwidth\fR, the value taken
from the language variable \fBboxwidth\fR, which itselfs defaults to
the pixel equivalent of \fB2 cm\fR\&. For the aspect it uses either
the user-specified value or the default taken as described in the
previous paragraph\&.
.TP
\fBwith\fR \fIcorner\fR
Specifies the corner of the element to place at the location given by
the attribute \fBat\fR\&.
Defaults to the current corner as maintained by the layouting system,
except if the value for \fBat\fR was specified by the user\&. In that
case it defaults to \fBcenter\fR\&.
.RE
.TP
\fBdrum\fR \fIattr\fR\&.\&.\&.
IMAGE: figure-02-drum
A closed element with the corresponding corners, i\&.e\&. the eight
directions of the compass rose, and "center"\&.
It handles the attributes
.RS
.TP
\fBanchor\fR \fIname\fR
.TP
\fBljust\fR
.TP
\fBrjust\fR
.TP
\fBabove\fR
.TP
\fBbelow\fR
IMAGE: figure-22-text-anchoring-3
Specifies the anchor of the text which is to be placed at the
element's center, by name\&. I\&.e\&. this attribute defines the text's
position relative to the element's center\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBanchor\fR, which itself defaults to
\fBcenter\fR\&.
The legal values are all those accepted by
\fITk_GetAnchor\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetAnchor\&.htm]\&.
The commands without arguments are all shorthands with the anchor
implied\&. Note that they do not combine, only the last is used\&. For
comined directions the main attribute command, \fBanchor\fR has to be
used\&.
.RS
.TP
\fBljust\fR
"anchor west"
.TP
\fBrjust\fR
"anchor east"
.TP
\fBabove\fR
"anchor south"
.TP
\fBbelow\fR
"anchor north"
.RE
.TP
\fBaspect\fR \fInumber\fR
Specifies the aspect ratio, i\&.e ratio of width to height, of the
ellipses which are used to draw the top and bottom of the \fBdrum\fR
element\&.
If not specified the system falls back to the value taken from the
language variable \fBdrumaspect\fR, which itself defaults to
\fB0\&.35\fR\&.
.TP
\fBat\fR \fIlocation\fR
Specifies the location of the element's corner named by the attribute
\fBwith\fR\&.
Defaults to the current location as maintained by the layouting
system\&.
.TP
\fBcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinecolor\fR, which itself defaults to \fBblack\fR\&.
.TP
\fBfillcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the inside of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBfillcolor\fR, which itself defaults to the empty
string, signaling "no filling"\&.
.TP
\fBheight\fR \fIlength\fR
.TP
\fBht\fR \fIlength\fR
Specifies the height of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBboxheight\fR, which itself defaults to the
pixel equivalent of \fB2 cm\fR\&.
.TP
\fBjustify\fR \fBleft\fR|\fBcenter\fR|\fBright\fR
Specifies how multi-line text associated with the element is
positioned within its box\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBjustify\fR, which itself defaults to
\fBleft\fR\&.
The legal values are \fBleft\fR, \fBright\fR, and \fBcenter\fR\&.
.TP
\fBstroke\fR \fIwidth\fR
IMAGE: figure-20-style-stroke
Specifies the width of the lines drawn for the the element, in pixels\&.
If not specified the system falls back to the value taken from the
language variable \fBlinewidth\fR, which itself defaults to \fB1\fR\&.
.TP
\fBstyle\fR \fIspec\fR
IMAGE: figure-18-style-dash
Specifies the style used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinestyle\fR, which itself defaults to
\fBsolid\fR lines\&.
The legal values are all those accepted by
\fITk_GetDash\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetDash\&.htm],
and additionally all which are listed below:
.RS
.TP
\fBsolid\fR, empty string
Draw solid line\&.
.TP
\fBdash\fR, \fBdashed\fR, \fB-\fR
Draw a dashed line\&.
.TP
\fBdot\fR, \fBdotted\fR, \fB\&.\fR
Draw a dotted line\&.
.TP
\fBdash-dot\fR, \fB-\&.\fR
Draw a dash-dotted line
.TP
\fBdash-dot-dot\fR, \fB-\&.\&.\fR
Draw a dash-dot-dotted line\&.
.RE
.IP
Note that the values "solid", "dot(ted)", "dash(ed)", "dash-dot", and
"dash-dot-dot" are all accepted as shorthands for the \fBstyle\fR
command using them as argument\&.
.TP
\fBtext\fR \fIstring\fR
Specifies the text to associate with the element\&.
Defaults to nothing\&.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element\&.
.TP
\fBtextcolor\fR \fIspec\fR
Specifies the color used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextcolor\fR, which itself defaults to
\fBblack\fR\&.
.TP
\fBtextfont\fR \fIspec\fR
Specifies the font used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextfont\fR, which itself defaults to
\fBHelvetica 12pt\fR\&.
.TP
\fBwidth\fR \fIlength\fR
.TP
\fBwid\fR \fIlength\fR
Specifies the width of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBboxwidth\fR, which itself defaults to the pixel
equivalent of \fB2 cm\fR\&.
.TP
\fBwith\fR \fIcorner\fR
Specifies the corner of the element to place at the location given by
the attribute \fBat\fR\&.
Defaults to the current corner as maintained by the layouting system,
except if the value for \fBat\fR was specified by the user\&. In that
case it defaults to \fBcenter\fR\&.
.RE
.TP
\fBellipse\fR \fIattr\fR\&.\&.\&.
IMAGE: figure-02-ellipse
A closed element with the corresponding corners, i\&.e\&. the eight
directions of the compass rose, and "center"\&.
It handles the attributes
.RS
.TP
\fBanchor\fR \fIname\fR
.TP
\fBljust\fR
.TP
\fBrjust\fR
.TP
\fBabove\fR
.TP
\fBbelow\fR
IMAGE: figure-22-text-anchoring-3
Specifies the anchor of the text which is to be placed at the
element's center, by name\&. I\&.e\&. this attribute defines the text's
position relative to the element's center\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBanchor\fR, which itself defaults to
\fBcenter\fR\&.
The legal values are all those accepted by
\fITk_GetAnchor\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetAnchor\&.htm]\&.
The commands without arguments are all shorthands with the anchor
implied\&. Note that they do not combine, only the last is used\&. For
comined directions the main attribute command, \fBanchor\fR has to be
used\&.
.RS
.TP
\fBljust\fR
"anchor west"
.TP
\fBrjust\fR
"anchor east"
.TP
\fBabove\fR
"anchor south"
.TP
\fBbelow\fR
"anchor north"
.RE
.TP
\fBat\fR \fIlocation\fR
Specifies the location of the element's corner named by the attribute
\fBwith\fR\&.
Defaults to the current location as maintained by the layouting
system\&.
.TP
\fBcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinecolor\fR, which itself defaults to \fBblack\fR\&.
.TP
\fBfillcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the inside of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBfillcolor\fR, which itself defaults to the empty
string, signaling "no filling"\&.
.TP
\fBheight\fR \fIlength\fR
.TP
\fBht\fR \fIlength\fR
Specifies the height of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBboxheight\fR, which itself defaults to the
pixel equivalent of \fB2 cm\fR\&.
.TP
\fBjustify\fR \fBleft\fR|\fBcenter\fR|\fBright\fR
Specifies how multi-line text associated with the element is
positioned within its box\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBjustify\fR, which itself defaults to
\fBleft\fR\&.
The legal values are \fBleft\fR, \fBright\fR, and \fBcenter\fR\&.
.TP
\fBstroke\fR \fIwidth\fR
IMAGE: figure-20-style-stroke
Specifies the width of the lines drawn for the the element, in pixels\&.
If not specified the system falls back to the value taken from the
language variable \fBlinewidth\fR, which itself defaults to \fB1\fR\&.
.TP
\fBstyle\fR \fIspec\fR
IMAGE: figure-18-style-dash
Specifies the style used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinestyle\fR, which itself defaults to
\fBsolid\fR lines\&.
The legal values are all those accepted by
\fITk_GetDash\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetDash\&.htm],
and additionally all which are listed below:
.RS
.TP
\fBsolid\fR, empty string
Draw solid line\&.
.TP
\fBdash\fR, \fBdashed\fR, \fB-\fR
Draw a dashed line\&.
.TP
\fBdot\fR, \fBdotted\fR, \fB\&.\fR
Draw a dotted line\&.
.TP
\fBdash-dot\fR, \fB-\&.\fR
Draw a dash-dotted line
.TP
\fBdash-dot-dot\fR, \fB-\&.\&.\fR
Draw a dash-dot-dotted line\&.
.RE
.IP
Note that the values "solid", "dot(ted)", "dash(ed)", "dash-dot", and
"dash-dot-dot" are all accepted as shorthands for the \fBstyle\fR
command using them as argument\&.
.TP
\fBtext\fR \fIstring\fR
Specifies the text to associate with the element\&.
Defaults to nothing\&.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element\&.
.TP
\fBtextcolor\fR \fIspec\fR
Specifies the color used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextcolor\fR, which itself defaults to
\fBblack\fR\&.
.TP
\fBtextfont\fR \fIspec\fR
Specifies the font used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextfont\fR, which itself defaults to
\fBHelvetica 12pt\fR\&.
.TP
\fBwidth\fR \fIlength\fR
.TP
\fBwid\fR \fIlength\fR
Specifies the width of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBboxwidth\fR, which itself defaults to the pixel
equivalent of \fB2 cm\fR\&.
.TP
\fBwith\fR \fIcorner\fR
Specifies the corner of the element to place at the location given by
the attribute \fBat\fR\&.
Defaults to the current corner as maintained by the layouting system,
except if the value for \fBat\fR was specified by the user\&. In that
case it defaults to \fBcenter\fR\&.
.RE
.TP
\fBline\fR \fIattr\fR\&.\&.\&.
.TP
\fB--\fR \fIattr\fR\&.\&.\&.
IMAGE: figure-02-line
An open element with the corresponding corners, i\&.e\&. "start", "end",
and "center"\&.
It handles the attributes
.RS
.TP
\fBanchor\fR \fIname\fR
.TP
\fBljust\fR
.TP
\fBrjust\fR
.TP
\fBabove\fR
.TP
\fBbelow\fR
IMAGE: figure-22-text-anchoring-3
Specifies the anchor of the text which is to be placed at the
element's center, by name\&. I\&.e\&. this attribute defines the text's
position relative to the element's center\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBanchor\fR, which itself defaults to
\fBcenter\fR\&.
The legal values are all those accepted by
\fITk_GetAnchor\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetAnchor\&.htm]\&.
The commands without arguments are all shorthands with the anchor
implied\&. Note that they do not combine, only the last is used\&. For
comined directions the main attribute command, \fBanchor\fR has to be
used\&.
.RS
.TP
\fBljust\fR
"anchor west"
.TP
\fBrjust\fR
"anchor east"
.TP
\fBabove\fR
"anchor south"
.TP
\fBbelow\fR
"anchor north"
.RE
.TP
\fBarrowhead\fR \fIspec\fR
IMAGE: figure-19-style-arrowheads
Specifies where to draw arrowheads on the \fBline\fR element, at the
beginning or end, at both ends, or none\&.
If not specified the system falls back to the value taken from the
language variable \fBarrowhead\fR, which itself defaults to
\fBnone\fR\&.
The legal values are
.RS
.TP
\fBnone\fR, \fB-\fR
Draw no arrowheads, at neither end of the line\&.
.TP
\fBstart\fR, \fBfirst\fR, \fB<-\fR
Draw an arrowhead at the beginning of the line, but not at its end\&.
.TP
\fBend\fR, \fBlast\fR, \fB->\fR
Draw an arrowhead at the end of the line, but not at its beginning\&.
.TP
\fBboth\fR, \fB<->\fR
Draw arrowheads at both ends of the line\&.
.RE
.IP
Note that the values "start", "end", "-", "->", "<-", and "<->" are
all accepted as shorthands for the \fBarrowhead\fR command using them
as argument\&.
.TP
\fBat\fR \fIlocation\fR
\fBLine\fR elements are normally positioned absolutely, using the
locations specified through the attributes \fBfrom\fR, \fBthen\fR, and
\fBto\fR\&.
If \fBat\fR is specified however then these positions are translated a
last time, moving the line's corner named by the attribute \fBwith\fR
to the location given by this attribute\&.
.TP
\fBchop\fR ?\fIlength\fR?
Specifies the length of the \fBline\fR element to remove from the
beginning and/or end\&.
Defaults to nothing\&.
If specified once the chopping applies to both beginning and end of
the line\&.
If specified twice or more the last two specifications are used, and
applied to beginning and end of the line, in this order\&.
Whenever the attribute is specified without an explicit length, the
system falls back to the value taken from the language variable
\fBcircleradius\fR, which itself defaults to the pixel equivalent of
\fB1 cm\fR
.TP
\fBcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinecolor\fR, which itself defaults to \fBblack\fR\&.
.TP
\fBfillcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the inside of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBfillcolor\fR, which itself defaults to the empty
string, signaling "no filling"\&.
.TP
\fBfrom\fR \fIlocation\fR
Specifies the location where the \fBline\fR element begins\&.
Defaults to the current location as maintained by the layouting
system\&.
.TP
\fBjustify\fR \fBleft\fR|\fBcenter\fR|\fBright\fR
Specifies how multi-line text associated with the element is
positioned within its box\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBjustify\fR, which itself defaults to
\fBleft\fR\&.
The legal values are \fBleft\fR, \fBright\fR, and \fBcenter\fR\&.
.TP
\fBnoturn\fR
Specifies that the direction of \fBline\fR element at its end is not
propagated to the layout management\&.
If not specified the direction of the line becomes the new direction
the layout\&.
.TP
\fBsmooth\fR
Specifies the use of bezier splines for the \fBline\fR element\&.
If not specified lines are drawn exactly through the specified
waypoints, without any smooth curves\&.
.TP
\fBstroke\fR \fIwidth\fR
IMAGE: figure-20-style-stroke
Specifies the width of the lines drawn for the the element, in pixels\&.
If not specified the system falls back to the value taken from the
language variable \fBlinewidth\fR, which itself defaults to \fB1\fR\&.
.TP
\fBstyle\fR \fIspec\fR
IMAGE: figure-18-style-dash
Specifies the style used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinestyle\fR, which itself defaults to
\fBsolid\fR lines\&.
The legal values are all those accepted by
\fITk_GetDash\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetDash\&.htm],
and additionally all which are listed below:
.RS
.TP
\fBsolid\fR, empty string
Draw solid line\&.
.TP
\fBdash\fR, \fBdashed\fR, \fB-\fR
Draw a dashed line\&.
.TP
\fBdot\fR, \fBdotted\fR, \fB\&.\fR
Draw a dotted line\&.
.TP
\fBdash-dot\fR, \fB-\&.\fR
Draw a dash-dotted line
.TP
\fBdash-dot-dot\fR, \fB-\&.\&.\fR
Draw a dash-dot-dotted line\&.
.RE
.IP
Note that the values "solid", "dot(ted)", "dash(ed)", "dash-dot", and
"dash-dot-dot" are all accepted as shorthands for the \fBstyle\fR
command using them as argument\&.
.TP
\fBtext\fR \fIstring\fR
Specifies the text to associate with the element\&.
Defaults to nothing\&.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element\&.
.TP
\fBtextcolor\fR \fIspec\fR
Specifies the color used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextcolor\fR, which itself defaults to
\fBblack\fR\&.
.TP
\fBtextfont\fR \fIspec\fR
Specifies the font used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextfont\fR, which itself defaults to
\fBHelvetica 12pt\fR\&.
.TP
\fBthen\fR \fIlocation\fR
.TP
\fBthen\fR (<direction> ?\fIlength\fR?)\&.\&.\&.
.TP
(<direction> ?\fIlength\fR?)\&.\&.\&.
This attribute specifies an intermediate location the \fBline\fR
element has to go through\&.
It can be specified multiple times, with each use adding one
additional location to the series which the line will go
through\&. These location will be traversed in the order they were
specified\&.
.sp
The location can be given explicitly, or as a series of directions
with distances\&. In the latter case the names of all known directions
are accepted for the direction part\&.
If no distance is specified for a direction the system falls back to
the value taken from the language variable \fBmovelength\fR, which
itself defaults to the pixel equivalent of \fB2 cm\fR\&.
The whole set of direction,distance pairs is treated as a series of
translations which are added up to provide the final translation
specifying the intermediate point (relative to the preceding point)\&.
.sp
The last named direction is propagated to the layout system as the
direction to follow\&. The use of \fBnoturn\fR is not able to overide
this behaviour\&.
.sp
At last, the names of the registered directions also serve as
attribute commands, with an implicit attribute \fBthen\fR in front of
them\&.
.sp
If no intermediate or last location is specified for the line the
system falls back to a point \fBmovelength\fR pixels away from the
starting location, in the current direction as maintained by the
layouting system
.TP
\fBto\fR \fIlocation\fR
Specifies the location where the \fBline\fR element ends\&.
This attribute has no default\&. The default is handled by the attribute
\fBthen\fR, which makes it appear as if \fBto\fR has a default when
not specified\&.
.TP
\fBwith\fR \fIcorner\fR
\fBLine\fR elements are normally positioned absolutely, using the
locations specified through the attributes \fBfrom\fR, \fBthen\fR, and
\fBto\fR\&.
If \fBat\fR is specified however then these positions are translated a
last time, moving the line's corner named by the attribute \fBwith\fR
to the location given by this attribute\&.
This means that \fIwith\fR is effective if and only if the attribute
\fBat\fR was specified as well for the line\&.
.RE
.TP
\fBmove\fR \fIattr\fR
An open element with the corresponding corners, i\&.e\&. "start", "end",
and "center"\&.
A \fBmove\fR element is in essence an invisible \fBline\fR\&.
While the main effect we are interested in is the change it makes to
the layout system, it is an actual element, i\&.e\&. it has the same
corners as an ordinary line, and shows up in the history as well,
allowing future references to all the places it touched\&.
It handles the same attibutes as \fBline\fR elements\&.
.TP
\fBspline\fR \fIattr\fR\&.\&.\&.
IMAGE: figure-02-spline
An alias for the \fBline\fR element (see above), with the attribute
\fBsmooth\fR preset\&.
.TP
\fBtext\fR \fIattr\fR\&.\&.\&.
IMAGE: figure-02-text
A closed element with the corresponding corners, i\&.e\&. the eight
directions of the compass rose, and "center"\&.
It handles the attributes
.RS
.TP
\fBanchor\fR \fIname\fR
.TP
\fBljust\fR
.TP
\fBrjust\fR
.TP
\fBabove\fR
.TP
\fBbelow\fR
IMAGE: figure-22-text-anchoring-3
Specifies the anchor of the text which is to be placed at the
element's center, by name\&. I\&.e\&. this attribute defines the text's
position relative to the element's center\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBanchor\fR, which itself defaults to
\fBcenter\fR\&.
The legal values are all those accepted by
\fITk_GetAnchor\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetAnchor\&.htm]\&.
The commands without arguments are all shorthands with the anchor
implied\&. Note that they do not combine, only the last is used\&. For
comined directions the main attribute command, \fBanchor\fR has to be
used\&.
.RS
.TP
\fBljust\fR
"anchor west"
.TP
\fBrjust\fR
"anchor east"
.TP
\fBabove\fR
"anchor south"
.TP
\fBbelow\fR
"anchor north"
.RE
.TP
\fBat\fR \fIlocation\fR
Specifies the location of the element's corner named by the attribute
\fBwith\fR\&.
Defaults to the current location as maintained by the layouting
system\&.
.TP
\fBheight\fR \fIlength\fR
Specifies the height of the \fBtext\fR element\&.
Defaults to the natural height of its text\&.
.TP
\fBjustify\fR \fBleft\fR|\fBcenter\fR|\fBright\fR
Specifies how multi-line text associated with the element is
positioned within its box\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBjustify\fR, which itself defaults to
\fBleft\fR\&.
The legal values are \fBleft\fR, \fBright\fR, and \fBcenter\fR\&.
.TP
\fBtext\fR \fIstring\fR
Specifies the text to associate with the element\&.
Defaults to nothing\&.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element\&.
.TP
\fBtextcolor\fR \fIspec\fR
Specifies the color used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextcolor\fR, which itself defaults to
\fBblack\fR\&.
.TP
\fBtextfont\fR \fIspec\fR
Specifies the font used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextfont\fR, which itself defaults to
\fBHelvetica 12pt\fR\&.
.TP
\fBwidth\fR \fIlength\fR
Specifies the width of the \fBtext\fR element\&.
Defaults to the natural width of its text\&.
.TP
\fBwith\fR \fIcorner\fR
Specifies the corner of the element to place at the location given by
the attribute \fBat\fR\&.
Defaults to the current corner as maintained by the layouting system,
except if the value for \fBat\fR was specified by the user\&. In that
case it defaults to \fBcenter\fR\&.
.RE
.PP
.SS ATTRIBUTES
The set of all attributes supported by all the element commands is
shown below\&.
While we speak of them as commands, and provide a syntax, they are not
truly available as actual commands, but only as part of the arguments
for an element command\&.
.PP
Note that some of the attribute names are overloaded, i\&.e\&. have
multiple, different, definitions\&. During processing of attributes for
an element the actual definition used is chosen based on the type of
the element the processing is for\&.
.PP
Further, as a catch-all clause, any attribute which could not be
processed according to the definitions below will be treated as the
argument of an implicit \fBtext\fR attribute\&.
.TP
\fBanchor\fR \fIname\fR
.TP
\fBljust\fR
.TP
\fBrjust\fR
.TP
\fBabove\fR
.TP
\fBbelow\fR
IMAGE: figure-22-text-anchoring-3
Specifies the anchor of the text which is to be placed at the
element's center, by name\&. I\&.e\&. this attribute defines the text's
position relative to the element's center\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBanchor\fR, which itself defaults to
\fBcenter\fR\&.
The legal values are all those accepted by
\fITk_GetAnchor\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetAnchor\&.htm]\&.
The commands without arguments are all shorthands with the anchor
implied\&. Note that they do not combine, only the last is used\&. For
comined directions the main attribute command, \fBanchor\fR has to be
used\&.
.RS
.TP
\fBljust\fR
"anchor west"
.TP
\fBrjust\fR
"anchor east"
.TP
\fBabove\fR
"anchor south"
.TP
\fBbelow\fR
"anchor north"
.RE
.TP
\fBarrowhead\fR \fIspec\fR
IMAGE: figure-19-style-arrowheads
Specifies where to draw arrowheads on the \fBline\fR element, at the
beginning or end, at both ends, or none\&.
If not specified the system falls back to the value taken from the
language variable \fBarrowhead\fR, which itself defaults to
\fBnone\fR\&.
The legal values are
.RS
.TP
\fBnone\fR, \fB-\fR
Draw no arrowheads, at neither end of the line\&.
.TP
\fBstart\fR, \fBfirst\fR, \fB<-\fR
Draw an arrowhead at the beginning of the line, but not at its end\&.
.TP
\fBend\fR, \fBlast\fR, \fB->\fR
Draw an arrowhead at the end of the line, but not at its beginning\&.
.TP
\fBboth\fR, \fB<->\fR
Draw arrowheads at both ends of the line\&.
.RE
.IP
Note that the values "start", "end", "-", "->", "<-", and "<->" are
all accepted as shorthands for the \fBarrowhead\fR command using them
as argument\&.
.TP
\fBaspect\fR \fInumber\fR
Specifies the aspect ratio, i\&.e ratio of width to height, of the
\fBdiamond\fR element\&.
The manner in which a default is calculated when not specified also
depends on the specifications of the attributes \fBwidth\fR and
\fBheight\fR, if any\&.
.sp
If both \fBwidth\fR, and \fBheight\fR are specified then any
specification of \fBaspect\fR is ignored, as it is implicitly defined
in the width and height as well, and this takes precedence\&. A missing
specification is ignored in that case well, i\&.e\&. no defaults are
required\&.
.sp
If the \fBaspect\fR is specified, and one of the attributes
\fBwidth\fR or \fBheight\fR, then the missing attribute is calculated
from the two which are specified\&. No defaults are required for these
cases either\&.
.sp
If only one of the attributes \fBwidth\fR or \fBheight\fR is specified
then the system uses a fallback for the \fBaspect\fR, the value taken
from the language variable \fBdiamondaspect\fR, which itselfs defaults
to \fB2\fR\&.
.sp
If none of of the attributes \fBwidth\fR or \fBheight\fR is specified
then the system uses a fallback for the \fBwidth\fR, the value taken
from the language variable \fBboxwidth\fR, which itselfs defaults to
the pixel equivalent of \fB2 cm\fR\&. For the aspect it uses either
the user-specified value or the default taken as described in the
previous paragraph\&.
.TP
\fBaspect\fR \fInumber\fR
Specifies the aspect ratio, i\&.e ratio of width to height, of the
ellipses which are used to draw the top and bottom of the \fBdrum\fR
element\&.
If not specified the system falls back to the value taken from the
language variable \fBdrumaspect\fR, which itself defaults to
\fB0\&.35\fR\&.
.TP
\fBat\fR \fIlocation\fR
Specifies the location of the element's corner named by the attribute
\fBwith\fR\&.
Defaults to the current location as maintained by the layouting
system\&.
.TP
\fBat\fR \fIlocation\fR
\fBLine\fR elements are normally positioned absolutely, using the
locations specified through the attributes \fBfrom\fR, \fBthen\fR, and
\fBto\fR\&.
If \fBat\fR is specified however then these positions are translated a
last time, moving the line's corner named by the attribute \fBwith\fR
to the location given by this attribute\&.
.TP
\fBchop\fR ?\fIlength\fR?
Specifies the length of the \fBline\fR element to remove from the
beginning and/or end\&.
Defaults to nothing\&.
If specified once the chopping applies to both beginning and end of
the line\&.
If specified twice or more the last two specifications are used, and
applied to beginning and end of the line, in this order\&.
Whenever the attribute is specified without an explicit length, the
system falls back to the value taken from the language variable
\fBcircleradius\fR, which itself defaults to the pixel equivalent of
\fB1 cm\fR
.TP
\fBclockwise\fR
.TP
\fBcw\fR
Specifies the direction of the \fBarc\fR element, here going
clockwise\&.
The complementary attribute is \fBcounterclockwise\fR\&.
If not specified the system falls back to the value taken from the
language variable \fBclockwise\fR, which itself defaults to
\fBfalse\fR, for counter-clockwise direction\&.
.TP
\fBcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinecolor\fR, which itself defaults to \fBblack\fR\&.
.TP
\fBcounterclockwise\fR
.TP
\fBccw\fR
Specifies the direction of the \fBarc\fR element, here
counter-clockwise\&.
The complementary attribute is \fBclockwise\fR\&.
If not specified the system falls back to the value taken from the
language variable \fBclockwise\fR, which itself defaults to
\fBfalse\fR, for counter-clockwise direction\&.
.TP
\fBdiameter\fR \fIlength\fR
.TP
\fBdiam\fR \fIlength\fR
Specifies the diameter of the \fBcircle\fR element, as an alternative
way to specify its \fBradius\fR\&.
Effective if and only if the radius was not specified\&. I\&.e\&. if both
diameter and radius are specified then the radius infomration has
precendence\&.
This attribute has no default, because the defaults are taken from the
radius\&.
.TP
\fBfillcolor\fR \fIspec\fR
IMAGE: figure-21-style-colors
Specifies the color used to draw the inside of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBfillcolor\fR, which itself defaults to the empty
string, signaling "no filling"\&.
.TP
\fBfrom\fR \fIlocation\fR
Specifies the location where the \fBline\fR element begins\&.
Defaults to the current location as maintained by the layouting
system\&.
.TP
\fBfrom\fR \fIlocation\fR
Specifies the location where the \fBarc\fR element begins\&.
Defaults to the current location as maintained by the layouting
system\&.
.TP
\fBheight\fR \fIlength\fR
.TP
\fBht\fR \fIlength\fR
Specifies the height of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBboxheight\fR, which itself defaults to the
pixel equivalent of \fB2 cm\fR\&.
.TP
\fBheight\fR \fIlength\fR
Specifies the height of the \fBdiamond\fR element\&.
The manner in which a default is calculated when not specified also
depends on the specifications of the attributes \fBaspect\fR and
\fBwidth\fR, if any\&.
.sp
If both \fBwidth\fR, and \fBheight\fR are specified then any
specification of \fBaspect\fR is ignored, as it is implicitly defined
in the width and height as well, and this takes precedence\&. A missing
specification is ignored in that case well, i\&.e\&. no defaults are
required\&.
.sp
If the \fBaspect\fR is specified, and one of the attributes
\fBwidth\fR or \fBheight\fR, then the missing attribute is calculated
from the two which are specified\&. No defaults are required for these
cases either\&.
.sp
If only one of the attributes \fBwidth\fR or \fBheight\fR is specified
then the system uses a fallback for the \fBaspect\fR, the value taken
from the language variable \fBdiamondaspect\fR, which itselfs defaults
to \fB2\fR\&.
.sp
If none of of the attributes \fBwidth\fR or \fBheight\fR is specified
then the system uses a fallback for the \fBwidth\fR, the value taken
from the language variable \fBboxwidth\fR, which itselfs defaults to
the pixel equivalent of \fB2 cm\fR\&. For the aspect it uses either
the user-specified value or the default taken as described in the
previous paragraph\&.
.TP
\fBheight\fR \fIlength\fR
Specifies the height of the \fBtext\fR element\&.
Defaults to the natural height of its text\&.
.TP
\fBjustify\fR \fBleft\fR|\fBcenter\fR|\fBright\fR
Specifies how multi-line text associated with the element is
positioned within its box\&.
The value is ignored if no text was specified for the element\&.
If not specified the system falls back to the value taken from the
language variable \fBjustify\fR, which itself defaults to
\fBleft\fR\&.
The legal values are \fBleft\fR, \fBright\fR, and \fBcenter\fR\&.
.TP
\fBnoturn\fR
Specifies that the direction of \fBline\fR element at its end is not
propagated to the layout management\&.
If not specified the direction of the line becomes the new direction
the layout\&.
.TP
\fBradius\fR \fIlength\fR
.TP
\fBrad\fR \fIlength\fR
Specifies the radius of the \fBcircle\fR element\&.
If not specified the system falls back to the value taken from the
language variable \fBcircleradius\fR, which itself defaults to the
pixel equivalent of \fB1 cm\fR\&.
.TP
\fBradius\fR \fIlength\fR
Specifies the radius of the \fBarc\fR element, or rather, the radius
of the circle the shown arc is a part of\&.
If not specified the system falls back to the value taken from the
language variable \fBarcradius\fR, which itself defaults to the pixel
equivalent of \fB1 cm\fR\&.
.TP
\fBslant\fR \fIangle\fR
Specifies the angle by which the \fBbox\fR element is slanted, in
degrees\&.
If not specified the system falls back to the value taken from the
language variable \fBslant\fR, which itself defaults to \fB90\fR,
i\&.e\&. vertical, no slant\&.
0 degrees is slanting straight east, pointing to the right\&.
90 degrees is slanting to the north, pointing straight up\&.
.TP
\fBsmooth\fR
Specifies the use of bezier splines for the \fBline\fR element\&.
If not specified lines are drawn exactly through the specified
waypoints, without any smooth curves\&.
.TP
\fBstroke\fR \fIwidth\fR
IMAGE: figure-20-style-stroke
Specifies the width of the lines drawn for the the element, in pixels\&.
If not specified the system falls back to the value taken from the
language variable \fBlinewidth\fR, which itself defaults to \fB1\fR\&.
.TP
\fBstyle\fR \fIspec\fR
IMAGE: figure-18-style-dash
Specifies the style used to draw the lines of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBlinestyle\fR, which itself defaults to
\fBsolid\fR lines\&.
The legal values are all those accepted by
\fITk_GetDash\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetDash\&.htm],
and additionally all which are listed below:
.RS
.TP
\fBsolid\fR, empty string
Draw solid line\&.
.TP
\fBdash\fR, \fBdashed\fR, \fB-\fR
Draw a dashed line\&.
.TP
\fBdot\fR, \fBdotted\fR, \fB\&.\fR
Draw a dotted line\&.
.TP
\fBdash-dot\fR, \fB-\&.\fR
Draw a dash-dotted line
.TP
\fBdash-dot-dot\fR, \fB-\&.\&.\fR
Draw a dash-dot-dotted line\&.
.RE
.IP
Note that the values "solid", "dot(ted)", "dash(ed)", "dash-dot", and
"dash-dot-dot" are all accepted as shorthands for the \fBstyle\fR
command using them as argument\&.
.TP
\fBtext\fR \fIstring\fR
Specifies the text to associate with the element\&.
Defaults to nothing\&.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element\&.
.TP
\fBtextcolor\fR \fIspec\fR
Specifies the color used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextcolor\fR, which itself defaults to
\fBblack\fR\&.
.TP
\fBtextfont\fR \fIspec\fR
Specifies the font used to draw the text of an element with\&.
Ignored if there is no text\&.
If not specified the system falls back to the value taken from the
language variable \fBtextfont\fR, which itself defaults to
\fBHelvetica 12pt\fR\&.
.TP
\fBthen\fR \fIlocation\fR
.TP
\fBthen\fR (<direction> ?\fIlength\fR?)\&.\&.\&.
.TP
(<direction> ?\fIlength\fR?)\&.\&.\&.
This attribute specifies an intermediate location the \fBline\fR
element has to go through\&.
It can be specified multiple times, with each use adding one
additional location to the series which the line will go
through\&. These location will be traversed in the order they were
specified\&.
.sp
The location can be given explicitly, or as a series of directions
with distances\&. In the latter case the names of all known directions
are accepted for the direction part\&.
If no distance is specified for a direction the system falls back to
the value taken from the language variable \fBmovelength\fR, which
itself defaults to the pixel equivalent of \fB2 cm\fR\&.
The whole set of direction,distance pairs is treated as a series of
translations which are added up to provide the final translation
specifying the intermediate point (relative to the preceding point)\&.
.sp
The last named direction is propagated to the layout system as the
direction to follow\&. The use of \fBnoturn\fR is not able to overide
this behaviour\&.
.sp
At last, the names of the registered directions also serve as
attribute commands, with an implicit attribute \fBthen\fR in front of
them\&.
.sp
If no intermediate or last location is specified for the line the
system falls back to a point \fBmovelength\fR pixels away from the
starting location, in the current direction as maintained by the
layouting system
.TP
\fBto\fR \fIlocation\fR
Specifies the location where the \fBline\fR element ends\&.
This attribute has no default\&. The default is handled by the attribute
\fBthen\fR, which makes it appear as if \fBto\fR has a default when
not specified\&.
.TP
\fBto\fR \fIlocation\fR
Specifies the location where the \fBarc\fR element ends\&.
Defaults to a location such that a 90-degree arc is drawn in the
chosen direction, starting at \fBfrom\fR\&.
.TP
\fBwidth\fR \fIlength\fR
.TP
\fBwid\fR \fIlength\fR
Specifies the width of the element\&.
If not specified the system falls back to the value taken from the
language variable \fBboxwidth\fR, which itself defaults to the pixel
equivalent of \fB2 cm\fR\&.
.TP
\fBwidth\fR \fIlength\fR
Specifies the width of the \fBdiamond\fR element\&.
The manner in which a default is calculated when not specified also
depends on the specifications of the attributes \fBaspect\fR and
\fBheight\fR, if any\&.
.sp
If both \fBwidth\fR, and \fBheight\fR are specified then any
specification of \fBaspect\fR is ignored, as it is implicitly defined
in the width and height as well, and this takes precedence\&. A missing
specification is ignored in that case well, i\&.e\&. no defaults are
required\&.
.sp
If the \fBaspect\fR is specified, and one of the attributes
\fBwidth\fR or \fBheight\fR, then the missing attribute is calculated
from the two which are specified\&. No defaults are required for these
cases either\&.
.sp
If only one of the attributes \fBwidth\fR or \fBheight\fR is specified
then the system uses a fallback for the \fBaspect\fR, the value taken
from the language variable \fBdiamondaspect\fR, which itselfs defaults
to \fB2\fR\&.
.sp
If none of of the attributes \fBwidth\fR or \fBheight\fR is specified
then the system uses a fallback for the \fBwidth\fR, the value taken
from the language variable \fBboxwidth\fR, which itselfs defaults to
the pixel equivalent of \fB2 cm\fR\&. For the aspect it uses either
the user-specified value or the default taken as described in the
previous paragraph\&.
.TP
\fBwidth\fR \fIlength\fR
Specifies the width of the \fBtext\fR element\&.
Defaults to the natural width of its text\&.
.TP
\fBwith\fR \fIcorner\fR
Specifies the corner of the element to place at the location given by
the attribute \fBat\fR\&.
Defaults to the current corner as maintained by the layouting system,
except if the value for \fBat\fR was specified by the user\&. In that
case it defaults to \fBcenter\fR\&.
.TP
\fBwith\fR \fIcorner\fR
\fBLine\fR elements are normally positioned absolutely, using the
locations specified through the attributes \fBfrom\fR, \fBthen\fR, and
\fBto\fR\&.
If \fBat\fR is specified however then these positions are translated a
last time, moving the line's corner named by the attribute \fBwith\fR
to the location given by this attribute\&.
This means that \fIwith\fR is effective if and only if the attribute
\fBat\fR was specified as well for the line\&.
.PP
.SS CORNERS
Corners are named values for in elements, usually locations\&.
.IP \(bu
The \fIclosed\fR elements define corners for the compass rose,
including the "center", and their "width" and "height"\&.
.sp
IMAGE: figure-27-corners-closed
.sp
.IP \(bu
\fBblock\fR elements additionally export all variables which were set
during their definition as corners\&.
.IP \(bu
The \fIopen\fR elements on the other hand define "start", "end", and
"center"\&. The first two map to the locations originally provided
through the attributes \fBfrom\fR and \fBto\fR of the element\&.
.sp
IMAGE: figure-28-corners-open
.sp
.IP \(bu
The center of \fBline\fR and \fBmove\fR elements is the location
halfway between "start" and "end" corners, this is regardless of any
intermediate locations the element may have\&.
.IP \(bu
The \fBline\fR and \fBmove\fR elements additionally name all their
locations as corners using numbers as names, starting from \fB1\fR
(equivalent to "start"), in order of traversal\&.
.sp
IMAGE: figure-15-spline-1
.sp
.IP \(bu
The center of \fBarc\fR elements is the center of the circle the arc
is part off\&.
.IP \(bu
The \fBarc\fR elements additionally define the compass rose of
closed elements as well\&.
.PP
.SS "NAMED DIRECTIONS"
The named directions are commands which tell the layout system in
which direction to go when placing the next element without an
explicit position specification\&.
They can also be used as arguments to the attribute \fBthen\fR, and
the command \fBby\fR for relative points, see there for the relevant
syntax\&.
.PP
The diagram core defines the directions of the compass rose, plus a
number of aliases\&. See below for the full list\&.
.PP
IMAGE: figure-27-corners-closed
.PP
This overlaps with the pre-defined corners for closed elements\&. This
is used by the layout system, when are going in direction X the name
of the opposite direction is the name of the corner at which the new
element will be attached to the current position, and if this corner
does not exist the nearest actual corner by angle is used\&.
.PP
.TP
\fBwest\fR
.TP
\fBw\fR
.TP
\fBleft\fR
.TP
\fBl\fR
.TP
\fBsouth\fR
.TP
\fBs\fR
.TP
\fBdown\fR
.TP
\fBbottom\fR
.TP
\fBbot\fR
.TP
\fBb\fR
.TP
\fBeast\fR
.TP
\fBe\fR
.TP
\fBright\fR
.TP
\fBr\fR
.TP
\fBnorth\fR
.TP
\fBn\fR
.TP
\fBup\fR
.TP
\fBtop\fR
.TP
\fBt\fR
.TP
\fBnorthwest\fR
.TP
\fBnw\fR
.TP
\fBup-left\fR
.TP
\fBupleft\fR
.TP
\fBleftup\fR
.TP
\fBnortheast\fR
.TP
\fBne\fR
.TP
\fBup-right\fR
.TP
\fBupright\fR
.TP
\fBrightup\fR
.TP
\fBsouthwest\fR
.TP
\fBsw\fR
.TP
\fBdown-left\fR
.TP
\fBdownleft\fR
.TP
\fBleftdown\fR
.TP
\fBsoutheast\fR
.TP
\fBse\fR
.TP
\fBdown-right\fR
.TP
\fBdownright\fR
.TP
\fBrightdown\fR
.PP
.SS "MISCELLANEOUS COMMANDS"
.TP
\fInumber\fR \fBcm\fR
.TP
\fInumber\fR \fBmm\fR
.TP
\fInumber\fR \fBinch\fR
.TP
\fInumber\fR \fBpt\fR
These commands allow the specification of distances and coordinates in
metric and imperial units, returning the equivalent distance or
coordinate in pixels, which is the unit used internally for all
calculations\&.
.sp
The conversion factors are based on the result of \fBtk scaling\fR
and are computed once, at the time the package is sourced, future
changes of the \fBtk scaling\fR factor have no effect\&.
.TP
\fInumber\fR \fInumber\fR
.sp
IMAGE: figure-50-point-cons-absolute
.sp
This command takes the x and y coordinates of a location and returns
the \fIabsolute\fR point for it\&.
.TP
\fBby\fR \fIdistance\fR \fIdirection\fR
.sp
IMAGE: figure-51-point-cons-relative
.sp
This command takes a \fIdistance\fR and \fIdirection\fR (angle in
degress, or registered direction name) and returns the \fIrelative\fR
point for it, i\&.e\&. the \fIdelta\fR or \fItranslation\fR it
represents\&.
.sp
Note also the (dis)similarities to the directional specifications for
the attribute \fBthen\fR of \fBline\fR and \fBmove\fR elements\&.
Where we say here
.CS

by 50 east
.CE
.IP
for the attribute we say
.CS

\&.\&.\&. then east 50 \&.\&.\&.
.CE
.IP
or just
.CS

\&.\&.\&. then east \&.\&.\&.
.CE
.TP
\fIpoint1\fR \fB+\fR \fIpoint2\fR
.sp
IMAGE: figure-48-point-vectoradd
.sp
This command interprets two points as vectors and adds them together\&.
If at least one of the points is \fIabsolute\fR the result is
absolute as well\&.
The result is a \fIrelative\fR point if and only if both points are
\fIrelative\fR\&.
.TP
\fIpoint1\fR \fB-\fR \fIpoint2\fR
.sp
IMAGE: figure-49-point-vectorsub
.sp
This command interprets two points as vectors and subtracts the second
from the first\&.
If at least one of the points is \fIabsolute\fR the result is
absolute as well\&.
The result is a \fIrelative\fR point if and only if both points are
\fIrelative\fR\&.
.TP
\fIpoint\fR \fBby\fR \fIdistance\fR \fIdirection\fR
This command is a more convenient, or at least shorter, form of
.CS


    [$point + [by $distance $direction]]

.CE
.TP
\fIpoint1\fR \fB|\fR \fIpoint2\fR
.sp
IMAGE: figure-31-point-projection
.sp
This command calculates the \fIprojection\fR of two points, i\&.e\&. the
result is the point having the x-coordinate of \fIpoint1\fR and the
y-coordinate of \fIpoint2\fR\&.
.TP
\fIn\fR \fBbetween\fR \fIpoin1\fR \fIpoint2\fR
.sp
IMAGE: figure-29-point-interpolation-1
.sp
This command computes the point which is \fIn\fR*100 percent of the
way between \fIpoint1\fR and \fIpoint2\fR, and returns it as its
result\&.
This means that for
.RS
.TP
\fIn\fR == 0
The result is \fIpoint1\fR\&.
.TP
\fIn\fR == 1
The result is \fIpoint2\fR\&.
.TP
\fIn\fR == 0\&.5
The result is half way between the two points\&.
.RE
.IP
etc\&.
\fINote\fR that it is allowed to use values < 0 and > 1 for \fIn\fR
.TP
\fBintersect\fR \fIelem1\fR \fIelem2\fR
.sp
IMAGE: figure-32-point-intersection
.sp
This command takes two \fIopen\fR elements, computes the lines going
through their "start"- and "end"-corners, and returns the point where
these two lines intersect\&.
The command throws an error if the lines do not intersect, or are
coincident\&.
.TP
\fIelement\fR \fBnames\fR ?\fIpattern\fR?
This command returns a list containing the names of all corners for
the \fIelement\fR\&. If a pattern is specified then only the names
matching it (via \fBstring match\fR are returned\&. Otherwise all
names are returned (equivalent to a default pattern of \fB*\fR)\&.
.TP
\fIelement\fR \fIcorner\fR
This command returns the value for the \fIcorner\fR of the
\fIelement\fR\&.
This can be anything, including points and elements\&.
.TP
\fIelement\fR \fIcorner1\fR \fIcorner2\fR\&.\&.\&.
This is a convenience shorthand for
.CS


[[[$elem $corner1] $corner2] \&.\&.\&.]

.CE
.IP
assuming that the value for
.CS

 [$elem $corner1]
.CE
.IP, etc\&. is
again an element\&.
.TP
\fIelement\fR ?\fIcorner1\fR\&.\&.\&. ?\fBnames\fR ?\fIpattern\fR??]?
This is a convenience shorthand for
.CS


[[[$elem $corner1] \&.\&.\&.] names ?pattern?]

.CE
.IP
assuming that the value for
.CS

 [$elem $corner1]
.CE
.IP, etc\&. is
again an element\&.
.TP
\fB\fBn\fRth\fR ?\fIcorner\fR?
This command asks the diagram history for the \fBn\fRth element
created, searching from the beginning of the history (counting from 1)
and returns it as its result\&.
If the \fIcorner\fR is specified then the value for this corner is
returned instead\&.
.TP
\fB\fBn\fRth\fR \fBlast\fR ?\fIcorner\fR?
This command asks the diagram history for the \fBn\fRth element
created, searching from the end of the history and returns it as its
result\&.
If the \fIcorner\fR is specified then the value for this corner is
returned instead\&.
.TP
\fB\fBn\fRth\fR \fIshape\fR ?\fIcorner\fR?
This command asks the diagram history for the \fBn\fRth element
created, of the given \fIshape\fR, searching from the beginning of the
history (counting from 1) and returns it as its result\&.
If the \fIcorner\fR is specified then the value for this corner is
returned instead\&.
.TP
\fB\fBn\fRth\fR \fBlast\fR \fIshape\fR ?\fIcorner\fR?
This command asks the diagram history for the \fBn\fRth element
created, of the given \fIshape\fR, searching from the end of the
history and returns it as its result\&.
If the \fIcorner\fR is specified then the value for this corner is
returned instead\&.
.TP
\fBlast\fR ?\fIcorner\fR?
.TP
\fBlast\fR \fIshape\fR ?\fIcorner\fR?
Convenience commands mapping to "\fB1st last\fR"
and "\fB1st last\fR \fIshape\fR"\&.
.TP
\fB1st\fR
.TP
\fB2nd\fR
.TP
\fB3rd\fR
Aliases for \fB1th\fR, \fB2th\fR, and \fB3th\fR, for readability,
usable whereever \fB\fBn\fRth\fR can ocur\&.
.PP
.SS VARIABLES
The language context contains a number of predefined variables which
hold the default values for various attributes\&. These variables, their
uses, and values are:
.TP
\fBanchor\fR
The default value for the attribute \fBanchor\fR\&.
Initialized to \fBcenter\fR\&.
The legal values are all those accepted by
\fITk_GetAnchor\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetAnchor\&.htm]\&.
.TP
\fBarcradius\fR
The default value for the attribute \fBradius\fR of \fBarc\fR
elements\&.
Initialized to the pixel equivalent of \fB1 cm\fR\&.
.TP
\fBarrowhead\fR
The default value for the attribute \fBarrowhead\fR\&.
Initialized to \fBnone\fR\&.
The legal values are
.RS
.TP
\fBnone\fR, \fB-\fR
Draw no arrowheads, at neither end of the line\&.
.TP
\fBstart\fR, \fBfirst\fR, \fB<-\fR
Draw an arrowhead at the beginning of the line, but not at its end\&.
.TP
\fBend\fR, \fBlast\fR, \fB->\fR
Draw an arrowhead at the end of the line, but not at its beginning\&.
.TP
\fBboth\fR, \fB<->\fR
Draw arrowheads at both ends of the line\&.
.RE
.TP
\fBboxheight\fR
The default value for the attribute \fBheight\fR of \fBbox\fR,
\fBdiamond\fR and \fBellipse\fR elements\&.
Initialized to the pixel equivalent of \fB2 cm\fR\&.
.TP
\fBboxwidth\fR
The default value for the attribute \fBwidth\fR of \fBbox\fR,
\fBdiamond\fR and \fBellipse\fR elements\&.
Initialized to the pixel equivalent of \fB2 cm\fR\&.
.TP
\fBclockwise\fR
The default value for the attributes \fBclockwise\fR and
\fBcounterclockwise\fR of \fBarc\fR elements\&.
Initialized to \fBFalse\fR, for counter-clockwise direction\&.
.TP
\fBcircleradius\fR
The default value for the attribute \fBradius\fR of \fBcircle\fR
elements, and also the default for the attribute \fBchop\fR, when
specified without an explicit length\&.
Initialized to the pixel equivalent of \fB1 cm\fR\&.
.TP
\fBdrumaspect\fR
The default value for the attribute \fBaspect\fR of \fBdrum\fR
elements\&.
Initialized to \fB0\&.35\fR\&.
.TP
\fBfillcolor\fR
The default value for the attribute \fBfillcolor\fR of all elements
which can be filled\&.
Initialized to the empty string, signaling that the element is not
filled\&.
.TP
\fBjustify\fR
The default value for the attribute \fBjustify\fR\&.
Initialized to \fBleft\fR\&.
The legal values are \fBleft\fR, \fBright\fR, and \fBcenter\fR\&.
.TP
\fBlinecolor\fR
The default value for the attribute \fBcolor\fR of all elements having
to draw lines (all but \fBtext\fR)\&.
Initialized to \fBblack\fR\&.
.TP
\fBlinestyle\fR
The default value for the attribute \fBstyle\fR of all elements
having to draw some line\&.
Initialized to \fBsolid\fR\&.
The legal values are all those accepted by
\fITk_GetDash\fR [http://www\&.tcl\&.tk/man/tcl8\&.5/TkLib/GetDash\&.htm],
and additionally all which are listed below:
.RS
.TP
\fBsolid\fR, empty string
Draw solid line\&.
.TP
\fBdash\fR, \fBdashed\fR, \fB-\fR
Draw a dashed line\&.
.TP
\fBdot\fR, \fBdotted\fR, \fB\&.\fR
Draw a dotted line\&.
.TP
\fBdash-dot\fR, \fB-\&.\fR
Draw a dash-dotted line
.TP
\fBdash-dot-dot\fR, \fB-\&.\&.\fR
Draw a dash-dot-dotted line\&.
.RE
.TP
\fBlinewidth\fR
The default value for the attribute \fBstroke\fR of all elements
having to draw some line\&.
Initialized to \fB1\fR (pixels)\&.
.TP
\fBmovelength\fR
The default value for the directional specification of intermediate
locations by the attribute \fBthen\fR of \fBline\fR and \fBmove\fR
elements\&.
Initialized to the pixel equivalent of \fB2 cm\fR\&.
.TP
\fBslant\fR
The default value for the attribute \fBslant\fR of \fBbox\fR elements\&.
Initialized to 90 degrees, i\&.e\&. slant straight up\&.
.TP
\fBtextcolor\fR
The default value for the attribute \fBtextcolor\fR of all elements
having to draw some text\&.
Initialized to \fBblack\fR\&.
.TP
\fBtextfont\fR
The default value for the attribute \fBtextfont\fR of all elements
having to draw some text\&.
Initialized to \fBHelvetica 12pt\fR\&.
.PP
.SH "DIAGRAM CLASSES"     The intended audience of this section are developers wishing to work
on the internals of the diagram package\&.
Regular users of \fBdiagram\fR can skip this section without
missing anything\&.
.PP
The main information seen here is the figure below, showing the
hierarchy of the classes implementing diagram\&.
.PP
IMAGE: figure-00-dependencies
.PP
At the bottom, all at the same level are the supporting packages like
\fBsnit\fR, etc\&. These can all be found in Tcllib\&.
.PP
Above them is the set of diagram classes implementing the various
aspects of the system, i\&.e\&.:
.TP
\fBdiagram\fR
The main class, that which is seen by the user\&.
.TP
\fBdiagram::core\fR
The core engine, itself distributed over four helper classes\&.
.TP
\fBdiagram::basic\fR
The implementation of the standard shapes, like box, circle, etc\&.,
based on the extension features of the core\&.
.TP
\fBdiagram::element\fR
Core support class, the database of created elements\&. It also keeps
the history, i\&.e\&. the order in which elements were created\&.
.TP
\fBdiagram::attribute\fR
Core support class, the generic handling of definition and processing
of attributes\&.
.TP
\fBdiagram::direction\fR
Core support class, the database of named directions\&.
.TP
\fBdiagram::navigation\fR
Core support class, the state of layout engine, i\&.e\&. current position
and directin, and operations on it\&.
.TP
\fBdiagram::point\fR
General support class handling various vector operations\&.
.PP
.SH REFERENCES
.SH KEYWORDS
2D geometry, arc, arrow, box, canvas, circle, diagram, diamond, drawing, drum, ellipse, image, interpolation, intersection, line, move, picture, plane geometry, plotting, point, raster image, spline, text, vector
.SH CATEGORY
Documentation tools

Added embedded/man/files/modules/getstring/tk_getString.n.



























































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/getstring/tk_getString\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "getstring" n 0\&.1 tklib "A dialog which prompts for a string input"
.BS
.SH NAME
getstring \- A string dialog
.SH SYNOPSIS
package require \fBTcl  8\&.4\fR
.sp
package require \fBgetstring  ?0\&.1?\fR
.sp
\fB::getstring::tk_getString\fR \fIpathName\fR \fIvariable\fR \fItext\fR ?options?
.sp
.BE
.SH DESCRIPTION
This package provides a dialog which consists of an Entry, OK, and
Cancel buttons\&.
.PP
.TP
\fB::getstring::tk_getString\fR \fIpathName\fR \fIvariable\fR \fItext\fR ?options?
Creates a dialog which prompts the user with \fItext\fR to input a text string\&.
The contents of the entry are put in the \fIvariable\fR upon closure of the
dialog\&. The command returns a boolean indicating if the user pressed OK or
not\&. If -geometry is not specified, the dialog is centered in its parent
toplevel unless its parent is \&. in which case the dialog is centered in the
screen\&.
Options:
-title
-allowempty a boolean argument indicating if the dialog should accept an empty entry
-entryoptions simply passes its arguments through to the entry widget\&. This is valuble for performing extra validation
using the Entry widget validation hooks\&.
-geometry specifies the geometry of the window
.PP
.SH EXAMPLE
.CS


package require getstring
namespace import getstring::*

if {[tk_getString \&.gs text "Feed me a string please:"]} {
    puts "user entered: $text"
}


.CE
.SH KEYWORDS
dialog, entry, string

Added embedded/man/files/modules/history/tklib_history.n.































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/history/tklib_history\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "history" n 0\&.1 tklib "Provides a history for Entry widgets"
.BS
.SH NAME
history \- Provides a history for Entry widgets
.SH SYNOPSIS
package require \fBTcl  8\&.4\fR
.sp
package require \fBTk  8\&.4\fR
.sp
package require \fBhistory  ?0\&.1?\fR
.sp
\fB::history::init\fR \fIpathName\fR ?length?
.sp
\fB::history::remove\fR \fIpathName\fR
.sp
\fB::history::add\fR \fIpathName\fR \fItext\fR
.sp
\fB::history::get\fR \fIpathName\fR
.sp
\fB::history::clear\fR \fIpathName\fR
.sp
\fB::history::configure\fR \fIpathName\fR \fIoption\fR ?value?
.sp
bell
.sp
.BE
.SH DESCRIPTION
This package provides a convenient history mechanism for Entry widgets\&.
The history may be accessed with the up and down arrow keys\&.
.PP
.TP
\fB::history::init\fR \fIpathName\fR ?length?
Arranges to remember the history of the named Entry widget\&. An optional length
determines the number of history entries to keep\&. This may be changed later
with \fB::history::configure\fR\&. History entries must be added with the
\fB::history::add\fR command before they can be seen\&.
.TP
\fB::history::remove\fR \fIpathName\fR
Forgets all history entries for the Entry \fIpathName\fR and removes the history
bindings\&.
.TP
\fB::history::add\fR \fIpathName\fR \fItext\fR
This command is used to add history entries to an Entry that has previously had
\fB::history::init\fR called on it\&. This command should be called from your Entry
handler with the contents of the entry (or whatever you wish to add to the history)\&.
.TP
\fB::history::get\fR \fIpathName\fR
This command returns a list containing the history entries for the Entry \fIpathName\fR
.TP
\fB::history::clear\fR \fIpathName\fR
This command clears the history list for the named Entry\&.
.TP
\fB::history::configure\fR \fIpathName\fR \fIoption\fR ?value?
This command queries or sets configuration options\&. Currently the options recognized
are \fIlength\fR and \fIalert\fR\&. Setting the length determines the number of history entries to keep for
the named Entry\&. Alert specifies the command to run when the user reaches the end of the history, it defaults to
.TP
bell
\&. Although configure requires a \fIpathName\fR argument, the setting for alert is global and the path is ignored\&.
.PP
.CS


entry \&.e
bind \&.e <Return> [list ProcessEntry %W]
::history::init \&.e
pack \&.e

proc ProcessEntry {w} {
    set text [$w get]
    if {$text == ""} { return }
    ::history::add $w $text
    puts $text
    $w delete 0 end
}


.CE
.SH KEYWORDS
entry, history

Added embedded/man/files/modules/ico/ico.n.

























































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/ico/ico\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "ico" n 1\&.0\&.5 tklib "Windows ICO handling"
.BS
.SH NAME
ico \- Reading and writing windows icons
.SH SYNOPSIS
package require \fBTcl  8\&.4\fR
.sp
package require \fBico  ?1\&.0\&.5?\fR
.sp
\fB::ico::icons\fR \fIfile\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
.sp
\fB::ico::iconMembers\fR \fIfile\fR \fIname\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
.sp
\fB::ico::getIcon\fR \fIfile\fR \fIname\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
.sp
\fB::ico::getIconByName\fR \fIfile\fR \fIname\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
.sp
\fB::ico::getFileIcon\fR \fIfile\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
.sp
\fB::ico::writeIcon\fR \fIfile\fR \fIname\fR \fIdepth\fR \fIdata\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
.sp
\fB::ico::copyIcon\fR \fIfile\fR \fIindex\fR \fIfile2\fR \fIindex2\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
.sp
\fB::ico::EXEtoICO\fR \fIfile\fR ?dir?
.sp
\fB::ico::clearCache\fR ?file?
.sp
\fB::ico::transparentColor\fR \fIimage\fR \fIcolor\fR
.sp
\fB::ico::Show\fR \fIfile\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
.sp
.BE
.SH DESCRIPTION
This package provides functions for reading and writing Windows icons
from ICO, EXE, DLL, ICL, and BMP files\&.
As used in this module an icon is a visual representation of an object\&.
An icon consists of one or more images usually with varying resolution
and color depth\&. Each icon and image has a resource identifier which
may be a text string or a positive integer value\&. Most commands use this
identifier to specify which icon or image to operate on\&.
.SH API
.TP
\fB::ico::icons\fR \fIfile\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
Returns a list of icons found in \fIfile\fR where each element is the
name or numeric ID\&. Recognizes the following options:
.RS
.TP
\fB-type\fR fileFormat
.RE
.sp
.TP
\fB::ico::iconMembers\fR \fIfile\fR \fIname\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
Returns a list of images that make up the icon with ID \fIname\fR\&. Each element is itself a
sublist in the format {name width height bpp}\&. Recognizes the following options:
.RS
.TP
\fB-type\fR fileFormat
.RE
.sp
.TP
\fB::ico::getIcon\fR \fIfile\fR \fIname\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
Extracts the icon with ID \fIname\fR from \fIfile\fR\&.
The default \fB-format\fR is \fBimage\fR which will return the
name of a Tk image containing the icon\&. The resolution and color depth
are selected with the ?-res?, ?-bpp?, and ?-exact? options\&.
If -exact is specified and there is no exact match, an error is thrown\&.
Optionally \fB-image\fR may be used to specify the name of the Tk
image that is created\&. If \fB-format\fR is \fBcolors\fR then a
list of color names in the #RRGGBB format is returned\&. Each list element
is a horizontal row\&. Each horizontal row contains a list of colors for
all the pixels in that row from left to right\&. If \fB-format\fR is
\fBname\fR then the resource name of the image chosen is returned\&.
This is useful for calling writeIcon or getIconByName\&.
Recognizes the following \fIoption\fRs\&.
.RS
.TP
\fB-type\fR fileFormat
.TP
\fB-format\fR value
.TP
\fB-image\fR value
.TP
\fB-res\fR value
.TP
\fB-bpp\fR value
.TP
\fB-exact\fR value
.RE
.sp
.TP
\fB::ico::getIconByName\fR \fIfile\fR \fIname\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
Extracts the image with ID \fIname\fR from \fIfile\fR\&. This name should be the name of a
specific image as returned by \fB::ico::iconMembers\fR, not an icon name returned from
\fB::ico::icons\fR\&. If there is no matching resource ID
in \fIfile\fR an error is thrown\&. Recognizes the following options:
.RS
.TP
\fB-type\fR fileFormat
.TP
\fB-format\fR value
.RE
.sp
.TP
\fB::ico::getFileIcon\fR \fIfile\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
This command is only functional when running under Windows\&. It reads the Windows
registry to determine the display icon for \fIfile\fR as it would appear in Explorer
or similar\&. \fIfile\fR does not need to exist and may also be specified as a file
extension with a leading dot\&. If \fIfile\fR is a directory or you specify the
special name \fBFolder\fR then the icon representing a folder is returned\&. This
command takes the same arguments and usage as \fBgetIcon\fR:
.RS
.TP
\fB-format\fR value
.TP
\fB-image\fR value
.TP
\fB-res\fR value
.TP
\fB-bpp\fR value
.TP
\fB-exact\fR value
.RE
.sp
.TP
\fB::ico::writeIcon\fR \fIfile\fR \fIname\fR \fIdepth\fR \fIdata\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
Writes an image to \fIfile\fR\&. \fIname\fR is the resource identifier of the
image in \fIfile\fR to write\&.
When writing to an EXE, DLL, or ICL file you may only overwrite existing icons with an
icon of the same dimensions and color depth\&. No icons may be added to these file types\&.
.sp
When writing to BMP the name is ignored as this type can contain only one image\&. This means
if the file already existed it is completely overwritten\&.
.sp
When writing to an ICO or ICODATA file if the name
specified does not exist then an image is appended and will be named the next in sequence
(the specified name is ignored)\&. Images in ICO and ICODATA files may be overwritten with differing
dimensions or color depths\&.
Note that you will get strange results when displaying icons if you fail to change every image
which makes up a given icon\&.
.RS
.TP
integer \fIdepth\fR (in)
This argument must have a value of \fB1\fR, \fB4\fR, \fB8\fR,
\fB24\fR, or \fB32\fR\&. If \fIdata\fR has more colors than the
color depth allows an error will be generated\&.
.TP
options \fIdata\fR (in)
This argument is either a list of colors in the format returned by
\fB::ico::getIcon -format colors\fR or the name of a Tk image\&.
.RE
.sp
Recognizes the following \fIoption\fRs\&.
.RS
.TP
\fB-type\fR fileFormat
.RE
.sp
.TP
\fB::ico::copyIcon\fR \fIfile\fR \fIindex\fR \fIfile2\fR \fIindex2\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
Copies the icon at \fIindex\fR in \fIfile\fR to \fIindex2\fR in \fIfile2\fR\&.
.RS
.TP
\fB-fromtype\fR fileFormat
.TP
\fB-totype\fR fileFormat
.RE
.sp
.TP
\fB::ico::EXEtoICO\fR \fIfile\fR ?dir?
Extracts all icons from the executable \fIfile\fR to ICO files placed in \fIdir\fR\&. ?dir? defaults to the directory \fIfile\fR is located in\&. Icon files will be named in the form \fIfile\fR-ID\&.ico where ID is the icon resource identifier\&.
.RS
.TP
\fB-type\fR fileFormat
.RE
.sp
.TP
\fB::ico::clearCache\fR ?file?
The \fB::ico::getIconList\fR command caches icon offsets inside EXE, DLL, ICL,
and ICO files in order to speed up extraction\&.  This command clears that
cache for the specific ?file? or all files\&.
.TP
\fB::ico::transparentColor\fR \fIimage\fR \fIcolor\fR
If \fIimage\fR is a single word it is assumed to be the name of a Tk image\&.
All pixels matching \fIcolor\fR in the \fIimage\fR will be set transparent\&.
Alternatively, \fIimage\fR may be a color list in which case a modified list
is returned\&.
.TP
\fB::ico::Show\fR \fIfile\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
Application level command which displays a window showing all the
icons in \fIfile\fR and their name\&.
.RS
.TP
\fB-type\fR fileFormat
.TP
\fB-parent\fR pathName
.RE
.PP
.SH EXAMPLE
.CS


    button \&.explore -image [::ico::getIcon explorer\&.exe 0 -name explore -res 16 -bpp 8]

    set i [lsearch -inline [::ico::iconMembers tclkit\&.exe 0] {* 32 32 8}]
    set colorlist [::ico::getIconByName tclkit\&.exe [lindex $i 0] -format colors]

.CE
.SH LIMITATIONS
Icons may not be added or removed from file types other than ICO\&. Icons in these files
may only be replaced with icons of the same dimensions and color depth\&.
.PP
Icons of 8bpp or lower must include black in the pallete, this means if your icon does
not have black in it, you will need to leave a color free so that it may be included by
writeIcon\&.
.PP
There is currently no way to read alpha channel information from 32bpp icons\&.
.PP
Tk images do not have an alpha channel so the only way to write a true 32bpp icon is from
a color list\&. writing a 32bpp icon from a Tkimage is identical to writing a 24bpp icon\&.
.SH KEYWORDS
dll, entry, exe, ico, icon

Added embedded/man/files/modules/ipentry/ipentry.n.









































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/ipentry/ipentry\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "ipentry" n 0\&.3 tklib "An IP address entry widget"
.BS
.SH NAME
ipentry \- An IP address entry widget
.SH SYNOPSIS
package require \fBTcl  8\&.4\fR
.sp
package require \fBTk  8\&.4\fR
.sp
package require \fBipentry  ?0\&.3?\fR
.sp
\fB::ipentry::ipentry\fR \fIpathName\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
.sp
\fB::ipentry::ipentry6\fR \fIpathName\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
.sp
\fIpathName\fR \fBcomplete\fR
.sp
\fIpathName\fR \fBget\fR
.sp
\fIpathName\fR \fBinsert\fR \fIiplist\fR
.sp
\fIpathName\fR \fBicursor\fR \fIindex\fR
.sp
\fIpathName\fR \fBconfigure\fR \fIoption\fR \fIvalue\fR\&.\&.\&.
.sp
\fIpathName\fR \fBcget\fR \fIoption\fR
.sp
.BE
.SH DESCRIPTION
This package provides a widget for the entering of a IP address\&.
.PP
.TP
\fB::ipentry::ipentry\fR \fIpathName\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
Creates a new IPv4 ipentry widget and configures it with the given options and
their values\&.
.TP
\fB::ipentry::ipentry6\fR \fIpathName\fR ?\fIoption\fR \fIvalue\fR\&.\&.\&.?
Creates a new ipentry widget for the entry of an IPv6 address\&. All options
are the same as the IPv4 widget\&.
.PP
Each widget created with the command above supports the following methods:
.TP
\fIpathName\fR \fBcomplete\fR
Returns a boolean value\&. True indicates that the entry contains a
complete IP address, meaning all fields have a value\&. In some cases
IPv6 address are valid when fields are missing\&. You will need to do your
own validation to detect this\&.
.TP
\fIpathName\fR \fBget\fR
Returns the contents of the entry as a list consisting of 4 or 8 elements\&.
.TP
\fIpathName\fR \fBinsert\fR \fIiplist\fR
IPv4
Takes a list of 4 elements and inserts one into each quad of the entry, in order\&.
All values in the list must be empty or integers\&. Values outside the range 0 to 255
are modified to be within the range\&.
IPv6
Takes a list of 8 elements and inserts one into each quad of the entry, in order\&.
All values in the list must be empty or 1 to 4 hex digits\&.
.TP
\fIpathName\fR \fBicursor\fR \fIindex\fR
Sets the position of the widgets insertion cursor\&. Only integer values between
0 and 15 are valid for ipentry and 0 to 31 for ipentry6\&.
Setting the icursor will only have an effect if the widget
already has the input focus\&.
.TP
\fIpathName\fR \fBconfigure\fR \fIoption\fR \fIvalue\fR\&.\&.\&.
Modifies the configuration of the widget\&. For options and
their meaning see the widget options section\&.
.TP
\fIpathName\fR \fBcget\fR \fIoption\fR
Returns information about the current configuration of the widget, for
the specified option\&. For options and their meaning see the widget
options section\&.
.PP
.SH "WIDGET OPTIONS"
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-textvariable\fR
Database Name:	\fBtextvariable\fR
Database Class:	\fBVariable\fR

.fi
.IP
The name of a variable which holds the value of the IP address\&.
The value must be a string of the form NNN\&.NNN\&.NNN\&.NNN for IPv4 or
HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH for IPv6 where H is a hex digit\&.
The variable will be modified to represent a valid IP address if it is not
already\&.
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-state\fR
Database Name:	\fBstate\fR
Database Class:	\fBState\fR

.fi
.IP
Specifies one of three states for the entry: \fBnormal\fR,
\fBdisabled\fR, or \fBreadonly\fR\&.
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-font\fR
Database Name:	\fBfont\fR
Database Class:	\fBFont\fR

.fi
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-bd\fR
Database Name:	\fBborderWidth\fR
Database Class:	\fBBorderWidth\fR

.fi
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-fg\fR
Database Name:	\fBforeground\fR
Database Class:	\fBForeground\fR

.fi
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-bg\fR
Database Name:	\fBbackground\fR
Database Class:	\fBBackground\fR

.fi
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-relief\fR
Database Name:	\fBrelief\fR
Database Class:	\fBRelief\fR

.fi
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-highlightthickness\fR
Database Name:	\fBhighlightThickness\fR
Database Class:	\fBHighlightThickness\fR

.fi
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-highlightcolor\fR
Database Name:	\fBhighlightColor\fR
Database Class:	\fBHighlightColor\fR

.fi
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-highlightbackground\fR
Database Name:	\fBhighlightBackground\fR
Database Class:	\fBHighlightBackground\fR

.fi
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-selectbackground\fR
Database Name:	\fBselectBackground\fR
Database Class:	\fBBackground\fR

.fi
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-selectforeground\fR
Database Name:	\fBselectForeground\fR
Database Class:	\fBForeground\fR

.fi
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-selectborderwidth\fR
Database Name:	\fBselectBorderWidth\fR
Database Class:	\fBBorderWidth\fR

.fi
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-disabledbackground\fR
Database Name:	\fBdisabledBackground\fR
Database Class:	\fBDisabledBackground\fR

.fi
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-disabledforeground\fR
Database Name:	\fBdisabledForeground\fR
Database Class:	\fBDisabledForeground\fR

.fi
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-readonlybackground\fR
Database Name:	\fBreadonlyBackground\fR
Database Class:	\fBReadonlyBackground\fR

.fi
.LP
.nf
.ta 6c
Command-Line Switch:	\fB-insertbackground\fR
Database Name:	\fBinsertBackground\fR
Database Class:	\fBBackground\fR

.fi
.IP
Standard widget options\&. See \fBoptions\fR for a description of their
meanings and values\&.
.PP
.SH KEYWORDS
entry, ip address, network
.SH CATEGORY
Widget

Added embedded/man/files/modules/khim/khim.n.



















































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/khim/khim\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "khim" n 1\&.0 tklib "Kevin's Hacky Input Method"
.BS
.SH NAME
khim \- Provides key bindings for entering international characters on a keyboard that does not support them
.SH SYNOPSIS
package require \fBTcl \fR
.sp
package require \fBkhim  ?1\&.0?\fR
.sp
\fB::khim::getOptions\fR \fIpath\fR
.sp
\fB::khim::getConfig\fR
.sp
\fB::khim::setConfig\fR \fIversion\fR \fIenabled\fR \fIcompose\fR \fImap\fR
.sp
\fB::khim::showHelp\fR \fIpath\fR
.sp
.BE
.SH DESCRIPTION
This package provides a set of key bindings to allow
a user to enter arbitrary characters on a keyboard that
does not support them\&.  It works by designating some seldom-used key
of the keyboard as a "Compose" key (this key is distinct from any key
so labeled, and is often "Pause," "F12" or "L2"), and having the
"Compose" key, followed by a two-key sequence, have the effect of
inserting some character in a widget\&.
In addition, the "Compose" key, when struck twice in succession,
brings up a dialog containing a Unicode character map, allowing
arbitrary characters to be inserted\&.
.PP
The vast bulk of the package's functionality is implemented in a
single bindtag, \fBKHIM\fR\&.  An application can request that any
text or entry widget use the package to allow for entry of arbitrary
characters by placing this binding tag ahead of the \fBText\fR or
\fBEntry\fR binding tag for the widget:
.CS


text \&.t -width 80 -height 24
bindtags \&.t {\&.t KHIM Text \&. all}

.CE
Note that the \fBKHIM\fR tag must precede the \fBText\fR or
\fBEntry\fR class binding, or the package will not function
correctly\&.
.SH PROCEDURES
In addition to commands supporting the KHIM binding tag, the following
commands are exported from the package:
.TP
\fB::khim::getOptions\fR \fIpath\fR
Posts a top-level modal dialog with the path name \fIpath\fR that
prompts the user for KHIM options\&.  The user is allowed to reconfigure
the key sequences for the "Compose" key, change the choice of key to
use for the "Compose" function, and enable/disable the KHIM key
bindings entirely\&.
.TP
\fB::khim::getConfig\fR
Returns a Tcl script that restores the current configuration of KHIM:
the enabled/disabled state, the choice of "Compose" key, and the key
sequences that may be composed\&.  This script is designed to be
saved to a configuration file for use in a subsequent invocation of
the same application:
.CS


# Save KHIM configuration
set f [open ~/\&.khimrc w]
puts $f [::khim::getConfig]
close $f

# Restore KHIM configuration
source ~/\&.khimrc

.CE
.TP
\fB::khim::setConfig\fR \fIversion\fR \fIenabled\fR \fIcompose\fR \fImap\fR
Restores an earlier saved configuration\&.  Few, if any, applications
will call this command in any other way than to evaluate it as
returned from \fB::khim::getConfig\fR\&.
.TP
\fB::khim::showHelp\fR \fIpath\fR
Displays a top-level dialog giving user-level help for KHIM; the
dialog will have the path name \fIpath\fR\&.
.PP
.SH LOCALISATION
.PP
Programmers who wish to make KHIM available in a non-English-speaking
locale may do so by providing a \fB\&.msg\fR file with the appropriate
localised text\&.  The catalog requires the following messages:
.TP
\fBApply\fR
Text that will appear on the "Apply" button in the dialog that sets
KHIM options\&.
.TP
\fBCancel\fR
Text that will appear on the "Cancel" button in several dialogs\&.
.TP
\fBChange\fR
Text that will appear on the "Change" button, which alters the binding
of a pair of composed characters (creating or replacing as
appropriate)\&.
.TP
\fBCharacter\fR
Text that will appear on the label of the entry widget that accepts a
character resulting from a composed sequence\&.
.TP
\fB{Compose Key}\fR
Window title for a dialog that prompts the user to strike the key that
will be used for the "Compose" key\&.
.TP
\fB{Compose key:}\fR
Label that identifies a component showing the "Compose" key choice in
the KHIM options dialog\&.
.TP
\fB{Composed sequence must be two characters long}\fR
Error message that is displayed if the user attempts to define a
"Compose" sequence that is shorter or longer than two characters\&.
.TP
\fBDelete\fR
Text for a button that deletes a "Compose" sequence\&.
.TP
\fBHelp\&.\&.\&.\fR
Text for a button that displays the KHIM user help dialog\&.
.TP
\fBHELPTEXT\fR
Complete text for the user-level help for KHIM\&.  Refer to
"\fIen\&.msg\fR" for the English-language version of the help\&.
.TP
\fB{Input key sequence}\fR
Text for a label of the entry widget that prompts the user for a
two-character sequence to use with the "Compose" key\&.
.TP
\fB{Insert Character}\fR
Window title of the dialog box that displays a Unicode character map
and prompts the user to select a character to insert\&.
.TP
\fB{Key sequences}\fR
Text for a label at the head of a listbox showing the composed
sequences that are currently bound\&.
.TP
\fB{KHIM Controls}\fR
Window title for the dialog box that prompts for KHIM settings\&.
.TP
\fB{KHIM Help}\fR
Window title for the window that display help text for KHIM\&.
.TP
\fBOK\fR
Label for the OK button on several dialogs\&.
.TP
\fBSelect code page:\fR
Label for a spinbox that prompts the user for a Unicode code page number\&.
.TP
\fBSELECT COMPOSE KEY\fR
A message, which should be composed in short lines, prompting the user
to press the key that will become the "Compose" key in KHIM\&.
.TP
\fBUnicode\&.\&.\&.\fR
Text for a button that brings up the character map to select the
character to which a composed sequence binds\&.
.TP
\fB{Use KHIM}\fR
Text for a checkbutton that asks whether the user wishes to use KHIM
to manage composed key sequences\&.
.PP
.SH ACKNOWLEDGMENTS
KHIM was originally inspired by the key bindings that Brent Welch
developed for the 'sedit' editor used in the 'exmh' mail user agent\&.
The code for KHIM is entirely separate from that for 'sedit'\&.
.SH KEYWORDS
character, i18n, input, international, method

Added embedded/man/files/modules/menubar/menubar.n.













































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/menubar/menubar\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c) 2009 Tom Krehbiel <krehbiel\&.tom@gmail\&.com> All rights reserved\&.
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "menubar" n 0\&.5 tklib "Create and manipulate menubars"
.BS
.SH NAME
menubar \- Creates an instance of the \fImenubar\fR Class\&.
.SH SYNOPSIS
package require \fBTcl  8\&.6\fR
.sp
package require \fBTk  8\&.6\fR
.sp
package require \fBmenubar  ?0\&.5?\fR
.sp
\fBmenubar new\fR ?options?
.sp
\fImBarInst\fR \fBdefine\fR \fIbody\fR
.sp
\fImBarInst\fR \fBinstall\fR \fIpathName body\fR
.sp
\fImBarInst\fR \fBmenu\&.configure\fR \fIoption tag-settings ?option tag-settings \&.\&.\&.?\fR
.sp
\fImBarInst\fR \fBmenu\&.namespace\fR \fItag namespace\fR
.sp
\fImBarInst\fR \fBmenu\&.hide\fR \fItag\fR
.sp
\fImBarInst\fR \fBmenu\&.show\fR \fItag\fR
.sp
\fImBarInst\fR \fBtag\&.add\fR \fItag value\fR
.sp
\fImBarInst\fR \fBtag\&.configure\fR \fIpathName tag ?option value \&.\&.\&.option value?\fR
.sp
\fImBarInst\fR \fBtag\&.cget\fR \fIpathName tag ?option?\fR
.sp
\fImBarInst\fR \fBgroup\&.add\fR \fItag label ?cmd? ?accel? ?sequence? ?state?\fR
.sp
\fImBarInst\fR \fBgroup\&.delete\fR \fItag label\fR
.sp
\fImBarInst\fR \fBgroup\&.move\fR \fIdirection tag label\fR
.sp
\fImBarInst\fR \fBgroup\&.configure\fR \fItag label ?option value \&.\&.\&.option value?\fR
.sp
\fImBarInst\fR \fBgroup\&.serialize\fR \fItag\fR
.sp
\fImBarInst\fR \fBgroup\&.deserialize\fR \fItag stream\fR
.sp
\fImBarInst\fR \fBnotebook\&.addTabStore\fR \fIpathname\fR
.sp
\fImBarInst\fR \fBnotebook\&.deleteTabStore\fR \fIpathname\fR
.sp
\fImBarInst\fR \fBnotebook\&.setTabValue\fR \fIpathname tag\fR
.sp
\fImBarInst\fR \fBnotebook\&.restoreTabValues\fR \fIpathname\fR
.sp
.BE
.SH DESCRIPTION
.TP
\fBmenubar new\fR ?options?
.PP
.PP
Create and return a new instance of the menubar class\&. The
menubar class encapsulates the definition, installation and
dynamic behavior of a menubar\&. The class doesn't depend on a
widget framework and therefore can be used with or without a
framework (e\&.g\&. Bwidget, IWidget, Snit, etc\&.)\&. Unlike other Tk
widget commands, the menubar command doesn't have a \fIpathName\fR
argument because menubars are handled by the window manager (i\&.e\&. wm)
and not the application\&.
.SH OPTIONS
The following options can be passed to the \fImenubar new\fR command\&.
.PP
These options are inherited from the Tk menu command, their effect is
platform specific\&.
.TP
\fB\fI-activebackground\fR [http://docs\&.activestate\&.com/activetcl/8\&.5/tcl/TkCmd/options\&.htm#M-activebackground]\fR
.TP
\fB\fI-activeborderwidth\fR [http://docs\&.activestate\&.com/activetcl/8\&.5/tcl/TkCmd/options\&.htm#M-activeborderwidth]\fR
.TP
\fB\fI-activeforeground\fR [http://docs\&.activestate\&.com/activetcl/8\&.5/tcl/TkCmd/options\&.htm#M-activeforeground]\fR
.TP
\fB\fI-background\fR [http://docs\&.activestate\&.com/activetcl/8\&.5/tcl/TkCmd/options\&.htm#M-background]\fR
.TP
\fB\fI-borderwidth\fR [http://docs\&.activestate\&.com/activetcl/8\&.5/tcl/TkCmd/options\&.htm#M-borderwidth]\fR
.TP
\fB\fI-cursor\fR [http://docs\&.activestate\&.com/activetcl/8\&.5/tcl/TkCmd/options\&.htm#M-cursor]\fR
.TP
\fB\fI-disabledforeground\fR [http://docs\&.activestate\&.com/activetcl/8\&.5/tcl/TkCmd/options\&.htm#M-disabledforeground]\fR
.TP
\fB\fI-font\fR [http://docs\&.activestate\&.com/activetcl/8\&.5/tcl/TkCmd/options\&.htm#M-font]\fR
.TP
\fB\fI-foreground\fR [http://docs\&.activestate\&.com/activetcl/8\&.5/tcl/TkCmd/options\&.htm#M-foreground]\fR
.TP
\fB\fI-relief\fR [http://docs\&.activestate\&.com/activetcl/8\&.5/tcl/TkCmd/options\&.htm#M-relief]\fR
.PP
.SH INTRODUCTION
.PP
An instance of the menubar class provides methods for compiling a
description of the menubar, configuring menu items and
installing the menubar in toplevel windows\&.
.PP
A menubar can be thought of as a tree of cascading menus\&. Users define
a menubar using a language that results in a human readable description
of a menubar\&. The description of the menubar is then compiled by an
instance of the menubar class after which it can be installed in one or more
toplevel windows\&.
.PP
The menubar class provides many unique capabilities that are not
found in other tcl/tk menubar implementation\&. Some of these are:
.IP \(bu
A tagging system that simplifies access to menu entries in the menu tree\&.
.IP \(bu
Support for user defined tags that depend on the toplevel window context\&.
.IP \(bu
A simplified and uniform interface for all callback commands\&.
.IP \(bu
Namespace support for all callback commands so callback commands can be easily grouped into namespaces\&.
.IP \(bu
Support for hiding and exposing menus on the menubar\&.
.IP \(bu
A simplified method for creating radiobutton groups\&.
.IP \(bu
Automatic management of state variables for checkbuttons and radiobuttons\&.
.IP \(bu
Scope control for the state variables of checkbuttons and radiobuttons\&.
.IP \(bu
Tear-off menu management that ensures only one tearoff menu is created\&.
.IP \(bu
Support for dynamic menu extension to simplify the creation of recent document menus\&.
.IP \(bu
Support for saving and restoring dynamic menu extensions\&.
.PP
.SH TERMINOLOGY
.TP
MENUBAR
The visible rendering of a menubar in a toplevel window is a horizontally
group of cascading Tk menus\&.
.TP
MENU
A menu is an ordered list of items that is rendered
vertically\&. Menus are not visible until a user
preforms some action (normally a <ButtonPress-1> event)\&. A menu
may contain any number of child menus that are rendered as
cascading menus\&. Cascading menus are rendered next to the parent menu
when they are activated\&.
.TP
MENU ENTRY
A menu contains an ordered list of items called entries\&.
Menu entries have a type and the menubar class supports the
following 6 entry types:
\fICommand\fR, \fICheckbutton\fR, \fIRadiobutton\fR, \fISeparator\fR, \fIGroup\fR and \fIMenu\fR\&.
.TP
ENTRY LABEL
Each menu entry has a visible string that is called the entry label\&.
.TP
TAG
A tag is name that is normally used to referr to an item in a menu
tree\&. A tag name is an alphanumeric character string
that may include the underscore character\&. Menu tree tags are
defined for all nodes and leafs in a menu tree\&. This provides a
flat abstraction of the tree and simplifies item referencing in
menubar methods\&. Without this abstraction it would be
necessary to reference menu elements using a tree path which
could change at run-time\&. The menubar class also has a method that
can create a user defined tag\&. User
defined tags store values that change based on the currently
active toplevel window\&. User defined tags can be used to store widget
pathnames use by callback code so that output can be routed to the
appropriate toplevel window\&.
.PP
.SH METHODS
.TP
\fImBarInst\fR \fBdefine\fR \fIbody\fR
Compiles \fIbody\fR into a tree of menu entries which define the
visual layout of the menubar\&. The \fIbody\fR argument
describes the layout using the following syntax, where the
elements of the syntax are described below\&.
.sp
\fIbody == definitions\fR
.CS


definitions    ::= { <ignore> | <definition> | <definition> <definitions> }
ignore         ::= { <nl> | <white-space> <nl> | # <comment> <nl> }
definition     ::= { <command> | <checkbutton> | <radiobutton> | <separator> | <group> | <menu> }
command        ::= <label> C <tag> <nl>
checkbutton    ::= <label> X<scope> { <tag> | <tag>+ } <nl>
radiobutton    ::= <label> R<scope> { <tag> | <tag>+ } <nl>
separator      ::= <stext> S <tag> <nl>
group          ::= <dummy> G <tag> <nl>
menu           ::= <label> { M:<tag> | M:<tag>+ } <nl> <definitions>
stext          ::= '--' | <label>
scope          ::= '' | '@' | '='

.CE
.IP
\fI \fR
.RS
.TP
C - Command
The C type entry is the most common type of entry\&. This entry executes
a command when it is invoked\&.
.TP
X - Checkbutton
A X type entry behaves much like a Tk checkbutton
widget\&. When it is invoked it toggles back and forth between
a selected and deselected states\&. The value of a checkbutton
is a boolean (i\&.e\&. 1 or 0)\&. By default all checkbuttons are
deselected\&. If you want the checkbutton to be initially selected
then include a trailing plus (+) with the tag name\&. See SCOPE CONTROL
below for a description of the scope indicator\&.
.TP
R - Radiobutton
A R type menu entry behaves much like a Tk radiobutton widget\&. Each
radiobutton entry is a member of a radiobutton group that
controls the behavior of the radiobuttons in the group\&. All
radiobuttons in a group are given the same tag name\&. In the
example below Red, Green and Blue all have the same tag and are
therefore all in the same radiobutton group\&. A trailing plus
(+) on the tag name of a radiobutton entry will cause the entry to be
the initially selected entry\&. See SCOPE CONTROL
below for a description of the scope indicator\&.
.TP
S - Separator
A S type menu entry is an entry that is displayed either as a horizontal
dividing line or a label\&. Separators are not active elements of a menu and
have no associated behavior if they are invoked\&. If <stext> is two dashes
(i\&.e\&. '--') then the separator will be displayed as a horizontal line
otherwise <stext> will be displayed as a bold label surrounded by double
dashes (e\&.g\&. "-- <stext> --") with a lightgray background\&.
.TP
G - Command Group
The G type menu entry marks a location in the menu tree where
entries can be dynamically added and removed\&. Menu extension can only
occur at the end of a menu so G type entries must be the last item on a menu\&.
A G	type entry is rendered as a separator line\&. The \fIgroup\&.<xxx>\fR
sub-commands are used to manipulate command group entries\&.
.TP
M - Menu
An M type entry is used to define both menubar menus and cascading
menus\&. Menu entries are the most complicated of the 6 menu types\&.
A menu entry is composed of three list elements\&. The first element
of the list is its label\&. The second element of the list is a
composite string consisting of a type identifier (M) followed by
an optional tag (beginning with a ':' separator) and finally an
optional plus (+) which indicates that the menu is a tear-off
menu\&. The final element of the list is a LIST VALUE\&.
.RE
.PP
.TP
\fImBarInst\fR \fBinstall\fR \fIpathName body\fR
The \fIinstall\fR method installs the menubar created with the
\fIdefine\fR method into toplevel window \fIpathName\fR\&. The
\fIbody\fR argument of the command contains a tcl script which
is used to initialize the installed menubar\&. Normally the tcl
script will contain calls to various menubar methods to perform
the initialization\&. The initialization code is only run once
when the menubar is installed\&. The namespace in which the \fIinstall\fR
method is executed becomes the default namespace for callback commands
(see \fImenu\&.namespace\fR below for more details)\&.
.PP
.SH "METHODS - MENU\&.XXX"
.TP
\fImBarInst\fR \fBmenu\&.configure\fR \fIoption tag-settings ?option tag-settings \&.\&.\&.?\fR
Configures the tags of a menubar and returns an empty string\&. This method provides a convenient
way to configure a larger number of tags without the verbosity of using the \fItag\&.configure\fR method\&.
.RS
.TP
\fIoption\fR
\fIOption\fR may have any of the values accepted by the \fItag\&.configure\fR method\&.
.TP
\fItag-settings\fR
The \fItag-settings\fR argument is a string that is converted to a list of tag-value pairs
using the following syntax\&.
.sp
Syntax for \fItag-settings\fR\&.
.CS


tag-settings ::= { <ignore> | <value> | <value> <tag-settings> }
ignore       ::= { <nl> | <white-space> <nl> | # <comment> <nl> }
value        ::= <tag> <option-value> <nl>

.CE
.RE
.PP
.TP
\fImBarInst\fR \fBmenu\&.namespace\fR \fItag namespace\fR
Change the namespace for a sub-tree of the menubar
starting at entry \fItag\fR\&. The new value will be \fInamespace\fR\&.
Each entry in the menubar tree has an
associated namespace which will be used for its callback
procedure\&. The default namespace is the namespace where
the \fIinstall\fR  method was executed\&. The \fInamespace\fR
method can be used to change the namespace
that will be used for callbacks in a sub-tree of the
menubar\&. This method can only be used in the context of
an \fIinstall\fR script\&.
.PP
.TP
\fImBarInst\fR \fBmenu\&.hide\fR \fItag\fR
Remove (hide) a menubar entry\&. When a
menubar tree is defined all entries are visible by default\&.
This method can be used to hide a menubar entry\&.
The \fIhide\fR methods can be used in the
context of an \fIinstall\fR script so that a menu will be
initially hidden at application start up\&. The \fItag\fR argument
is the tag name of the menu to be hidden\&.
.TP
\fImBarInst\fR \fBmenu\&.show\fR \fItag\fR
Exposes (shows) a hidden menubar entry\&. When a
menubar tree is defined all entries are visible by default\&.
If a entry is hidden from the user (using the menu\&.hide method)
then it can be exposed again using the show method\&. The \fItag\fR
argument is the tag name of the menu to be shown\&.
.PP
.SH "METHODS - TAG\&.XXX"
.TP
\fImBarInst\fR \fBtag\&.add\fR \fItag value\fR
Add a user defined \fItag\fR value\&. The \fItag\&.add\fR method
adds a new tag-value pair to the the tags defined for a
menubar\&. User defined tags are different from the tags
created by the \fIdefine\fR method\&. The \fItag\&.add\fR
method can only be used in an \fIinstall\fR script and its
value is associated with the toplevel where the menubar is
installed\&. This makes the tag context sensitive so callback
code that queries the tag value will receive a value that
is associated with the window that performed the callback\&.
.PP
.TP
\fImBarInst\fR \fBtag\&.configure\fR \fIpathName tag ?option value \&.\&.\&.option value?\fR
Given the \fIpathName\fR of a toplevel window and a \fItag\fR this method configures the
menu entry associated with the tag and return an empty string\&.
.RS
.TP
\fIStandard Options\fR
These option are the same as those described for menu entries in the Tk \fImenu\fR documentation\&.
.RS
.TP
\fB-activebackground\fR
.TP
\fB-activeforeground\fR
.TP
\fB-background\fR
.TP
\fB-bitmap\fR
.TP
\fB-columnbreak\fR
.TP
\fB-compound\fR
.TP
\fB-font\fR
.TP
\fB-foreground\fR
.TP
\fB-hidemargin\fR
.TP
\fB-image\fR
.TP
\fB-indicatoron\fR
.TP
\fB-label\fR
.TP
\fB-selectcolor\fR
.TP
\fB-selectimage\fR
.TP
\fB-state\fR
.RE
.IP
\fI \fR
.TP
Class Specific Options
.RS
.TP
\fB-bind\fR {uline accel sequence}
The value of the \fI-bind\fR option is three element list where the values are as follows\&.
.RS
.TP
uline
An integer index of a character to underline in the entry\&.
This value performs the same function as the Tk \fImenu\fR -underline option\&.
If this value is an empty string then no underlining is performed\&.
.TP
accel
A string to display at the right side of the menu
entry\&. The string normally describes an accelerator keystroke sequence that
may be typed to invoke the same function as the menu entry\&.
This value performs the same function as the Tk \fImenu\fR -accelerator option\&.
If this value is an empty string then no accelerator is displayed\&.
.TP
sequence
A bind sequence that will cause the entries associated command to fire\&.
.RE
.TP
\fB-command\fR cmdprefix
The value of the \fI-command\fR option a command
prefix that is evaluated when the menu entry is invoked\&.
By default the callback is evaluate in the
namespace where the \fIinstall\fR method was executed\&. Additional values
are appended to the \fIcmdprefix\fR and are thus passed to the
callback command as argument\&. These additional arguments are described
in the list below\&.
.RS
.TP
command entry
1) The pathname of the toplevel window that invoked the callback\&.
.TP
checkbutton entry
1) The pathname of the toplevel window that invoked the callback\&.
.sp
2) The checkbutton's tag name
.sp
3) The new value for the checkbutton
.TP
radiobutton entry
1) The pathname of the toplevel window that invoked the callback\&.
.sp
2) The radiobutton's tag name
.sp
3) The label of the button that was selected
.TP
group entry
1) The pathname of the toplevel window that invoked the callback\&.
.RE
.RE
.RE
.PP
.TP
\fImBarInst\fR \fBtag\&.cget\fR \fIpathName tag ?option?\fR
Returns the value of the configuration option given by \fIoption\fR
or the value of a user defined tag\&. The option argument may be any
of the options accepted by the \fItag\&.configure\fR method for the
\fItag\fR type\&. User defined tags are queried without an \fIoption\fR
value\&.
.PP
.SH "METHODS - GROUP\&.XXX"
.TP
\fImBarInst\fR \fBgroup\&.add\fR \fItag label ?cmd? ?accel? ?sequence? ?state?\fR
Add a command to the group with tag name \fItag\fR\&. This method
appends a new command entry to the end of a command group\&. The order of the
arguments is fixed but arguments to the right can be ignored\&. Arguments to
this method have the following meaning\&.
.RS
.TP
tag \fI(string)\fR
The tag name of the command group\&.
.TP
label \fI(string)\fR
The displayed label for the menu entry\&.
.TP
cmd \fI(string)\fR
A command prefix that will be used for callback command\&.
.TP
accel \fI(string)\fR
An accelerator string that will be displayed next to the entry label\&.
.TP
sequence \fI(string)\fR
A bind sequence that will be bound to the callback command\&.
.TP
state \fI(enum)\fR
Sets the active state of the command\&. One of:  normal, disabled, active
.RE
.PP
.TP
\fImBarInst\fR \fBgroup\&.delete\fR \fItag label\fR
Delete a command from a group with tag name \fItag\fR\&. This method
deletes command \fIlabel\fR from a command group\&.
.PP
.TP
\fImBarInst\fR \fBgroup\&.move\fR \fIdirection tag label\fR
Change the position of an entry in a group with tag name \fItag\fR\&.
The \fIdirection\fR argument is the direction ('up' or 'down') the
entry will be moved\&. The entry that is moved has the name \fIlabel\fR\&.
.PP
.TP
\fImBarInst\fR \fBgroup\&.configure\fR \fItag label ?option value \&.\&.\&.option value?\fR
Configure the options of an entry in the command group with
tag name \fItag\fR\&. This method is similar to the \fItag\&.configure\fR
method except that it works on entries in a command group\&. Set documentation
for the \fItag\&.configure\fR method (above) for more details on command
entry options\&.
.PP
.TP
\fImBarInst\fR \fBgroup\&.serialize\fR \fItag\fR
Return a string serialization of the entries in a command group\&. The
argument \fItag\fR is the tag name for the group that is to be serialized\&.
The resulting serialization is a list containing three
element  (1) the tag name of the group  (2) a dictionary
containing group level options (3) a list of zero or more similar three
element lists that describe the entries in the group\&.
.PP
.TP
\fImBarInst\fR \fBgroup\&.deserialize\fR \fItag stream\fR
Replace the contents of group tag \fItag\fR with the commands
defined in the serialization \fIstream\fR\&. The original contents of
the group are lost\&.
.PP
.SH "METHODS - NOTEBOOK\&.XXX"
.TP
\fImBarInst\fR \fBnotebook\&.addTabStore\fR \fIpathname\fR
This method should be used in code that creates a new notebook tab\&.
Execution of this method will cause state storage to be allocated
for the new notebook tab\&. The pathname for the notebook tab is passed
as an argument to the method\&.
.PP
.TP
\fImBarInst\fR \fBnotebook\&.deleteTabStore\fR \fIpathname\fR
This command deallocates the state store for a notebook tab\&. The
pathname for the notebook tab is passed as an argument to the method\&.
.PP
.TP
\fImBarInst\fR \fBnotebook\&.setTabValue\fR \fIpathname tag\fR
This method should be used in the callback for menubar checkbuttons or
radiobuttons that have notebook tab scope control\&. When this method is
executed it will move the value associated with tag into the tab store
for the tab identified by pathname\&.
.PP
.TP
\fImBarInst\fR \fBnotebook\&.restoreTabValues\fR \fIpathname\fR
This method should be place in a bind script that is triggered by
a notebooks <<NotebookTabChanged>> event\&.
.PP
.SH "SCOPE CONTROL"
.PP
By default a menubar instance looks the same in all installed toplevel
windows\&. As changes are made to one instance of a menubar all the other
instances are immediately updated\&. This means the internal state of all
the menu entries for the instances are synchronized\&. This behavior is
called global scope control of the menubar state\&.
.PP
The menubar class allows finer scope control on check and radio buttons\&.
The scope of these entry types can be modified by adding a
modifier character to their type character\&. Two
modifier characters are supported as show in the table below\&.
.CS


''  ::= global scope (no character)
'@' ::= local scope modifier
'=' ::= notebook tab scope modifier

.CE
.PP
When the local scope character (@) is added to the definition of a button,
the button is given a new variable for each installed toplevel window\&. This
has the effect of making the button's state local to the window (i\&.e\&. local scope)\&.
An example use case for this behavior might be a status bar that can be
toggled on an off by a checkbutton\&. The developer may want to allow the
user to control the visibility of the status bar on a per window basis\&. In this
case a local modifier would be added to the status bar selector so the callback
code would receive an appropriate value based on the current toplevel window\&.
.PP
The notebook tab scope character (=) is similar in effect to the local scope
character but it allows a notebook tab selection to also manage the state of
of a button\&. Adding the notebook tab scope modifier enables notebook tab
scope control but the developer must then make use of the notebook\&.xxxx sub-commands
to actively manage state values as tabs are added, deleted and selected\&.
.SH EXAMPLE
.CS


package require Tcl
package require Tk
package require menubar

set tout [text \&.t -width 25 -height 12]
pack ${tout} -expand 1 -fill both
set mbar [menubar new \\
    -borderwidth 4 \\
    -relief groove  \\
    -foreground black \\
    -background tan \\
    ]
${mbar} define {
    File M:file {
        Exit                 C      exit
    }
    Edit M:items+ {
    #   Label               Type    Tag Name(s)
    #   -----------------   ----    ---------
        "Cut"               C       cut
        "Copy"              C       copy
        "Paste"             C       paste
        --                  S       s2
        "Options" M:opts {
            "CheckList" M:chx+ {
                Coffee      X       coffee+
                Donut       X       donut
                Eggs        X       eggs
                }
            "RadioButtons" M:btn+ {
                "Red"       R       color
                "Green"     R       color+
                "Blue"      R       color
                }
        }
    }
    Help M:help {
        About               C       about
    }
}
${mbar} install \&. {
    ${mbar} tag\&.add tout ${tout}
    ${mbar} menu\&.configure -command {
        # file menu
        exit            {Exit}
        # Item menu
        cut             {CB Edit cut}
        copy            {CB Edit copy}
        paste           {CB Edit paste}
        # boolean menu
        coffee          {CB CheckButton}
        donut           {CB CheckButton}
        eggs            {CB CheckButton}
        # radio menu
        color           {CB RadioButton}
        # Help menu
        about           {CB About}
    } -bind {
        exit        {1 Cntl+Q  Control-Key-q}
        cut         {2 Cntl+X  Control-Key-x}
        copy        {0 Cntl+C  Control-Key-c}
        paste       {0 Cntl+V  Control-Key-v}
        coffee      {0 Cntl+A  Control-Key-a}
        donut       {0 Cntl+B  Control-Key-b}
        eggs        {0 Cntl+C  Control-Key-c}
        about       0
    } -background {
        exit red
    } -foreground {
        exit white
    }
}
proc pout { txt } {
    global mbar
    set tout [${mbar} tag\&.cget \&. tout]
    ${tout} insert end "${txt}\\n"
}
proc Exit { args } {
    puts "Goodbye"
    exit
}
proc CB { args } {
    set alist [lassign ${args} cmd]
    pout "${cmd}: [join ${alist} {, }]"
}
wm minsize \&. 300 300
wm geometry \&. +4+4
wm protocol \&. WM_DELETE_WINDOW exit
wm title \&. "Example"
wm focusmodel \&. active
pout "Example started \&.\&.\&."

.CE
.SH CAVEATS
.PP
This implementation uses TclOO so it requires 8\&.6\&. The code has been
tested on Windows (Vista), Linux and OSX (10\&.4)\&.
.SH "SEE ALSO"
\fIA command that creates menubar objects\fR [http://wiki\&.tcl\&.tk/25231], \fImenu\fR [http://www\&.tcl\&.tk/man/tcl8\&.6/TkCmd/menu\&.htm]
.SH COPYRIGHT
.nf
Copyright (c) 2009 Tom Krehbiel <krehbiel\&.tom@gmail\&.com> All rights reserved\&.

.fi

Added embedded/man/files/modules/ntext/ntext.n.





























































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/ntext/ntext\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "ntext" n 0\&.81 tklib "Alternative Bindings for the Text Widget"
.BS
.SH NAME
ntext \- Alternative Bindings for the Text Widget
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBntext  ?0\&.81?\fR
.sp
.BE
.SH DESCRIPTION
The purpose of the \fBntext\fR package is to make the text widget behave more like other text-editing applications\&. It makes the text widget more useful for implementing a text editor, and makes it behave in a way that will be more familiar to most users\&.
.PP
The package provides a binding tag named \fINtext\fR for use by text widgets in place of the default \fIText\fR binding tag\&.
.PP
Package \fBntext\fR 's functions and variables are contained entirely in the \fB::ntext\fR namespace; its other code is contained in the binding tag \fINtext\fR\&.  \fBntext\fR has no exports to the global or other namespaces, and no new widget commands\&.  It uses modified copies of the Tk code, leaving the original code, and the \fIText\fR binding tag, unchanged\&.
.PP
The differences between the \fINtext\fR binding tag and the default \fIText\fR binding tag are in three categories:
.IP \(bu
Some \fIText\fR bindings behave differently from most text-editing applications\&.  \fINtext\fR gives these bindings more familiar behaviour\&.  For details see \fIntextBindings\fR\&.
.IP \(bu
When a logical line with leading whitespace is word-wrapped onto more than one display line, the wrapped display lines begin further to the left than the first display line, which can make the text layout untidy and difficult to read\&.  \fINtext\fR can indent the wrapped lines to match the leading whitespace of the first display line (this facility is switched off by default)\&.  For details see \fIntextIndent\fR\&.
.IP \(bu
When the user navigates or selects text, Tcl/Tk sometimes needs to detect word boundaries\&.  \fINtext\fR provides improved rules for word boundary detection\&.  For details see \fIntextWordBreak\fR\&.
.PP
The remainder of this page describes the basic use and configuration of all three aspects of \fINtext\fR\&.  For more detailed information on the different facilities of \fINtext\fR, see the pages \fIntextBindings\fR, \fIntextIndent\fR, and \fIntextWordBreak\fR\&.
.PP
See Section \fBEXAMPLE\fR for how to apply the \fINtext\fR binding tag in place of the \fIText\fR binding tag\&.
.SH "CONFIGURATION OPTIONS"
\fINtext\fR provides alternatives to a number of behaviours of the classic \fIText\fR binding tag\&.  Where there is an option, the \fINtext\fR behaviour (except for display-line indentation) is switched on by default\&.
.PP
The behaviour of \fINtext\fR may be configured application-wide by setting the values of a number of namespace variables:
.PP
\fB::ntext::classicAnchor\fR
.IP \(bu
\fB0\fR - (default value) selects \fINtext\fR behaviour, i\&.e\&. the anchor point is fixed
.IP \(bu
\fB1\fR - selects classic \fIText\fR behaviour, i\&.e\&. the anchor point is variable
.PP
.PP
\fB::ntext::classicExtras\fR
.IP \(bu
\fB0\fR - (default value) selects \fINtext\fR behaviour, i\&.e\&. several traditional \fIText\fR bindings are de-activated
.IP \(bu
\fB1\fR - selects classic \fIText\fR behaviour, i\&.e\&. all \fIText\fR bindings are activated
.PP
.PP
\fB::ntext::classicMouseSelect\fR
.IP \(bu
\fB0\fR - (default value) selects \fINtext\fR behaviour, i\&.e\&. the anchor point for mouse selection operations is moved by keyboard navigation
.IP \(bu
\fB1\fR - selects classic \fIText\fR behaviour
.PP
.PP
\fB::ntext::classicWordBreak\fR
.IP \(bu
\fB0\fR - (default value) selects \fINtext\fR behaviour, i\&.e\&. platform-independent, two classes of word characters and one class of non-word characters\&.
.IP \(bu
\fB1\fR - selects classic \fIText\fR behaviour, i\&.e\&. platform-dependent, one class of word characters and one class of non-word characters
.IP \(bu
After changing this value, the matching patterns should be recalculated\&.  See \fIntextWordBreak\fR for details and advanced configuration options\&.
.PP
.PP
\fB::ntext::classicWrap\fR
.IP \(bu
\fB0\fR - selects \fINtext\fR behaviour, i\&.e\&. display lines of text widgets in \fI-wrap\fR \fIword\fR mode are indented to match the initial whitespace of the first display line of a logical line\&.  If the widget already holds text when this value is set, a function call may be necessary\&.  See \fIntextIndent\fR for detailed instructions on the use of \fINtext\fR 's indentation\&.
.IP \(bu
\fB1\fR - (default value) selects classic \fIText\fR behaviour, i\&.e\&. no indentation
.PP
.PP
\fB::ntext::overwrite\fR
.IP \(bu
\fB0\fR - (initial value) text typed at the keyboard is inserted into the widget
.IP \(bu
\fB1\fR - text typed at the keyboard overwrites text already in the widget
.IP \(bu
The value is toggled by the \fIInsert\fR key\&.
.PP
.SH EXAMPLE
To create a text widget \&.t and use the \fINtext\fR bindings:
.CS


package require ntext
text \&.t
bindtags \&.t {\&.t Ntext \&. all}

.CE
See bindtags for more information\&.
.SH "SEE ALSO"
bindtags, ntextBindings, ntextIndent, ntextWordBreak, re_syntax, regexp, text
.SH KEYWORDS
bindtags, re_syntax, regexp, text

Added embedded/man/files/modules/ntext/ntextBindings.n.



























































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/ntext/ntextBindings\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "ntextBindings" n 0\&.81 tklib "Alternative Bindings for the Text Widget"
.BS
.SH NAME
ntextBindings \- Alternative Bindings for the Text Widget
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBntext  ?0\&.81?\fR
.sp
.BE
.SH DESCRIPTION
The \fBntext\fR package provides a binding tag named \fINtext\fR for use by text widgets in place of the default \fIText\fR binding tag\&.
.PP
The \fIText\fR binding tag provides around one hundred bindings to the text widget (the exact number is platform-dependent)\&.  A few of these behave in a way that is different from most contemporary text-editing applications\&.  \fINtext\fR aims to provide more familiar behaviour\&.
.PP
Features of the \fINtext\fR bindings that differ from the default \fIText\fR bindings:
.IP \(bu
Clicking near the end of a (logical) line moves the cursor to the end of that line \fI(not the start of the next line)\fR\&.  If the widget is in \fI-wrap\fR \fIword\fR mode, the same rule applies to display lines\&.
.IP \(bu
Double-clicking or dragging near the end of a (logical) line will highlight/select characters from the end of that line \fI(not the next line, or the region at the end of the line where there are no characters)\fR\&.  If the widget is in \fI-wrap\fR \fIword\fR mode, the same rule applies to display lines\&.
.IP \(bu
The \fIEnd\fR key implements "Smart End" (successive keypresses move the cursor to the end of the display line, then to the end of the logical line); the \fIHome\fR key implements "Smart Home" (which is similar to "Smart End", but also toggles between the beginning and end of leading whitespace)\&.
.IP \(bu
When a selection exists, a <<Paste>> operation (e\&.g\&. <Control-v>) overwrites the selection (as most editors do), and does so on all platforms\&.
.IP \(bu
The <Insert> key toggles between "Insert" and "Overwrite" modes for keyboard input\&.  \fI(In contrast, the Text binding tag uses <Insert> as a method to paste the "primary selection", a task that can be accomplished instead by mouse middle-click\&.)\fR
.IP \(bu
The <Escape> key clears the selection\&.
.IP \(bu
Selecting with <Shift-Button1> selects from the previous position of the insertion cursor\&. \fI(In the Text binding tag, the selection anchor may be the position of the previous mouse click\&.)\fR
.IP \(bu
<Shift-Button1> operations do not alter the selection anchor\&. \fI(In the Text binding tag, they do\&.)\fR
.IP \(bu
By default, the \fINtext\fR binding tag does not provide several of the Control-key bindings supplied by the \fIText\fR binding tag\&.  Modern keyboards offer alternatives, such as cursor keys for navigation; modern applications often use the Control-key bindings for other purposes (e\&.g\&. <Control-p> for "print")\&.
.PP
The last three cases, the behavior of \fIText\fR is often useful, so \fINtext\fR gives you the option of retaining it, by setting variables defined in the ::ntext namespace to 1 (instead of their default 0)\&.  Explaining these features in more detail:
.IP \(bu
If the mouse is clicked at position A, then the keyboard is used to move the cursor to B, then shift is held down, and the mouse is clicked at C: the \fIText\fR binding tag gives a selection from A to C; the \fINtext\fR gives a selection from B to C\&.  If you want \fINtext\fR to behave like \fIText\fR in this respect, set \fB::ntext::classicMouseSelect\fR to 1\&.
.IP \(bu
The \fIText\fR binding tag allows successive <Shift-Button-1> events to change both ends of the selection, by moving the selection anchor to the end of the selection furthest from the mouse click\&.  Instead, the \fINtext\fR binding tag fixes the anchor, and multiple Shift-Button-1 events can only move the non-anchored end of the selection\&.  If you want \fINtext\fR to behave like \fIText\fR in this respect, set \fB::ntext::classicAnchor\fR to 1\&.  In both \fIText\fR and \fINtext\fR, keyboard navigation with the Shift key held down alters the selection and keeps the selection anchor fixed\&.
.IP \(bu
The following "extra" \fIText\fR bindings are switched off by default, but can be activated in \fINtext\fR by setting \fB::ntext::classicExtras\fR to 1: <Control-a>, <Control-b>, <Control-d>, <Control-e>, <Control-f>, <Control-h>, <Control-i>, <Control-k>, <Control-n>, <Control-o>, <Control-p>, <Control-t>, <Control-space>, <Control-Shift-space>\&.
.PP
.SH "CONFIGURATION OPTIONS"
\fINtext\fR provides alternatives to a number of behaviours of the classic \fIText\fR binding tag\&.  Where there is an option, the \fINtext\fR behaviour is switched on by default, except for display-line indentation which is discussed on a separate page at \fIntextIndent\fR\&.
.PP
The behaviour of \fINtext\fR may be configured application-wide by setting the values of a number of namespace variables:
.PP
\fB::ntext::classicAnchor\fR
.IP \(bu
\fB0\fR - (default value) selects \fINtext\fR behaviour, i\&.e\&. the anchor point is fixed
.IP \(bu
\fB1\fR - selects classic \fIText\fR behaviour, i\&.e\&. the anchor point is variable
.PP
.PP
\fB::ntext::classicExtras\fR
.IP \(bu
\fB0\fR - (default value) selects \fINtext\fR behaviour, i\&.e\&. several "extra" \fIText\fR bindings are de-activated
.IP \(bu
\fB1\fR - selects classic \fIText\fR behaviour, i\&.e\&. the "extra" \fIText\fR bindings are activated
.PP
.PP
\fB::ntext::classicMouseSelect\fR
.IP \(bu
\fB0\fR - (default value) selects \fINtext\fR behaviour, i\&.e\&. the anchor point for mouse selection operations is moved by keyboard navigation
.IP \(bu
\fB1\fR - selects classic \fIText\fR behaviour
.PP
.PP
\fB::ntext::overwrite\fR
.IP \(bu
\fB0\fR - (initial value) text typed at the keyboard is inserted into the widget
.IP \(bu
\fB1\fR - text typed at the keyboard overwrites text already in the widget
.IP \(bu
The value is toggled by the \fIInsert\fR key\&.
.PP
.SH EXAMPLE
To use \fINtext\fR but keep classic \fIText\fR 's variable-anchor feature:
.CS


package require ntext
text \&.t
set ::ntext::classicAnchor 1
bindtags \&.t {\&.t Ntext \&. all}

.CE
.SH "SEE ALSO"
bindtags, ntext, ntextIndent, text
.SH KEYWORDS
bindtags, text

Added embedded/man/files/modules/ntext/ntextIndent.n.





























































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/ntext/ntextIndent\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "ntextIndent" n 0\&.81 tklib "ntext Indentation for the Text Widget"
.BS
.SH NAME
ntextIndent \- ntext Indentation for the Text Widget
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBntext  ?0\&.81?\fR
.sp
.BE
.SH DESCRIPTION
The \fBntext\fR package provides a binding tag named \fINtext\fR for use by text widgets in place of the default \fIText\fR binding tag\&.
.PP
Tk's text widget may be configured to wrap lines of text that are longer than the width of the text area, a feature that is familiar from text editors and word processors\&.  A complete line of text (delimited by newlines, or by the beginning or end of the document) is called a "logical line"\&.  When a logical line is wrapped onto more than one line of the display area, these fragments of the logical line are called "display lines"\&.
.PP
If a logical line begins with whitespace, then wrapped display lines begin further to the left than the first display line, which can make the text layout untidy and difficult to read\&.  The \fINtext\fR binding tag provides facilities so that a text widget in \fI-wrap\fR \fIword\fR mode will automatically indent display lines (other than the first) to match the initial whitespace of the first display line\&.
.PP
This indentation is available to text widgets only in \fI-wrap\fR \fIword\fR mode\&.
.SH "CONFIGURATION OPTIONS"
The behavior of \fINtext\fR may be configured application-wide by setting the values of a number of namespace variables:
.PP
\fB::ntext::classicWrap\fR
.IP \(bu
0 - selects \fINtext\fR behaviour, i\&.e\&. display lines are indented to match the initial whitespace of the first display line of a logical line\&.
.sp
No other action is required if this option, and the text widget's \fI-wrap\fR option, are set before any text is entered in the widget, and if text is entered and edited only by the mouse and keyboard\&.  If, instead, text is manipulated by the script, or if the text widget's \fI-wrap\fR option or the value of \fB::ntext::classicWrap\fR are changed while the widget holds text, then calls to \fIntext\fR functions are needed to alter the indentation\&.  See the section \fBINDENTING DISPLAY LINES\fR for detailed instructions\&.
.IP \(bu
1 - (default value) selects classic \fIText\fR behaviour, i\&.e\&. no indentation\&.
.PP
\fIAdvanced Use\fR
.PP
\fB::ntext::newWrapRegexp\fR
.IP \(bu
the value is a regexp pattern that determines the character of a logical line to which display lines other than the first will be aligned\&.  The default value, \fB[^[:space:]]\fR, ensures alignment with the first non-whitespace character\&.
.PP
.SH "INDENTING DISPLAY LINES"
To use \fINtext\fR 's display line indentation:
.IP [1]
Set the variable \fB::ntext::classicWrap\fR to \fB0\fR (default value is \fB1\fR)\&.  This enables bindings that will preserve indentation whenever the user modifies the widget contents using the keyboard and mouse\&.  If the widget already holds text, call \fB::ntext::wrapIndent\fR to initialise indentation\&.
.sp
Further instructions apply if the program changes the widget's contents, wrap configuration, or indent configuration\&.
.IP [2]
The program can change the text contents, e\&.g\&. by the \&.text insert command\&.  Such a change does not trigger a window binding, so the program should explicitly call function \fB::ntext::wrapIndent\fR after inserting text\&.
.IP [3]
Auto-indentation occurs only if the widget is in \fI-wrap\fR \fIword\fR mode\&.  If the program changes to or from \fI-wrap\fR \fIword\fR when the widget is not empty, it should call \fB::ntext::wrapIndent\fR to format the widget's text\&.
.IP [4]
If indentation is used, and then switched off by setting \fB::ntext::classicWrap\fR to \fB1\fR,  call \fB::ntext::wrapIndent\fR to remove indentation\&.
.PP
.SH FUNCTIONS
\fB::ntext::wrapIndent\fR \fItextWidget\fR ?index1? ?index2?
.IP \(bu
Adjust the indentation of a text widget\&.  Different cases are discussed below\&.
.PP
\fB::ntext::wrapIndent\fR \fItextWidget\fR
.IP \(bu
Adjust the indentation of all the text in text widget \fItextWidget\fR\&.
.PP
\fB::ntext::wrapIndent\fR \fItextWidget\fR \fIindex1\fR
.IP \(bu
Adjust the indentation of a single logical line of a text widget - the line of \fItextWidget\fR that contains the index \fIindex1\fR\&.
.PP
\fB::ntext::wrapIndent\fR \fItextWidget\fR \fIindex1\fR \fIindex2\fR
.IP \(bu
Adjust the indentation of a range of logical lines of a text widget - the lines of \fItextWidget\fR that contain indices \fIindex1\fR to \fIindex2\fR\&.
.PP
\fIUsage\fR
.IP \(bu
\fB::ntext::wrapIndent\fR should be called only if the script changes the widget's contents or display properties\&.  If the contents of the widget have been modified by the keyboard or mouse, it is not necessary for the script to call \fB::ntext::wrapIndent\fR because the appropriate calls are made automatically by the \fINtext\fR bindings\&.
.IP \(bu
The script should normally call \fB::ntext::wrapIndent\fR if, for example, the script changes one of the following when the widget is not empty: the value of \fB::ntext::classicWrap\fR, or the widget's \fI-wrap\fR status, or the widget's tab spacing, or the font size, or the widget's contents\&.
.IP \(bu
A call of the form \fB::ntext::wrapIndent\fR \fItextWidget\fR will always suffice, but if changes are needed only to certain lines, it is more efficient to specify those lines with the optional arguments ?index1?, ?index2?\&.
.IP \(bu
If the widget is in \fI-word\fR \fIwrap\fR mode, and if \fB::ntext::classicWrap\fR is set to \fB0\fR, \fB::ntext::wrapIndent\fR will apply indentation to the logical lines within the range specified by the function's arguments\&.
.IP \(bu
In other cases, i\&.e\&. if the widget is in \fI-word\fR \fIchar\fR or \fI-word\fR \fInone\fR mode, or if \fB::ntext::classicWrap\fR is set to \fB1\fR,  \fB::ntext::wrapIndent\fR will remove the indentation of the logical lines within the range specified by the function's arguments\&.
.PP
.SH EXAMPLES
To switch on \fINtext\fR 's indentation and use it in widget \&.t:
.CS


package require ntext
set ::ntext::classicWrap 0
text \&.t -wrap word
bindtags \&.t {\&.t Ntext \&. all}

.CE
To decide later to switch off \fINtext\fR 's indentation:
.CS


set ::ntext::classicWrap 1
::ntext::wrapIndent \&.t

.CE
To decide later to switch \fINtext\fR 's indentation back on:
.CS


set ::ntext::classicWrap 0
::ntext::wrapIndent \&.t 1\&.0 end

.CE
To inject some text into the widget:
.CS


set foo [\&.t index end]
\&.t insert end {This line was added by the script, not the keyboard!}
::ntext::wrapIndent \&.t $foo end

.CE
To switch to \fI-wrap\fR \fIchar\fR mode:
.CS


\&.t configure -wrap char
::ntext::wrapIndent \&.t

.CE
.SH "SEE ALSO"
bindtags, ntext, re_syntax, regexp, text
.SH KEYWORDS
bindtags, re_syntax, regexp, text

Added embedded/man/files/modules/ntext/ntextWordBreak.n.











































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/ntext/ntextWordBreak\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "ntextWordBreak" n 0\&.81 tklib "ntext Word Boundary Detection for the Text Widget"
.BS
.SH NAME
ntextWordBreak \- ntext Word Boundary Detection for the Text Widget
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBntext  ?0\&.81?\fR
.sp
.BE
.SH DESCRIPTION
The \fBntext\fR package provides a binding tag named \fINtext\fR for use by text widgets in place of the default \fIText\fR binding tag\&.
.PP
Navigation and selection in a text widget require the detection of words and their boundaries\&.  The word boundary detection facilities provided by Tcl/Tk through the \fIText\fR binding tag are limited because they define only one class of "word" characters and one class of "non-word" characters\&.  The \fINtext\fR binding tag uses more general rules for word boundary detection, that define \fItwo\fR classes of "word" characters and one class of "non-word" characters\&.
.PP
.SH "CONFIGURATION OPTIONS"
The behaviour of \fINtext\fR may be configured application-wide by setting the values of a number of namespace variables\&.  One of these is relevant to word boundary detection:
.PP
\fB::ntext::classicWordBreak\fR
.IP \(bu
\fB0\fR - (default value) selects \fINtext\fR behaviour, i\&.e\&. platform-independent, two classes of word characters and one class of non-word characters\&.
.IP \(bu
\fB1\fR - selects classic \fIText\fR behaviour, i\&.e\&. platform-dependent, one class of word characters and one class of non-word characters
.IP \(bu
After changing this value, \fINtext\fR 's regexp matching patterns should be recalculated\&.  See \fBFUNCTIONS\fR for details and advanced configuration options\&.
.PP
.PP
.SH "ADVANCED USE"
.SH "VARIABLES (ADVANCED USE)"
\fB::ntext::tcl_match_wordBreakAfter\fR
.PP
\fB::ntext::tcl_match_wordBreakBefore\fR
.PP
\fB::ntext::tcl_match_endOfWord\fR
.PP
\fB::ntext::tcl_match_startOfNextWord\fR
.PP
\fB::ntext::tcl_match_startOfPreviousWord\fR
.PP
These variables hold the regexp patterns that are used by \fINtext\fR to search for word boundaries\&.  If they are changed, subsequent searches are immediately altered\&.  In many situations, it it unnecessary to alter the values of these variables directly: instead call one of the functions \fB::ntext::initializeMatchPatterns\fR, \fB::ntext::createMatchPatterns\fR\&.
.PP
In the \fIText\fR binding tag one can change the search rules by changing the values of the global variables \fBtcl_wordchars\fR and \fBtcl_nonwordchars\fR\&.  The equivalent operation in the \fINtext\fR binding tag is to call \fB::ntext::createMatchPatterns\fR with appropriate arguments\&.
.SH "FUNCTIONS (ADVANCED USE)"
If a simple regexp search should prove insufficient, the following functions (analogous to the Tcl/Tk core's \fBtcl_wordBreakAfter\fR etc) may be replaced by the developer:
.PP
\fBntext::new_wordBreakAfter\fR
.PP
\fBntext::new_wordBreakBefore\fR
.PP
\fBntext::new_endOfWord\fR
.PP
\fBntext::new_startOfNextWord\fR
.PP
\fBntext::new_startOfPreviousWord\fR
.PP
.SH FUNCTIONS
Each function calculates the five regexp search patterns that define the word boundary searches\&.  These values are stored in the namespace variables listed above\&.
.PP
\fB::ntext::initializeMatchPatterns\fR
.IP \(bu
This function is called when \fINtext\fR is first used, and needs to be called again only if the script changes the value of either \fB::ntext::classicWordBreak\fR or \fB::tcl_platform(platform)\fR\&.  The function is called with no arguments\&.  It is useful when the desired search patterns are the default patterns for either the \fINtext\fR or \fIText\fR binding tag, and so are implicitly specified by the values of \fB::ntext::classicWordBreak\fR and \fB::tcl_platform(platform)\fR alone\&.
.PP
\fB::ntext::createMatchPatterns\fR \fInew_nonwordchars\fR \fInew_word1chars\fR ?new_word2chars?
.IP \(bu
This function is useful in a wider range of situations than \fB::ntext::initializeMatchPatterns\fR\&.  It calculates the regexp search patterns for any case with one class of "non-word" characters and one or two classes of "word" characters\&.
.sp
Each argument should be a regexp expression defining a class of characters\&.  An argument will usually be a bracket expression, but might alternatively be a class-shorthand escape, or a single character\&.  The third argument may be omitted, or supplied as the empty string, in which case it is unused\&.
.sp
The first argument is interpreted as the class of non-word characters; the second argument (and the third, if present) are classes of word characters\&.  The classes should include all possible characters and will normally be mutually exclusive: it is often convenient to define one class as the negation of the other two\&.
.PP
.SH "WORD BOUNDARY MATCHING"
The problem of word boundary selection is a vexed one, because text is used to represent a universe of different types of information, and there are no simple rules that are useful for all data types or for all purposes\&.
.PP
\fINtext\fR attempts to improve on the facilities available in classic \fIText\fR by providing facilities for more complex definitions of words (with three classes of characters instead of two)\&.
.PP
\fIWhat is a word?  Why two classes of word?\fR
.PP
When using the modified cursor keys <Control-Left> and <Control-Right> to navigate through a \fINtext\fR widget, the cursor is placed at the start of a word\&.  A word is defined as a sequence of one or more characters from only one of the two defined "word" classes; it may be preceded by a character from the other "word" class or from the "non-word" class\&.
.PP
The double-click of mouse button 1 selects a word of text, where in this case a "word" may be as defined above, or alternatively may be a sequence of one or more characters from the "non-word" class of characters\&.
.PP
Traditionally Tcl has defined only one word class and one non-word class: on Windows, the non-word class is whitespace, and so alphanumerics and punctuation belong to the same class\&.  On other platforms, punctuation is bundled with whitespace as "non-word" characters\&.  In either case, the navigation and selection of text are unnecessarily coarse-grained, and sometimes give unhelpful results\&.
.PP
The use of three classes of characters might make selection too fine-grained; but in this case, holding down the \fIShift\fR key and double-clicking another word is an excellent way to select a longer range of text (a useful binding that Tcl/Tk has long provided but which is missing in other systems)\&.
.PP
As well as its defaults, \fINtext\fR permits the developer to define their own classes of characters, or to revert to the classic \fIText\fR definitions, or to specify their own regexp matching patterns\&.
.SH EXAMPLE
To use \fINtext\fR with Tcl/Tk's usual word-boundary detection rules:
.CS


package require ntext
text \&.t
bindtags \&.t {\&.t Ntext \&. all}
set ::ntext::classicWordBreak 1
::ntext::initializeMatchPatterns

.CE
See bindtags for more information\&.
.PP
To define a different set of word-boundary detection rules:
.CS


package require ntext
text \&.t
bindtags \&.t {\&.t Ntext \&. all}
::ntext::createMatchPatterns \\
  {[[:space:][:cntrl:]]} {[[:punct:]]} {[^[:punct:][:space:][:cntrl:]]}

.CE
See regexp, re_syntax for more information\&.
.SH "SEE ALSO"
bindtags, ntext, re_syntax, regexp, text
.SH KEYWORDS
bindtags, re_syntax, regexp, text

Added embedded/man/files/modules/plotchart/plotchart.n.

















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/plotchart/plotchart\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c) 2011 Arjen Markus <arjenmarkus@users\&.sourceforge\&.net>
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "Plotchart" n 2\&.0\&.2 tklib "Plotchart"
.BS
.SH NAME
Plotchart \- Simple plotting and charting package
.SH SYNOPSIS
package require \fBTcl  ?8\&.5?\fR
.sp
package require \fBTk  ?8\&.5?\fR
.sp
package require \fBPlotchart  ?2\&.1\&.0?\fR
.sp
\fB::Plotchart::createXYPlot\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR \fIargs\fR
.sp
\fB::Plotchart::createStripchart\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR
.sp
\fB::Plotchart::createTXPlot\fR \fIw\fR \fItimeaxis\fR \fIxaxis\fR
.sp
\fB::Plotchart::createXLogYPlot\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR
.sp
\fB::Plotchart::createLogXYPlot\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR
.sp
\fB::Plotchart::createLogXLogYPlot\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR
.sp
\fB::Plotchart::createPolarPlot\fR \fIw\fR \fIradius_data\fR
.sp
\fB::Plotchart::createWindrose\fR \fIw\fR \fIradius_data\fR \fIsectors\fR
.sp
\fB::Plotchart::createIsometricPlot\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR \fIstepsize\fR
.sp
\fB::Plotchart::createHistogram\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR
.sp
\fB::Plotchart::create3DPlot\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR \fIzaxis\fR
.sp
\fB::Plotchart::create3DRibbonPlot\fR \fIw\fR \fIyaxis\fR \fIzaxis\fR
.sp
\fB::Plotchart::createPiechart\fR \fIw\fR
.sp
\fB::Plotchart::createSpiralPie\fR \fIw\fR
.sp
\fB::Plotchart::createRadialchart\fR \fIw\fR \fInames\fR \fIscale\fR \fIstyle\fR
.sp
\fB::Plotchart::createBarchart\fR \fIw\fR \fIxlabels\fR \fIyaxis\fR \fInoseries\fR
.sp
\fB::Plotchart::createHorizontalBarchart\fR \fIw\fR \fIxaxis\fR \fIylabel\fR \fInoseries\fR
.sp
\fB::Plotchart::create3DBarchart\fR \fIw\fR \fIyaxis\fR \fInobars\fR
.sp
\fB::Plotchart::create3DRibbonChart\fR \fIw\fR \fInames\fR \fIyaxis\fR \fIzaxis\fR
.sp
\fB::Plotchart::createBoxplot\fR \fIw\fR \fIxdata\fR \fIydata\fR \fIorientation\fR
.sp
\fB::Plotchart::createTimechart\fR \fIw\fR \fItime_begin\fR \fItime_end\fR \fIargs\fR
.sp
\fB::Plotchart::createGanttchart\fR \fIw\fR \fItime_begin\fR \fItime_end\fR \fIargs\fR
.sp
\fB::Plotchart::createRightAxis\fR \fIw_or_plot\fR \fIyaxis\fR
.sp
\fB::Plotchart::createTableChart\fR \fIw\fR \fIcolumns\fR ?widths?
.sp
\fB$anyplot\fR title \fItext\fR \fIposition\fR
.sp
\fB$anyplot\fR subtitle \fItext\fR
.sp
\fB$anyplot\fR canvas
.sp
\fB$anyplot\fR saveplot \fIfilename\fR \fIargs\fR
.sp
\fB$anyplot\fR xtext \fItext\fR
.sp
\fB$anyplot\fR ytext \fItext\fR
.sp
\fB$anyplot\fR vtext \fItext\fR
.sp
\fB$anyplot\fR xsubtext \fItext\fR
.sp
\fB$anyplot\fR ysubtext \fItext\fR
.sp
\fB$anyplot\fR vsubtext \fItext\fR
.sp
\fB$anyplot\fR xconfig \fB-option\fR \fIvalue\fR \&.\&.\&.
.sp
\fB$anyplot\fR yconfig \fB-option\fR \fIvalue\fR \&.\&.\&.
.sp
\fB$anyplot\fR background \fIpart\fR \fIcolour_or_image\fR \fIdir\fR ?brightness?
.sp
\fB$anyplot\fR xticklines \fIcolour\fR ?dash?
.sp
\fB$anyplot\fR yticklines \fIcolour\fR ?dash?
.sp
\fB$anyplot\fR legend \fIseries\fR \fItext\fR ?spacing?
.sp
\fB$anyplot\fR removefromlegend \fIseries\fR
.sp
\fB$anyplot\fR legendconfig \fB-option\fR \fIvalue\fR \&.\&.\&.
.sp
\fB$anyplot\fR balloon \fIx\fR \fIy\fR \fItext\fR \fIdir\fR
.sp
\fB$anyplot\fR balloonconfig \fIargs\fR
.sp
\fB$anyplot\fR plaintext \fIx\fR \fIy\fR \fItext\fR \fIdir\fR
.sp
\fB$anyplot\fR plaintextconfig \fIargs\fR
.sp
\fB$anyplot\fR object \fIitemtype\fR \fIseries\fR \fIargs\fR
.sp
\fB$anyplot\fR deletedata
.sp
\fB$xyplot\fR plot \fIseries\fR \fIxcrd\fR \fIycrd\fR
.sp
\fB$xyplot\fR plotlist \fIseries\fR \fIxlist\fR \fIylist\fR \fIevery\fR
.sp
\fB$histogram\fR plotcumulative \fIseries\fR \fIxcrd\fR \fIycrd\fR
.sp
\fB$xyplot\fR trend \fIseries\fR \fIxcrd\fR \fIycrd\fR
.sp
\fB$xyplot\fR rchart \fIseries\fR \fIxcrd\fR \fIycrd\fR
.sp
\fB$xyplot\fR interval \fIseries\fR \fIxcrd\fR \fIymin\fR \fIymax\fR ?ycentr?
.sp
\fB$xyplot\fR box-and-whiskers \fIseries\fR \fIxcrd\fR \fIycrd\fR
.sp
\fB$xyplot\fR vector \fIseries\fR \fIxcrd\fR \fIycrd\fR \fIucmp\fR \fIvcmp\fR
.sp
\fB$xyplot\fR vectorconfig \fIseries\fR \fB-option\fR \fIvalue\fR \&.\&.\&.
.sp
\fB$xyplot\fR dot \fIseries\fR \fIxcrd\fR \fIycrd\fR \fIvalue\fR
.sp
\fB$xyplot\fR dotconfig \fIseries\fR \fB-option\fR \fIvalue\fR \&.\&.\&.
.sp
\fB$xyplot\fR contourlines \fIxcrd\fR \fIycrd\fR \fIvalues\fR ?classes?
.sp
\fB$xyplot\fR contourlinesfunctionvalues \fIxvec\fR \fIyvec\fR \fIvaluesmat\fR ?classes?
.sp
\fB$xyplot\fR contourfill \fIxcrd\fR \fIycrd\fR \fIvalues\fR ?classes?
.sp
\fB$xyplot\fR contourbox \fIxcrd\fR \fIycrd\fR \fIvalues\fR ?classes?
.sp
\fB$xyplot\fR colorMap \fIcolours\fR
.sp
\fB$xyplot\fR legendisolines \fIvalues\fR \fIclasses\fR
.sp
\fB$xyplot\fR legendshades \fIvalues\fR \fIclasses\fR
.sp
\fB$xyplot\fR grid \fIxcrd\fR \fIycrd\fR
.sp
\fB$xyplot\fR xband \fIymin\fR \fIymax\fR
.sp
\fB$xyplot\fR yband \fIxmin\fR \fIxmax\fR
.sp
\fB$xyplot\fR labeldot \fIx\fR \fIy\fR \fItext\fR \fIorient\fR
.sp
\fB$polarplot\fR plot \fIseries\fR \fIradius\fR \fIangle\fR
.sp
\fB$windrose\fR plot \fIdata\fR \fIcolour\fR
.sp
\fB$plot3d\fR plotfunc \fIfunction\fR
.sp
\fB$plot3d\fR plotfuncont \fIfunction\fR \fIcontours\fR
.sp
\fB$plot3d\fR gridsize \fInxcells\fR \fInycells\fR
.sp
\fB$plot3d\fR plotdata \fIdata\fR
.sp
\fB$plot3d\fR colours \fIfill\fR \fIborder\fR
.sp
\fB$plot3d\fR ribbon \fIyzpairs\fR
.sp
\fB$plot3d\fR plot \fIyzpairs\fR
.sp
\fB$xyplot\fR dataconfig \fIseries\fR \fB-option\fR \fIvalue\fR \&.\&.\&.
.sp
\fB$pie\fR plot \fIdata\fR
.sp
\fB$pie\fR colours \fIcolour1\fR \fIcolour2\fR \&.\&.\&.
.sp
\fB$pie\fR explode \fIsegment\fR
.sp
\fB$radial\fR plot \fIdata\fR \fIcolour\fR \fIthickness\fR
.sp
\fB$pie\fR colours \fIcolour1\fR \fIcolour2\fR \&.\&.\&.
.sp
\fB$barchart\fR plot \fIseries\fR \fIydata\fR \fIcolour\fR ?dir? ?brightness?
.sp
\fB$barchart\fR config \fB-option\fR \fIvalue\fR \&.\&.\&.
.sp
\fB$barchart\fR plot \fIseries\fR \fIxdata\fR \fIcolour\fR ?dir? ?brightness?
.sp
\fB$barchart\fR config \fB-option\fR \fIvalue\fR \&.\&.\&.
.sp
\fB$barchart\fR plot \fIlabel\fR \fIyvalue\fR \fIcolour\fR
.sp
\fB$barchart\fR config \fB-option\fR \fIvalue\fR \&.\&.\&.
.sp
\fB$ribbon\fR line \fIxypairs\fR \fIcolour\fR
.sp
\fB$ribbon\fR area \fIxypairs\fR \fIcolour\fR
.sp
\fB$boxplot\fR plot \fIseries\fR \fIlabel\fR \fIvalues\fR
.sp
\fB$timechart\fR period \fItext\fR \fItime_begin\fR \fItime_end\fR \fIcolour\fR
.sp
\fB$timechart\fR milestone \fItext\fR \fItime\fR \fIcolour\fR
.sp
\fB$timechart\fR vertline \fItext\fR \fItime\fR
.sp
\fB$timechart\fR hscroll \fIscrollbar\fR
.sp
\fB$timechart\fR vscroll \fIscrollbar\fR
.sp
\fB$ganttchart\fR task \fItext\fR \fItime_begin\fR \fItime_end\fR \fIcompleted\fR
.sp
\fB$ganttchart\fR milestone \fItext\fR \fItime\fR \fIcolour\fR
.sp
\fB$ganttchart\fR vertline \fItext\fR \fItime\fR
.sp
\fB$ganttchart\fR connect \fIfrom\fR \fIto\fR
.sp
\fB$ganttchart\fR summary \fItext\fR \fIargs\fR
.sp
\fB$ganttchart\fR color \fIkeyword\fR \fInewcolor\fR
.sp
\fB$ganttchart\fR font \fIkeyword\fR \fInewfont\fR
.sp
\fB$ganttchart\fR hscroll \fIscrollbar\fR
.sp
\fB$ganttchart\fR vscroll \fIscrollbar\fR
.sp
\fB$isoplot\fR plot rectangle \fIx1\fR \fIy1\fR \fIx2\fR \fIy2\fR \fIcolour\fR
.sp
\fB$isoplot\fR plot filled-rectangle \fIx1\fR \fIy1\fR \fIx2\fR \fIy2\fR \fIcolour\fR
.sp
\fB$isoplot\fR plot circle \fIxc\fR \fIyc\fR \fIradius\fR \fIcolour\fR
.sp
\fB$isoplot\fR plot filled-circle \fIxc\fR \fIyc\fR \fIradius\fR \fIcolour\fR
.sp
\fB$table\fR row \fIitems\fR
.sp
\fB$table\fR separator
.sp
\fB$table\fR formatcommand \fIprocname\fR
.sp
\fB$table\fR cellconfigure \fIargs\fR
.sp
\fB::Plotchart::viewPort\fR \fIw\fR \fIpxmin\fR \fIpymin\fR \fIpxmax\fR \fIpymax\fR
.sp
\fB::Plotchart::worldCoordinates\fR \fIw\fR \fIxmin\fR \fIymin\fR \fIxmax\fR \fIymax\fR
.sp
\fB::Plotchart::world3DCoordinates\fR \fIw\fR \fIxmin\fR \fIymin\fR \fIzmin\fR \fIxmax\fR \fIymax\fR \fIzmax\fR
.sp
\fB::Plotchart::coordsToPixel\fR \fIw\fR \fIx\fR \fIy\fR
.sp
\fB::Plotchart::coords3DToPixel\fR \fIw\fR \fIx\fR \fIy\fR \fIz\fR
.sp
\fB::Plotchart::polarCoordinates\fR \fIw\fR \fIradmax\fR
.sp
\fB::Plotchart::polarToPixel\fR \fIw\fR \fIrad\fR \fIphi\fR
.sp
\fB::Plotchart::pixelToCoords\fR \fIw\fR \fIx\fR \fIy\fR
.sp
\fB::Plotchart::pixelToIndex\fR \fIw\fR \fIx\fR \fIy\fR
.sp
\fB::Plotchart::determineScale\fR \fIxmin\fR \fIxmax\fR \fIinverted\fR
.sp
\fB::Plotchart::determineScaleFromList\fR \fIvalues\fR \fIinverted\fR
.sp
\fB::Plotchart::plotconfig\fR \fIcharttype\fR \fIcomponent\fR \fIproperty\fR \fIvalue\fR
.sp
\fB::Plotchart::plotstyle\fR \fIsubcmd\fR \fIstyle\fR \fIargs\fR
.sp
\fB::Plotchart::createTargetDiagram\fR \fIw\fR \fIlimits\fR \fIscale\fR
.sp
\fB$target\fR plot \fIseries\fR \fIxvalues\fR \fIyvalues\fR
.sp
\fB::Plotchart::createPerformanceProfile\fR \fIw\fR \fImax\fR
.sp
\fB$performance\fR plot \fIseries_and_data_pairs\fR
.sp
\fB::Plotchart::plotmethod\fR \fIcharttype\fR \fImethodname\fR \fIplotproc\fR
.sp
\fB::Plotchart::plotpack\fR \fIw\fR \fIdir\fR \fIargs\fR
.sp
\fB$anyplot\fR bindplot \fIevent\fR \fIcommand\fR \fIargs\fR
.sp
\fB$anyplot\fR bindlast \fIseries\fR \fIevent\fR \fIcommand\fR
.sp
.BE
.SH DESCRIPTION
.PP
Plotchart is a Tcl-only package that focuses on the easy creation of
xy-plots, barcharts and other common types of graphical presentations\&.
The emphasis is on ease of use, rather than flexibility\&. The procedures
that create a plot use the entire canvas window, making the layout
of the plot completely automatic\&.
.PP
This results in the creation of an xy-plot in, say, ten lines of code:
.PP
.CS


    package require Plotchart

    canvas \&.c -background white -width 400 -height 200
    pack   \&.c -fill both

    #
    # Create the plot with its x- and y-axes
    #
    set s [::Plotchart::createXYPlot \&.c {0\&.0 100\&.0 10\&.0} {0\&.0 100\&.0 20\&.0}]

    foreach {x y} {0\&.0 32\&.0 10\&.0 50\&.0 25\&.0 60\&.0 78\&.0 11\&.0 } {
        $s plot series1 $x $y
    }

    $s title "Data series"

.CE
.PP
A drawback of the package might be that it does not do any data
management\&. So if the canvas that holds the plot is to be resized, the
whole plot must be redrawn\&.
The advantage, though, is that it offers a number of plot and chart
types:
.IP \(bu
XY-plots like the one shown above with any number of data series\&.
.IP \(bu
Stripcharts, a kind of XY-plots where the horizontal axis is adjusted
automatically\&. The result is a kind of sliding window on the data
series\&.
.IP \(bu
Polar plots, where the coordinates are polar instead of cartesian\&.
.IP \(bu
Histograms, for plotting statistical information\&.
.IP \(bu
Isometric plots, where the scale of the coordinates in the two
directions is always the same, i\&.e\&. a circle in world coordinates
appears as a circle on the screen\&.
.sp
You can zoom in and out, as well as pan with these plots (\fINote:\fR
this works best if no axes are drawn, the zooming and panning routines
do not distinguish the axes), using the mouse buttons with the control
key and the arrow keys with the control key\&.
.IP \(bu
Piecharts, with automatic scaling to indicate the proportions\&.
.IP \(bu
Barcharts, with either vertical or horizontal bars, stacked bars or
bars side by side\&.
.IP \(bu
Timecharts, where bars indicate a time period and milestones or other
important moments in time are represented by triangles\&.
.IP \(bu
3D plots (both for displaying surfaces and 3D bars)
.PP
With version 1\&.5 a new command has been introduced: plotconfig, which
can be used to configure the plot options for particular types of plots
and charts (cf\&. \fBCONFIGURATION OPTIONS\fR)
With version 1\&.8\&.3 several new features were introduced, which allow more interactivity
(cf\&. \fBINTERACTIVE USE\fR)
.SH "PLOT CREATION COMMANDS"
You create the plot or chart with one single command and then fill the
plot with data:
.TP
\fB::Plotchart::createXYPlot\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR \fIargs\fR
Create a new xy-plot (configuration type: xyplot)\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fIxaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the x-axis, in this order\&.
For an inverted axis, where the maximum appears on the left-hand side,
use: maximum, minimum and a \fInegative\fR stepsize\&.
.TP
list \fIyaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order\&.
For an inverted axis, where the maximum appears at the bottom,
use: maximum, minimum and a \fInegative\fR stepsize\&.
.TP
list \fIargs\fR (in)
Zero or more options that influence the appearance of the plot:
.RS
.IP \(bu
\fI-xlabels {labels}:\fR Custom labels for the x-axis\&. If the labels
are numeric, they are positioned according to the given scale,
otherwise they are positioned with equal distance, based on the number
of labels\&. Note: this only works if the stepsize of the xaxis argument is
the empty string\&.
.IP \(bu
\fI-ylabels {labels}:\fR Similarly, custom labels for the y-axis\&.
.IP \(bu
\fI-box {measures}:\fR See \fBARRANGING MULTIPLE PLOTS IN A CANVAS\fR
.IP \(bu
\fI-axesbox {measures}:\fR See \fBARRANGING MULTIPLE PLOTS IN A CANVAS\fR
.RE
.RE
.sp
.TP
\fB::Plotchart::createStripchart\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR
Create a new strip chart (configuration type: stripchart)\&. The
only difference to a regular XY plot is
that the x-axis will be automatically adjusted when the x-coordinate
of a new point exceeds the maximum\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fIxaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the x-axis, in this order\&.
Note that an inverted x-axis is \fInot\fR supported for this type of plot\&.
.TP
list \fIyaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order\&.
For an inverted axis, where the maximum appears at the bottom,
use: maximum, minimum and a \fInegative\fR stepsize\&.
.RE
.sp
.TP
\fB::Plotchart::createTXPlot\fR \fIw\fR \fItimeaxis\fR \fIxaxis\fR
Create a new time-x-plot (configuration type: txplot)\&. The horizontal axis represents the date/time
of the data and the vertical axis the values themselves\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fItimeaxis\fR (in)
A 3-element list containing the minimum and maximum date/time to be
shown and the stepsize (\fIin days\fR) for the time-axis, in this order\&.
Note that an inverted time-axis is \fInot\fR supported\&.
.TP
list \fIxaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the
vertical axis, in this order\&.
For an inverted axis, where the maximum appears at the bottom,
use: maximum, minimum and a \fInegative\fR stepsize\&.
.RE
.sp
.TP
\fB::Plotchart::createXLogYPlot\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR
Create a new xy-plot where the y-axis has a logarithmic scale (configuration type: xlogyplot)\&.
.sp
The data should be given as for a linear scale, as the logarithmic transformation
is taken of internally\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fIxaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the x-axis, in this order\&.
For an inverted axis, where the maximum appears on the left-hand side,
use: maximum, minimum and a \fInegative\fR stepsize\&.
.TP
list \fIyaxis\fR (in)
A 2-element list containing minimum and maximum for the y-axis, in this order\&.
Note that an inverted logarithmic axis is \fInot\fR supported\&.
.RE
.sp
.TP
\fB::Plotchart::createLogXYPlot\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR
Create a new xy-plot where the x-axis has a logarithmic scale (configuration type: logxyplot)\&.
.sp
The data should be given as for a linear scale, as the logarithmic transformation
is taken of internally\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fIxaxis\fR (in)
A 2-element list containing minimum and maximum for the x-axis, in this order\&.
Note that an inverted logarithmic axis is \fInot\fR supported\&.
.TP
list \fIyaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order\&.
For an inverted axis, where the maximum appears on the left-hand side,
use: maximum, minimum and a \fInegative\fR stepsize\&.
.RE
.sp
.TP
\fB::Plotchart::createLogXLogYPlot\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR
Create a new xy-plot where both the x-axis and the y-axis have a logarithmic scale
(configuration type: logxlogyplot)\&.
.sp
The data should be given as for a linear scale, as the logarithmic transformation
is taken of internally\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fIxaxis\fR (in)
A 2-element list containing minimum and maximum for the x-axis, in this order\&.
Note that an inverted logarithmic axis is \fInot\fR supported\&.
.TP
list \fIyaxis\fR (in)
A 2-element list containing minimum and maximum for the y-axis, in this order\&.
Note that an inverted logarithmic axis is \fInot\fR supported\&.
.RE
.sp
.TP
\fB::Plotchart::createPolarPlot\fR \fIw\fR \fIradius_data\fR
Create a new polar plot (configuration type: polarplot)\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fIradius_data\fR (in)
A 2-element list containing maximum radius and stepsize for the radial
axis, in this order\&.
.RE
.sp
.TP
\fB::Plotchart::createWindrose\fR \fIw\fR \fIradius_data\fR \fIsectors\fR
Create a new windrose diagram\&. The diagram will consist of concentric
circles as defined by the \fIradius_data\fR argument and a number of
sectors (given by the \fIsectors\fR argument)\&. The sectors are drawn in
the "nautical" convention, that is: the first is located at the positive
y-axis, the second is to the right and so on in a clockwise direction\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the diagram
.TP
list \fIradius_data\fR (in)
A 2-element list, the first element is the maximum radius, the second is
the step to be used for the circles\&.
.TP
int \fIsectors\fR
Number of sectors to use (defaults to 16)\&.
.RE
.sp
.TP
\fB::Plotchart::createIsometricPlot\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR \fIstepsize\fR
Create a new isometric plot, where the vertical and the horizontal
coordinates are scaled so that a circle will truly appear as a circle (configuration type: isometric)\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fIxaxis\fR (in)
A 2-element list containing minimum, and maximum for the x-axis, in this order\&.
.TP
list \fIyaxis\fR (in)
A 2-element list containing minimum, and maximum for the y-axis, in this order\&.
.TP
float|\fBnoaxes\fR \fIstepsize\fR (in)
Either the stepsize used by both axes or the keyword \fBnoaxes\fR to
signal the plot that it should use the full area of the widget, to not
draw any of the axes\&.
.RE
.sp
.TP
\fB::Plotchart::createHistogram\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR
Create a new histogram (configuration type: histogram)\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fIxaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the x-axis, in this order\&.
.TP
list \fIyaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order\&.
.RE
.sp
.TP
\fB::Plotchart::create3DPlot\fR \fIw\fR \fIxaxis\fR \fIyaxis\fR \fIzaxis\fR
Create a new 3D plot\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fIxaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the x-axis, in this order\&.
.TP
list \fIyaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order\&.
.TP
list \fIzaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the z-axis, in this order\&.
.RE
.sp
.TP
\fB::Plotchart::create3DRibbonPlot\fR \fIw\fR \fIyaxis\fR \fIzaxis\fR
Create a new 3D ribbon plot\&. It is a simplification of the full 3D plot and allows for
the drawing of a ribbon only (the x-axis is dropped)\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fIyaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order\&.
.TP
list \fIzaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the z-axis, in this order\&.
.RE
.sp
.TP
\fB::Plotchart::createPiechart\fR \fIw\fR
Create a new piechart (configuration type: piechart)\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.RE
.sp
.TP
\fB::Plotchart::createSpiralPie\fR \fIw\fR
Create a new "spiral pie" (configuration type: spiralpie), a variation on the ordinary
piechart\&. The value is used to scale the radius, rather than the angle\&. By default the
data are sorted\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.RE
.sp
.TP
\fB::Plotchart::createRadialchart\fR \fIw\fR \fInames\fR \fIscale\fR \fIstyle\fR
Create a new radial chart (the data are drawn as a line connecting the
spokes of the diagram) (configuration type: radialchart)\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fInames\fR (in)
Names for the spokes\&.
.TP
float \fIscale\fR (in)
Scale value to determine the position of the data along the spokes\&.
.TP
string \fIstyle\fR (in)
Style of the chart (optional)\&. One of:
.RS
.IP \(bu
\fIlines\fR - the default: draw the data as independent polylines\&.
.IP \(bu
\fIcumulative\fR - draw the data as polylines where the data are
accumulated\&.
.IP \(bu
\fIfilled\fR - draw the data as filled polygons where the data are
accumulated
.RE
.RE
.sp
.TP
\fB::Plotchart::createBarchart\fR \fIw\fR \fIxlabels\fR \fIyaxis\fR \fInoseries\fR
Create a new barchart with vertical bars (configuration type: vertbars)\&. The horizontal axis will
display the labels contained in the argument \fIxlabels\fR\&. The number
of series given by \fInoseries\fR determines both the width of the
bars, and the way the series will be drawn\&.
.sp
If the keyword \fBstacked\fR was specified the series will be drawn
stacked on top of each other\&. Otherwise each series that is drawn will
be drawn shifted to the right\&.
.sp
The number of series determines the width of the bars, so that there is
space of that number of bars\&. If you use a floating-point number, like
2\&.2, instead of an integer, like 2, a small gap between the sets of bars
will be drawn - the width depends on the fractional part\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fIxlabels\fR (in)
List of labels for the x-axis\&. Its length also determines the number of
bars that will be plotted per series\&.
.TP
list \fIyaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order\&.
.TP
int|\fBstacked\fR \fInoseries\fR (in)
The number of data series that will be plotted\&. This has to be an
integer number greater than zero (if \fBstacked\fR is not used)\&.
.RE
.sp
.TP
\fB::Plotchart::createHorizontalBarchart\fR \fIw\fR \fIxaxis\fR \fIylabel\fR \fInoseries\fR
Create a new barchart with horizontal bars (configuration type: horizbars)\&. The vertical axis will
display the labels contained in the argument \fIylabels\fR\&. The number
of series given by \fInoseries\fR determines both the width of the
bars, and the way the series will be drawn\&.
.sp
If the keyword \fBstacked\fR was specified the series will be drawn
stacked from left to right\&. Otherwise each series that is drawn will
be drawn shifted upward\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fIxaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the x-axis, in this order\&.
.TP
list \fIylabels\fR (in)
List of labels for the y-axis\&. Its length also determines the number of
bars that will be plotted per series\&.
.TP
int|\fBstacked\fR \fInoseries\fR (in)
The number of data series that will be plotted\&. This has to be an
integer number greater than zero (if \fBstacked\fR is not used)\&.
.RE
.sp
.TP
\fB::Plotchart::create3DBarchart\fR \fIw\fR \fIyaxis\fR \fInobars\fR
Create a new barchart with 3D vertical bars (configuration type: 3dbars)\&. The horizontal axis will
display the labels per bar\&. The number of bars given by \fInobars\fR
determines the position and the width of the bars\&. The colours can be
varied per bar\&. (This type of chart was inspired by the Wiki page on 3D
bars by Richard Suchenwirth\&.)
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fIyaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order\&.
.TP
int \fInobars\fR (in)
The number of bars that will be plotted\&.
.RE
.sp
.TP
\fB::Plotchart::create3DRibbonChart\fR \fIw\fR \fInames\fR \fIyaxis\fR \fIzaxis\fR
Create a new "ribbon chart" (configuration type: 3dribbon)\&. This is
a chart where the data series are
represented as ribbons in a three-dimensional axis system\&. Along the
x-axis (which is "into" the screen) the names are plotted, each
representing a single series\&. The first plot command draws the furthest
series, the second draws the series in front of that and so on\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
widget \fIw\fR (in)
Names of the series, plotted as labels along the x-axis
.TP
list \fIyaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the y-axis
(drawn horizontally!), in this order\&.
.TP
list \fIzaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the z-axis
(drawn vertically), in this order\&.
.TP
int \fInobars\fR (in)
The number of bars that will be plotted\&.
.RE
.sp
.TP
\fB::Plotchart::createBoxplot\fR \fIw\fR \fIxdata\fR \fIydata\fR \fIorientation\fR
Create a new boxplot with horizontal or vertical boxes (box-and-whiskers) (configuration type: boxplot)\&. Depending
on the orientation the x- or y-axis is drawn with labels\&. The boxes are drawn based on the raw data
(see the plot subcommand for this type of plot)\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fIxdata\fR (in)
This is either a 3-element list containing minimum, maximum and stepsize for the x-axis, in this order
(when orientation is horizontal), or a list of labels for the x-axis (when orientation is vertical)\&. The length
of the label list also determines the number of boxes that can be plotted\&. The labels are also used in the plot
subcommand\&.
.TP
list \fIydata\fR (in)
This is either a 3-element list containing minimum, maximum and stepsize for the y-axis, in this order
(when orientation is vertical), or a list of labels for the y-axis (when orientation is horizontal)\&. The length
of the label list also determines the number of boxes that can be plotted\&. The labels are also used in the plot
subcommand\&.
.TP
string \fIorientation\fR (in)
If given, "horizontal" or "vertical" determines the orientation of the boxes\&. This optional value (default: horizontal)
also determines the interpretation of the xdata and ydata arguments\&.
.RE
.sp
.TP
\fB::Plotchart::createTimechart\fR \fIw\fR \fItime_begin\fR \fItime_end\fR \fIargs\fR
Create a new timechart (configuration type: timechart)\&.
The time axis (= x-axis) goes from \fItime_begin\fR to \fItime_end\fR,
and the vertical spacing is determined by the number of items to plot\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
string \fItime_begin\fR (in)
The start time given in a form that is recognised by the \fBclock scan\fR
command (e\&.g\&. "1 january 2004")\&.
.TP
string \fItime_end\fR (in)
The end time given in a form that is recognised by the \fBclock scan\fR
command (e\&.g\&. "1 january 2004")\&.
.TP
arguments \fIargs\fR (in)
The remaining arguments can be:
.RS
.IP \(bu
The expected/maximum number of items\&. This determines the vertical
spacing\&. (If given, it must be the first argument after "time_end"
.IP \(bu
The keyword -barheight and the number of pixels per bar\&. This is an
alternative method to determine the vertical spacing\&.
.IP \(bu
The keyword -ylabelwidth and the number of pixels to reserve for the
labels at the y-axis\&.
.RE
.RE
.TP
\fB::Plotchart::createGanttchart\fR \fIw\fR \fItime_begin\fR \fItime_end\fR \fIargs\fR
Create a new Gantt chart (configuration type: ganttchart)\&.
The time axis (= x-axis) goes from \fItime_begin\fR to \fItime_end\fR,
and the vertical spacing is determined by the number of items to plot\&.
Via the specific commands you can then add tasks and connections between
the tasks\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
string \fItime_begin\fR (in)
The start time given in a form that is recognised by the \fBclock scan\fR
command (e\&.g\&. "1 january 2004")\&.
.TP
string \fItime_end\fR (in)
The end time given in a form that is recognised by the \fBclock scan\fR
command (e\&.g\&. "1 january 2004")\&.
.TP
arguments \fIargs\fR (in)
The remaining arguments can be:
.RS
.IP \(bu
The expected/maximum number of items\&. This determines the vertical
spacing\&. (If given this way, it must be the first argument after "time_end")
.IP \(bu
The expected/maximum width of the descriptive text (roughly in characters,
for the actual space reserved for the text, it is assumed that a
character is about ten pixels wide)\&. Defaults to 20\&. (If given this way,
it must be the second argument after "time_end")\&.
.IP \(bu
The keyword -barheight and the number of pixels per bar\&. This is an
alternative method to determine the vertical spacing\&.
.IP \(bu
The keyword -ylabelwidth and the number of pixels to reserve for the
labels at the y-axis\&.
.RE
.RE
.TP
\fB::Plotchart::createRightAxis\fR \fIw_or_plot\fR \fIyaxis\fR
Create a plot command that will use a right axis instead of the left
axis (configuration type: inherited from the existing plot)\&. The canvas widget
must already contain an ordinary plot, as the
horizontal axis and other properties are reused\&. Preferably use the
plot command, as with multiple plots in a canvas (also when redefining an existing
plot!), the wrong geometry might be used\&.
.sp
To plot data using the
right axis, use this new command, to plot data using the \fIleft\fR
axis, use the original plot command\&.
.RS
.TP
widget \fIw_or_plot\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot or preferably the
plot command for the plot with the left axis\&.
.TP
list \fIyaxis\fR (in)
A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order\&.
.RE
.TP
\fB::Plotchart::createTableChart\fR \fIw\fR \fIcolumns\fR ?widths?
Create a command to draw a table\&. You can use a variety of commands to
draw the actual rows of the table, but the number of columns is fixed\&.
(See \fBTABLE CHARTS\fR for an example)
.RS
.TP
widget \fIw\fR (in)
Name of the canvas widget to hold the table\&.
.TP
list \fIcolumns\fR (in)
The headers of the columns in the table\&. The number of elements
determines the number of columns\&.
.TP
list \fIwidths\fR (in)
If given, either a single value, the width in pixels for all columns or
for each column the width of that column\&. If not given, the table is
spread out over the width of the canvas (minus the margins)\&.
.RE
.sp
.PP
.SH "PLOT METHODS"
Each of the creation commands explained in the last section returns
the name of a new object command that can be used to manipulate the
plot or chart\&. The subcommands available to a chart command depend on
the type of the chart\&.
.PP
General subcommands for all types of charts\&. \\$anyplot is the command
returned by the creation command:
.TP
\fB$anyplot\fR title \fItext\fR \fIposition\fR
Specify the title of the whole chart\&.
.RS
.TP
string \fItext\fR (in)
The text of the title to be drawn\&.
.TP
string \fIposition\fR (in)
The position of the title\&. The default position is "center", but you can
alternatively use "left" or "right"\&. You can use multiple titles with
different positions\&.
.RE
.sp
.TP
\fB$anyplot\fR subtitle \fItext\fR
Specify the subtitle of the whole chart\&.
.RS
.TP
string \fItext\fR (in)
The text of the subtitle to be drawn\&.
.RE
.sp
.TP
\fB$anyplot\fR canvas
Return the name of the canvas (or the alias if you use more than one plot within a
canvas)\&. Use this value for the coordinate transformations\&.
.sp
.TP
\fB$anyplot\fR saveplot \fIfilename\fR \fIargs\fR
Draws the plot into a file, using PostScript\&.
.RS
.TP
string \fIfilename\fR (in)
Contain the path name of the file to write the plot to\&.
.TP
list \fIargs\fR (in)
If the standard PostScript output is used, the option -plotregion can be specifed
to save the whole plot (value: bbox) regardless of what is visible in the window\&.
The default (value: window) is to only plot the visible part of the plot\&.
.sp
Optionally you can specify the option -format "some picture format" to
store the plot in a different file than a PostScript file\&. This,
however, relies on the Img package to do the actual job\&.
.sp
\fINote:\fR
Because the window holding the plot must be fully visible before Img can
successfully grab it, it is raised first\&.
On some systems, for instance Linux with KDE, raising
a window is not done automatically, but instead you need to click on the
window in the task bar\&. Similar things happen on Windows XP\&.
.sp
There seems to be something wrong under some circumstances, so instead
of waiting for the visibility of the window, the procedure simply waits
two seconds\&. It is not ideal, but it seems to work better\&.
.RE
.sp
.TP
\fB$anyplot\fR xtext \fItext\fR
Specify the title of the (horizontal) x-axis, for those plots that have
a straight x-axis\&.
.RS
.TP
string \fItext\fR (in)
The text of the x-axis label to be drawn\&.
.RE
.sp
.TP
\fB$anyplot\fR ytext \fItext\fR
Specify the title of the (horizontal) y-axis, for those plots that have
a straight y-axis\&.
.RS
.TP
string \fItext\fR (in)
The text of the y-axis label to be drawn\&.
.RE
.TP
\fB$anyplot\fR vtext \fItext\fR
Draw a \fIvertical\fR label to the y-axis\&. Note: this requires Tk 8\&.6
or later, for older versions it does nothing\&.
.RS
.TP
string \fItext\fR (in)
Text to drawn to the y-axis
.RE
.sp
.TP
\fB$anyplot\fR xsubtext \fItext\fR
Specify the subtext of the (horizontal) x-axis, for those plots that have
a straight x-axis\&. This text is drawn below the primary text\&.
.sp
Since this involves positioning the primary text and setting margins, you need to
set the option "usesubtext" for the bottom axis via the plotstyle command\&. The relevant
options are: usesubtext, subtextcolor and subtextfont\&.
.RS
.TP
string \fItext\fR (in)
The secondary text of the x-axis label to be drawn\&.
.RE
.sp
.TP
\fB$anyplot\fR ysubtext \fItext\fR
Specify the subtext of the (vertical) y-axis, for those plots that have
a straight y-axis\&. This text is drawn below the primary text, for both
axes on the left and the right\&.
.sp
Since this involves positioning the primary text and setting margins, you need to
set the option "usesubtext" for the left or right axis via the plotstyle command\&. The relevant
options are: usesubtext, subtextcolor and subtextfont\&.
.RS
.TP
string \fItext\fR (in)
The secondary text of the y-axis label to be drawn\&.
.RE
.sp
.TP
\fB$anyplot\fR vsubtext \fItext\fR
Specify the subtext of the (vertical) y-axis, for those plots that have
a straight y-axis\&. This text is drawn to the \fIright\fR of the primary text, for both
axes on the left and the right\&.
.sp
Since this involves positioning the primary text and setting margins, you need to
set the option "usesubtext" for the left or right axis via the plotstyle command\&. The relevant
options are: usevsubtext, vsubtextcolor and vsubtextfont\&. (Note the "v" to distinguish this
option from the text at the top of a vertical axis that is drawn via \fI$anyplot ytext\fR or
\fI$anyplot ysubtext\fR\&.)
.RS
.TP
string \fItext\fR (in)
The secondary (vertical) text of the y-axis label to be drawn\&.
.RE
.sp
.TP
\fB$anyplot\fR xconfig \fB-option\fR \fIvalue\fR \&.\&.\&.
Set one or more configuration parameters for the x-axis\&.
The following options are supported:
.RS
.TP
\fBformat\fR fmt
The format for the numbers along the axis\&.
.TP
\fBticklength\fR length
The length of the tickmarks (in pixels)\&.
.TP
\fBticklines\fR boolean
Whether to draw ticklines (\fBtrue\fR) or not (\fBfalse\fR)\&.
.TP
\fBscale\fR scale_data
New scale data for the axis, i\&.e\&. a 3-element list containing minimum,
maximum and stepsize for the axis, in this order\&.
.sp
\fIBeware:\fR Setting this option will clear all data from the plot\&.
.RE
.sp
.TP
\fB$anyplot\fR yconfig \fB-option\fR \fIvalue\fR \&.\&.\&.
Set one or more configuration parameters for the y-axis\&. This method
accepts the same options and values as the method \fBxconfig\fR\&.
.TP
\fB$anyplot\fR background \fIpart\fR \fIcolour_or_image\fR \fIdir\fR ?brightness?
Set the background of a part of the plot
.RS
.TP
string \fIpart\fR
Which part of the plot: "axes" for the axes area and "plot" for the
inner part\&. The interpretation depends on the type of plot\&. Two further
possibilities are:
.RS
.IP \(bu
\fIimage\fR, in which case a predefined image is loaded
into the background of the plot\&.
.IP \(bu
\fIgradient\fR, in which case the background is coloured in different
shades of the given colour\&. The "dir" argument specifies the direction
in which the colour gets whiter\&.
.RE
.TP
string \fIcolour_or_image\fR
Colour for that part or the name of the image if "part" is "image"
.TP
string \fIdir\fR
The direction of the gradient\&. One of: top-down, bottom-up, left-right
or right-left\&.
.TP
string \fIbrightness\fR
Indicates whether the colour should become brighter (bright) or darker (dark)\&. Defaults to bright
.RE
.sp
.TP
\fB$anyplot\fR xticklines \fIcolour\fR ?dash?
Draw vertical ticklines at each tick location
.RS
.TP
string \fIcolour\fR
Colour of the lines\&. Specifying an empty colour ("") removes them again\&.
Defaults to "black"
.TP
string \fIdash\fR
Optional argument to specify the dash pattern for the lines\&. Defaults to "lines"
Possible values: lines, dots1, dots2, dots3, dots4, dots5\&.
The actual effect depends on the platform\&.
.RE
.sp
.TP
\fB$anyplot\fR yticklines \fIcolour\fR ?dash?
Draw horizontal ticklines at each tick location
.RS
.TP
string \fIcolour\fR
Colour of the lines\&. Specifying an empty colour ("") removes them again
Defaults to "black"
.TP
string \fIdash\fR
Optional argument to specify the dash pattern for the lines\&. Defaults to "lines"
Possible values: lines, dots1, dots2, dots3, dots4, dots5\&.
The actual effect depends on the platform\&.
.RE
.sp
.TP
\fB$anyplot\fR legend \fIseries\fR \fItext\fR ?spacing?
Add an entry to the legend\&. The series determines which graphical
symbol is to be used\&. (As a side effect the legend is actually drawn\&.)
.RS
.TP
string \fIseries\fR
Name of the data series\&. This determines the colour of the line and the
symbol (if any) that will be drawn\&.
.TP
string \fItext\fR
Text to be drawn next to the line/symbol\&.
.TP
integer \fIspacing\fR
Optional argument to specify the vertical spacing between the entries (in pixels)\&.
(Note that this spacing will be reused later\&.)
.RE
.sp
.TP
\fB$anyplot\fR removefromlegend \fIseries\fR
Remove an entry for a series from the legend and redraw it\&.
.RS
.TP
string \fIseries\fR
Name of the data series to be removed\&.
.RE
.sp
.TP
\fB$anyplot\fR legendconfig \fB-option\fR \fIvalue\fR \&.\&.\&.
Set one or more options for the legend\&. The legend is drawn as a
rectangle with text and graphics inside\&.
.RS
.TP
\fBbackground\fR colour
Set the colour of the background (the default colour is white)\&.
Set to the empty string for a transparant legend\&.
.TP
\fBborder\fR colour
Set the colour of the border (the default colour is black)\&. Set to the
empty string if you do not want a border\&.
.TP
\fBcanvas\fR c
Draw the legend in a different canvas widget\&. This gives you the freedom
to position the legend outside the actual plot\&.
.TP
\fBfont\fR font
Set the font used to draw the text next to the symbol\&.
.TP
\fBlegendtype\fR
Override the type of the legend, that is pre-defined for the current type of
plot\&. May be one of: rectangle or line\&.
.TP
\fBposition\fR corner
Set the position of the legend\&. May be one of: top-left, top-right,
bottom-left or bottom-right\&. (Default value is top-right\&.)
.RE
.sp
.TP
\fB$anyplot\fR balloon \fIx\fR \fIy\fR \fItext\fR \fIdir\fR
Add balloon text to the plot (except for 3D plots)\&. The arrow will point
to the given x- and y-coordinates\&. For xy-graphs and such, the
coordinates are directly related to the axes; for vertical barcharts the
x-coordinate is measured as the number of bars minus 1 and similar for
horizontal barcharts\&.
.RS
.TP
float \fIx\fR
X-coordinate of the point that the arrow of the balloon will point to\&.
.TP
float \fIy\fR
Y-coordinate of the point that the arrow of the balloon will point to\&.
.TP
string \fItext\fR
Text to be drawn in the balloon\&.
.TP
string \fIdir\fR
Direction of the arrow, one of: north, north-east, east, south-east,
south, south-west, west or north-west\&.
.RE
.sp
.TP
\fB$anyplot\fR balloonconfig \fIargs\fR
Configure the balloon text for the plot\&. The new settings will be used
for the next balloon text\&.
.RS
.TP
\fBfont\fR fontname
Font to be used for the text
.TP
\fBjustify\fR left|center|right
Way to justify multiline text
.TP
\fBtextcolour\fR colour
Colour for the text (synonym: textcolor)
.TP
\fBbackground\fR colour
Background colour for the balloon
.TP
\fBoutline\fR colour
Colour of the outline of the balloon
.TP
\fBmargin\fR value
Margin around the text (in pixels)
.TP
\fBrimwidth\fR value
Width of the outline of the balloon (in pixels)
.TP
\fBarrowsize\fR value
Length factor for the arrow (in pixels)
.RE
.TP
\fB$anyplot\fR plaintext \fIx\fR \fIy\fR \fItext\fR \fIdir\fR
Add plain text to the plot (except for 3D plots)\&. The text is positioned at
the given x- and y-coordinates\&. For xy-graphs and such, the
coordinates are directly related to the axes; for vertical barcharts the
x-coordinate is measured as the number of bars minus 1 and similar for
horizontal barcharts\&.
.RS
.TP
float \fIx\fR
X-coordinate of the text position
.TP
float \fIy\fR
Y-coordinate of the text position
.TP
string \fItext\fR
Text to be drawn\&.
.TP
string \fIdir\fR
Anchor for the text, one of: north, north-east, east, south-east,
south, south-west, west or north-west\&.
.RE
.sp
.TP
\fB$anyplot\fR plaintextconfig \fIargs\fR
Configure the plain text annotation for the plot\&. The new settings will be used
for the next plain text\&.
.RS
.TP
\fBfont\fR fontname
Font to be used for the text
.TP
\fBjustify\fR left|center|right
Way to justify multiline text
.TP
\fBtextcolour\fR colour
Colour for the text (synonym: textcolor)
.RE
.TP
\fB$anyplot\fR object \fIitemtype\fR \fIseries\fR \fIargs\fR
Draw a canvas item in the plot where the coordinates are scaled using the
coordinate system of the plot\&. In addition to the standard canvas types, it
also supports circles, dots and crosses\&.
.sp
\fINote:\fR Currently implemented for xy-plots, (vertical and horizontal)
barcharts, and piecharts\&.
.sp
\fINote:\fR To add an entry in the legend for the object, you can use the
\fIdataconfig\fR subcommand with a type "rectangle"\&. This will cause a rectangle
to be shown\&.
.RS
.TP
string \fIitemtype\fR (in)
Name of a standard canvas item or "circle", "dot" or "cross"
.TP
string \fIseries\fR (in)
The data series it belongs to, used for setting the default drawing options
.TP
list \fIargs\fR (in)
List of coordinates and drawing options
.RE
.TP
\fB$anyplot\fR deletedata
Remove the lines, symbols and other graphical object associated with the
actual data from the plot\&.
.sp
\fINote:\fR Currently implemented for xy-plots only
.sp
\fINote:\fR The existing options for data series and the legend entry are
kept as they were\&.
.sp
\fINote:\fR Currently there are side effects if the canvas contains more than
one plot\&.
.PP
.PP
\fINote:\fR The commands \fBxconfig\fR and \fByconfig\fR are
currently implemented only for XY-plots
and only the option \fB-format\fR has any effect\&.
.PP
For \fIxy plots\fR, \fIstripcharts\fR, \fIhistograms\fR and
\fItime-x-plots\fR:
.TP
\fB$xyplot\fR plot \fIseries\fR \fIxcrd\fR \fIycrd\fR
Add a data point to the plot\&.
.RS
.TP
string \fIseries\fR (in)
Name of the data series the new point belongs to\&.
.TP
float \fIxcrd\fR (in)
X-coordinate of the new point\&. (For time-x plots this must be valid
date/time that can be read with the \fIclock scan\fR command)\&.
.TP
float \fIycrd\fR (in)
Y-coordinate of the new point\&.
.RE
.PP
.PP
For \fIxy plots\fR there is the additional command \fIplotlist\fR,
which is useful for plotting a large amount of data:
.TP
\fB$xyplot\fR plotlist \fIseries\fR \fIxlist\fR \fIylist\fR \fIevery\fR
Draw a series of data as a whole\&. If symbols are asked for, draw them only
for every Nth data point\&.
.RS
.TP
string \fIseries\fR (in)
Name of the data series the new point belongs to\&.
.TP
float \fIxlist\fR (in)
List of X-coordinates for the data series\&.
.TP
float \fIycrd\fR (in)
List of Y-coordinates for the data series\&.
.TP
int \fIevery\fR (in)
Optional argument stating how often a symbol (if any) should be drawn\&.
If left out, use a simple heuristic: N = sqrt(number of data points)\&.
.RE
.PP
.PP
\fINote on histograms:\fR
.PP
For histograms the x-coordinate that is given is interpreted to be
the x-coordinate of the \fIright\fR side of the bar (or line segment)\&. The first
bar starts at the y-axis on the left\&. To completely fill the range
of the x-axis, you should draw a bar at the maximum x-coordinate\&.
.PP
For histograms you can also use the \fBplotcumulative\fR command:
.TP
\fB$histogram\fR plotcumulative \fIseries\fR \fIxcrd\fR \fIycrd\fR
.PP
The arguments mean exactly the same as for the \fBplot\fR command, but
the data are accumulated to the previous values\&.
.PP
For \fIxy plots\fR:
.TP
\fB$xyplot\fR trend \fIseries\fR \fIxcrd\fR \fIycrd\fR
Draw or update a trend line using the data given sofar\&.
.RS
.TP
string \fIseries\fR (in)
Name of the data series the trend line belongs to\&.
.TP
float \fIxcrd\fR (in)
X-coordinate of the new data point
.TP
float \fIycrd\fR (in)
Y-coordinate of the new data point
.RE
.TP
\fB$xyplot\fR rchart \fIseries\fR \fIxcrd\fR \fIycrd\fR
Draw data in the same way as the plot method, but with two lines added
that indicate the expected range (+/- 3*standard deviation) of the data\&.
.RS
.TP
string \fIseries\fR (in)
Name of the data series the data point belongs to\&.
.TP
float \fIxcrd\fR (in)
X-coordinate of the new data point
.TP
float \fIycrd\fR (in)
Y-coordinate of the new data point
.RE
.TP
\fB$xyplot\fR interval \fIseries\fR \fIxcrd\fR \fIymin\fR \fIymax\fR ?ycentr?
Add a vertical error interval to the plot\&. The interval is drawn from
ymin to ymax\&. If the ycentr argument is given, a symbol is drawn at that
position\&.
.RS
.TP
string \fIseries\fR (in)
Name of the data series the interval belongs to\&.
.TP
float \fIxcrd\fR (in)
X-coordinate of the interval
.TP
float \fIymin\fR (in)
Minimum y-coordinate of the interval\&.
.TP
float \fIymax\fR (in)
Maximum y-coordinate of the interval\&.
.TP
float \fIycentr\fR (in)
Y-coordinate to draw the symbol at (optional)
.RE
.TP
\fB$xyplot\fR box-and-whiskers \fIseries\fR \fIxcrd\fR \fIycrd\fR
Draw a box and whiskers in the plot\&. If the argument \fIxcrd\fR is a
list of
several values and the argument \fIycrd\fR is a single value, a
horizontal
box is drawn with the quartiles determined from the list of values
contained in \fIxcrd\fR\&.
.sp
If, instead, the argument \fIycrd\fR contains a list of several values
and the argument \fIxcrd\fR a single value, then a vertical box is
drawn and the quartiles are determined from \fIycrd\fR\&. (There must be
exactly one list of several values\&. Otherwise an error is reported\&.)
.sp
The option -boxwidth to the dataconfig command determines the width (or
height) of the box (default: 10 pixels)\&.
.sp
The option -whiskers to the dataconfig command determines whether the
whiskers are drawn to the extreme values (value: extremes), to 1\&.5
times the interquartile range (value: IQR or iqr), or not at all (value: none)\&.
If the value is 'IQR' (uppercase), then
also extreme values will be shown (from 1\&.5 to 3 times the IQR as dots,
above 3 times IQR as stars)\&. If the value is 'iqr' (lowercase) no extreme
values will be shown (default value: IQR)\&.
.sp
The option -whiskerwidth to the dataconfig command determines the thickness of the line
that draws the whiskers (default: 1 pixel)\&.
.sp
The option -mediancolour to the dataconfig command determines the
colour of the line used to draw the median within the box (default: same as -colour)\&.
.sp
The option -medianwidth to the dataconfig command determines the thickness of the line
that draws the median within the box (default: 1 pixel)\&.
.RS
.TP
string \fIseries\fR (in)
Name of the data series the box-and-whiskers belongs to\&.
.TP
float \fIxcrd\fR (in)
X-coordinate of the box or a list of values\&.
.TP
float \fIymin\fR (in)
Y-coordinate of the box or a list of values\&.
.RE
.sp
The box ends at the 1st and 3rd quartile, while the whiskers by default
are plotted to span 1\&.5 IQR (interquartile range) from the 1st and 3rd quartile\&.
.TP
\fB$xyplot\fR vector \fIseries\fR \fIxcrd\fR \fIycrd\fR \fIucmp\fR \fIvcmp\fR
Draw a vector in the plot\&. The vector can be given as either cartesian
coordinates or as length/angle, where the angle is in degrees and is
interpreted according to the mathematical convention or the nautical\&.
(See the vectorconfig subcommand)
.RS
.TP
string \fIseries\fR (in)
Name of the series the vector belongs to\&. Determines the appearance and
interpretation\&.
.TP
float \fIxcrd\fR (in)
X-coordinate of the point where the arrow appears
.TP
float \fIycrd\fR (in)
Y-coordinate of the point where the arrow appears
.TP
float \fIucmp\fR (in)
X-component or the length of the vector
.TP
float \fIycentr\fR (in)
Y-component or the angle of the vector
.RE
.TP
\fB$xyplot\fR vectorconfig \fIseries\fR \fB-option\fR \fIvalue\fR \&.\&.\&.
]
Set the vector drawing options for a particular series
.RS
.TP
string \fIseries\fR (in)
Name of the series the vector belongs to\&.
.RE
.IP
The options can be one of the following:
.RS
.TP
\fBcolour\fR
The colour of the arrow (default: black; synonym: color)
.TP
\fBscale\fR value
The scale factor used to convert the length of the
arrow into a number of pixels (default: 1\&.0)
.TP
\fBcentred\fR onoff
Logical value indicating that the xy-coordinates
are to be used as the start of the arrow or as the centre (default: 0;
synonym: centered)
.TP
\fBtype\fR keyword
Interpretation of the vector components\&. Can be "cartesian"
(default), in which case the x- and y-components are expected, "polar"
(the angle 0 coincides with the positive x-axis, 90 coincides with the
positive y-axis) or "nautical" (0 is "north" and 90 is "east")\&.
.RE
.sp
.TP
\fB$xyplot\fR dot \fIseries\fR \fIxcrd\fR \fIycrd\fR \fIvalue\fR
Draw a dot in the plot\&. The size and colour is determined by the value
and by the options set for the series it belongs to\&.
(See the dotconfig subcommand)
.RS
.TP
string \fIseries\fR (in)
Name of the series the dot belongs to\&. Determines size and colour
.TP
float \fIxcrd\fR (in)
X-coordinate of the point where the arrow appears
.TP
float \fIycrd\fR (in)
Y-coordinate of the point where the arrow appears
.TP
float \fIvalue\fR (in)
Value determining size and colour
.RE
.TP
\fB$xyplot\fR dotconfig \fIseries\fR \fB-option\fR \fIvalue\fR \&.\&.\&.
]
Set the dot drawing options for a particular series
.RS
.TP
string \fIseries\fR (in)
Name of the series the dot belongs to\&.
.RE
.IP
The options can be one of the following:
.RS
.TP
\fBcolour\fR
The colour of the dot if no scaling is used or the value exceeds the
last limit of the classes\&.
.TP
\fBscale\fR value
The scale factor used to convert the value into the radius of the dot
in pixels (default: 1\&.0)
.TP
\fBradius\fR value
The default radius of the dots, used if there is no scaling by value
(in pixels; default: 3)
.TP
\fBscalebyvalue\fR onoff
Determines whether the dots all have the same size or a size depending
on the given value (default: on)\&.
.TP
\fBoutline\fR onoff
Draw a black circle around the dot or not (default: on)
.TP
\fBclasses\fR list
Set the limits and the corresponding colours\&. For instance:
.CS


    $xyplot series1 -classes {0 blue 1 green} -colour red

.CE
.IP
will cause a blue dot to be drawn for values smaller than 0, a green dot
for values larger/equal 0 but lower than 1 and a red dot for values
larger/equal 1\&.
.TP
\fB3deffect\fR onoff
Show a highlight in the dots, to mimick a 3D effect (default: off)
.sp
If there is no list of classes for the particular series, the dots are
scaled by the value\&.
.sp
You can combine the colouring by value and the scaling by value by
setting a list of classes and setting the \fIscalebyvalue\fR option on\&.
.RE
.sp
.TP
\fB$xyplot\fR contourlines \fIxcrd\fR \fIycrd\fR \fIvalues\fR ?classes?
Draw contour lines for the values given on the grid\&. The grid is defined
by the xcrd and ycrd arguments\&. The xcrd argument (resp\&. ycrd)
is expected to be a matrix, implemented as a list of lists which gives the
x-coordinates (resp\&. y-coordinates) of the grid cell corners\&.
The function values are given at these corners\&.
The number of rows in xvec (resp\&. yvec) is ny and each row contains nx values
so that the total number of values in xvec (resp\&. yvec) is nx * ny\&.
The classes determine which contour lines are drawn\&. If a value on one of
the corners is missing, the contour lines in that cell will not be
drawn\&.
.sp
Entries in the legend are drawn via the \fIlegendisolines\fR subcommand\&.
.RS
.TP
list \fIxcrd\fR (in)
List of lists, each value is an x-coordinate for a grid cell corner
.TP
list \fIycrd\fR (in)
List of lists, each value is an y-coordinate for a grid cell corner
.TP
list \fIvalues\fR (in)
List of lists, each value is the value at a grid cell corner
.TP
list \fIclasses\fR (in)
List of class values or a list of lists of two elements (each inner list
the class value and the colour to be used)\&. If empty or missing, the
classes are determined automatically\&.
.sp
\fINote:\fR The class values must enclose the whole range of values\&.
\fINote:\fR The xcrd argument is generally made of nypoints identical rows, while
each row of ycrd is made with one single value\&.
.sp
.RE
.TP
\fB$xyplot\fR contourlinesfunctionvalues \fIxvec\fR \fIyvec\fR \fIvaluesmat\fR ?classes?
Draw contour lines for the values given on the grid\&. The grid is defined
by the xvec and yvec arguments\&. Here, xvec (resp\&. yvec) is a list of x-coordinates
(resp\&. y-coordinates)\&. The number of values in xvec (resp\&. yvec) is the number of points in
the x-coordinate (resp\&. y-coordinate)\&.
The function values are given at these corners\&. The
classes determine which contour lines are drawn\&. If a value on one of
the corners is missing, the contour lines in that cell will not be
drawn\&.
.sp
Entries in the legend are drawn via the \fIlegendisolines\fR subcommand\&.
.RS
.TP
list \fIxcrd\fR (in)
List of x-coordinates in increasing order\&.
.TP
list \fIycrd\fR (in)
List y-coordinates in increasing order\&.
.TP
list \fIvaluesmat\fR (in)
List of lists, each value is the value at a grid cell corner\&.
The total number of values is valuesmat is nx * ny\&.
.TP
list \fIclasses\fR (in)
List of class values or a list of lists of two elements (each inner list
the class value and the colour to be used)\&. If empty or missing, the
classes are determined automatically\&.
.sp
\fINote:\fR The class values must enclose the whole range of values\&.
.sp
.RE
.TP
\fB$xyplot\fR contourfill \fIxcrd\fR \fIycrd\fR \fIvalues\fR ?classes?
Draw filled contours for the values given on the grid\&. (The use of this
method is identical to the "contourlines" method)\&.
.sp
Entries in the legend are drawn via the \fIlegendshades\fR subcommand\&.
.TP
\fB$xyplot\fR contourbox \fIxcrd\fR \fIycrd\fR \fIvalues\fR ?classes?
Draw the cells as filled quadrangles\&. The colour is determined from
the average of the values on all four corners\&.
.sp
Entries in the legend are drawn via the \fIlegendshades\fR subcommand\&.
.TP
\fB$xyplot\fR colorMap \fIcolours\fR
Set the colours to be used with the contour methods\&. The argument is
either a predefined colourmap (grey/gray, jet, hot or cool)
or a list of colours\&. When selecting the colours for actually drawing the
contours, the given colours will be interpolated (based on the HLS scheme)\&.
.RS
.TP
list \fIcolours\fR (in)
List of colour names or colour values or one of the predefined maps:
.RS
.IP \(bu
grey or gray: gray colours from dark to light
.IP \(bu
jet: rainbow colours
.IP \(bu
hot: colours from yellow via red to darkred
.IP \(bu
cool: colours from cyan via blue to magenta
.RE
.RE
.TP
\fB$xyplot\fR legendisolines \fIvalues\fR \fIclasses\fR
Add the contour classes to the legend as coloured lines\&. The text indicates the
values\&.
.RS
.TP
list \fIvalues\fR (in)
The list of values as used for the actual drawing\&. This argument is used only
if the list of classes is empty\&.
.TP
list \fIvalues\fR (in)
The list of classes as used for the actual drawing\&.
.RE
.TP
\fB$xyplot\fR legendshades \fIvalues\fR \fIclasses\fR
Add the contour classes to the legend as coloured rectangles\&. The text indicates the
values\&.
.RS
.TP
list \fIvalues\fR (in)
The list of values as used for the actual drawing\&. This argument is used only
if the list of classes is empty\&.
.TP
list \fIvalues\fR (in)
The list of classes as used for the actual drawing\&.
.RE
.TP
\fB$xyplot\fR grid \fIxcrd\fR \fIycrd\fR
Draw the grid cells as lines connecting the (valid) grid points\&.
.RS
.TP
list \fIxcrd\fR (in)
List of lists, each value is an x-coordinate for a grid cell corner
.TP
list \fIycrd\fR (in)
List of lists, each value is an y-coordinate for a grid cell corner
.RE
.sp
.TP
\fB$xyplot\fR xband \fIymin\fR \fIymax\fR
Draw a light grey band in the plot, ranging over the full x-axis\&. This
can be used to indicate a "typical" range for the data\&.
.RS
.TP
float \fIymin\fR (in)
Lower bound for the band
.TP
float \fIymax\fR (in)
Upper bound for the band
.RE
.sp
.TP
\fB$xyplot\fR yband \fIxmin\fR \fIxmax\fR
Draw a light grey band in the plot, ranging over the full y-axis\&. This
can be used to indicate a "typical" range for the data\&.
.RS
.TP
float \fIxmin\fR (in)
Lower bound for the band
.TP
float \fIxmax\fR (in)
Upper bound for the band
.RE
.sp
.TP
\fB$xyplot\fR labeldot \fIx\fR \fIy\fR \fItext\fR \fIorient\fR
Draw a label and a symbol in the plot\&. The label will appear near the
symbol\&. The label will be drawn in grey, so as not to be too
conspicuous\&.
.sp
You can configure the appearance of the symbol by using the data series
name "labeldot":
\fI$w dataconfig labeldot -colour red -type symbol -symbol dot\fR
.RS
.TP
float \fIx\fR (in)
X-coordinate of the symbol to be drawn
.TP
float \fIy\fR (in)
Y-coordinate of the symbol to be drawn
.TP
string \fItext\fR (in)
Text for the label
.TP
string \fIorient\fR (in)
Optional orientation (one of w, e, n, s) defining the position of the
label with respect to the symbol\&. It defaults to w (so the label
appears left of the symbol)\&.
.RE
.PP
.PP
For \fIpolar plots\fR:
.TP
\fB$polarplot\fR plot \fIseries\fR \fIradius\fR \fIangle\fR
Add a data point to the polar plot\&.
.RS
.TP
string \fIseries\fR (in)
Name of the data series the new point belongs to\&.
.TP
float \fIradius\fR (in)
Radial coordinate of the new point\&.
.TP
float \fIangle\fR (in)
Angular coordinate of the new point (in degrees)\&.
.RE
.PP
.PP
For \fIwind rose diagrams\fR:
.TP
\fB$windrose\fR plot \fIdata\fR \fIcolour\fR
Draw the data contained in the \fIdata\fR argument\&. The data are added to
the existing spokes towards the outer circle\&.
.RS
.TP
list \fIdata\fR (in)
List of data (the length should correspond to the number of sectors)
.TP
string \fIcolour\fR
Colour in which the new segments will be drawn
.RE
.PP
.PP
For \fI3D plots\fR:
.TP
\fB$plot3d\fR plotfunc \fIfunction\fR
Plot a function defined over two variables \fBx\fR and \fBy\fR\&.
The resolution is determined by the set grid sizes (see the method
\fBgridsize\fR for more information)\&.
.RS
.TP
string \fIfunction\fR (in)
Name of the procedure that calculates the z-value for the given x and
y coordinates\&. The procedure has to accept two float arguments (x is
first argument, y is second) and return a floating-point value\&.
.RE
.sp
.TP
\fB$plot3d\fR plotfuncont \fIfunction\fR \fIcontours\fR
Plot a function defined over two variables \fBx\fR and \fBy\fR using
the contour levels in \fBcontours\fR to colour the surface\&.
The resolution is determined by the set grid sizes (see the method
\fBgridsize\fR for more information)\&.
.RS
.TP
string \fIfunction\fR (in)
Name of the procedure that calculates the z-value for the given x and
y coordinates\&. The procedure has to accept two float arguments (x is
first argument, y is second) and return a floating-point value\&.
.TP
list \fIcontours\fR (in)
List of values in ascending order that represent the contour levels
(the boundaries between the colours in the contour map)\&.
.RE
.sp
.TP
\fB$plot3d\fR gridsize \fInxcells\fR \fInycells\fR
Set the grid size in the two directions\&. Together they determine how
many polygons will be drawn for a function plot\&.
.RS
.TP
int \fInxcells\fR (in)
Number of grid cells in x direction\&. Has to be an integer number
greater than zero\&.
.TP
int \fInycells\fR (in)
Number of grid cells in y direction\&. Has to be an integer number
greater than zero\&.
.RE
.sp
.TP
\fB$plot3d\fR plotdata \fIdata\fR
Plot a matrix of data\&.
.RS
.TP
list \fIdata\fR (in)
The data to be plotted\&. The data has to be provided as a nested list
with 2 levels\&. The outer list contains rows, drawn in y-direction, and
each row is a list whose elements are drawn in x-direction, for the
columns\&. Example:
.sp
.CS


    set data {
    {1\&.0 2\&.0 3\&.0}
    {4\&.0 5\&.0 6\&.0}
    }

.CE
.RE
.sp
.TP
\fB$plot3d\fR colours \fIfill\fR \fIborder\fR
Configure the colours to use for polygon borders and inner area\&.
.RS
.TP
color \fIfill\fR (in)
The colour to use for filling the polygons\&.
.TP
color \fIborder\fR (in)
The colour to use for the border of the polygons\&.
.RE
.TP
\fB$plot3d\fR ribbon \fIyzpairs\fR
Plot a ribbon based on the pairs of yz-coordinates\&. The colours for
the ribbon itself and the edge are taken from the colours option\&.
.RS
.TP
list \fIyzpairs\fR (in)
List of pairs of yz-coordinates
.RE
.PP
.PP
For 3D ribbon plots:
.TP
\fB$plot3d\fR plot \fIyzpairs\fR
Plot a ribbon based on the pairs of yz-coordinates\&. The colours for
the ribbon itself and the edge are taken from the colours option\&.
.RS
.TP
list \fIyzpairs\fR (in)
List of pairs of yz-coordinates
.RE
.PP
.PP
For \fIxy plots\fR, \fIstripcharts\fR, \fIhistograms\fR and \fIpolar plots\fR:
.TP
\fB$xyplot\fR dataconfig \fIseries\fR \fB-option\fR \fIvalue\fR \&.\&.\&.
Set the value for one or more options regarding the drawing of data of
a specific series\&.
.RS
.TP
string \fIseries\fR (in)
Name of the data series whose configuration we are changing\&.
.RE
.sp
The following options are allowed:
.RS
.TP
\fBcolour\fR c
.TP
\fBcolor\fR c
The colour to be used when drawing the data series\&.
.TP
\fBtype\fR enum
The drawing mode chosen for the series\&.
This can be one of \fBline\fR, \fBsymbol\fR, or \fBboth\fR\&.
.TP
\fBsymbol\fR enum
What kind of symbol to draw\&. The value of this option is ignored when
the drawing mode \fBline\fR was chosen\&. This can be one of
\fBplus\fR, \fBcross\fR, \fBcircle\fR, \fBup\fR (triangle
pointing up), \fBdown\fR (triangle pointing down), \fBdot\fR
(filled circle), \fBupfilled\fR or \fBdownfilled\fR (filled
triangles)\&.
.TP
\fBradius\fR integer
The size of the radius of the symbol\&. The total width of the symbol will be
2 times the radius size\&. The default radius is 4\&.
.TP
\fBwidth\fR integer
The width of the line (if drawn) or the width of the polygon outline (if -filled)\&.
.TP
\fBfilled\fR enum
Whether to fill the area above or below the data line or not\&. Can be one
of: \fBno\fR, \fBup\fR or \fBdown\fR (\fBSPECIAL EFFECTS\fR)
.TP
\fBfillcolour\fR colour
Colour to use when filling the area associated with the data line\&.
.TP
\fBstyle\fR enum
The style to be used for histograms:
.RS
.IP \(bu
\fBfilled\fR: Fill the area under the data points with bars (default)
.IP \(bu
\fBspike\fR: Draw vertical lines from the y-axis (lower boundary) to the data point
.IP \(bu
\fBsymbol\fR: Draw a symbol at the data point
.IP \(bu
\fBplateau\fR: Draw a horizontal line at the height of the data point
.IP \(bu
\fBstair\fR: Draw a continuous stair-like line connecting the data points
.RE
.RE
.PP
.PP
For \fIpiecharts\fR and \fIspiral pies\fR:
.TP
\fB$pie\fR plot \fIdata\fR
Fill a piechart\&.
.RS
.TP
list \fIdata\fR (in)
A list of pairs (labels and values)\&. The values determine the relative
size of the circle segments\&. The labels are drawn beside the circle\&.
.RE
.TP
\fB$pie\fR colours \fIcolour1\fR \fIcolour2\fR \&.\&.\&.
Set the colours to be used\&.
.RS
.TP
color \fIcolour1\fR (in)
The first colour\&.
.TP
color \fIcolour2\fR (in)
The second colour, and so on\&.
.RE
.TP
\fB$pie\fR explode \fIsegment\fR
Explode a segment (that is: move one segment out of the circle)\&. If the segment is
indicated as "auto", then you can click on a segment\&. This will be exploded instead of
any previously exploded segment\&.
.RS
.TP
int \fIsegment\fR
The segment to be exploded or "auto" if you want to do this interactively\&.
.RE
.PP
.PP
For \fIradial charts\fR:
.TP
\fB$radial\fR plot \fIdata\fR \fIcolour\fR \fIthickness\fR
Draw a new line in the radial chart
.RS
.TP
list \fIdata\fR (in)
A list of data (one for each spoke)\&. The values determine the distance
from the centre of the line connecting the spokes\&.
.TP
color \fIcolour\fR (in)
The colour for the line\&.
.TP
int \fIthickness\fR (in)
An optional argument for the thickness of the line\&.
.RE
.TP
\fB$pie\fR colours \fIcolour1\fR \fIcolour2\fR \&.\&.\&.
Set the colours to be used\&.
.RS
.TP
color \fIcolour1\fR (in)
The first colour\&.
.TP
color \fIcolour2\fR (in)
The second colour, and so on\&.
.RE
.PP
.PP
For \fIvertical barcharts\fR:
.TP
\fB$barchart\fR plot \fIseries\fR \fIydata\fR \fIcolour\fR ?dir? ?brightness?
Add a data series to a barchart\&.
.RS
.TP
string \fIseries\fR (in)
Name of the series the values belong to\&.
.TP
list \fIydata\fR (in)
A list of values, one for each x-axis label\&.
.TP
color \fIcolour\fR (in)
The colour of the bars\&.
.TP
string \fIdir\fR (in)
If given, "top-down" or "bottom-up", to indicate the direction in which the colour changes\&.
(If not given, a uniform colour is used)\&.
.TP
string \fIbrightness\fR (in)
If given, "bright" or "dark" (defaulting to "bright")\&. The colour will change to respectively
white or black, depending on the direction\&.
.RE
.TP
\fB$barchart\fR config \fB-option\fR \fIvalue\fR \&.\&.\&.
Set options for drawing the bars\&.
.RS
.TP
\fBshowvalues\fR boolean
Whether to show the values or not (above the bars)
.TP
\fBvaluefont\fR newfont
Name of the font to use for the values
.TP
\fBvaluecolour\fR colour
Colour for the values
.TP
\fBvalueformat\fR format
Format string to use for formatting the values
.RE
.PP
.PP
For \fIhorizontal barcharts\fR:
.TP
\fB$barchart\fR plot \fIseries\fR \fIxdata\fR \fIcolour\fR ?dir? ?brightness?
Add a data series to a barchart\&.
.RS
.TP
string \fIseries\fR (in)
Name of the series the values belong to\&.
.TP
list \fIxdata\fR (in)
A list of values, one for each y-axis label\&.
.TP
color \fIcolour\fR (in)
The colour of the bars\&.
.TP
string \fIdir\fR (in)
If given, "left-right" or "right-left", to indicate the direction in which the colour changes\&.
(If not given, a uniform colour is used)\&.
.TP
string \fIbrightness\fR (in)
If given, "bright" or "dark" (defaulting to "bright")\&. The colour will change to respectively
white or black, depending on the direction\&.
.RE
.TP
\fB$barchart\fR config \fB-option\fR \fIvalue\fR \&.\&.\&.
Set options for drawing the bars\&.
.RS
.TP
\fBshowvalues\fR boolean
Whether to show the values or not (to the right of the bars)
.TP
\fBvaluefont\fR newfont
Name of the font to use for the values
.TP
\fBvaluecolour\fR colour
Colour for the values
.TP
\fBvalueformat\fR format
Format string to use for formatting the values
.RE
.PP
.PP
For \fI3D barcharts\fR:
.TP
\fB$barchart\fR plot \fIlabel\fR \fIyvalue\fR \fIcolour\fR
Add the next bar to the barchart\&.
.RS
.TP
string \fIlabel\fR (in)
The label to be shown below the column\&.
.TP
float \fIyvalue\fR (in)
The value that determines the height of the column
.TP
color \fIcolour\fR (in)
The colour of the column\&.
.RE
.TP
\fB$barchart\fR config \fB-option\fR \fIvalue\fR \&.\&.\&.
Set one or more configuration parameters\&. The following options are
supported:
.RS
.TP
\fBusebackground\fR boolean
Whether to draw walls to the left and to the back of the columns or not
.TP
\fBuseticklines\fR boolean
Whether to draw ticklines on the walls or not
.TP
\fBshowvalues\fR boolean
Whether to show the values or not
.TP
\fBlabelfont\fR newfont
Name of the font to use for labels
.TP
\fBlabelcolour\fR colour
Colour for the labels
.TP
\fBvaluefont\fR newfont
Name of the font to use for the values
.TP
\fBvaluecolour\fR colour
Colour for the values
.RE
.PP
.PP
For \fI3D ribbon charts\fR:
.TP
\fB$ribbon\fR line \fIxypairs\fR \fIcolour\fR
Plot the given xy-pairs as a ribbon in the chart
.RS
.TP
list \fIxypairs\fR (in)
The pairs of x/y values to be drawn (the series is drawn as a whole)
.TP
color \fIcolour\fR (in)
The colour of the ribbon\&.
.RE
.TP
\fB$ribbon\fR area \fIxypairs\fR \fIcolour\fR
Plot the given xy-pairs as a ribbon with a filled area in front\&. The
effect is that of a box with the data as its upper surface\&.
.RS
.TP
list \fIxypairs\fR (in)
The pairs of x/y values to be drawn (the series is drawn as a whole)
.TP
color \fIcolour\fR (in)
The colour of the ribbon/area\&.
.RE
.PP
For \fIboxplots\fR:
.TP
\fB$boxplot\fR plot \fIseries\fR \fIlabel\fR \fIvalues\fR
Add a box-and-whisker to the plot\&. The dataconfig command can be used to customize
the box-and-whisker (see the box-and-whiskers command for the xyplot for details)\&.
.RS
.TP
string \fIseries\fR (in)
Name of the data series the box belongs to
.TP
string \fIlabel\fR (in)
The label along the x- or y-axis to which the data belong
.TP
list \fIvalues\fR (in)
List of raw values, the extent of the box and the whiskers will be
determined from this list\&.
.RE
.PP
For \fItimecharts\fR:
.TP
\fB$timechart\fR period \fItext\fR \fItime_begin\fR \fItime_end\fR \fIcolour\fR
Add a time period to the chart\&.
.RS
.TP
string \fItext\fR (in)
The text describing the period\&.
.TP
string \fItime_begin\fR (in)
Start time of the period\&.
.TP
string \fItime_end\fR (in)
Stop time of the period\&.
.TP
color \fIcolour\fR (in)
The colour of the bar (defaults to black)\&.
.RE
.sp
.TP
\fB$timechart\fR milestone \fItext\fR \fItime\fR \fIcolour\fR
Add a \fImilestone\fR (represented as an point-down triangle) to the
chart\&.
.RS
.TP
string \fItext\fR (in)
The text describing the milestone\&.
.TP
string \fItime\fR (in)
Time at which the milestone must be positioned\&.
.TP
color \fIcolour\fR (in)
The colour of the triangle (defaults to black)\&.
.RE
.sp
.TP
\fB$timechart\fR vertline \fItext\fR \fItime\fR
Add a vertical line (to indicate the start of the month for instance)
to the chart\&.
.RS
.TP
string \fItext\fR (in)
The text appearing at the top (an abbreviation of the
date/time for instance)\&.
.TP
string \fItime\fR (in)
Time at which the line must be positioned\&.
.RE
.TP
\fB$timechart\fR hscroll \fIscrollbar\fR
Connect a horizontal scrollbar to the chart\&. See also the section on
scrolling\&.
.RS
.TP
widget \fIscrollbar\fR (in)
The horizontal scrollbar that is to be connected to the chart
.RE
.TP
\fB$timechart\fR vscroll \fIscrollbar\fR
Connect a vertical scrollbar to the chart\&. See also the section on
scrolling\&.
.RS
.TP
widget \fIscrollbar\fR (in)
The vertical scrollbar that is to be connected to the chart
.RE
.PP
.PP
For \fIGantt charts\fR:
.TP
\fB$ganttchart\fR task \fItext\fR \fItime_begin\fR \fItime_end\fR \fIcompleted\fR
Add a task with its period and level of completion to the chart\&. Returns
a list of canvas items that can be used for further manipulations, like
connecting two tasks\&.
.RS
.TP
string \fItext\fR (in)
The text describing the task\&.
.TP
string \fItime_begin\fR (in)
Start time of the task\&.
.TP
string \fItime_end\fR (in)
Stop time of the task\&.
.TP
float \fIcompleted\fR (in)
The percentage of the task that is completed\&.
.RE
.sp
.TP
\fB$ganttchart\fR milestone \fItext\fR \fItime\fR \fIcolour\fR
Add a \fImilestone\fR (represented as an point-down triangle) to the
chart\&.
.RS
.TP
string \fItext\fR (in)
The text describing the milestone\&.
.TP
string \fItime\fR (in)
Time at which the milestone must be positioned\&.
.TP
color \fIcolour\fR (in)
The colour of the triangle (defaults to black)\&.
.RE
.sp
.TP
\fB$ganttchart\fR vertline \fItext\fR \fItime\fR
Add a vertical line (to indicate the start of the month for instance)
to the chart\&.
.RS
.TP
string \fItext\fR (in)
The text appearing at the top (an abbreviation of the
date/time for instance)\&.
.TP
string \fItime\fR (in)
Time at which the line must be positioned\&.
.RE
.sp
.TP
\fB$ganttchart\fR connect \fIfrom\fR \fIto\fR
Add an arrow that connects the \fIfrom\fR task with the \fIto\fR task\&.
.RS
.TP
list \fIfrom\fR (in)
The list of items returned by the "task" command that represents the
task from which the arrow starts\&.
.TP
string \fItext\fR (in)
The text summarising the tasks
.TP
list \fIargs\fR (in)
One or more tasks (the lists returned by the "task" command)\&. They are
shifted down to make room for the summary\&.
.TP
list \fIto\fR (in)
The list of items returned by the "task" command that represents the
task at which the arrow ends\&.
.RE
.sp
.TP
\fB$ganttchart\fR summary \fItext\fR \fIargs\fR
Add a summary item that spans all the tasks listed\&. The graphical
representation is a thick bar running from the leftmost task to the
rightmost\&.
.sp
Use this command before connecting the tasks, as the arrow would not be
shifted down!
.RS
.TP
string \fItext\fR (in)
The text summarising the tasks
.TP
list \fIargs\fR (in)
One or more tasks (the lists returned by the "task" command)\&. They are
shifted down to make room for the summary\&.
.RE
.sp
.TP
\fB$ganttchart\fR color \fIkeyword\fR \fInewcolor\fR
Set the colour of a part of the Gantt chart\&. These colours hold for all
items of that type\&.
.RS
.TP
string \fIkeyword\fR (in)
The keyword indicates which part of the Gantt chart to change:
.RS
.IP \(bu
description - the colour of the descriptive text
.IP \(bu
completed - the colour of the filled bar representing the completed part
of a task
.IP \(bu
left - the colour for the part that is not yet completed
.IP \(bu
odd - the background colour for the odd entries
.IP \(bu
even - the background colour for the even entries
.IP \(bu
summary - the colour for the summary text
.IP \(bu
summarybar - the colour for the bar for a summary
.RE
.TP
string \fInewcolor\fR (in)
The new colour for the chosen items\&.
.RE
.sp
.TP
\fB$ganttchart\fR font \fIkeyword\fR \fInewfont\fR
Set the font of a part of the Gantt chart\&. These fonts hold for all
items of that type\&.
.RS
.TP
string \fIkeyword\fR (in)
The keyword indicates which part of the Gantt chart to change:
.RS
.IP \(bu
description - the font used for descriptive text
.IP \(bu
summary - the font used for summaries
.IP \(bu
scale - the font used for the time scale
.RE
.TP
string \fInewfont\fR (in)
The new font for the chosen items\&.
.RE
.TP
\fB$ganttchart\fR hscroll \fIscrollbar\fR
Connect a horizontal scrollbar to the chart\&. See also the section on
scrolling\&.
.RS
.TP
widget \fIscrollbar\fR (in)
The horizontal scrollbar that is to be connected to the chart
.RE
.TP
\fB$ganttchart\fR vscroll \fIscrollbar\fR
Connect a vertical scrollbar to the chart\&. See also the section on
scrolling\&.
.RS
.TP
widget \fIscrollbar\fR (in)
The vertical scrollbar that is to be connected to the chart
.RE
.PP
.PP
For \fIisometric plots\fR (to be extended):
.TP
\fB$isoplot\fR plot rectangle \fIx1\fR \fIy1\fR \fIx2\fR \fIy2\fR \fIcolour\fR
Plot the outlines of a rectangle\&.
.RS
.TP
float \fIx1\fR (in)
Minimum x coordinate of the rectangle to be drawn\&.
.TP
float \fIy1\fR (in)
Minimum y coordinate of the rectangle\&.
.TP
float \fIx2\fR (in)
Maximum x coordinate of the rectangle to be drawn\&.
.TP
float \fIy2\fR (in)
Maximum y coordinate of the rectangle\&.
.TP
color \fIcolour\fR (in)
The colour of the rectangle\&.
.RE
.sp
.TP
\fB$isoplot\fR plot filled-rectangle \fIx1\fR \fIy1\fR \fIx2\fR \fIy2\fR \fIcolour\fR
Plot a rectangle filled with the given colour\&.
.RS
.TP
float \fIx1\fR (in)
Minimum x coordinate of the rectangle to be drawn\&.
.TP
float \fIy1\fR (in)
Minimum y coordinate of the rectangle\&.
.TP
float \fIx2\fR (in)
Maximum x coordinate of the rectangle to be drawn\&.
.TP
float \fIy2\fR (in)
Maximum y coordinate of the rectangle\&.
.TP
color \fIcolour\fR (in)
The colour of the rectangle\&.
.RE
.sp
.TP
\fB$isoplot\fR plot circle \fIxc\fR \fIyc\fR \fIradius\fR \fIcolour\fR
Plot the outline of a circle\&.
.RS
.TP
float \fIxc\fR (in)
X coordinate of the circle's centre\&.
.TP
float \fIyc\fR (in)
Y coordinate of the circle's centre\&.
.TP
color \fIcolour\fR (in)
The colour of the circle\&.
.RE
.sp
.TP
\fB$isoplot\fR plot filled-circle \fIxc\fR \fIyc\fR \fIradius\fR \fIcolour\fR
Plot a circle filled with the given colour\&.
.RS
.TP
float \fIxc\fR (in)
X coordinate of the circle's centre\&.
.TP
float \fIyc\fR (in)
Y coordinate of the circle's centre\&.
.TP
color \fIcolour\fR (in)
The colour of the circle\&.
.RE
.PP
.PP
For \fItables\fR you can use the following subcommands:
.TP
\fB$table\fR row \fIitems\fR
Draw a single row of items\&. The appearance of the items can be
controlled explicitly via the format command\&.
.RS
.TP
list \fIitems\fR (in)
List of text items to be drawn, one per column
.RE
.TP
\fB$table\fR separator
Draw a horizontal line to separate two rows
.TP
\fB$table\fR formatcommand \fIprocname\fR
Set the procedure that controls the formatting of items\&. By default
items are simply drawn as centered text\&.
.RS
.TP
string \fIprocname\fR (in)
Name of the procedure to be used\&. Its signature is:
.CS


proc procname {table widget row column value} {\&.\&.\&.}

.CE
.IP
Use the cellconfigure subcommand to set the attributes per cell\&.
.RE
.TP
\fB$table\fR cellconfigure \fIargs\fR
Set the attributes for the next cell(s) to be drawn\&.
.RS
.TP
list \fIargs\fR (in)
Key-value pairs: -background sets the background colour of the cells,
-cell sets the foreground colour, -font sets the text font, -anchor sets
the position of the text within the cell and -justify controls the
layout of multiline text\&.
.RE
.PP
There are a number of public procedures that may be useful in specific
situations: \fIPro memorie\fR\&.
.SH "COORDINATE TRANSFORMATIONS"
Besides the commands that deal with the plots and charts directly,
there are a number of commands that can be used to convert world
coordinates to pixels and vice versa\&.
These include:
.TP
\fB::Plotchart::viewPort\fR \fIw\fR \fIpxmin\fR \fIpymin\fR \fIpxmax\fR \fIpymax\fR
Set the viewport for window \fIw\fR\&. Should be used in cooperation
with \fB::Plotchart::worldCoordinates\fR\&.
.RS
.TP
widget \fIw\fR (in)
Name of the window (canvas widget) in question\&.
.TP
float \fIpxmin\fR (in)
Left-most pixel coordinate\&.
.TP
float \fIpymin\fR (in)
Top-most pixel coordinate (remember: the vertical pixel coordinate
starts with 0 at the top!)\&.
.TP
float \fIpxmax\fR (in)
Right-most pixel coordinate\&.
.TP
float \fIpymax\fR (in)
Bottom-most pixel coordinate\&.
.RE
.sp
.TP
\fB::Plotchart::worldCoordinates\fR \fIw\fR \fIxmin\fR \fIymin\fR \fIxmax\fR \fIymax\fR
Set the extreme world coordinates for window \fIw\fR\&. The world
coordinates need not be in ascending order (i\&.e\&. xmin can be larger
than xmax, so that a reversal of the x-axis is achieved)\&.
.RS
.TP
widget \fIw\fR (in)
Name of the window (canvas widget) in question\&.
.TP
float \fIxmin\fR (in)
X-coordinate to be mapped to left side of viewport\&.
.TP
float \fIymin\fR (in)
Y-coordinate to be mapped to bottom of viewport\&.
.TP
float \fIxmax\fR (in)
X-coordinate to be mapped to right side of viewport\&.
.TP
float \fIymax\fR (in)
Y-coordinate to be mapped to top side of viewport\&.
.RE
.sp
.TP
\fB::Plotchart::world3DCoordinates\fR \fIw\fR \fIxmin\fR \fIymin\fR \fIzmin\fR \fIxmax\fR \fIymax\fR \fIzmax\fR
Set the extreme three-dimensional world coordinates for window
\fIw\fR\&. The world coordinates need not be in ascending order (i\&.e\&. xmin
can be larger than xmax, so that a reversal of the x-axis is
achieved)\&.
.RS
.TP
widget \fIw\fR (in)
Name of the window (canvas widget) in question\&.
.TP
float \fIxmin\fR (in)
X-coordinate to be mapped to front side of the 3D viewport\&.
.TP
float \fIymin\fR (in)
Y-coordinate to be mapped to left side of the viewport\&.
.TP
float \fIzmin\fR (in)
Z-coordinate to be mapped to bottom of viewport\&.
.TP
float \fIxmax\fR (in)
X-coordinate to be mapped to back side of viewport\&.
.TP
float \fIymax\fR (in)
Y-coordinate to be mapped to right side of viewport\&.
.TP
float \fIzmax\fR (in)
Z-coordinate to be mapped to top side of viewport\&.
.RE
.sp
.TP
\fB::Plotchart::coordsToPixel\fR \fIw\fR \fIx\fR \fIy\fR
Return a list of pixel coordinates valid for the given window\&.
.RS
.TP
widget \fIw\fR (in)
Name of the canvas alias (as returned by [\\$anyplot canvas]) in question\&.
.TP
float \fIx\fR (in)
X-coordinate to be mapped\&.
.TP
float \fIy\fR (in)
Y-coordinate to be mapped\&.
.RE
.sp
.TP
\fB::Plotchart::coords3DToPixel\fR \fIw\fR \fIx\fR \fIy\fR \fIz\fR
Return a list of pixel coordinates valid for the given window\&.
.RS
.TP
widget \fIw\fR (in)
Name of the canvas alias (as returned by [\\$anyplot canvas]) in question\&.
.TP
float \fIx\fR (in)
X-coordinate to be mapped\&.
.TP
float \fIy\fR (in)
Y-coordinate to be mapped\&.
.TP
float \fIy\fR (in)
Z-coordinate to be mapped\&.
.RE
.sp
.TP
\fB::Plotchart::polarCoordinates\fR \fIw\fR \fIradmax\fR
Set the extreme polar coordinates for window \fIw\fR\&. The angle always
runs from 0 to 360 degrees and the radius starts at 0\&. Hence you only
need to give the maximum radius\&.
\fINote:\fR If the viewport is not square, this procedure will not
adjust the extremes, so that would result in an elliptical plot\&. The
creation routine for a polar plot always determines a square viewport\&.
.RS
.TP
widget \fIw\fR (in)
Name of the canvas alias (as returned by [\\$anyplot canvas]) in question\&.
.TP
float \fIradmax\fR (in)
Maximum radius\&.
.RE
.sp
.TP
\fB::Plotchart::polarToPixel\fR \fIw\fR \fIrad\fR \fIphi\fR
Wrapper for a call to \fB::Plotchart::coordsToPixel\fR, which assumes
the world coordinates and viewport are set appropriately\&. Converts
polar coordinates to pixel coordinates\&.
\fINote:\fR To be useful it should be accompanied by a matching
\fB::Plotchart::worldCoordinates\fR procedure\&. This is automatically
taken care of in the creation routine for polar plots\&.
.RS
.TP
widget \fIw\fR (in)
Name of the canvas alias (as returned by [\\$anyplot canvas]) in question\&.
.TP
float \fIrad\fR (in)
Radius of the point\&.
.TP
float \fIphi\fR (in)
Angle to the positive x-axis\&.
.RE
.sp
.TP
\fB::Plotchart::pixelToCoords\fR \fIw\fR \fIx\fR \fIy\fR
Return a list of world coordinates valid for the given window\&.
.RS
.TP
widget \fIw\fR (in)
Name of the canvas alias (as returned by [\\$anyplot canvas]) in question\&.
.TP
float \fIx\fR (in)
X-pixel to be mapped\&.
.TP
float \fIy\fR (in)
Y-pixel to be mapped\&.
.RE
.TP
\fB::Plotchart::pixelToIndex\fR \fIw\fR \fIx\fR \fIy\fR
Return the index of the pie segment containing the pixel coordinates
(x,y)
.RS
.TP
widget \fIw\fR (in)
Name of the canvas alias (as returned by [\\$anyplot canvas]) in question,
holding a piechart\&.
.TP
float \fIx\fR (in)
X-pixel to be mapped\&.
.TP
float \fIy\fR (in)
Y-pixel to be mapped\&.
.RE
.PP
.PP
Furthermore there is a routine to determine "pretty" numbers for use
with an axis:
.TP
\fB::Plotchart::determineScale\fR \fIxmin\fR \fIxmax\fR \fIinverted\fR
Determine "pretty" numbers from the given range and return a list
containing the minimum, maximum and stepsize that can be used for a
(linear) axis\&.
.RS
.TP
float \fIxmin\fR (in)
Rough minimum value for the scaling
.TP
float \fIxmax\fR (in)
Rough maximum value for the scaling\&.
.TP
boolean \fIinverted\fR (in)
Optional argument: if 1, then the returned list produces an
inverted axis\&. Defaults to 0 (the axis will be from minimum to maximum)
.RE
.TP
\fB::Plotchart::determineScaleFromList\fR \fIvalues\fR \fIinverted\fR
Determine "pretty" numbers from the given list of values and return a list
containing the minimum, maximum and stepsize that can be used for a
(linear) axis\&.
.RS
.TP
float \fIvalues\fR (in)
List of values that will be examined\&. May contain missing values (empty strings)
.TP
boolean \fIinverted\fR (in)
Optional argument: if 1, then the returned list produces an
inverted axis\&. Defaults to 0 (the axis will be from minimum to maximum)
.RE
.PP
.SH "MISSING VALUES"
Often data that need to be plotted contain gaps - in a series of
measurement data, they can occur because the equipment failed, a sample
was not collected correctly or for many other reasons\&. The
\fIPlotchart\fR handles these gaps by assuming that one or both
coordinates of such data points are an empty string:
.CS


    #
    # Create the plot with its x- and y-axes
    #
    set s [::Plotchart::createXYPlot \&.c {0\&.0 100\&.0 10\&.0} {0\&.0 100\&.0 20\&.0}]

    foreach {x y} {0\&.0 32\&.0 10\&.0 {} 25\&.0 60\&.0 78\&.0 11\&.0 } {
        $s plot series1 $x $y
    }

.CE
The effect varies according to the type of plot:
.IP \(bu
For xy-plots, radial plots and strip charts the missing data point
causes a gap in the line through the points\&.
.IP \(bu
For barchats, missing values are treated as if a value of zero was
given\&.
.IP \(bu
For time charts and Gantt charts missing values cause errors - there is
no use for them there\&.
.PP
.SH "OTHER OUTPUT FORMATS"
Besides output to the canvas on screen, the module is capable, via
\fBcanvas postscript\fR, of producing PostScript files\&. One may wonder
whether it is possible to extend this set of output formats and the
answer is "yes"\&. This section tries to sum up the aspects of using this
module for another sort of output\&.
.PP
One way you can create output files in a different format, is by
examining the contents of the canvas after everything has been drawn and
render that contents in the right form\&. This is probably the easiest
way, as it involves nothing more than the re-creation of all the
elements in the plot that are already there\&.
.PP
The drawback of that method is that you need to have a display, which is
not always the case if you run a CGI server or something like that\&.
.PP
An alternative is to emulate the canvas command\&. For this to work, you
need to know which canvas subcommands are used and what for\&. Obviously,
the \fIcreate\fR subcommand is used to create the lines, texts and
other items\&. But also the \fIraise\fR and \fIlower\fR subcommands are
used, because with these the module can influence the drawing order -
important to simulate a clipping rectangle around the axes\&. (The routine
DrawMask is responsible for this - if the output format supports proper
clipping areas, then a redefinition of this routine might just solve
this)\&.
.PP
Furthermore, the module uses the \fIcget\fR subcommand to find out the
sizes of the canvas\&. A more mundane aspect of this is that the module
currently assumes that the text is 14 pixels high and that 80 pixels in
width suffice for the axis' labels\&. No "hook" is provided to customise
this\&.
.PP
In summary:
.IP \(bu
Emulate the \fIcreate\fR subcommand to create all the items in the
correct format
.IP \(bu
Emulate the \fIcget\fR subcommand for the options -width and -height to
allow the correct calculation of the rectangle's position and size
.IP \(bu
Solve the problem of \fIraising\fR and \fIlowering\fR the items so
that they are properly clipped, for instance by redefining the
routine DrawMask\&.
.IP \(bu
Take care of the currently fixed text size properties
.PP
.SH "SPECIAL EFFECTS"
As an example of some special effects you can achieve, here is the
code for a plot where the area below the data line varies in colour:
.CS


canvas \&.c  -background white -width 400 -height 200
pack \&.c -fill both

set s [::Plotchart::createXYPlot \&.c {0\&.0 100\&.0 10\&.0} {0\&.0 100\&.0 20\&.0}]

$s background gradient green top-down

$s dataconfig series1 -filled up -fillcolour white

$s plot series1  0\&.0 20\&.0
$s plot series1 10\&.0 20\&.0
$s plot series1 30\&.0 50\&.0
$s plot series1 35\&.0 45\&.0
$s plot series1 45\&.0 25\&.0
$s plot series1 75\&.0 55\&.0
$s plot series1 100\&.0 55\&.0

$s plaintext 30\&.0 60\&.0 "Peak" south

.CE
The trick is to fill the background with a colour that changes from
green at the top to white at the bottom\&. Then the area above the data
line is filled with a white polygon\&. Thus the green shading varies with
the height of the line\&.
.SH "ROOM FOR IMPROVEMENT"
In this version there are a lot of things that still need to
be implemented:
.IP \(bu
More robust handling of incorrect calls (right now the procedures may
fail when called incorrectly):
.RS
.IP \(bu
The axis drawing routines can not handle inverse axes right now\&.
.IP \(bu
If the user provides an invalid date/time string, the routines simply
throw an error\&.
.RE
.PP
.SH RESIZING
\fBPlotchart\fR has not been designed to create plots and charts
that keep track of the data that are put in\&. This means that if an
application needs to allow the user to resize the window holding the
plot or chart, it must take care to redraw the complete plot\&.
.PP
The code below is a simple example of how to do that:
.CS


package require Plotchart

grid [canvas \&.c -background white] -sticky news
grid columnconfigure \&. 0 -weight 1
grid rowconfigure \&. 0 -weight 1

bind \&.c <Configure> {doResize}

proc doPlot {} {
    #
    # Clean up the contents (see also the note below!)
    #
    \&.c delete all

    #
    # (Re)draw the bar chart
    #
    set p [::Plotchart::createBarchart \&.c {x y z} {0 100 10} 3]
    $p plot R {10 30 40} red
    $p plot G {30 40 60} green
}

proc doResize {} {
    global redo

    #
    # To avoid redrawing the plot many times during resizing,
    # cancel the callback, until the last one is left\&.
    #
    if { [info exists redo] } {
        after cancel $redo
    }

    set redo [after 50 doPlot]
}
.CE
\fIPlease note:\fR
The code above will work fine for barcharts and many other types of
plots, but as \fBPlotchart\fR keeps some private information for
xy plots, more is needed in these cases\&. This actually requires a
command "destroyPlot" to take care of such details\&. A next version
of \fBPlotchart\fR may have that\&.
.PP
Alternatively, you can use the \fBxyplot\fR package which is built
on top of Plotchart\&. This package supports zooming in and zooming out,
as well as resizing the plot as a whole\&. Here is a small demonstration
program:
.CS


# xyplot_demo\&.tcl --
#     Demonstration of the xyplot package
#

package require xyplot

set xydata1 {}
set xydata2 {}
set xydata3 {}
set xydata4 {}
for { set i 0 } { $i < 1024 } { incr i } {
    lappend xydata1 [expr {$i-1000}] [expr {$i * sin($i/4096\&.0*3\&.1415*2) * (sin($i/256\&.0*3\&.1415*2))}]
    lappend xydata2 [expr {$i-1000}] [expr {$i * sin($i/4096\&.0*3\&.1415*2) * (sin($i/256\&.0*3\&.1415*2) + 0\&.25 * sin($i/256\&.0*3\&.1415*6))}]
    lappend xydata3 [expr {$i-1000}] [expr {$i * sin($i/4096\&.0*3\&.1415*2) * (sin($i/256\&.0*3\&.1415*2) + 0\&.25 * sin($i/256\&.0*3\&.1415*6) + 0\&.0625 * sin($i/256\&.0*3\&.1415*10))}]
    lappend xydata4 [expr {$i-1000}] [expr {$i * sin($i/4096\&.0*3\&.1415*2) * (sin($i/256\&.0*3\&.1415*2) + 0\&.25 * sin($i/256\&.0*3\&.1415*6) + 0\&.0625 * sin($i/256\&.0*3\&.1415*10) + 0\&.015625 * sin($i/256\&.0*3\&.1415*14))}]
}

set xyp [xyplot \&.xyp -xformat "%5\&.0f" -yformat "%5\&.0f" -title "XY plot testing" -background gray90]
pack $xyp -fill both -expand true

set s1 [$xyp add_data sf1 $xydata1 -legend "Serie 1 data" -color red]
set s2 [$xyp add_data sf2 $xydata2 -legend "Serie 2 data" -color green]
set s3 [$xyp add_data sf3 $xydata3 -legend "Serie 3 data" -color blue]
set s4 [$xyp add_data sf4 $xydata4 -legend "Serie 4 data" -color orange]

set xyp2 [xyplot \&.xyp2 -xticks 8 -yticks 4 -yformat %\&.2f -xformat %\&.0f]
pack $xyp2 -fill both -expand true

set s1 [$xyp2 add_data sf1 $xydata1]
set s2 [$xyp2 add_data sf2 $xydata2]
set s3 [$xyp2 add_data sf3 $xydata3]
set s4 [$xyp2 add_data sf4 $xydata4]

.CE
Zooming in is done by selecting a rectangle with the left mouse button
pressed\&. Zooming out is done by pressing the right mouse button\&. If you
resize the window, the canvases inside are resized too\&. If you zoom in,
you can scroll the plot via the scrollbars that are automatically
attached\&.
.SH "ZOOMING IN"
As the Plotchart package does not keep track of the data itself,
rescaling an existing plot - for instance when zooming in - would have
to be done by redefining the plot and redrawing the data\&. However, the
canvas widget offers a way out by scaling and moving items, so that
zooming in becomes a bit simpler\&.
.PP
Whether zooming is indeed useful, depends on the type of plot\&. Currently
it is defined for XY-plots only\&. The method is called "rescale" and
simply redraws the axes and scales and moves the data items so that they
conform to the new axes\&. The drawback is that any symbols are scaled by
the same amount\&. The rescale method works best for plots that only have
lines, not symbols\&.
.PP
The method works very simply:
.CS


   $p rescale {newxmin newxmax newxstep} {newymin newymax newystep}

.CE
.SH "CONFIGURATION OPTIONS"
The commands \fBplotconfig\fR and \fBplotstyle\fR can be used to set all
manner of options\&. The syntax is:
.TP
\fB::Plotchart::plotconfig\fR \fIcharttype\fR \fIcomponent\fR \fIproperty\fR \fIvalue\fR
Set a new value for the property of a component in a particular chart or
plot type or query its current value\&. Changed properties only have effect for
the consecutive plots, not for the ones already created\&. Each argument is optional\&.
.sp
\fINote:\fR The \fBplotstyle\fR command offers a more
flexible way to control the configuration options\&.
.RS
.TP
string \fIcharttype\fR (in)
The type of chart or plot (see the configuration type that is mentioned
for each create command)\&. If not given or empty, a list of chart types
is returned\&. If it is given, the properties for that particular type are
used\&.
.TP
string \fIcomponent\fR (in)
The component of the plot/chart: leftaxis, rightaxis, background, margin
and so on\&. If not given or empty, a list of components is returned\&. If
it is given, the properties for that particular component will be set
for that particular type of chart\&.
.TP
string \fIproperty\fR (in)
The property of the component of the plot/chart: textcolor, thickness of
the axis line, etc\&. If not given or empty, a list of properties is returned\&. If
it is given, that particular property for that particular component
will be set for that particular type of chart\&.
.TP
string \fIvalue\fR (in)
The new value for the property\&. If empty, the current value is returned\&.
If the value is "default", the default value will be restored\&.
.sp
Note, that in some cases an empty value is useful\&. Use "none" in this
case - it can be useful for colours and for formats\&.
.RE
.TP
\fB::Plotchart::plotstyle\fR \fIsubcmd\fR \fIstyle\fR \fIargs\fR
Manipulate the \fIstyle\fR in which subsequent plots will be drawn\&. The
default style is "default", but you can define and load any number of
other styles\&.
.RS
.TP
string \fIsubcmd\fR (in)
The subcommand to be executed:
.RS
.IP \(bu
\fIconfigure\fR - this subcommand allows you to set the options per chart type\&.
It takes the same options as the \fBplotconfig\fR command\&.
.IP \(bu
\fIcurrent\fR - return the current style
.IP \(bu
\fIload\fR - make the given style the active style for subsequent plots and charts
.IP \(bu
\fInames\fR - return the list of currently defined styles
.RE
.TP
string \fIstyle\fR (in)
The name of the plot style to manipulate
.TP
list \fIargs\fR (in)
The new options for the style - see the \fBplotconfig\fR command for details
.RE
.PP
Below is a detailed list of the components and properties:
.IP \(bu
Axes come in a wide variety:
.RS
.IP \(bu
leftaxis, rightaxis, topaxis, bottomaxis for the plots with a
rectangular shape\&.
.IP \(bu
xaxis, yaxis and zaxis are used for the 3D plots
.IP \(bu
axis, this represents the radial and tangential axes of a polar plot
.RE
.IP
All axes have the following properties:
.RS
.IP \(bu
color - the colour of the line and the tickmarks
.IP \(bu
thickness - the width of the line of the axis itself, not the tickmarks
.IP \(bu
ticklength - the length of the tickmarks in pixels\&. A positive value is
outward, a negative value is inward\&.
.IP \(bu
font - the font for the labels and the text at the axis
.IP \(bu
format - the format for rendering the (numerical) labels\&. For the time
axis it is the format for a date and time\&.
.IP \(bu
textcolor - the colour for the labels and the text\&.
.IP \(bu
labeloffset - space (in pixels) between the tickmark and the actual label
.IP \(bu
minorticks - number of minor tickmarks between the major tickmarks
.IP \(bu
shownumbers - show the numbers/labels or not\&.
.IP \(bu
showaxle - show the axis line or not\&.
.RE
.IP \(bu
The \fImargin\fR is important for the layout\&. Currently only the
rectangular plots allow the margins to be set: left, right, top and bottom\&.
The values are in pixels\&.
.IP \(bu
The \fItext\fR component is meant for any text appearing via the
plaintext subcommand\&. The properties are: textcolor, font and anchor
(positioning of the text relative to the given coordinates)\&.
.IP \(bu
The \fIbackground\fR has two properties: outercolor, the colour outside
of the actual plot, and innercolor, the colour inside the plot\&. (Note:
only "outercolor" has now been implemented)\&.
.IP \(bu
The \fImask\fR has one property only: draw\&. If set to 1, the default, white rectangles
are drawn to mimick the effects of clipping - excess data are made invisible this way\&.
Otherwise these rectangles are not drawn\&. This is useful to control
the layout more tightly, for instance with multiple plots in one canvas\&.
.IP \(bu
The \fItitle\fR component has the same properties as the \fItext\fR component
(but it is independent of that component)\&. It also has a \fIbackground\fR property:
If not set (or set to the empty string) this is the same as the outercolor property
of the \fIbackground\fR component, otherwise it is a separate colour\&.
.IP \(bu
The \fIlegend\fR has three properties: background, border and position\&.
See the legend subcommand for the meaning\&.
.IP \(bu
The \fIbar\fR components is used for all barchart-like plots and has
three properties: \fIbarwidth\fR (relative width of the bars in
relation to the items along the axis), \fIinnermargin\fR (the
relative width of the gaps between bars or groups of bars) and
the \fIoutline\fR colour\&.
.IP \(bu
The \fIlabels\fR component is used to describe the appearance of the
labels of piecharts and "spiral" piecharts\&. The properties are:
.RS
.IP \(bu
textcolor - colour of the label text
.IP \(bu
font - font to be used for the label text
.IP \(bu
placement - \fIout\fR of the circle or \fIin\fR the circle
.IP \(bu
sorted - the data are sorted in ascending order first
.IP \(bu
shownumbers - the labels are combined with the numbers according to the
format
.IP \(bu
format - the format to be used (defaults to: "%s (%g)")
if the numbers are to shown\&. The format command gets the label first,
then the number)
.IP \(bu
formatright - if given, the format to be used for labels and numbers
appearing to the right of the pie\&. The format command gets the
number first, then the label\&. (Defaults to "")
.RE
.IP \(bu
The \fIslice\fR component has properties to control the appearance of
the sections in the pie diagram:
.RS
.IP \(bu
outline - the colour of the line around the slices (default: black)
.IP \(bu
outlinewidth - width of the line around the slices (default: 1 pixel)
.IP \(bu
startangle - the angle w\&.r\&.t\&. positive x-axis where the first slice
starts
.IP \(bu
direction - the direction in which to draw the slices (default: +, that
is clockwise)
.RE
.IP \(bu
The table charts use the general components \fItitle\fR and \fImargin\fR
and further more the specific components \fIheader\fR, \fIoddrow\fR,
\fIevenrow\fR, \fIcell\fR and \fIframe\fR:
.RS
.IP \(bu
\fIheader\fR, \fIoddrow\fR and \fIevenrow\fR have the properties:
\fIbackground\fR, \fIfont\fR, \fIcolor\fR, \fIheight\fR and
\fIanchor\fR with obvious meanings\&.
.IP \(bu
The \fIcell\fR component defines in addition \fIleftspace\fR,
\fIrightspace\fR and \fItopspace\fR for fine-grained control of the spacing
inside the cell\&. These are not set via the \fIcellconfigure\fR
subcommand however\&.
.IP \(bu
Finally the \fIframe\fR component uses \fIcolor\fR, \fIouterwidth\fR
(for the width of the line surrounding the whole table) and
\fIinnerwidth\fR (for the width of lines separating columns and rows)\&.
.RE
.PP
See the examples in plotdemos7\&.tcl for its use\&.
.SH "SCROLLING FOR TIMECHARTS AND GANTT CHARTS"
For two types of plots automatic scrolling management has been
implemented: timecharts and Gantt charts\&. The subcommands \fIhscroll\fR
and \fIvscroll\fR associate (existing) scrollbars to the plot, in much
the same way as for text and canvas widgets\&.
.PP
Once the association is made, the scrollbars are automatically
updated if:
.IP \(bu
You add an item with a period wider than the current one\&.
.IP \(bu
You add a vertical line for a time beyond the current bounds\&.
.IP \(bu
You add an extra item beyond the number that was used to create the
chart\&.
.PP
For instance:
.CS


package require Plotchart

canvas \&.c -width 400 -height 200
scrollbar \&.y -orient vertical
scrollbar \&.x -orient horizontal

grid \&.c \&.y -sticky news
grid \&.x    -sticky news

source plotchart\&.tcl

set s [::Plotchart::createTimechart \&.c "1 january 2004"  "31 december 2004" 4]

$s period "Spring" "1 march 2004" "1 june 2004" green
$s period "Summer" "1 june 2004" "1 september 2004" yellow
$s vertline "1 jan" "1 january 2004"
$s vertline "1 apr" "1 april 2004"
$s vertline "1 jul" "1 july 2004"
$s vertline "1 oct" "1 october 2004"
$s vertline "1 jan" "1 january 2005"
$s vertline "1 apr" "1 april 2005"
$s vertline "1 jul" "1 july 2005"
$s milestone "Longest day" "21 july 2004"
$s milestone "Longest day 2" "21 july 2004"
$s milestone "Longest day 3" "21 july 2004"
$s milestone "Longest day 4" "21 july 2004"
$s milestone "Longest day 5" "21 july 2004"
$s milestone "Longest day 6" "21 july 2004"
$s title "Seasons (northern hemisphere)"

$s vscroll \&.y
$s hscroll \&.x

.CE
The original extent of the chart is from 1 january 2004 to 31 december
2004\&. But because of the addition of vertical lines in 2005 and
more items than was specified at the creation of the chart, both the
horizontal and the vertical scrollbar will be enabled\&.
.SH "SPECIALISED PLOTS"
Most of the plot and chart types described above have a fairly general use
and you simply prepares the data to be plotted yourself\&. This section describes
several plot types that are more specialised, in the sense that they have specific
purposes and you pass raw data that are then processed in the plotting routines\&.
.PP
Currently there are the following types:
.IP \(bu
Target diagrams are used to assess the capacity of numerical models to reproduce measurement
data\&. They are described in detail in:
.CS


Jason K\&. Joliff et al\&.
    Summary diagrams for coupled hydrodynamic-ecosystem model skill assessment
    Journal of Marine Systems 76 (2009) 64-82
    DOI: 10\&.1016/j\&.jmarsys\&.2008\&.05\&.014

.CE
.IP \(bu
Performance profiles are used for comparing the performance of numerical methods or
implementations thereof with each other\&. For more information:
.CS


Desmond Higham and Nicholas Higham
    Matlab Guide
    SIAM, 2005, Philadephia

.CE
.PP
Most of the general methods for XY-plots work for these plots as well, but their
creation and the methods to plot the data are very specific\&.
.TP
\fB::Plotchart::createTargetDiagram\fR \fIw\fR \fIlimits\fR \fIscale\fR
Create a new target diagram with circles indicating specific limits\&. The x-axis represents the
unbiased "root-mean-square difference" (typically varying between -1 and 1) and the y-axis
represents the normalised bias\&.
.sp
Data points closer to the origin represent better results than data points further away\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
list \fIlimits\fR (in)
List of radii for the circles that represent the limits (for instance: 0\&.5 and 0\&.7)
.TP
double \fIscale\fR (in)
Scale for the axes - defaults to 1, but if the model results are a poor fit, then
that may be too small a value\&. Both axes are scaled in the same way\&.
.RE
.sp
.TP
\fB$target\fR plot \fIseries\fR \fIxvalues\fR \fIyvalues\fR
The plot method takes two series of data of the same length, the first one
representing the model results, the second one represent the measurements
or, more general, the data that need to be reproduced\&.
.RS
.TP
string \fIseries\fR (in)
Name of the series (it will be plotted as a symbol that is configured via the
\fI$target dataconfig\fR command (see the XY-plot equivalent for an explanation)
.TP
list \fIxvalues\fR (in)
List of model results (missing values are represented as empty strings)
.TP
list \fIyvalues\fR (in)
List of measured values (missing values are represented as empty strings; only if
both the x and the y values are given, is the pair used in the computations)
.RE
.TP
\fB::Plotchart::createPerformanceProfile\fR \fIw\fR \fImax\fR
Create a diagram to show the performance of various numerical methods (or solvers)\&. The idea is
to first run these methods on a set of problems and measure their performance\&. The smaller the
number the better\&. Then these methods are compared via a so-called performance profile:
the data are scaled and ordered, such that the best method ends up highest\&.
.sp
Because of the nature of the plot all data must be given at once\&.
.RS
.TP
widget \fIw\fR (in)
Name of the \fIexisting\fR canvas widget to hold the plot\&.
.TP
float \fImax\fR (in)
Maximum value for the x-axis (the x-axis is the scaled performance of the series)\&.
.RE
.TP
\fB$performance\fR plot \fIseries_and_data_pairs\fR
Plot the data for each given method\&. The data are identified by the series name and the
appearance is controlled via prior dataconfig subcommand\&.
.RS
.TP
list \fIseries_and_data_pairs\fR (in)
List of series names and data\&. All data must be given at once\&.
.RE
.PP
The command \fIplotmethod\fR can be used to add new methods for a particular
plot or chart type\&. It is intended to help you develop specialised graphical displays\&.
.TP
\fB::Plotchart::plotmethod\fR \fIcharttype\fR \fImethodname\fR \fIplotproc\fR
Adds a new method for the given plot or chart type\&. The method is implemented by the
command or procedure given in the plotproc argument\&. The procedure will be called with
two extra arguments, the name of the created plot and the canvas widget that contains
(see the example below)\&.
.RS
.TP
string \fIcharttype\fR (in)
The type of plot or chart that the new method should be added to\&.
.TP
string \fImethodname\fR (in)
Name of the method to be used\&.
.TP
string \fIplotproc\fR (in)
Name of the command or procedure that implements the method\&.
.RE
.PP
.PP
Here is a trivial example of how to use this:
.CS


#
# The custom method "doodle" always adds the text "DOODLE"
# to the plot
#
proc doodle {p w x y} {
    $p plaintext $x $y "DOODLE"
}
::Plotchart::plotmethod xyplot doodle doodle

#
# Use it
pack [canvas \&.c]

set p [::Plotchart::createXYPlot \&.c {0 100 10} {0 20 5}]

$p doodle 40 10

.CE
.SH "TABLE CHARTS"
To show what you can do with table charts, here is a simple example that
plots a number of random data\&. The colours depend on the range that the
data belong to\&. For this the procedure \fIsetColor\fR is used\&.
.CS


package require Plotchart

pack [canvas \&.c -bg white -height 300] -fill both -expand yes

::Plotchart::plotconfig table frame outerwidth 3
::Plotchart::plotconfig table frame color red

set t [::Plotchart::createTableChart \&.c {"Column 1" "Column 2" "Column 3"} 80]


proc setColor {table widget row col value} {
    $table cellconfigure -background white -color black
    if { $value < 2\&.0 } {
        $table cellconfigure -background red -color white
    }
    if { $value > 6\&.0 } {
        $table cellconfigure -background green
    }

    return [format "%6\&.3f" $value]
}

# Command must already exist \&.\&.\&.
$t formatcommand setColor

$t title "Demonstration of table charts"
$t separator

for {set i 0} {$i < 9} {incr i} {
    set row {}

    for {set j 0} {$j < 3} {incr j} {
        lappend row [expr {10\&.0 * rand()}]
    }

    if { $i == 3 } {
        $t separator
    }

    $t row $row
}
.CE
.SH "CONTROL DISPLAYS"
TODO
.SH "ARRANGING MULTIPLE PLOTS IN A CANVAS"
The command \fIplotpack\fR allows you to copy the contents of a plot
into another canvas widget\&. This canvas widget does not act as a
composite plot, but it can be saved as a PostScript file for instance:
Note: the command simply takes a snapshot of the plots/charts as they
are at that moment\&.
.TP
\fB::Plotchart::plotpack\fR \fIw\fR \fIdir\fR \fIargs\fR
Copy the contents of the plots/charts into another widget, in a manner
similar to the \fIpack\fR geometry manager\&.
.RS
.TP
widget \fIw\fR (in)
The name of the canvas widget to copy the plots/charts into
.TP
string \fIdir\fR (in)
The direction of the arrangement - top, left, bottom or right
.TP
list \fIargs\fR (in)
List of plots/charts to be copied\&.
.RE
.PP
For example:
.CS


    set p1 [createXYPlot \&.\&.\&.]
    set p2 [createBarchart \&.\&.\&.]

    \&.\&.\&. fill the plots \&.\&.\&.

    toplevel \&.t
    pack [canvas \&.t\&.c2 -width \&.\&.\&.]

    #
    # Copy the two plots above each other in the new canvas
    #
    plotpack \&.t\&.c2 top $p1 $p2

.CE
A different method is to use the \fI-box\fR and \fI-axesbox\fR options
when creating the plot\&. These control the area in the canvas where the
plot or chart will be drawn\&.
.PP
The \fI-box\fR option takes as its value a list of four numbers:
.IP \(bu
X-coordinate of the upper-left corner of the area that will contain the
plot or chart (simply a canvas coordinate)
.IP \(bu
Y-coordinate of the upper-left corner
.IP \(bu
Width of the area
.IP \(bu
Height of the area
.PP
Specifying the width and height makes it easier to reposition the area
with respect to other plots\&.
.PP
The \fI-axesbox\fR option is meant to make aligning the axes of a
plot with those of other plots easier\&. The option takes a list of
six arguments:
.IP \(bu
Identification of the plot with respect to which it should be
positioned (the command returned by the creation command)\&.
.IP \(bu
The anchor position that should be used (n, nw, \&.\&.\&.)
.IP \(bu
X-coordinate of the upper-left corner of the area that will contain the
plot or chart\&. This coordinates is taken relative to the
\fIanchor position\fR
.IP \(bu
Y-coordinate of the upper-left corner
.IP \(bu
Width of the axis area
.IP \(bu
Height of the axis area
.PP
With this option the area the axes occupy is first determined and the
complete area is derived from the margins\&.
.PP
For example:
.CS


    set p2 [::Plotchart::createXYPlot \&.c {0 10 1} {-5 5 2\&.5} -axesbox [list $p1 ne 0 0 200 200]]

.CE
will create a second plot whose left axis coincides with the right axis
of plot "\\$p1" and the top of the axis is at the same heigt as well -
because the axes are positioned at a point 0 pixels to the left and 0
pixels below the north-east corner\&.
.SH "INTERACTIVE USE"
\fIPlotchart\fR has several features for interactive use (cf\&. \fBNOTES ON TAGS\fR):
.IP \(bu
The legend can be moved around by pressing mouse button 1 in the legend's box and
keeping it down\&.
.IP \(bu
You can use the \fIbindplot\fR and \fIbindlast\fR commands to
define actions that are to be taken when the user clicks on an element of the plot or chart\&.
(see below, see also the sample code in plotdemos12\&.tcl)
.IP \(bu
\fIPiecharts\fR can show an "exploded" segment that you can select with mouse button 1\&.
.PP
If you require different forms of interaction, not covered by \fIPlotchart\fR itself,
you can use the tags on the various canvas elements to define other bindings\&.
.PP
The \fIbindplot\fR and \fIbindlast\fR are defined as follows:
.TP
\fB$anyplot\fR bindplot \fIevent\fR \fIcommand\fR \fIargs\fR
Register a command that will be run whenever the given event occurs in the plot\&.
.RS
.TP
string \fIevent\fR
The event that you want to bind the command to
.TP
string \fIcommand\fR
Name of the command/procedure that you want to run\&. The following arguments
are prefixed: the x- and y-coordinates of the point in the plot (the world coordinates!),
so that the procedure has the signature:
.CS


    cmd $xworld $yworld $string1 $string2 $string3

.CE
.IP
assuming the argument "command" is: {cmd A B C}
.RE
.TP
\fB$anyplot\fR bindlast \fIseries\fR \fIevent\fR \fIcommand\fR
Register a command that will be run when the event occurs within the neighbourhood of
the last point added to the given series\&. (You can use directly after inserting
a data point\&. All such commands will remain active)\&.
.RS
.TP
string \fIevent\fR
The event that you want to bind the command to
.TP
list \fIcommand\fR
Name of the command/procedure that you want to run\&. The following arguments
are prefixed: the x- and y-coordinates of the point in the plot (the world coordinates!),
so that the procedure has the signature:
.CS


    cmd $xworld $yworld $string1 $string2 $string3

.CE
.IP
assuming the argument "command" is: {cmd A B C}
.RE
.PP
Here is an example - show the values of the data points in an annotation
(from the sample code in plotdemos12\&.tcl):
.CS


#
# Procedure for showing an annotation
#
proc showAnnotation {xcoord ycoord plot w} {

    $plot balloon $xcoord $ycoord "Data point: [format "%\&.3f, %\&.3f" $xcoord $ycoord]" north

    after 2000 [list removeAnnotation $w]
}

#
# Procedure for erase an annotation
#
proc removeAnnotation {w} {

    # Use the tags to remove all annotations
    $w delete BalloonText
    $w delete BalloonFrame
}

#
# Create a simple plot and a label
#
pack [canvas \&.c -bg white] [label \&.l -textvariable coords]

set p [::Plotchart::createXYPlot \&.c {0 1000 200} {0 10 1}]

$p dataconfig series1 -type both -symbol cross

foreach x {1 2 5 10 20 50 100 200 500 1000} {
    $p plot series1 $x [expr {log($x)}]

    #
    # Show the annotation for each data point
    #
    $p bindlast series1 <Enter> [list showAnnotation $p %W]
}

.CE
.SH "NOTES ON TAGS"
The implementation of \fIPlotchart\fR relies heavily on the canvas's
ability to identify graphical objects by tags and to change the drawing order of
the objects\&. This section documents the tags that are used\&.
.PP
(\fINote:\fR the tags are not always used consistently - see the notes appearing with
the various tags\&. This section describes the current state\&.)
.PP
\fIGeneral graphical objects:\fR
.IP \(bu
\fImask\fR - Used to manipulate the opaque rectangles that ensure data outside
the viewport are not shown\&.
.IP \(bu
\fItopmask, horizmask, vertmask\fR - specialised tags, used for scrollable plots\&.
.IP \(bu
\fItitle\fR - Used for title strings\&.
.IP \(bu
\fIBalloonText, BalloonFrame\fR - Used to manipulate balloon text\&.
.IP \(bu
\fIPlainText\fR - Used to manipulate ordinary text without any decoration\&.
.IP \(bu
\fIbackground\fR - Tag used for gradient and image backgrounds (and for gradient-filled bars)\&.
.IP \(bu
\fIxaxis, yaxis\fR - Tags used for all objects related to horizontal or vertical axes\&.
(also: both for numerical axes and axes with labels as in barcharts)\&.
Note, however, that the \fItext\fR along the axes has no particular tag\&.
.IP \(bu
\fIraxis\fR - Tag used for all objects related to a \fIright\fR axis\&.
.IP \(bu
\fItaxis\fR - Tag used for all objects related to a \fItime\fR axis\&.
.IP \(bu
\fIaxis3d\fR - Tag used for 3D axes
.IP \(bu
\fIxtickline, ytickline\fR - Tags used for ticklines\&.
.IP \(bu
\fIlegend, legengb, legendobj\fR - Tags used for the legend\&. The latter is used to manipulate
the legend as a whole\&.
.IP \(bu
\fIlegend_series\fR - Tag used to control the appearance of the legend entry ("series" should
be replaced by the series name)\&.
.IP \(bu
\fIobject\fR - used as standard tag for all objects drawn with the \fB::Plotchart::drawobject\fR
procedure\&. Tags given at object creation time are added to this tag\&.
.PP
\fIXY-plots (all types of axes):\fR
.IP \(bu
\fIdata\fR - The general tag to identify graphical objects associated with data\&.
\fIdata_seriesname\fR - The tag specific to a data series ("seriesname" should be replaced)\&.
\fIband\fR - The horizontal or vertical band drawn with the xband otr yband subcommands have this tag
by the actual name)\&.
\fIxtext\fR - The text labelling the xaxis\&.
\fIytext\fR - The text labelling hte yaxis horizontically\&.
\fIvtext\fR - The text labelling the yaxis vertically\&.
.PP
Items such as labelled dots only have the "data" tag\&.
.PP
\fIPiecharts and spiral pies:\fR
.IP \(bu
\fIsegment_segmentnumber\fR - The tag identifying the segment, the string "segmentnumber" should
be replaced by the actual number\&. This tag is used to explode the segments\&.
.PP
\fIBarcharts:\fR
.PP
Barcharts use the same tags as xy-plots (but for gradient-filled bars the data_seriesname is not used)\&.
.PP
\fIHistograms and isometric plots:\fR
.PP
Currently the only tag used is "data"\&.
.PP
\fITime-charts:\fR
.PP
As these plots are scrollable, several tags are used specific to the scrolling:
vertscroll, horizscroll, below, lowest, above, timeline, tline\&.
Each item also has a tag of the form "item_number",
where "number" is to be replaced by the actual sequence number of the item\&.
.PP
\fIGantt charts:\fR
.PP
In addition to the tags described for the time-charts, the following tags are used:
description, completed, summary and summarybar\&.
.PP
\fIRadial charts and polar plots:\fR
.PP
Currently the radial lines indicating the grid have no tags\&. The graphical objects associated with
data only have the "data" tag\&.
.PP
\fIWindroses:\fR
.PP
Only the tag \fIdata_number\fR is currently used ("number" should be replaced by the
sequence number of the data, starting at 0\&.
.PP
\fIContour and isoline plots:\fR
.PP
No tags are used\&.
.PP
\fI3D plots and 3D ribbon plots:\fR
.PP
No tags are used for the data objects, only for the axes\&.
.PP
\fICharts decorated with 3D effects:\fR
.PP
The following tags are used to identify various types of graphical objects: platform, background, d, u,
ticklines\&.
.PP
The text associated with the bars has no tags\&. The ribbon lines and areas have no tags either\&.
.PP
\fITables:\fR
.PP
Tags used are: frame, cellbg and celltext
\fIIn addition:\fR
To implement multiple plots and charts in a single canvas, all items
also get as a tag the plot/chart they belong to\&. This enables Plotchart
to manipulate only those items\&.
.SH "TODO - SOME PRIVATE NOTES"
I have the following wishlist:
.IP \(bu
Isometric plots - allow new items to be implemented easily\&.
.IP \(bu
A general 3D viewer - emphasis on geometry, not a ray-tracer\&.
.IP \(bu
Several improvements for boxplots:
.RS
.IP \(bu
Height of the box scales with the logarithm of the number of points
.IP \(bu
Marker line to indicate a "current" value
.IP \(bu
Box drawn from quantiles
.RE
.PP
.SH KEYWORDS
3D bars, 3D surfaces, bar charts, charts, coordinate transformations, coordinates, graphical presentation, isometric plots, pie charts, plotting, polar plots, strip charts, tables, time charts, xy-plots
.SH COPYRIGHT
.nf
Copyright (c) 2011 Arjen Markus <arjenmarkus@users\&.sourceforge\&.net>

.fi

Added embedded/man/files/modules/swaplist/swaplist.n.

























































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/swaplist/swaplist\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "swaplist" n 0\&.1 tklib "A dialog which allows a user to move options between two lists"
.BS
.SH NAME
swaplist \- A dialog which allows a user to move options between two lists
.SH SYNOPSIS
package require \fBTcl  8\&.4\fR
.sp
package require \fBTk  8\&.4\fR
.sp
package require \fBswaplist  ?0\&.1?\fR
.sp
\fB::swaplist::swaplist\fR \fIpathName\fR \fIvariable\fR \fIcompleteList\fR \fIselectedList\fR ?options?
.sp
.BE
.SH DESCRIPTION
This package provides a dialog which consists of 2 listboxes, along with buttons to move items
between them and reorder the right list\&.
.PP
.TP
\fB::swaplist::swaplist\fR \fIpathName\fR \fIvariable\fR \fIcompleteList\fR \fIselectedList\fR ?options?
Creates a dialog which presents the user with a pair of listboxes\&. Items are selected by using the buttons to move
them to the right list\&. The contents of the right list are put in the \fIvariable\fR upon closure of the dialog\&.
The command returns a boolean indicating if the user pressed OK or not\&. If -geometry is not specified, the
dialog is centered in its parent toplevel unless its parent is \&. in which case the dialog is centered in the screen\&.
.sp
Options:
.RS
.TP
\fB-embed\fR
if this flag is supplied, the procedure will create a swaplist widget named \fIpathName\fR, with the \fIvariable\fR set as the
listvariable for the right side listbox\&. This flag will also cause the -title and -geometry flags to be ignored\&.
.TP
\fB-reorder\fR
boolean specifying if buttons allowing the user to change the order of the right listbox should appear or not\&. defaults to true
.TP
\fB-title\fR
sets the title of the dialog window\&. defaults to "Configuration"
.TP
\fB-llabel\fR
sets the heading above the left list\&. defaults to "Available:"
.TP
\fB-rlabel\fR
sets the heading above the right list\&. defaults to "Selected:"
.TP
\fB-lbuttontext\fR
sets the text on the "move left" button\&. defaults to "<<"
.TP
\fB-rbuttontext\fR
sets the text on the "move right" button\&. defaults to ">>"
.TP
\fB-ubuttontext\fR
sets the text on the "move up" button\&. defaults to "Move Up"
.TP
\fB-dbuttontext\fR
sets the text on the "move down" button\&. defaults to "Move Down"
.TP
\fB-geometry\fR
sets the geometry of the dialog window\&.
.RE
.PP
.SH EXAMPLE
.CS


package require swaplist
namespace import swaplist::*

if {[swaplist \&.slist opts "1 2 3 4 5 6 7 8 9" "1 3 5"]} {
    puts "user chose numbers: $ops"
}


.CE
.SH KEYWORDS
dialog, disjointlistbox, listbox
.SH CATEGORY
Widget

Added embedded/man/files/modules/tkpiechart/canvaslabel.n.





















































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/tkpiechart/canvaslabel\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c) 1995-2004 Jean-Luc Fontaine <jfontain@free\&.fr>
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "canvasLabel" n 6\&.6 tklib "canvasLabel class"
.BS
.SH NAME
canvasLabel \- tkpiechart canvas label class
.SH SYNOPSIS
package require \fBstooop  4\&.1\fR
.sp
package require \fBswitched  2\&.2\fR
.sp
package require \fBtkpiechart  6\&.6\fR
.sp
\fBstooop::new\fR \fBcanvasLabel\fR \fIcanvas\fR ?options?
.sp
\fBswitched::configure\fR \fIcanvasLabelObject\fR ?options?
.sp
\fBswitched::cget\fR \fIcanvasLabelObject\fR \fIoption\fR
.sp
\fBstooop::delete\fR \fIcanvasLabelObject\fR
.sp
.BE
.SH DESCRIPTION
The canvasLabel class brings some Tk label widget functionality to the canvas text item, such as a background and a border\&.
.PP
The canvasLabel is built with a bullet rectangle on the left side of the text\&. The relief changes according to the select state, with a traditionally sunken relief when selected\&.
.PP
The label has a specific tag, which can be used to retrieve the coordinates of the object or move it, thanks to the canvas facilities\&.
.TP
\fBstooop::new\fR \fBcanvasLabel\fR \fIcanvas\fR ?options?
Creates a canvasLabel object in the specified Tk canvas\&. The canvasLabel object identifier is returned (referred to as \fIcanvasLabelObject\fR in this document)\&.
.TP
\fBswitched::configure\fR \fIcanvasLabelObject\fR ?options?
Configures a canvasLabel object or returns all the options with their current values if no options are passed as parameters\&.
.TP
\fBswitched::cget\fR \fIcanvasLabelObject\fR \fIoption\fR
Returns an option value for the specified canvasLabel object\&.
.TP
\fBstooop::delete\fR \fIcanvasLabelObject\fR
Deletes the specified canvasLabel object\&.
.PP
.SH OPTIONS
.TP
\fB-anchor\fR value
Specifies the anchor position of the rectangle and the text, relative to the positioning point\&. The behavior is similar to the \fB-anchor\fR option of the \fBcanvas\fR \fItext\fR item, except that the rectangle is taken into account\&. The default is \fIcenter\fR\&.
.TP
\fB-background\fR color
Specifies the background color of the bullet rectangle, as in the \fB-fill\fR option of the \fBcanvas\fR \fIrectangle\fR item\&. The default is transparent (empty string)\&.
.TP
\fB-bordercolor\fR color
Specifies the border color of the rectangle, as in the \fB-outline\fR option of the \fBcanvas\fR \fIrectangle\fR item\&. The default is black\&.
.TP
\fB-borderwidth\fR value
Specifies the border width of the rectangle, as in the \fB-width\fR option of the \fBcanvas\fR \fIrectangle\fR item\&. By default, the width is 1 pixel, which is the minimum width\&.
.TP
\fB-bulletwidth\fR value
Specifies the width of the rectangle placed to the left of the text\&. Defaults to \fI10\fR\&.
.TP
\fB-font\fR value
Specifies the font of the text, as in the \fB-font\fR option of the \fBcanvas\fR \fItext\fR item\&. The default is system dependent\&.
.TP
\fB-foreground\fR color
Specifies the color of the text, as in the \fB-fill\fR option of the \fBcanvas\fR \fItext\fR item\&. The default is black\&.
.TP
\fB-justify\fR value
Specifies how to justify the text, as in the \fB-justify\fR option of the \fBcanvas\fR \fItext\fR item\&. The default is \fIleft\fR\&.
.TP
\fB-minimumwidth\fR value
The total label width will not go below the specified value, but may be larger if the label text requires it\&.
.TP
\fB-padding\fR value
Specifies how much space to leave between the text and the closest rectangle edge\&. Units are identical to those specified in the \fBcanvas\fR \fICOORDINATES\fR manual section\&.
.TP
\fB-scale\fR list
List of 2 floating point numbers used to set the scaling factor in the x and y axis\&. Scaling is applied immediately and defaults to 1\&.
.TP
\fB-select\fR boolean
Sets the label state\&.
.TP
\fB-selectrelief\fR value
Either \fIflat\fR, \fIraised\fR or \fIsunken\fR\&. Specifies the 3D effect desired for the text area when the label is selected\&.
.TP
\fB-stipple\fR bitmap
Specifies the stipple pattern filling the rectangle, as in the \fB-stipple\fR option of the \fBcanvas\fR \fIrectangle\fR item\&. There is no bitmap by default\&.
.TP
\fB-text\fR text
Specifies the string to be displayed in the text area, as in the \fB-text\fR option of the \fBcanvas\fR \fItext\fR item\&. The default is an empty string\&.
.TP
\fB-textbackground\fR color
Specifies the color of the text area background\&.
.TP
\fB-width\fR value
Specifies a maximum line length for the text, as in the \fB-width\fR option of the \fBcanvas\fR \fItext\fR item\&. The default is \fI0\fR\&.
.PP
.SH TAGS
The labeler has the following specific tag (see the \fBcanvas\fR manual page \fIITEM IDS AND TAGS\fR section for more information):
.IP \(bu
canvasLabel(canvasLabelObject)
.PP
.SH "SEE ALSO"
pie, pieBoxLabeler, piePeripheralLabeler
.SH KEYWORDS
canvas, labeler, pie, slice
.SH COPYRIGHT
.nf
Copyright (c) 1995-2004 Jean-Luc Fontaine <jfontain@free\&.fr>

.fi

Added embedded/man/files/modules/tkpiechart/pie.n.

































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/tkpiechart/pie\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c) 1995-2004 Jean-Luc Fontaine <jfontain@free\&.fr>
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "pie" n 6\&.6 tklib "tkpiechart pie class"
.BS
.SH NAME
pie \- 2D or 3D pie chart object in a canvas
.SH SYNOPSIS
package require \fBstooop  4\&.1\fR
.sp
package require \fBswitched  2\&.2\fR
.sp
package require \fBtkpiechart  6\&.6\fR
.sp
\fBstooop::new\fR \fBpie\fR \fIcanvas\fR \fIx\fR \fIy\fR ?options?
.sp
\fBswitched::configure\fR \fIpieObject\fR ?options?
.sp
\fBswitched::cget\fR \fIpieObject\fR \fIoption\fR
.sp
\fBstooop::delete\fR \fIpieObject\fR
.sp
pie::newSlice \fIpieObject\fR ?labelText?
.sp
pie::deleteSlice \fIpieObject\fR \fIsliceObject\fR
.sp
pie::sizeSlice \fIpieObject\fR \fIsliceObject\fR \fIunitShare\fR ?displayedValue?
.sp
pie::labelSlice \fIpieObject\fR \fIsliceObject\fR \fIstring\fR
.sp
pie::selectedSlices \fIpieObject\fR
.sp
.BE
.SH DESCRIPTION
A pie object is used to visualize a set of values, usually as shares of a total\&. Each value is represented by a colored slice, which may have a 2 dimensional or 3 dimensional look\&. Each slice is associated with a label displaying the data name, and a numerical field showing the percentage taken by the slice\&. The labels are placed by the chosen labeler object (\fB-labeler\fR option)\&. Each label color matches its related slice\&.
.PP
A pie chart is made of Tk canvas items, found in \fBpieBoxLabeler\fR, \fBpiePeripheralLabeler\fR and \fBcanvasLabel\fR objects, that compose the pie object\&. The pie constructor creates the pie itself and its background slice within the parent canvas\&. Once the pie object exists, slices can be created and resized\&. At the time the pie is created, the parent Tk \fBcanvas\fR widget must exist\&.
.PP
Slice colors are automatically generated, using a default color list for all pies, unless another list is used (using the \fB-colors\fR option)\&. When a 3D look is used, the slice edge is darker than its top while using the same color tone\&.
.TP
\fBstooop::new\fR \fBpie\fR \fIcanvas\fR \fIx\fR \fIy\fR ?options?
Creates a pie object in the specified Tk canvas\&. The upper left corner of the pie is placed at the specified coordinates in the canvas\&. The pie object identifier is returned (referred to as \fIpieObject\fR in this document)\&.
.TP
\fBswitched::configure\fR \fIpieObject\fR ?options?
Configures a pie object or returns all the options with their current values if no options are passed as parameters\&.
.TP
\fBswitched::cget\fR \fIpieObject\fR \fIoption\fR
Returns an option value for the specified pie object\&.
.TP
\fBstooop::delete\fR \fIpieObject\fR
Deletes the specified pie object\&.
.PP
.SH OVERVIEW
The pie class is part of the tkpiechart extension that allows the programmer to create and dynamically update 2D or 3D pie charts in a Tcl/Tk application\&. The tkpiechart package is written in Tcl only, using object oriented techniques thanks to the stooop package, included in tcllib\&.
.SH OPTIONS
.TP
\fB-autoupdate\fR boolean
Boolean value specifying whether all the slices and their labels are redrawn when a slice size is changed\&. On by default\&. Turn it off and invoke \fBpie::update\fR if you change many slices at once and want to improve performance\&.
.TP
\fB-background\fR color
Slices may or may not fill up the 100% of the pie\&. The unoccupied part of the pie is a slice that takes 100% of the pie\&. It is by default transparent with a black border\&. The color of this background slice may be set by the user using color names as in the \fB-background\fR standard option (see the Tk \fBoptions\fR manual page for more details)\&. When the pie has a 3D look, the background of a slice edge is darker than the top and uses the same color tone\&.
.TP
\fB-colors\fR list
Specifies a list of colors for slices\&. In this case, the slice colors will successively be drawn from the list in the list order, cycling through if there are more slices than colors in the list\&. Colors are specified in the same format as the \fB-background\fR option\&.
.TP
\fB-height\fR value
Specifies the total height for the pie, including the room taken by the labeler labels\&. The pie slices are resized when labels are added or deleted (when adding or deleting slices) so that the total height remains constant\&. This value may be specified in any of the forms described in the \fBcanvas\fR \fICOORDINATES\fR manual section\&.
.TP
\fB-labeler\fR object
Specifies a placer object for the slice labels, so that, for example, slice values may be placed next to them\&. If not specified, the \fIpieBoxLabeler\fR (see corresponding manual) is used, the other option being the \fIpiePeripheralLabeler\fR class\&. Each labeler has a specific behavior which may be set via its options\&. The labeler object is automatically deleted when the pie object is itself deleted\&. The labeler cannot be changed once the pie is created\&.
.TP
\fB-selectable\fR boolean
Boolean value specifying whether slices are selectable or not\&. Acceptable values are those defined by the Tcl language itself for boolean values\&. If selectable, slices can be selected with the first mouse button, by clicking on either the slice or its label\&. Selection can be extended by using the classical \fIcontrol\fR or \fIshift\fR clicks\&. The list of currently selected slices can be retrieved at any time using the \fBselectedSlices\fR pie class member procedure\&.
.TP
\fB-title\fR text
Title text to be placed above the pie\&.
.TP
\fB-titlefont\fR value
Font for the title text\&.
.TP
\fB-titleoffset\fR value
Distance between the bottom of the title text and the top of the pie slices\&. This value may be specified in any of the forms described in the sizes section below\&.
.TP
\fB-thickness\fR value
The thickness is set to 0 by default, giving the pie a simple 2D shape, much faster to display\&. A positive thickness value will give the pie a 3D look with matched darker colors for the slices edges\&. These values may be specified in any of the forms described in the \fISIZES\fR section below\&.
.TP
\fB-width\fR value
Specifies the total width for the pie, including the room taken by the labeler labels\&. The pie slices are resized when labels are added or deleted (when adding or deleting slices) so that the total width remains constant\&. This value may be specified in any of the forms described in the \fBcanvas\fR \fICOORDINATES\fR manual section\&.
.PP
.SH "MEMBER PROCEDURES"
.TP
pie::newSlice \fIpieObject\fR ?labelText?
Creates a slice\&. A unique object identifier is returned (referred to as \fIsliceObject\fR in this document)\&. The slice color is automatically allocated and the slice label placed using the specified labeler (using the \fB-labeler\fR option)\&. The slice itself is placed after (clockwise) the existing slices\&. The slice object identifier will be used for sizing and resizing the slice\&.
.sp
If the label text is not specified, it will be set to \fI"slice n"\fR, \fIn\fR being the number of the slice in the order of creation (first slice is number 1)\&.
.TP
pie::deleteSlice \fIpieObject\fR \fIsliceObject\fR
Deletes a slice\&. The following slices (clockwise) if any are then moved to compensate for the empty space left by the deleted slice\&.
.TP
pie::sizeSlice \fIpieObject\fR \fIsliceObject\fR \fIunitShare\fR ?displayedValue?
Sizes or resizes a slice\&. The slice is then automatically recalculated so it occupies the proper share of the whole pie\&. The \fIunitShare\fR parameter is a floating point number expressed in share (between 0 and 1) of the whole pie\&. The following slices (clockwise) are moved to accommodate the new slice size\&. The slice size value next to the slice label is also updated with the new share value or \fIdisplayedValue\fR if specified\&.
.TP
pie::labelSlice \fIpieObject\fR \fIsliceObject\fR \fIstring\fR
Updates a slice label\&. Can be invoked at any time\&.
.TP
pie::selectedSlices \fIpieObject\fR
Returns a list of currently selected slice objects\&.
.PP
.SH TAGS
The whole pie, the pie graphics (all slices), and each slice have the following specific tags:
.IP \(bu
\fBpie(pieObject)\fR
.IP \(bu
\fBpieSlices(pieObject)\fR
.IP \(bu
\fBslice(sliceObject)\fR
.PP
For example, the whole pie can be moved using the \fBcanvas\fR \fBmove\fR command on the pie tag, or bindings on slices can be set using the slice tags (see the \fBcanvas\fR manual page \fIITEM IDS AND TAGS\fR section for more information)\&.
.SH SIZES
All sizes related to pies are stored as floating point numbers\&. The coordinates and sizes are specified in screen units, which are floating point numbers optionally followed by one of several letters as specified in the \fBcanvas\fR \fICOORDINATES\fR manual section\&.
.SH LIMITATIONS
If the number of slices is too big, identical colors will be used for some of the slices\&. You may set your own colors in this case\&.
.SH "SEE ALSO"
canvasLabel, pieBoxLabeler, piePeripheralLabeler
.SH KEYWORDS
canvas, labeler, pie, slice
.SH COPYRIGHT
.nf
Copyright (c) 1995-2004 Jean-Luc Fontaine <jfontain@free\&.fr>

.fi

Added embedded/man/files/modules/tkpiechart/pieboxlabeler.n.











































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/tkpiechart/pieboxlabeler\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c) 1995-2004 Jean-Luc Fontaine <jfontain@free\&.fr>
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "pieBoxLabeler" n 6\&.6 tklib "pieBoxLabeler class"
.BS
.SH NAME
pieBoxLabeler \- tkpiechart pie box style labeler class
.SH SYNOPSIS
\fBstooop::new\fR \fBpieBoxLabeler\fR \fIcanvas\fR ?options?
.sp
\fBswitched::configure\fR \fIpieBoxLabelerObject\fR ?options?
.sp
\fBswitched::cget\fR \fIpieBoxLabelerObject\fR \fIoption\fR
.sp
.BE
.SH DESCRIPTION
The pie box style labeler object is used as a slice label placer for a \fBpie\fR object and is passed to the pie constructor via its \fB-labeler\fR option (see the \fBpie\fR class manual)\&.
.PP
The labels are arranged in 2 columns below the pie graphics\&. Each label text is placed to the right of a rectangle, the background color of which matches its corresponding slice\&. The slice share value is placed to the right of the label text, separated by a semicolon\&. Each label is actually a canvasLabel object (see the \fBcanvasLabel\fR class manual for further information)\&.
.PP
There is no need to delete a \fBpieBoxLabeler\fR object as it is automatically handled by the pie class\&.
.TP
\fBstooop::new\fR \fBpieBoxLabeler\fR \fIcanvas\fR ?options?
Creates a pieBoxLabeler object in the specified Tk canvas\&. The pieBoxLabeler object identifier is returned (referred to as \fIpieBoxLabelerObject\fR in this document)\&.
.TP
\fBswitched::configure\fR \fIpieBoxLabelerObject\fR ?options?
Configures a pieBoxLabeler object or returns all the options with their current values if no options are passed as parameters\&.
.TP
\fBswitched::cget\fR \fIpieBoxLabelerObject\fR \fIoption\fR
Returns an option value for the specified pieBoxLabeler object\&.
.PP
.SH OPTIONS
.TP
\fB-font\fR value
Specifies a font for the slice labels\&. If not specified, the default font is system dependent\&.
.TP
\fB-justify\fR value
Specifies how to justify labels within their own column\&. Must be one of \fIleft\fR, \fIcenter\fR or \fIright\fR\&. Defaults to \fIleft\fR\&. For example, if justification is \fIright\fR, all column labels right edges are aligned\&.
.TP
\fB-offset\fR value
Specifies the distance between the pie graphics and the closest slice label\&. This value may be specified in any of the forms described in the \fBcanvas\fR \fICOORDINATES\fR manual section\&.
.PP
.SH TAGS
The labeler has the following specific tag (see the \fBcanvas\fR manual page \fIITEM IDS AND TAGS\fR section for more information):
.IP \(bu
pieBoxLabeler(pieBoxLabelerObject)
.PP
.SH "SEE ALSO"
canvasLabel, pie, piePeripheralLabeler
.SH KEYWORDS
canvas, labeler, pie, slice
.SH COPYRIGHT
.nf
Copyright (c) 1995-2004 Jean-Luc Fontaine <jfontain@free\&.fr>

.fi

Added embedded/man/files/modules/tkpiechart/pieperipherallabeler.n.























































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/tkpiechart/pieperipherallabeler\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c) 1995-2004 Jean-Luc Fontaine <jfontain@free\&.fr>
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "piePeripheralLabeler" n 6\&.6 tklib "piePeripheralLabeler class"
.BS
.SH NAME
piePeripheralLabeler \- tkpiechart pie peripheral style labeler class
.SH SYNOPSIS
\fBstooop::new\fR \fBpiePeripheralLabeler\fR \fIcanvas\fR ?options?
.sp
\fBswitched::configure\fR \fIpiePeripheralLabelerObject\fR ?options?
.sp
\fBswitched::cget\fR \fIpiePeripheralLabelerObject\fR \fIoption\fR
.sp
.BE
.SH DESCRIPTION
The pie peripheral style labeler object is used as a slice label placer for a \fBpie\fR object and is passed to the pie constructor via its \fB-labeler\fR option (see the \fBpie\fR class manual)\&.
.PP
The slice description text labels are arranged in 2 columns below the pie graphics, whereas the slice values are placed next to the slice and actually follow the slice as the pie is updated\&. Each description label text is placed to the right of a rectangle, the background color of which matches its corresponding slice\&. Each description label is actually a canvasLabel object\&.
.PP
There is no need to delete a \fBpiePeripheralLabeler\fR object as it is automatically handled by the pie class\&.
.TP
\fBstooop::new\fR \fBpiePeripheralLabeler\fR \fIcanvas\fR ?options?
Creates a piePeripheralLabeler object in the specified Tk canvas\&. The piePeripheralLabeler object identifier is returned (refered to as \fIpiePeripheralLabelerObject\fR in this document)\&.
.TP
\fBswitched::configure\fR \fIpiePeripheralLabelerObject\fR ?options?
Configures a piePeripheralLabeler object or returns all the options with their current values if no options are passed as parameters\&.
.TP
\fBswitched::cget\fR \fIpiePeripheralLabelerObject\fR \fIoption\fR
Returns an option value for the specified piePeripheralLabeler object\&.
.PP
.SH OPTIONS
.TP
\fB-font\fR value
Specifies a font for the slice labels\&. If not specified, the default font is system dependent\&.
.TP
\fB-justify\fR value
Specifies how to justify labels within their own column\&. Must be one of \fIleft\fR, \fIcenter\fR or \fIright\fR\&. Defaults to \fIleft\fR\&. For example, if justification is \fIright\fR, all column labels right edges are aligned\&.
.TP
\fB-offset\fR value
Specifies the distance between the pie graphics and the closest slice label\&. This value may be specified in any of the forms described in the \fBcanvas\fR \fICOORDINATES\fR manual section\&.
.TP
\fB-smallfont\fR
Specifies a font for the slice values\&. It is usually a small font in order to avoid values overlapping when 2 slices are very close to each other\&. If not specified, the description label font (\fB-font\fR option) is used\&.
.TP
\fB-widestvaluetext\fR
Specifies a string of maximum width for slice values (placed around the pie next to the slices), so that enough room is allocated for these value labels when the pie width and height are set\&. It defaults to 00\&.0\&. For example, it could be set to "00\&.00 %"\&.
.PP
.SH TAGS
The labeler has the following specific tag (see the \fBcanvas\fR manual page \fIITEM IDS AND TAGS\fR section for more information):
.IP \(bu
piePeripheralLabeler(piePeripheralLabelerObject)
.PP
.SH "SEE ALSO"
canvasLabel, pie, pieBoxLabeler
.SH KEYWORDS
canvas, labeler, pie, slice
.SH COPYRIGHT
.nf
Copyright (c) 1995-2004 Jean-Luc Fontaine <jfontain@free\&.fr>

.fi

Added embedded/man/files/modules/tooltip/tooltip.n.































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/tooltip/tooltip\&.n' by tcllib/doctools with format 'nroff'
'\" Copyright (c) 1996-2008, Jeffrey Hobbs
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "tooltip" n 1\&.4\&.4 tklib "Tooltip management"
.BS
.SH NAME
tooltip \- Tooltip management
.SH SYNOPSIS
package require \fBTcl  8\&.4\fR
.sp
package require \fBmsgcat  1\&.3\fR
.sp
package require \fBtooltip  ?1\&.4\&.4?\fR
.sp
\fB::tooltip::tooltip\fR \fIcommand\fR ?\fIoptions\fR?
.sp
\fB::tooltip::tooltip\fR \fIpathName\fR ?\fIoption arg\fR? \fImessage\fR
.sp
.BE
.SH DESCRIPTION
.PP
This package provides tooltips, small text messages that can be displayed
when the mouse hovers over a widget, menu item, canvas item, listbox item
or text widget tag\&.
.SH COMMANDS
.TP
\fB::tooltip::tooltip\fR \fIcommand\fR ?\fIoptions\fR?
Manage the tooltip package using the following subcommands\&.
.RS
.TP
\fBclear\fR \fIindex\fR
Prevents the specified widgets from showing tooltips\&. \fIpattern\fR
is a glob pattern and defaults to matching all widgets\&.
.TP
\fBdelay\fR ?\fImillisecs\fR?
Query or set the hover delay\&. This is the interval that the pointer must remain
over the widget before the tooltip is displayed\&. The delay is specified in
milliseconds and must be greater than 50ms\&.
With no argument the current delay is returned\&.
.TP
\fBfade\fR ?\fIboolean\fR?
Enable or disable fading of the tooltip\&.  The is enabled by default on Win32
and Aqua\&.  The tooltip will fade away on Leave events instead disappearing\&.
.TP
\fBdisable\fR
.TP
\fBoff\fR
Disable all tooltips
.TP
\fBenable\fR
.TP
\fBon\fR
Enables tooltips for defined widgets\&.
.RE
.sp
.TP
\fB::tooltip::tooltip\fR \fIpathName\fR ?\fIoption arg\fR? \fImessage\fR
This command arranges for widget \fIpathName\fR to display a tooltip with
message \fImessage\fR\&.  The tooltip uses a late-binding msgcat call on the
passed in message to allow for on-the-fly language changes in an application\&.
If the widget specified is a menu, canvas or text widget then additional options
are used to tie the tooltip to specific menu entries, canvas items or text
tags\&.
.RS
.TP
\fB-index\fR \fIindex\fR
This option is used to set a tooltip on a menu item\&. The index may be
either the entry index or the entry label\&. The widget must be a menu
widget but the entries do not have to exists when the tooltip is set\&.
.TP
\fB-items\fR \fIname\fR
This option is used to set a tooltip for canvas widget or listbox items\&.
For the canvas widget, the item must already be present in the canvas
widget and will be found with a \fBfind withtag\fR lookup\&.
For listbox widgets the item(s) may be created later but the programmer
is responsible for managing the link between the listbox item index and the
corresponding tooltip\&. If the listbox items are re-ordered, the tooltips
will need amending\&.
.sp
If the widget is not a canvas or listbox then an error is raised\&.
.TP
\fB-tag\fR \fIname\fR
The \fB-tag\fR option can be used to set a tooltip for a text widget
tag\&. The tag should already be present when this command is called or
an error will be returned\&. The widget must also be a text widget\&.
.RE
.PP
.SH EXAMPLE
.CS


# Demonstrate widget tooltip
package require tooltip
pack [label \&.l -text "label"]
tooltip::tooltip \&.l "This is a label widget"

.CE
.CS


# Demonstrate menu tooltip
package require tooltip
\&. configure -menu [menu \&.menu]
\&.menu add cascade -label Test -menu [menu \&.menu\&.test -tearoff 0]
\&.menu\&.test add command -label Tooltip
tooltip::tooltip \&.menu\&.test -index 0 "This is a menu tooltip"

.CE
.CS


# Demonstrate canvas item tooltip
package require tooltip
pack [canvas \&.c]
set item [\&.c create rectangle 10 10 80 80]
tooltip::tooltip \&.c -item $item "Canvas item tooltip"

.CE
.CS


# Demonstrate listbox item tooltip
package require tooltip
pack [listbox \&.lb]
\&.lb insert 0 "item one"
tooltip::tooltip \&.lb -item 0 "Listbox item tooltip"

.CE
.CS


# Demonstrate text tag tooltip
package require tooltip
pack [text \&.txt]
\&.txt tag configure TIP-1 -underline 1
tooltip::tooltip \&.txt -tag TIP-1 "tooltip one text"
\&.txt insert end "An example of a " {} "tooltip" TIP-1 " tag\&.\\n" {}

.CE
.SH KEYWORDS
balloon, help, hover, tooltip
.SH COPYRIGHT
.nf
Copyright (c) 1996-2008, Jeffrey Hobbs

.fi

Added embedded/man/files/modules/widget/widget.n.

























































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/widget/widget\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "widget" n 3\&.0 tklib "Various megawidgets"
.BS
.SH NAME
widget \- Megawidget bundle
.SH SYNOPSIS
package require \fBTcl  8\&.4\fR
.sp
package require \fBTk  8\&.4\fR
.sp
package require \fBwidget  ?3\&.0?\fR
.sp
package require \fBsnit \fR
.sp
\fBwidget::validate\fR \fIas\fR ?options?
.sp
\fBwidget::calendar\fR \fIpathname\fR ?options?
.sp
\fBwidget::dateentry\fR \fIpathname\fR ?options?
.sp
\fBwidget::dialog\fR \fIpathname\fR ?options?
.sp
\fBwidget::menuentry\fR \fIpathname\fR ?options?
.sp
\fBwidget::panelframe\fR \fIpathname\fR ?options?
.sp
\fBwidget::ruler\fR \fIpathname\fR ?options?
.sp
\fBwidget::screenruler\fR \fIpathname\fR ?options?
.sp
\fBwidget::scrolledwindow\fR \fIpathname\fR ?options?
.sp
\fBwidget::statusbar\fR \fIpathname\fR ?options?
.sp
\fBwidget::superframe\fR \fIpathname\fR ?options?
.sp
\fBwidget::toolbar\fR \fIpathname\fR ?options?
.sp
.BE
.SH DESCRIPTION
This package provides megawidgets based on the snit oo system (snidgets)\&.
It makes use of the Tile/Ttk themed widget set\&.
.PP
.TP
\fBwidget::validate\fR \fIas\fR ?options?
commands:
.PP
.SH WIDGETS
.TP
\fBwidget::calendar\fR \fIpathname\fR ?options?
options:
.TP
\fBwidget::dateentry\fR \fIpathname\fR ?options?
options:
.TP
\fBwidget::dialog\fR \fIpathname\fR ?options?
options:
.TP
\fBwidget::menuentry\fR \fIpathname\fR ?options?
options:
.TP
\fBwidget::panelframe\fR \fIpathname\fR ?options?
options:
.TP
\fBwidget::ruler\fR \fIpathname\fR ?options?
options:
.TP
\fBwidget::screenruler\fR \fIpathname\fR ?options?
options:
.TP
\fBwidget::scrolledwindow\fR \fIpathname\fR ?options?
options:
.TP
\fBwidget::statusbar\fR \fIpathname\fR ?options?
options:
.TP
\fBwidget::superframe\fR \fIpathname\fR ?options?
options:
.TP
\fBwidget::toolbar\fR \fIpathname\fR ?options?
options:
.PP
.SH EXAMPLE
.CS


package require widget::superframe ; # or widget::all
pack [widget::superframe \&.f -type separator -text "SuperFrame:"]

.CE
.SH KEYWORDS
bundle, calendar, dateentry, dialog, megawidget, menu, panelframe, ruler, screenruler, scrolledwindow, snit, statusbar, superframe, toolbar, widget
.SH CATEGORY
Widget

Added embedded/man/files/modules/widget/widget_calendar.n.













































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/widget/widget_calendar\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "widget_calendar" n 1\&.0\&.1 tklib "Various megawidgets"
.BS
.SH NAME
widget_calendar \- Calendar Megawidget
.SH SYNOPSIS
package require \fBTcl  8\&.4\fR
.sp
package require \fBTk  8\&.4\fR
.sp
package require \fBwidget  ?3\&.0?\fR
.sp
package require \fBwidget::calendar  ?1\&.0\&.1?\fR
.sp
\fBwidget::calendar\fR \fIpathname\fR ?options?
.sp
.BE
.SH DESCRIPTION
This package provides a calendar megawidget (snidget)\&.
.PP
.TP
\fBwidget::calendar\fR \fIpathname\fR ?options?
.PP
.SH "WIDGET OPTIONS"
.PP
.TP
\fB-command\fR
A script to evaluate when a date was selected\&.
.TP
\fB-dateformat\fR
The format of the date that is returned\&. Default: %m/%d/%Y\&.
.TP
\fB-firstday\fR
Set first day the week, Either sunday or monday\&. It defaults to monday\&.
.TP
\fB-font\fR
Select the font used in the widget\&. It defaults to Helvetica 9\&.
.TP
\fB-highlightcolor\fR
Selects the background color for the day that has been selected\&. Default: #FFCC00
.TP
\fB-language\fR
Specify language of the calendar contents\&. The language is specified
by abbreviations of the languge, for example: en - english, de - german \&.\&.\&.
It defaults to en\&.
.sp
Supported languages: de en es fr gr he it ja sv pl pt zh fi tr nl ru crk crx-nak crx-lhe
.TP
\fB-shadecolor\fR
Selects the color of the parts that have a shaded background\&. Default: #888888
.TP
\fB-showpast\fR
Specify if the past shall be shown\&. It is a boolean value and defaults
to 1\&.
.TP
\fB-textvariable\fR
Specifies the name of a variable whose value is linked to the entry widget's contents\&.
Whenever the variable changes value, the widget's contents are updated, and
vice versa\&.
.PP
.SH "WIDGET COMMAND"
\fIpathname\fR \fBget\fR ?\fIwhat\fR?
.PP
Returns a part of the selected date or 'all'\&. The argument \fIwhat\fR selects
the part\&. Valid values for \fIwhat\fR are: day, month, year and all\&.
\'all' is the default and returns the complete date in the format given
with -dateformat\&.
.SH "DEFAULT BINDINGS"
On creation of the calendar widget the following bindings are installed\&.
When pressing a key the command is invoked and the textvariable is
updated\&.
updated\&.
.IP \(bu
Home - Move to the current date
.IP \(bu
Up - Move to week before current date
.IP \(bu
Down - Move to week after current date
.IP \(bu
Left - Move to day before current date
.IP \(bu
Right - Move to day after current date
.IP \(bu
Control-Left - Move to month before current date
.IP \(bu
Control-Right - Move to month after current date
.IP \(bu
Control-Up - Move to year before current date
.IP \(bu
Control-Down - Move to year after current date
.PP
.SH EXAMPLE
.CS


    package require widget::calendar ; # or widget::all
    set t [widget::calendar \&.t]
    pack $t -fill x -expand 1

.CE
.SH KEYWORDS
calendar, date, megawidget, snit, widget
.SH CATEGORY
Widget

Added embedded/man/files/modules/widget/widget_dateentry.n.







































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/widget/widget_dateentry\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "widget_dateentry" n 0\&.96 tklib "Various megawidgets"
.BS
.SH NAME
widget_dateentry \- Date Entry Megawidget
.SH SYNOPSIS
package require \fBTcl  8\&.4\fR
.sp
package require \fBTk  8\&.4\fR
.sp
package require \fBwidget  ?3\&.0?\fR
.sp
package require \fBwidget::dateentry  ?0\&.96?\fR
.sp
\fBwidget::dateentry\fR \fIpathname\fR ?options?
.sp
.BE
.SH DESCRIPTION
This package provides a dateentry megawidget (snidget)\&.
It is based on an ttk::entry\&. All widget commands of the ttk::entry
are available for the dateentry\&.
.PP
.TP
\fBwidget::dateentry\fR \fIpathname\fR ?options?
.PP
.SH "WIDGET OPTIONS"
.PP
.TP
\fB-command\fR
A script to evaluate when a date was selected\&.
.TP
\fB-dateformat\fR
The format of the date that is returned\&. Default: %m/%d/%Y\&.
.TP
\fB-firstday\fR
See the calendar man page\&.
.TP
\fB-font\fR
Select the font used in the widget\&. It defaults to Helvetica 9\&.
.TP
\fB-highlightcolor\fR
See the calendar man page\&.
.TP
\fB-language\fR
See the calendar man page\&.
.TP
\fB-shadecolor\fR
See the calendar man page\&.
.TP
\fB-showpast\fR
See the calendar man page\&.
.TP
\fB-textvariable\fR
Specifies the name of a variable whose value is linked to the entry widget's contents\&.
Whenever the variable changes value, the widget's contents are updated, and
vice versa\&.
.PP
.SH "WIDGET COMMAND"
\fIpathname\fR \fBget\fR
Returns the selected date\&.
.SH "DEFAULT BINDINGS"
On creation of the dateentry widget the following bindings are installed\&.
For navigation within the calendar, see its manpage\&.
.IP \(bu
Button-1 - Accept and select the date and close the calendar window\&.
.IP \(bu
Return, space - Accept the selected date and close the calendar window
.IP \(bu
Escape - Close calendar window
.IP \(bu
Control-space - Show calendar window
.PP
.SH EXAMPLE
.CS


    package require widget::dateentry; # or widget::all
    set t [widget::dateentry \&.de]
    pack $t -fill x -expand 1

.CE
.SH KEYWORDS
date, dateentry, megawidget, snit, widget
.SH CATEGORY
Widget

Added embedded/man/files/modules/widget/widget_toolbar.n.









































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/widget/widget_toolbar\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "widget_toolbar" n 3\&.0 tklib "Various megawidgets"
.BS
.SH NAME
widget_toolbar \- Toolbar Megawidget
.SH SYNOPSIS
package require \fBTcl  8\&.4\fR
.sp
package require \fBTk  8\&.4\fR
.sp
package require \fBwidget  ?3\&.0?\fR
.sp
package require \fBwidget::toolbar  ?1\&.0?\fR
.sp
\fBwidget::toolbar\fR \fIpathname\fR ?options?
.sp
getframe
.sp
add ?item? ?args?
.sp
delete item1 ?item2? ?\&.\&.\&.?
.sp
itemcget symbol option
.sp
itemconfigure symbol ?args?
.sp
items ?pattern?
.sp
remove ?-destroy? item1 ?item2? ?\&.\&.\&.?
.sp
.BE
.SH DESCRIPTION
This package provides a toolbar megawidget (snidget)\&.
It makes use of the Tile/Ttk themed widget set\&.
.PP
.TP
\fBwidget::toolbar\fR \fIpathname\fR ?options?
.TP
getframe
.TP
add ?item? ?args?
.TP
delete item1 ?item2? ?\&.\&.\&.?
.TP
itemcget symbol option
.TP
itemconfigure symbol ?args?
.TP
items ?pattern?
.TP
remove ?-destroy? item1 ?item2? ?\&.\&.\&.?
.PP
.SH "WIDGET OPTIONS"
.TP
\fB-ipad\fR
.TP
\fB-pad\fR
.TP
\fB-separator\fR
.PP
.SH "ITEM OPTIONS"
.TP
\fB-pad\fR
.TP
\fB-separator\fR
.TP
\fB-sticky\fR
.TP
\fB-weight\fR
.PP
.SH EXAMPLE
.CS


package require widget::toolbar ; # or widget::all
set t [widget::toolbar \&.t]
pack $t -fill x -expand 1
$t add button [button \&.b -text foo]
$t add separator -pad {2 4}
$t add button [button \&.c -text bar]

.CE
.SH KEYWORDS
megawidget, snit, toolbar, widget
.SH CATEGORY
Widget

Added embedded/man/files/modules/widgetl/widget_listentry.n.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/widgetl/widget_listentry\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "widget_listentry" n 0\&.1 tklib "widget::listentry widget"
.BS
.SH NAME
widget_listentry \- widget::listentry widget
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBwidget::listentry  ?0\&.1?\fR
.sp
package require \fBwidget::validator  ?0\&.1?\fR
.sp
package require \fBwidget::scrolledwindow \fR
.sp
package require \fBsnit \fR
.sp
package require \fBtooltip \fR
.sp
package require \fBimg::png \fR
.sp
package require \fBmsgcat \fR
.sp
\fBwidget::listentry\fR \fIpathname\fR ?options?
.sp
\fBwidgetCmd\fR \fBdestroy\fR
.sp
\fBwidgetCmd\fR \fBconfigure\fR
.sp
\fBwidgetCmd\fR \fBconfigure\fR \fIoption\fR \fIvalue\fR \&.\&.\&.
.sp
\fBwidgetCmd\fR \fBconfigure\fR \fIoption\fR
.sp
\fBwidgetCmd\fR \fBcget\fR \fIoption\fR
.sp
\fI{*}cmdprefix\fR \fBget\fR
.sp
\fI{*}cmdprefix\fR \fBset\fR \fIvalues\fR
.sp
\fI{*}cmdprefix\fR \fItext\fR \fIerrvar\fR
.sp
\fI{*}cmdprefix\fR \fItext\fR
.sp
\fI{*}cmdprefix\fR \fIcookievar\fR
.sp
.BE
.SH DESCRIPTION
This package provides a megawidget for the interactive entry of
ordered and unordered lists\&.
For a simpler and more restricted megawidget please see the
package \fBwidget::listsimple\fR\&.
.SH "CLASS API"
The widget class supports a single command, for the creation of widgets\&.
.TP
\fBwidget::listentry\fR \fIpathname\fR ?options?
This command creates and configures new instances of the widget\&.
.sp
For details on the available options please see section
\fBWidget Options\fR\&.
.sp
The result of the command is the pathname of the new widget\&.
.PP
.SH "INSTANCE API"
All widget instances supported the following methods\&.
.TP
\fBwidgetCmd\fR \fBdestroy\fR
This method destroys the widget\&.
Any further access to the widget will generate errors\&.
.sp
The result of the command is the empty string\&.
.TP
\fBwidgetCmd\fR \fBconfigure\fR
This method comes in three variants\&. This variant here returns a list
containing the current configuration of the widget, i\&.e\&. the values
for all options\&.
.sp
For details on the available options please see section
\fBWidget Options\fR\&.
.TP
\fBwidgetCmd\fR \fBconfigure\fR \fIoption\fR \fIvalue\fR \&.\&.\&.
This method comes in three variants\&. This variant here reconfigures
the widget, setting the specified options to the given values\&.
.sp
\fINote\fR that it is not possible to change the
construction-time only options\&.
.sp
For details on the available options please see section
\fBWidget General Options\fR\&.
.sp
The result of the command is the empty string\&.
.TP
\fBwidgetCmd\fR \fBconfigure\fR \fIoption\fR
This method comes in three variants\&. This variant here is an alias
for the method \fBcget\fR below and identical to it\&.
.TP
\fBwidgetCmd\fR \fBcget\fR \fIoption\fR
This method returns the current value of the specified \fIoption\fR\&.
.sp
For details on the available options please see section
\fBWidget Options\fR\&.
.PP
.SH "WIDGET OPTIONS"
This section explains all the options available to instances of
\fBwidget::listentry\fR\&. Please note that a few of the options
can be set only at instance construction time\&. The majority of the
options can however be set both during construction- and runtime\&.
.SS "WIDGET CONSTRUCTION-TIME ONLY OPTIONS"
.TP
\fB-ordered\fR boolean
This options tells the new widget instance whether the list it manages
is ordered or not\&. If it is ordered the widget will show buttons with
which the selected entries can be moved around, editing the order\&.
.sp
The default is \fBfalse\fR, indicating an unordered list\&.
.TP
\fB-allow-duplicates\fR boolean
This options tells the new widget instance whether we are allowed to
add a string to the list multiple times, or not\&.
.sp
The default is \fBfalse\fR, indicating that duplicates are not
allowed\&.
.TP
\fB-values\fR cmdprefix
This option specifies a callback for the management of a predefined
list of strings a user may enter\&.
.sp
If specified the widget will use a combobox instead of a plain
entry field and fill its list during widget construction using the data
delivered by this callback\&.
The callback will be further invoked whenever a new value is entered
into the main list, to save the extended list of predefined values\&.
.sp
The signature of this callback is
.RS
.TP
\fI{*}cmdprefix\fR \fBget\fR
In this form the callback is expected to return a list of strings\&.
The strings are loaded into the list of the internal combobox for
quick access by the user\&.
.sp
It will be invoked once, during widget construction, to load the
list of predefined strings a user may enter\&.
.TP
\fI{*}cmdprefix\fR \fBset\fR \fIvalues\fR
In this form the callback is given a list of new strings and
expected to save them somewhere for future use\&.
.sp
The return value of the callback is ignored\&.
.sp
This form is invoked whenever the user entered a new string
into the main list\&. The order of strings in \fIvalues\fR represents
the order used to show them in the combobox's list\&.
.RE
.TP
\fB-validate\fR cmdprefix
This option specifies a callback which is invoked after every change of
the contents of the internal entry field\&. The signature of this callback is
.RS
.TP
\fI{*}cmdprefix\fR \fItext\fR \fIerrvar\fR
where \fItext\fR is the string to validate, and \fIerrvar\fR the name of
a variable the callback can store an error message into when it detects
invalid data\&.
.sp
The widget expects that the callback returns a boolean value, where
\fBtrue\fR indicates that \fItext\fR is valid\&.
.RE
.IP
The default validation, when no callback was specified, will treat the
empty string as invalid, and everything else as valid\&.
.sp
\fIPlease note\fR that the widget will prevent the entry of
duplicate values into the main list, regardless of the validity of the
input otherwise\&. This is in keeping with that this widget is meant for
the entry of unordered lists, essentially a set of strings\&.
.TP
\fB-transform\fR cmdprefix
This option specifies a callback which is invoked whenever a newly
entered element is moved from the entry field to the main list, or the
entry field is validated, as part of a check for duplicates, if such are
not allowed\&. The callback is given the text in the entry field and has
to return the text which is actually added to, or checked against the list\&.
.sp
The use case for this callback is essentially
\fIinput normalization\fR\&. The most simple case of such would be, for
example the use of
.CS

string tolower
.CE
.IP to impose a standard letter
case on the data\&. More complex example can be thought of, like rewriting
of multiple syntaxes of input to a canonical form\&.
The signature of this callback is
.RS
.TP
\fI{*}cmdprefix\fR \fItext\fR
where \fItext\fR is the string to transform\&.
.sp
The widget expects that the callback returns the transformed string\&.
.RE
.sp
The default is to not transform the entered strings\&.
.TP
\fB-browse\fR cmdprefix
If this option is specified the widget will display a "Search" button
and invoke the callback provided by the option whenever the user clicks
on that button\&.
The signature of the callback is
.RS
.TP
\fI{*}cmdprefix\fR \fIcookievar\fR
where the cookie variable provides access to context information the
callback may wish to preserve between invokations\&. The initial value
stored in the variable is the empty string\&. After that it is whatever
the callback wishes to store\&.
.sp
The widget expects that the callback returns a list of strings,
which are then added to the list, modulo validity and duplicate checks\&.
.RE
.sp
By default there is no browse callback and no button shown\&.
.PP
.SS "WIDGET GENERAL OPTIONS"
.TP
\fB-listvariable\fR varname
This option specifies the variable holding the list to be manipulated by
the widget\&. Any changes to the list outside of the widget are automatically
imported into the widget\&. Similarly, all changes made to the list by the
widget are automatically exported to this variable\&.
.TP
\fB-state\fR normal|disabled
This option specifies the status of the widget, \fBnormal\fR (= active),
or \fBdisabled\fR\&. A disabled widget can not be edited\&.
.sp
The default is \fBnormal\fR\&.
.TP
\fB-height\fR integer
This option specifies the height of the internal listbox, in lines\&.
.sp
The default is \fB20\fR\&.
.TP
\fB-skin-add\fR string
.TP
\fB-skin-remove\fR string
.TP
\fB-skin-up\fR string
.TP
\fB-skin-down\fR string
.TP
\fB-skin-browse\fR string
.TP
\fB-skin-tip-add\fR string
.TP
\fB-skin-tip-remove\fR string
.TP
\fB-skin-tip-up\fR string
.TP
\fB-skin-tip-down\fR string
.TP
\fB-skin-tip-browse\fR string
.TP
\fB-skin-tip-main\fR string
.TP
\fB-skin-tip-entry\fR string
.TP
\fB-skin-tip-list\fR string
.TP
\fB-skin-tip-empty\fR string
.TP
\fB-skin-tip-duplicate\fR string
.TP
\fB-skin-tip-add-none\fR string
.TP
\fB-skin-tip-remove-none\fR string
.TP
\fB-skin-img-add\fR image
.TP
\fB-skin-img-remove\fR image
.TP
\fB-skin-img-up\fR string
.TP
\fB-skin-img-down\fR string
.TP
\fB-skin-img-browse\fR string
.TP
\fB-skin-invalid-color\fR color
These options all modify the appearance of the widget, i\&.e\&. its skin\&.
.sp
All options taking a string argument influence the various labels
shown, with the \fB-skin-tip-*\fR options influencing the tooltips
shown on hovering the over various parts in particular\&.
.sp
All the strings are run through \fBmsgcat\fR first, enabling
text localization through message catalogs\&. The default values are keys
into the message catalogs which are part of the package itself\&.
.sp
The options taking images modify the images shown on the buttons
for adding and removing elements of the list\&. They default to the PNG
images distributed with the package itself\&.
.sp
The single option taking a color value modifies the color used to
highlight invalid data entered into the internal entry field of the
widget\&. This option defaults to \fByellow\fR\&.
.PP
.SH EXAMPLE
.CS


.CE
.SH KEYWORDS
data entry lists, data entry ordered list, data entry set of strings, data entry unordered list, list entry panel, set entry panel, widget

Added embedded/man/files/modules/widgetl/widget_listsimple.n.

















































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/widgetl/widget_listsimple\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "widget_listsimple" n 0\&.1 tklib "widget::listsimple widget"
.BS
.SH NAME
widget_listsimple \- widget::listsimple widget
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBwidget::listsimple  ?0\&.1?\fR
.sp
package require \fBwidget::validator  ?0\&.1?\fR
.sp
package require \fBwidget::scrolledwindow \fR
.sp
package require \fBsnit \fR
.sp
package require \fBtooltip \fR
.sp
package require \fBimg::png \fR
.sp
package require \fBmsgcat \fR
.sp
\fBwidget::listsimple\fR \fIpathname\fR ?options?
.sp
\fBwidgetCmd\fR \fBdestroy\fR
.sp
\fBwidgetCmd\fR \fBconfigure\fR
.sp
\fBwidgetCmd\fR \fBconfigure\fR \fIoption\fR \fIvalue\fR \&.\&.\&.
.sp
\fBwidgetCmd\fR \fBconfigure\fR \fIoption\fR
.sp
\fBwidgetCmd\fR \fBcget\fR \fIoption\fR
.sp
\fI{*}cmdprefix\fR \fBget\fR
.sp
\fI{*}cmdprefix\fR \fBset\fR \fIvalues\fR
.sp
\fI{*}cmdprefix\fR \fItext\fR \fIerrvar\fR
.sp
.BE
.SH DESCRIPTION
This package provides a megawidget for the interactive entry of unordered lists\&.
For a megawidget allowing the entry of ordered lists, and more, please see the
package \fBwidget::listentry\fR\&.
.SH "CLASS API"
The widget class supports a single command, for the creation of widgets\&.
.TP
\fBwidget::listsimple\fR \fIpathname\fR ?options?
This command creates and configures new instances of the widget\&.
.sp
For details on the available options please see section
\fBWidget Options\fR\&.
.sp
The result of the command is the pathname of the new widget\&.
.PP
.SH "INSTANCE API"
All widget instances supported the following methods\&.
.TP
\fBwidgetCmd\fR \fBdestroy\fR
This method destroys the widget\&.
Any further access to the widget will generate errors\&.
.sp
The result of the command is the empty string\&.
.TP
\fBwidgetCmd\fR \fBconfigure\fR
This method comes in three variants\&. This variant here returns a list
containing the current configuration of the widget, i\&.e\&. the values
for all options\&.
.sp
For details on the available options please see section
\fBWidget Options\fR\&.
.TP
\fBwidgetCmd\fR \fBconfigure\fR \fIoption\fR \fIvalue\fR \&.\&.\&.
This method comes in three variants\&. This variant here reconfigures
the widget, setting the specified options to the given values\&.
.sp
\fINote\fR that it is not possible to change the
construction-time only options\&.
.sp
For details on the available options please see section
\fBWidget General Options\fR\&.
.sp
The result of the command is the empty string\&.
.TP
\fBwidgetCmd\fR \fBconfigure\fR \fIoption\fR
This method comes in three variants\&. This variant here is an alias
for the method \fBcget\fR below and identical to it\&.
.TP
\fBwidgetCmd\fR \fBcget\fR \fIoption\fR
This method returns the current value of the specified \fIoption\fR\&.
.sp
For details on the available options please see section
\fBWidget Options\fR\&.
.PP
.SH "WIDGET OPTIONS"
This section explains all the options available to instances of
\fBwidget::listsimple\fR\&. Please note that a few of the options
can be set only at instance construction time\&. The majority of the
options can however be set both during construction- and runtime\&.
.SS "WIDGET CONSTRUCTION-TIME ONLY OPTIONS"
.TP
\fB-values\fR cmdprefix
This option specifies a callback for the management of a predefined
list of strings a user may enter\&.
.sp
If specified the widget will use a combobox instead of a plain
entry field and fill its list during widget construction using the data
delivered by this callback\&.
The callback will be further invoked whenever a new value is entered
into the main list, to save the extended list of predefined values\&.
.sp
The signature of this callback is
.RS
.TP
\fI{*}cmdprefix\fR \fBget\fR
In this form the callback is expected to return a list of strings\&.
The strings are loaded into the list of the internal combobox for
quick access by the user\&.
.sp
It will be invoked once, during widget construction, to load the
list of predefined strings a user may enter\&.
.TP
\fI{*}cmdprefix\fR \fBset\fR \fIvalues\fR
In this form the callback is given a list of new strings and
expected to save them somewhere for future use\&.
.sp
The return value of the callback is ignored\&.
.sp
This form is invoked whenever the user entered a new string
into the main list\&. The order of strings in \fIvalues\fR represents
the order used to show them in the combobox's list\&.
.RE
.TP
\fB-validate\fR cmdprefix
This option specifies a callback which is invoked after every change of
the contents of the internal entry field\&. The signature of this callback is
.RS
.TP
\fI{*}cmdprefix\fR \fItext\fR \fIerrvar\fR
where \fItext\fR is the string to validate, and \fIerrvar\fR the name of
a variable the callback can store an error message into when it detects
invalid data\&.
.sp
The system expects that the callback returns a boolean value, where
\fBtrue\fR indicates that \fItext\fR is valid\&.
.RE
.IP
The default validation, when no callback was specified, will treat the
empty string as invalid, and everything else as valid\&.
.sp
\fIPlease note\fR that the widget will prevent the entry of
duplicate values into the main list, regardless of the validity of the
input otherwise\&. This is in keeping with that this widget is meant for
the entry of unordered lists, essentially a set of strings\&.
.PP
.SS "WIDGET GENERAL OPTIONS"
.TP
\fB-listvariable\fR varname
This option specifies the variable holding the list to be manipulated by
the widget\&. Any changes to the list outside of the widget are automatically
imported into the widget\&. Similarly, all changes made to the list by the
widget are automatically exported to this variable\&.
.TP
\fB-skin-add\fR string
.TP
\fB-skin-remove\fR string
.TP
\fB-skin-tip-add\fR string
.TP
\fB-skin-tip-remove\fR string
.TP
\fB-skin-tip-main\fR string
.TP
\fB-skin-tip-entry\fR string
.TP
\fB-skin-tip-list\fR string
.TP
\fB-skin-tip-empty\fR string
.TP
\fB-skin-tip-duplicate\fR string
.TP
\fB-skin-tip-add-none\fR string
.TP
\fB-skin-tip-remove-none\fR string
.TP
\fB-skin-img-add\fR image
.TP
\fB-skin-img-remove\fR image
.TP
\fB-skin-invalid-color\fR color
These options all modify the appearance of the widget, i\&.e\&. its skin\&.
.sp
All options taking a string argument influence the various labels
shown, with the \fB-skin-tip-*\fR options influencing the tooltips
shown on hovering the over various parts in particular\&.
.sp
All the strings are run through \fBmsgcat\fR first, enabling
text localization through message catalogs\&. The default values are keys
into the message catalogs which are part of the package itself\&.
.sp
The options taking images modify the images shown on the buttons
for adding and removing elements of the list\&. They default to the PNG
images distributed with the package itself\&.
.sp
The single option taking a color value modifies the color used to
highlight invalid data entered into the internal entry field of the
widget\&. This option defaults to \fByellow\fR\&.
.PP
.SH EXAMPLE
.CS


.CE
.SH KEYWORDS
data entry lists, data entry set of strings, data entry unordered list, list entry panel, set entry panel, widget

Added embedded/man/files/modules/widgetv/widget_validator.n.





























































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
'\"
'\" Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/man/files/modules/widgetv/widget_validator\&.n' by tcllib/doctools with format 'nroff'
'\"
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "widget_validator" n 0\&.1 tklib "widget::validator behaviour"
.BS
.SH NAME
widget_validator \- widget::validator behaviour
.SH SYNOPSIS
package require \fBTcl  8\&.5\fR
.sp
package require \fBTk  8\&.5\fR
.sp
package require \fBwidget::validator  ?0\&.1?\fR
.sp
\fBwidget::validator\fR \fBattach\fR \fIw\fR \fIcolor\fR \fIcmdprefix\fR
.sp
\fBwidget::validator\fR \fBdetach\fR \fIw\fR
.sp
\fBwidget::validator\fR \fBvalidate\fR \fIw\fR
.sp
.BE
.SH DESCRIPTION
This package provides a unified validation API
for \fBttk\fR's entry and combobox widgets\&.
.PP
Please note that the validation behaviour
defined in this package will not reject invalid
edits\&. It will only highlight the entry containing
invalid data and set the proper state flag\&.
.PP
It is the responsibility of the using package
or application to decide how and when to actually
reject such invalid content\&.
.PP
.TP
\fBwidget::validator\fR \fBattach\fR \fIw\fR \fIcolor\fR \fIcmdprefix\fR
This method adds a validating behaviour to the widget \fIw\fR\&.
.sp
Whenever the content of the widget's entry field changes
the specified \fIcmdprefix\fR is invoked and has to return a
boolean value, where \fBtrue\fR means that content is ok, and
\fBfalse\fR that the content is invalid\&. For more information
on the command prefix see section \fBValidation\fR\&.
In case of the latter the background color of the entry field
is changed to \fIcolor\fR to indicate the invalidity\&.
.sp
The system does not support nesting of validators on a
widget, nor the attachment of multiple validators\&. To change
validating conditions \fBdetach\fR the current validator first
before attaching the new\&.
.sp
An error is thrown if the widget has already
validating behaviour attached to it\&.
.sp
The result of the method is the empty string\&.
.sp
To achieve its aims the package overrides various
configuration options of the widget the behaviour is
attached to\&. These options are restored to their previous
values on \fBdetach\fR\&.
.sp
If other behaviours are attached the validator
may be rendered temporarily (partially) non-functional\&.
Similarly, if the validator is detached while a different
behaviour is also attached its restoration of configuration
settings may render the other non-functional
.TP
\fBwidget::validator\fR \fBdetach\fR \fIw\fR
This method removes the validating behaviour from
the widget \fIw\fR and restores it to its original
state\&.
.sp
An error is thrown if the widget has no
validating behaviour attached to it\&.
.sp
The result of the method is the empty string\&.
.TP
\fBwidget::validator\fR \fBvalidate\fR \fIw\fR
Invoking this method forces a validation of the
widget \fIw\fR, assuming that it has a validator
behaviour attached to it\&.
.sp
The result of the method is the empty string\&.
.PP
.SH VALIDATION
The command prefix for used for validation has to
have the following signature:
.TP
{*}\fIcmdprefix\fR \fItext\fR
The argument is the text to validate\&.
.sp
The result of the callback has to be a boolean value
where \fBtrue\fR means that \fItext\fR is ok, and
\fBfalse\fR that \fItext\fR is invalid\&.
.PP
.SH EXAMPLE
.CS


package require Tk 8\&.5
package require widget::validator

set TE {}
set TC {}

ttk::entry    \&.e -textvariable TE
ttk::combobox \&.c -textvariable TC -values {fruit vegetable corn}
ttk::combobox \&.n -values {fruit vegetable corn}
ttk::button   \&.x -command ::exit -text Exit

pack \&.e -expand 1 -fill both -side top
pack \&.c -expand 1 -fill both -side top
pack \&.n -expand 1 -fill both -side top
pack \&.x -expand 1 -fill both -side top

widget::validator attach \&.e lightblue {apply {text {
    expr {$text ne {}}
}}}

widget::validator attach \&.c yellow {apply {text {
    expr {$text ni {{} hello world}}
}}}

widget::validator attach \&.n pink {apply {text {
    expr {$text ni {{} blub}}
}}}

.CE
.SH KEYWORDS
invalid, state management, ttk::combobox, ttk::entry, validation, widget validation

Added embedded/man/index.n.











































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
'\"
'\" Generated by tcllib/doctools/idx with format 'nroff'
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "Keyword Index" n
.BS
.SH INDEX
tklib
.RS
2D geometry
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
3D bars
.RS
.TP
\fBfiles/modules/plotchart/plotchart\&.n\fR
Plotchart
.RE
3D surfaces
.RS
.TP
\fBfiles/modules/plotchart/plotchart\&.n\fR
Plotchart
.RE
append tag
.RS
.TP
\fBfiles/modules/canvas/canvas_tags\&.n\fR
canvas::tag
.RE
arc
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
arrow
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
balloon
.RS
.TP
\fBfiles/modules/tooltip/tooltip\&.n\fR
tooltip
.RE
bar charts
.RS
.TP
\fBfiles/modules/plotchart/plotchart\&.n\fR
Plotchart
.RE
bindtags
.RS
.TP
\fBfiles/modules/ntext/ntext\&.n\fR
ntext
.TP
\fBfiles/modules/ntext/ntextBindings\&.n\fR
ntextBindings
.TP
\fBfiles/modules/ntext/ntextIndent\&.n\fR
ntextIndent
.TP
\fBfiles/modules/ntext/ntextWordBreak\&.n\fR
ntextWordBreak
.RE
bitmap
.RS
.TP
\fBfiles/apps/bitmap-editor\&.n\fR
bitmap-editor
.RE
box
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
bundle
.RS
.TP
\fBfiles/modules/widget/widget\&.n\fR
widget
.RE
calendar
.RS
.TP
\fBfiles/modules/widget/widget\&.n\fR
widget
.TP
\fBfiles/modules/widget/widget_calendar\&.n\fR
widget_calendar
.RE
canvas
.RS
.TP
\fBfiles/modules/canvas/canvas_drag\&.n\fR
canvas::drag
.TP
\fBfiles/modules/canvas/canvas_epoints\&.n\fR
canvas::edit::points
.TP
\fBfiles/modules/canvas/canvas_epolyline\&.n\fR
canvas::edit::polyline
.TP
\fBfiles/modules/canvas/canvas_equad\&.n\fR
canvas::edit::quadrilateral
.TP
\fBfiles/modules/canvas/canvas_highlight\&.n\fR
canvas::highlight
.TP
\fBfiles/modules/canvas/canvas_mvg\&.n\fR
canvas::mvg
.TP
\fBfiles/modules/canvas/canvas_snap\&.n\fR
canvas::snap
.TP
\fBfiles/modules/canvas/canvas_sqmap\&.n\fR
canvas::sqmap
.TP
\fBfiles/modules/canvas/canvas_tags\&.n\fR
canvas::tag
.TP
\fBfiles/modules/canvas/canvas_trlines\&.n\fR
canvas::track::lines
.TP
\fBfiles/modules/tkpiechart/canvaslabel\&.n\fR
canvasLabel
.TP
\fBfiles/modules/crosshair/crosshair\&.n\fR
crosshair
.TP
\fBfiles/apps/dia\&.n\fR
dia
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.TP
\fBfiles/modules/tkpiechart/pie\&.n\fR
pie
.TP
\fBfiles/modules/tkpiechart/pieboxlabeler\&.n\fR
pieBoxLabeler
.TP
\fBfiles/modules/tkpiechart/pieperipherallabeler\&.n\fR
piePeripheralLabeler
.RE
cell
.RS
.TP
\fBfiles/modules/canvas/canvas_sqmap\&.n\fR
canvas::sqmap
.RE
character
.RS
.TP
\fBfiles/modules/khim/khim\&.n\fR
khim
.RE
charts
.RS
.TP
\fBfiles/modules/plotchart/plotchart\&.n\fR
Plotchart
.RE
chat
.RS
.TP
\fBfiles/modules/chatwidget/chatwidget\&.n\fR
chatwidget
.RE
chatwidget
.RS
.TP
\fBfiles/modules/chatwidget/chatwidget\&.n\fR
chatwidget
.RE
circle
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
clock
.RS
.TP
\fBfiles/modules/datefield/datefield\&.n\fR
datefield
.RE
composite widget
.RS
.TP
\fBfiles/modules/chatwidget/chatwidget\&.n\fR
chatwidget
.RE
concave
.RS
.TP
\fBfiles/modules/canvas/canvas_equad\&.n\fR
canvas::edit::quadrilateral
.RE
controlling
.RS
.TP
\fBfiles/modules/controlwidget/controlwidget\&.n\fR
controlwidget
.RE
conversion
.RS
.TP
\fBfiles/apps/dia\&.n\fR
dia
.RE
convex
.RS
.TP
\fBfiles/modules/canvas/canvas_equad\&.n\fR
canvas::edit::quadrilateral
.RE
coordinate transformations
.RS
.TP
\fBfiles/modules/plotchart/plotchart\&.n\fR
Plotchart
.RE
coordinates
.RS
.TP
\fBfiles/modules/plotchart/plotchart\&.n\fR
Plotchart
.RE
cross-hairs
.RS
.TP
\fBfiles/modules/crosshair/crosshair\&.n\fR
crosshair
.RE
crosshair
.RS
.TP
\fBfiles/modules/canvas/canvas_trlines\&.n\fR
canvas::track::lines
.RE
cursor
.RS
.TP
\fBfiles/modules/cursor/cursor\&.n\fR
cursor
.RE
data entry lists
.RS
.TP
\fBfiles/modules/widgetl/widget_listentry\&.n\fR
widget_listentry
.TP
\fBfiles/modules/widgetl/widget_listsimple\&.n\fR
widget_listsimple
.RE
data entry ordered list
.RS
.TP
\fBfiles/modules/widgetl/widget_listentry\&.n\fR
widget_listentry
.RE
data entry set of strings
.RS
.TP
\fBfiles/modules/widgetl/widget_listentry\&.n\fR
widget_listentry
.TP
\fBfiles/modules/widgetl/widget_listsimple\&.n\fR
widget_listsimple
.RE
data entry unordered list
.RS
.TP
\fBfiles/modules/widgetl/widget_listentry\&.n\fR
widget_listentry
.TP
\fBfiles/modules/widgetl/widget_listsimple\&.n\fR
widget_listsimple
.RE
date
.RS
.TP
\fBfiles/modules/datefield/datefield\&.n\fR
datefield
.TP
\fBfiles/modules/widget/widget_calendar\&.n\fR
widget_calendar
.TP
\fBfiles/modules/widget/widget_dateentry\&.n\fR
widget_dateentry
.RE
dateentry
.RS
.TP
\fBfiles/modules/datefield/datefield\&.n\fR
datefield
.TP
\fBfiles/modules/widget/widget\&.n\fR
widget
.TP
\fBfiles/modules/widget/widget_dateentry\&.n\fR
widget_dateentry
.RE
diagram
.RS
.TP
\fBfiles/apps/dia\&.n\fR
dia
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
dialog
.RS
.TP
\fBfiles/modules/getstring/tk_getString\&.n\fR
getstring
.TP
\fBfiles/modules/swaplist/swaplist\&.n\fR
swaplist
.TP
\fBfiles/modules/widget/widget\&.n\fR
widget
.RE
diamond
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
disjointlistbox
.RS
.TP
\fBfiles/modules/swaplist/swaplist\&.n\fR
swaplist
.RE
displaying
.RS
.TP
\fBfiles/modules/controlwidget/controlwidget\&.n\fR
controlwidget
.RE
dll
.RS
.TP
\fBfiles/modules/ico/ico\&.n\fR
ico
.RE
dragging
.RS
.TP
\fBfiles/modules/canvas/canvas_drag\&.n\fR
canvas::drag
.RE
drawing
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
drum
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
editing
.RS
.TP
\fBfiles/modules/canvas/canvas_epoints\&.n\fR
canvas::edit::points
.TP
\fBfiles/modules/canvas/canvas_epolyline\&.n\fR
canvas::edit::polyline
.TP
\fBfiles/modules/canvas/canvas_equad\&.n\fR
canvas::edit::quadrilateral
.RE
editor
.RS
.TP
\fBfiles/apps/bitmap-editor\&.n\fR
bitmap-editor
.RE
ellipse
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
enter callback
.RS
.TP
\fBfiles/modules/canvas/canvas_highlight\&.n\fR
canvas::highlight
.RE
entry
.RS
.TP
\fBfiles/modules/datefield/datefield\&.n\fR
datefield
.TP
\fBfiles/modules/getstring/tk_getString\&.n\fR
getstring
.TP
\fBfiles/modules/history/tklib_history\&.n\fR
history
.TP
\fBfiles/modules/ico/ico\&.n\fR
ico
.TP
\fBfiles/modules/ipentry/ipentry\&.n\fR
ipentry
.RE
exe
.RS
.TP
\fBfiles/modules/ico/ico\&.n\fR
ico
.RE
graphical presentation
.RS
.TP
\fBfiles/modules/plotchart/plotchart\&.n\fR
Plotchart
.RE
graphics
.RS
.TP
\fBfiles/modules/canvas/canvas_mvg\&.n\fR
canvas::mvg
.RE
grid
.RS
.TP
\fBfiles/modules/canvas/canvas_sqmap\&.n\fR
canvas::sqmap
.RE
help
.RS
.TP
\fBfiles/modules/tooltip/tooltip\&.n\fR
tooltip
.RE
highlighting
.RS
.TP
\fBfiles/modules/canvas/canvas_highlight\&.n\fR
canvas::highlight
.RE
history
.RS
.TP
\fBfiles/modules/history/tklib_history\&.n\fR
history
.RE
hover
.RS
.TP
\fBfiles/modules/tooltip/tooltip\&.n\fR
tooltip
.RE
i18n
.RS
.TP
\fBfiles/modules/khim/khim\&.n\fR
khim
.RE
ico
.RS
.TP
\fBfiles/modules/ico/ico\&.n\fR
ico
.RE
icon
.RS
.TP
\fBfiles/modules/ico/ico\&.n\fR
ico
.RE
image
.RS
.TP
\fBfiles/apps/bitmap-editor\&.n\fR
bitmap-editor
.TP
\fBfiles/modules/canvas/canvas_snap\&.n\fR
canvas::snap
.TP
\fBfiles/modules/canvas/canvas_sqmap\&.n\fR
canvas::sqmap
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
imagemagick
.RS
.TP
\fBfiles/modules/canvas/canvas_mvg\&.n\fR
canvas::mvg
.RE
input
.RS
.TP
\fBfiles/modules/khim/khim\&.n\fR
khim
.RE
insert tag
.RS
.TP
\fBfiles/modules/canvas/canvas_tags\&.n\fR
canvas::tag
.RE
international
.RS
.TP
\fBfiles/modules/khim/khim\&.n\fR
khim
.RE
interpolation
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
intersection
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
invalid
.RS
.TP
\fBfiles/modules/widgetv/widget_validator\&.n\fR
widget_validator
.RE
ip address
.RS
.TP
\fBfiles/modules/ipentry/ipentry\&.n\fR
ipentry
.RE
irc
.RS
.TP
\fBfiles/modules/chatwidget/chatwidget\&.n\fR
chatwidget
.RE
isometric plots
.RS
.TP
\fBfiles/modules/plotchart/plotchart\&.n\fR
Plotchart
.RE
labeler
.RS
.TP
\fBfiles/modules/tkpiechart/canvaslabel\&.n\fR
canvasLabel
.TP
\fBfiles/modules/tkpiechart/pie\&.n\fR
pie
.TP
\fBfiles/modules/tkpiechart/pieboxlabeler\&.n\fR
pieBoxLabeler
.TP
\fBfiles/modules/tkpiechart/pieperipherallabeler\&.n\fR
piePeripheralLabeler
.RE
leave callback
.RS
.TP
\fBfiles/modules/canvas/canvas_highlight\&.n\fR
canvas::highlight
.RE
line
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
list entry panel
.RS
.TP
\fBfiles/modules/widgetl/widget_listentry\&.n\fR
widget_listentry
.TP
\fBfiles/modules/widgetl/widget_listsimple\&.n\fR
widget_listsimple
.RE
listbox
.RS
.TP
\fBfiles/modules/swaplist/swaplist\&.n\fR
swaplist
.RE
location
.RS
.TP
\fBfiles/modules/crosshair/crosshair\&.n\fR
crosshair
.RE
magick vector graphics
.RS
.TP
\fBfiles/modules/canvas/canvas_mvg\&.n\fR
canvas::mvg
.RE
map
.RS
.TP
\fBfiles/modules/canvas/canvas_sqmap\&.n\fR
canvas::sqmap
.RE
mega-widget
.RS
.TP
\fBfiles/modules/chatwidget/chatwidget\&.n\fR
chatwidget
.RE
megawidget
.RS
.TP
\fBfiles/modules/widget/widget\&.n\fR
widget
.TP
\fBfiles/modules/widget/widget_calendar\&.n\fR
widget_calendar
.TP
\fBfiles/modules/widget/widget_dateentry\&.n\fR
widget_dateentry
.TP
\fBfiles/modules/widget/widget_toolbar\&.n\fR
widget_toolbar
.RE
menu
.RS
.TP
\fBfiles/modules/widget/widget\&.n\fR
widget
.RE
method
.RS
.TP
\fBfiles/modules/khim/khim\&.n\fR
khim
.RE
move
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
mvg
.RS
.TP
\fBfiles/modules/canvas/canvas_mvg\&.n\fR
canvas::mvg
.RE
network
.RS
.TP
\fBfiles/modules/ipentry/ipentry\&.n\fR
ipentry
.RE
non-convex
.RS
.TP
\fBfiles/modules/canvas/canvas_equad\&.n\fR
canvas::edit::quadrilateral
.RE
numerical values
.RS
.TP
\fBfiles/modules/controlwidget/controlwidget\&.n\fR
controlwidget
.RE
panelframe
.RS
.TP
\fBfiles/modules/widget/widget\&.n\fR
widget
.RE
photo
.RS
.TP
\fBfiles/modules/canvas/canvas_snap\&.n\fR
canvas::snap
.RE
picture
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
pie
.RS
.TP
\fBfiles/modules/tkpiechart/canvaslabel\&.n\fR
canvasLabel
.TP
\fBfiles/modules/tkpiechart/pie\&.n\fR
pie
.TP
\fBfiles/modules/tkpiechart/pieboxlabeler\&.n\fR
pieBoxLabeler
.TP
\fBfiles/modules/tkpiechart/pieperipherallabeler\&.n\fR
piePeripheralLabeler
.RE
pie charts
.RS
.TP
\fBfiles/modules/plotchart/plotchart\&.n\fR
Plotchart
.RE
pixel
.RS
.TP
\fBfiles/apps/bitmap-editor\&.n\fR
bitmap-editor
.RE
plane geometry
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
plotting
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.TP
\fBfiles/modules/plotchart/plotchart\&.n\fR
Plotchart
.RE
point
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
point cloud
.RS
.TP
\fBfiles/modules/canvas/canvas_epoints\&.n\fR
canvas::edit::points
.RE
points
.RS
.TP
\fBfiles/modules/canvas/canvas_epoints\&.n\fR
canvas::edit::points
.RE
polar plots
.RS
.TP
\fBfiles/modules/plotchart/plotchart\&.n\fR
Plotchart
.RE
polyline
.RS
.TP
\fBfiles/modules/canvas/canvas_epolyline\&.n\fR
canvas::edit::polyline
.RE
print screen
.RS
.TP
\fBfiles/modules/canvas/canvas_mvg\&.n\fR
canvas::mvg
.TP
\fBfiles/modules/canvas/canvas_snap\&.n\fR
canvas::snap
.RE
quadrilateral
.RS
.TP
\fBfiles/modules/canvas/canvas_equad\&.n\fR
canvas::edit::quadrilateral
.RE
raster image
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
re_syntax
.RS
.TP
\fBfiles/modules/ntext/ntext\&.n\fR
ntext
.TP
\fBfiles/modules/ntext/ntextIndent\&.n\fR
ntextIndent
.TP
\fBfiles/modules/ntext/ntextWordBreak\&.n\fR
ntextWordBreak
.RE
regexp
.RS
.TP
\fBfiles/modules/ntext/ntext\&.n\fR
ntext
.TP
\fBfiles/modules/ntext/ntextIndent\&.n\fR
ntextIndent
.TP
\fBfiles/modules/ntext/ntextWordBreak\&.n\fR
ntextWordBreak
.RE
remove tag
.RS
.TP
\fBfiles/modules/canvas/canvas_tags\&.n\fR
canvas::tag
.RE
rubberband
.RS
.TP
\fBfiles/modules/canvas/canvas_trlines\&.n\fR
canvas::track::lines
.RE
ruler
.RS
.TP
\fBfiles/modules/widget/widget\&.n\fR
widget
.RE
scale widget
.RS
.TP
\fBfiles/modules/controlwidget/controlwidget\&.n\fR
controlwidget
.RE
screenruler
.RS
.TP
\fBfiles/modules/widget/widget\&.n\fR
widget
.RE
scroll
.RS
.TP
\fBfiles/modules/autoscroll/autoscroll\&.n\fR
autoscroll
.RE
scrollbar
.RS
.TP
\fBfiles/modules/autoscroll/autoscroll\&.n\fR
autoscroll
.RE
scrolledwindow
.RS
.TP
\fBfiles/modules/widget/widget\&.n\fR
widget
.RE
serialization
.RS
.TP
\fBfiles/modules/canvas/canvas_mvg\&.n\fR
canvas::mvg
.RE
set entry panel
.RS
.TP
\fBfiles/modules/widgetl/widget_listentry\&.n\fR
widget_listentry
.TP
\fBfiles/modules/widgetl/widget_listsimple\&.n\fR
widget_listsimple
.RE
slice
.RS
.TP
\fBfiles/modules/tkpiechart/canvaslabel\&.n\fR
canvasLabel
.TP
\fBfiles/modules/tkpiechart/pie\&.n\fR
pie
.TP
\fBfiles/modules/tkpiechart/pieboxlabeler\&.n\fR
pieBoxLabeler
.TP
\fBfiles/modules/tkpiechart/pieperipherallabeler\&.n\fR
piePeripheralLabeler
.RE
snapshot
.RS
.TP
\fBfiles/modules/canvas/canvas_snap\&.n\fR
canvas::snap
.RE
snit
.RS
.TP
\fBfiles/modules/widget/widget\&.n\fR
widget
.TP
\fBfiles/modules/widget/widget_calendar\&.n\fR
widget_calendar
.TP
\fBfiles/modules/widget/widget_dateentry\&.n\fR
widget_dateentry
.TP
\fBfiles/modules/widget/widget_toolbar\&.n\fR
widget_toolbar
.RE
spline
.RS
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
square map
.RS
.TP
\fBfiles/modules/canvas/canvas_sqmap\&.n\fR
canvas::sqmap
.RE
state management
.RS
.TP
\fBfiles/modules/widgetv/widget_validator\&.n\fR
widget_validator
.RE
statusbar
.RS
.TP
\fBfiles/modules/widget/widget\&.n\fR
widget
.RE
string
.RS
.TP
\fBfiles/modules/getstring/tk_getString\&.n\fR
getstring
.RE
strip charts
.RS
.TP
\fBfiles/modules/plotchart/plotchart\&.n\fR
Plotchart
.RE
superframe
.RS
.TP
\fBfiles/modules/widget/widget\&.n\fR
widget
.RE
syntax highlighting
.RS
.TP
\fBfiles/modules/ctext/ctext\&.n\fR
ctext
.RE
tables
.RS
.TP
\fBfiles/modules/plotchart/plotchart\&.n\fR
Plotchart
.RE
tags
.RS
.TP
\fBfiles/modules/canvas/canvas_tags\&.n\fR
canvas::tag
.RE
text
.RS
.TP
\fBfiles/modules/ctext/ctext\&.n\fR
ctext
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.TP
\fBfiles/modules/ntext/ntext\&.n\fR
ntext
.TP
\fBfiles/modules/ntext/ntextBindings\&.n\fR
ntextBindings
.TP
\fBfiles/modules/ntext/ntextIndent\&.n\fR
ntextIndent
.TP
\fBfiles/modules/ntext/ntextWordBreak\&.n\fR
ntextWordBreak
.RE
tile
.RS
.TP
\fBfiles/modules/canvas/canvas_sqmap\&.n\fR
canvas::sqmap
.RE
time charts
.RS
.TP
\fBfiles/modules/plotchart/plotchart\&.n\fR
Plotchart
.RE
toolbar
.RS
.TP
\fBfiles/modules/widget/widget\&.n\fR
widget
.TP
\fBfiles/modules/widget/widget_toolbar\&.n\fR
widget_toolbar
.RE
tooltip
.RS
.TP
\fBfiles/modules/tooltip/tooltip\&.n\fR
tooltip
.RE
tracking
.RS
.TP
\fBfiles/modules/canvas/canvas_trlines\&.n\fR
canvas::track::lines
.TP
\fBfiles/modules/crosshair/crosshair\&.n\fR
crosshair
.RE
ttk::combobox
.RS
.TP
\fBfiles/modules/widgetv/widget_validator\&.n\fR
widget_validator
.RE
ttk::entry
.RS
.TP
\fBfiles/modules/widgetv/widget_validator\&.n\fR
widget_validator
.RE
validation
.RS
.TP
\fBfiles/modules/widgetv/widget_validator\&.n\fR
widget_validator
.RE
vector
.RS
.TP
\fBfiles/apps/dia\&.n\fR
dia
.TP
\fBfiles/modules/diagrams/diagram\&.n\fR
diagram
.RE
vector graphics
.RS
.TP
\fBfiles/modules/canvas/canvas_mvg\&.n\fR
canvas::mvg
.RE
viewport
.RS
.TP
\fBfiles/modules/crosshair/crosshair\&.n\fR
crosshair
.RE
widget
.RS
.TP
\fBfiles/modules/chatwidget/chatwidget\&.n\fR
chatwidget
.TP
\fBfiles/modules/ctext/ctext\&.n\fR
ctext
.TP
\fBfiles/modules/datefield/datefield\&.n\fR
datefield
.TP
\fBfiles/modules/widget/widget\&.n\fR
widget
.TP
\fBfiles/modules/widget/widget_calendar\&.n\fR
widget_calendar
.TP
\fBfiles/modules/widget/widget_dateentry\&.n\fR
widget_dateentry
.TP
\fBfiles/modules/widgetl/widget_listentry\&.n\fR
widget_listentry
.TP
\fBfiles/modules/widgetl/widget_listsimple\&.n\fR
widget_listsimple
.TP
\fBfiles/modules/widget/widget_toolbar\&.n\fR
widget_toolbar
.RE
widget validation
.RS
.TP
\fBfiles/modules/widgetv/widget_validator\&.n\fR
widget_validator
.RE
xbm
.RS
.TP
\fBfiles/apps/bitmap-editor\&.n\fR
bitmap-editor
.RE
xy-plots
.RS
.TP
\fBfiles/modules/plotchart/plotchart\&.n\fR
Plotchart
.RE
zoom
.RS
.TP
\fBfiles/modules/canvas/canvas_zoom\&.n\fR
canvas::zoom
.RE

Added embedded/man/toc.n.





















































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
'\"
'\" Generated by tcllib/doctools/toc with format 'nroff'
'\" The definitions below are for supplemental macros used in Tcl/Tk
'\" manual entries.
'\"
'\" .AP type name in/out ?indent?
'\"	Start paragraph describing an argument to a library procedure.
'\"	type is type of argument (int, etc.), in/out is either "in", "out",
'\"	or "in/out" to describe whether procedure reads or modifies arg,
'\"	and indent is equivalent to second arg of .IP (shouldn't ever be
'\"	needed;  use .AS below instead)
'\"
'\" .AS ?type? ?name?
'\"	Give maximum sizes of arguments for setting tab stops.  Type and
'\"	name are examples of largest possible arguments that will be passed
'\"	to .AP later.  If args are omitted, default tab stops are used.
'\"
'\" .BS
'\"	Start box enclosure.  From here until next .BE, everything will be
'\"	enclosed in one large box.
'\"
'\" .BE
'\"	End of box enclosure.
'\"
'\" .CS
'\"	Begin code excerpt.
'\"
'\" .CE
'\"	End code excerpt.
'\"
'\" .VS ?version? ?br?
'\"	Begin vertical sidebar, for use in marking newly-changed parts
'\"	of man pages.  The first argument is ignored and used for recording
'\"	the version when the .VS was added, so that the sidebars can be
'\"	found and removed when they reach a certain age.  If another argument
'\"	is present, then a line break is forced before starting the sidebar.
'\"
'\" .VE
'\"	End of vertical sidebar.
'\"
'\" .DS
'\"	Begin an indented unfilled display.
'\"
'\" .DE
'\"	End of indented unfilled display.
'\"
'\" .SO
'\"	Start of list of standard options for a Tk widget.  The
'\"	options follow on successive lines, in four columns separated
'\"	by tabs.
'\"
'\" .SE
'\"	End of list of standard options for a Tk widget.
'\"
'\" .OP cmdName dbName dbClass
'\"	Start of description of a specific option.  cmdName gives the
'\"	option's name as specified in the class command, dbName gives
'\"	the option's name in the option database, and dbClass gives
'\"	the option's class in the option database.
'\"
'\" .UL arg1 arg2
'\"	Print arg1 underlined, then print arg2 normally.
'\"
'\" RCS: @(#) $Id: man.macros,v 1.1 2009/01/30 04:56:47 andreas_kupries Exp $
'\"
'\"	# Set up traps and other miscellaneous stuff for Tcl/Tk man pages.
.if t .wh -1.3i ^B
.nr ^l \n(.l
.ad b
'\"	# Start an argument description
.de AP
.ie !"\\$4"" .TP \\$4
.el \{\
.   ie !"\\$2"" .TP \\n()Cu
.   el          .TP 15
.\}
.ta \\n()Au \\n()Bu
.ie !"\\$3"" \{\
\&\\$1	\\fI\\$2\\fP	(\\$3)
.\".b
.\}
.el \{\
.br
.ie !"\\$2"" \{\
\&\\$1	\\fI\\$2\\fP
.\}
.el \{\
\&\\fI\\$1\\fP
.\}
.\}
..
'\"	# define tabbing values for .AP
.de AS
.nr )A 10n
.if !"\\$1"" .nr )A \\w'\\$1'u+3n
.nr )B \\n()Au+15n
.\"
.if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n
.nr )C \\n()Bu+\\w'(in/out)'u+2n
..
.AS Tcl_Interp Tcl_CreateInterp in/out
'\"	# BS - start boxed text
'\"	# ^y = starting y location
'\"	# ^b = 1
.de BS
.br
.mk ^y
.nr ^b 1u
.if n .nf
.if n .ti 0
.if n \l'\\n(.lu\(ul'
.if n .fi
..
'\"	# BE - end boxed text (draw box now)
.de BE
.nf
.ti 0
.mk ^t
.ie n \l'\\n(^lu\(ul'
.el \{\
.\"	Draw four-sided box normally, but don't draw top of
.\"	box if the box started on an earlier page.
.ie !\\n(^b-1 \{\
\h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.el \}\
\h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul'
.\}
.\}
.fi
.br
.nr ^b 0
..
'\"	# VS - start vertical sidebar
'\"	# ^Y = starting y location
'\"	# ^v = 1 (for troff;  for nroff this doesn't matter)
.de VS
.if !"\\$2"" .br
.mk ^Y
.ie n 'mc \s12\(br\s0
.el .nr ^v 1u
..
'\"	# VE - end of vertical sidebar
.de VE
.ie n 'mc
.el \{\
.ev 2
.nf
.ti 0
.mk ^t
\h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n'
.sp -1
.fi
.ev
.\}
.nr ^v 0
..
'\"	# Special macro to handle page bottom:  finish off current
'\"	# box/sidebar if in box/sidebar mode, then invoked standard
'\"	# page bottom macro.
.de ^B
.ev 2
'ti 0
'nf
.mk ^t
.if \\n(^b \{\
.\"	Draw three-sided box if this is the box's first page,
.\"	draw two sides but no top otherwise.
.ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c
.\}
.if \\n(^v \{\
.nr ^x \\n(^tu+1v-\\n(^Yu
\kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c
.\}
.bp
'fi
.ev
.if \\n(^b \{\
.mk ^y
.nr ^b 2
.\}
.if \\n(^v \{\
.mk ^Y
.\}
..
'\"	# DS - begin display
.de DS
.RS
.nf
.sp
..
'\"	# DE - end display
.de DE
.fi
.RE
.sp
..
'\"	# SO - start of list of standard options
.de SO
.SH "STANDARD OPTIONS"
.LP
.nf
.ta 4c 8c 12c
.ft B
..
'\"	# SE - end of list of standard options
.de SE
.fi
.ft R
.LP
See the \\fBoptions\\fR manual entry for details on the standard options.
..
'\"	# OP - start of full description for a single option
.de OP
.LP
.nf
.ta 4c
Command-Line Name:	\\fB\\$1\\fR
Database Name:	\\fB\\$2\\fR
Database Class:	\\fB\\$3\\fR
.fi
.IP
..
'\"	# CS - begin code excerpt
.de CS
.RS
.nf
.ta .25i .5i .75i 1i
..
'\"	# CE - end code excerpt
.de CE
.fi
.RE
..
.de UL
\\$1\l'|0\(ul'\\$2
..
.TH "Table Of Contents" n
.BS
.SH CONTENTS
tklib
.RS
.TP
\fBautoscroll\fR
\fIfiles/modules/autoscroll/autoscroll\&.n\fR: Provides for a scrollbar to automatically mapped and unmapped as needed
.TP
\fBbitmap-editor\fR
\fIfiles/apps/bitmap-editor\&.n\fR: Editor for XBM images
.TP
\fBcanvas::drag\fR
\fIfiles/modules/canvas/canvas_drag\&.n\fR: Manage the dragging of canvas items or item groups
.TP
\fBcanvas::edit::points\fR
\fIfiles/modules/canvas/canvas_epoints\&.n\fR: Editing a cloud of points on a canvas
.TP
\fBcanvas::edit::polyline\fR
\fIfiles/modules/canvas/canvas_epolyline\&.n\fR: Editing a polyline on a canvas
.TP
\fBcanvas::edit::quadrilateral\fR
\fIfiles/modules/canvas/canvas_equad\&.n\fR: Editing a quadrilateral on a canvas
.TP
\fBcanvas::highlight\fR
\fIfiles/modules/canvas/canvas_highlight\&.n\fR: Manage the highlighting of canvas items or item groups
.TP
\fBcanvas::mvg\fR
\fIfiles/modules/canvas/canvas_mvg\&.n\fR: Canvas to ImageMagick MVG vector format
.TP
\fBcanvas::snap\fR
\fIfiles/modules/canvas/canvas_snap\&.n\fR: Canvas snapshot to Tk photo image
.TP
\fBcanvas::sqmap\fR
\fIfiles/modules/canvas/canvas_sqmap\&.n\fR: Canvas with map background based on square tiles
.TP
\fBcanvas::tag\fR
\fIfiles/modules/canvas/canvas_tags\&.n\fR: Easier management of the tags on canvas items or item groups
.TP
\fBcanvas::track::lines\fR
\fIfiles/modules/canvas/canvas_trlines\&.n\fR: Manage a group of rubber band lines
.TP
\fBcanvas::zoom\fR
\fIfiles/modules/canvas/canvas_zoom\&.n\fR: Zoom control for canvas::sqmap
.TP
\fBcanvasLabel\fR
\fIfiles/modules/tkpiechart/canvaslabel\&.n\fR: tkpiechart canvas label class
.TP
\fBchatwidget\fR
\fIfiles/modules/chatwidget/chatwidget\&.n\fR: Provides a multi-paned view suitable for display of chat room or irc channel information
.TP
\fBcontrolwidget\fR
\fIfiles/modules/controlwidget/controlwidget\&.n\fR: Collection of widgets for displaying and controlling numerical values
.TP
\fBcrosshair\fR
\fIfiles/modules/crosshair/crosshair\&.n\fR: Crosshairs for Tk canvas
.TP
\fBctext\fR
\fIfiles/modules/ctext/ctext\&.n\fR: Ctext a text widget with highlighting support
.TP
\fBcursor\fR
\fIfiles/modules/cursor/cursor\&.n\fR: Procedures to handle CURSOR data
.TP
\fBdatefield\fR
\fIfiles/modules/datefield/datefield\&.n\fR: Tk datefield widget
.TP
\fBdia\fR
\fIfiles/apps/dia\&.n\fR: Lightweight Diagram Processor
.TP
\fBdiagram\fR
\fIfiles/modules/diagrams/diagram\&.n\fR: Diagram drawing
.TP
\fBgetstring\fR
\fIfiles/modules/getstring/tk_getString\&.n\fR: A string dialog
.TP
\fBhistory\fR
\fIfiles/modules/history/tklib_history\&.n\fR: Provides a history for Entry widgets
.TP
\fBico\fR
\fIfiles/modules/ico/ico\&.n\fR: Reading and writing windows icons
.TP
\fBipentry\fR
\fIfiles/modules/ipentry/ipentry\&.n\fR: An IP address entry widget
.TP
\fBkhim\fR
\fIfiles/modules/khim/khim\&.n\fR: Provides key bindings for entering international characters on a keyboard that does not support them
.TP
\fBmenubar\fR
\fIfiles/modules/menubar/menubar\&.n\fR: Creates an instance of the  Class\&.
.TP
\fBntext\fR
\fIfiles/modules/ntext/ntext\&.n\fR: Alternative Bindings for the Text Widget
.TP
\fBntextBindings\fR
\fIfiles/modules/ntext/ntextBindings\&.n\fR: Alternative Bindings for the Text Widget
.TP
\fBntextIndent\fR
\fIfiles/modules/ntext/ntextIndent\&.n\fR: ntext Indentation for the Text Widget
.TP
\fBntextWordBreak\fR
\fIfiles/modules/ntext/ntextWordBreak\&.n\fR: ntext Word Boundary Detection for the Text Widget
.TP
\fBpie\fR
\fIfiles/modules/tkpiechart/pie\&.n\fR: 2D or 3D pie chart object in a canvas
.TP
\fBpieBoxLabeler\fR
\fIfiles/modules/tkpiechart/pieboxlabeler\&.n\fR: tkpiechart pie box style labeler class
.TP
\fBpiePeripheralLabeler\fR
\fIfiles/modules/tkpiechart/pieperipherallabeler\&.n\fR: tkpiechart pie peripheral style labeler class
.TP
\fBPlotchart\fR
\fIfiles/modules/plotchart/plotchart\&.n\fR: Simple plotting and charting package
.TP
\fBswaplist\fR
\fIfiles/modules/swaplist/swaplist\&.n\fR: A dialog which allows a user to move options between two lists
.TP
\fBtooltip\fR
\fIfiles/modules/tooltip/tooltip\&.n\fR: Tooltip management
.TP
\fBwidget\fR
\fIfiles/modules/widget/widget\&.n\fR: Megawidget bundle
.TP
\fBwidget_calendar\fR
\fIfiles/modules/widget/widget_calendar\&.n\fR: Calendar Megawidget
.TP
\fBwidget_dateentry\fR
\fIfiles/modules/widget/widget_dateentry\&.n\fR: Date Entry Megawidget
.TP
\fBwidget_listentry\fR
\fIfiles/modules/widgetl/widget_listentry\&.n\fR: widget::listentry widget
.TP
\fBwidget_listsimple\fR
\fIfiles/modules/widgetl/widget_listsimple\&.n\fR: widget::listsimple widget
.TP
\fBwidget_toolbar\fR
\fIfiles/modules/widget/widget_toolbar\&.n\fR: Toolbar Megawidget
.TP
\fBwidget_validator\fR
\fIfiles/modules/widgetv/widget_validator\&.n\fR: widget::validator behaviour

Added embedded/www/image/figure-00-dependencies.png.

cannot compute difference between binary files

Added embedded/www/image/figure-02-arc.png.

cannot compute difference between binary files

Added embedded/www/image/figure-02-arrow.png.

cannot compute difference between binary files

Added embedded/www/image/figure-02-basic-shapes.png.

cannot compute difference between binary files

Added embedded/www/image/figure-02-box.png.

cannot compute difference between binary files

Added embedded/www/image/figure-02-circle.png.

cannot compute difference between binary files

Added embedded/www/image/figure-02-diamond.png.

cannot compute difference between binary files

Added embedded/www/image/figure-02-drum.png.

cannot compute difference between binary files

Added embedded/www/image/figure-02-ellipse.png.

cannot compute difference between binary files

Added embedded/www/image/figure-02-line.png.

cannot compute difference between binary files

Added embedded/www/image/figure-02-spline.png.

cannot compute difference between binary files

Added embedded/www/image/figure-02-text.png.

cannot compute difference between binary files

Added embedded/www/image/figure-15-spline-1.png.

cannot compute difference between binary files

Added embedded/www/image/figure-18-style-dash.png.

cannot compute difference between binary files

Added embedded/www/image/figure-19-style-arrowheads.png.

cannot compute difference between binary files

Added embedded/www/image/figure-20-style-stroke.png.

cannot compute difference between binary files

Added embedded/www/image/figure-21-style-colors.png.

cannot compute difference between binary files

Added embedded/www/image/figure-22-text-anchoring-3.png.

cannot compute difference between binary files

Added embedded/www/image/figure-27-corners-closed.png.

cannot compute difference between binary files

Added embedded/www/image/figure-28-corners-open.png.

cannot compute difference between binary files

Added embedded/www/image/figure-29-point-interpolation-1.png.

cannot compute difference between binary files

Added embedded/www/image/figure-31-point-projection.png.

cannot compute difference between binary files

Added embedded/www/image/figure-32-point-intersection.png.

cannot compute difference between binary files

Added embedded/www/image/figure-48-point-vectoradd.png.

cannot compute difference between binary files

Added embedded/www/image/figure-49-point-vectorsub.png.

cannot compute difference between binary files

Added embedded/www/image/figure-50-point-cons-absolute.png.

cannot compute difference between binary files

Added embedded/www/image/figure-51-point-cons-relative.png.

cannot compute difference between binary files

Added embedded/www/index.html.



























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
<html>
<! -- Generated by tcllib/doctools/idx with format 'html'
   -->
<! -- CVS: $Id$ Keyword Index
   -->
<head>
<title> Keyword Index </title>
</head>
<body>
<hr> [
   <a href="../../../../home">Tcllib Home</a>
| <a href="toc.html">Table Of Contents</a>
| <a href="toc0.html">Categories</a>
| <a href="toc1.html">Modules</a>
| <a href="toc2.html">Applications</a>
 ] <hr>
<h3> Keyword Index </h3>
<hr><div class="#idxnav">
<a href="#c1"> 2 </a> &#183; <a href="#c2"> 3 </a> &#183; <a href="#c3"> A </a> &#183; <a href="#c4"> B </a> &#183; <a href="#c5"> C </a> &#183; <a href="#c6"> D </a> &#183; <a href="#c7"> E </a> &#183; <a href="#c8"> G </a> &#183; <a href="#c9"> H </a> &#183; <a href="#c10"> I </a> &#183; <a href="#c11"> L </a> &#183; <a href="#c12"> M </a> &#183; <a href="#c13"> N </a> &#183; <a href="#c14"> P </a> &#183; <a href="#c15"> Q </a> &#183; <a href="#c16"> R </a> &#183; <a href="#c17"> S </a> &#183; <a href="#c18"> T </a> &#183; <a href="#c19"> V </a> &#183; <a href="#c20"> W </a> &#183; <a href="#c21"> X </a> &#183; <a href="#c22"> Z </a>
</div>
<hr><table class="#idx" width="100%">
<tr class="#idxheader"><th colspan="2">
<a name="c1">Keywords: 2</a>
</th></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key85"> 2D geometry </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c2">Keywords: 3</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key57"> 3D bars </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/plotchart/plotchart.html"> Plotchart </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key55"> 3D surfaces </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/plotchart/plotchart.html"> Plotchart </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c3">Keywords: A</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key101"> append tag </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_tags.html"> canvas::tag </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key82"> arc </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key77"> arrow </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c4">Keywords: B</a>
</th></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key99"> balloon </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/tooltip/tooltip.html"> tooltip </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key52"> bar charts </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/plotchart/plotchart.html"> Plotchart </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key5"> bindtags </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/ntext/ntext.html"> ntext </a> &#183; <a href="tklib/files/modules/ntext/ntextBindings.html"> ntextBindings </a> &#183; <a href="tklib/files/modules/ntext/ntextIndent.html"> ntextIndent </a> &#183; <a href="tklib/files/modules/ntext/ntextWordBreak.html"> ntextWordBreak </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key142"> bitmap </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/apps/bitmap-editor.html"> bitmap-editor </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key74"> box </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key23"> bundle </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widget/widget.html"> widget </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c5">Keywords: C</a>
</th></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key24"> calendar </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widget/widget.html"> widget </a> &#183; <a href="tklib/files/modules/widget/widget_calendar.html"> widget_calendar </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key10"> canvas </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_drag.html"> canvas::drag </a> &#183; <a href="tklib/files/modules/canvas/canvas_epoints.html"> canvas::edit::points </a> &#183; <a href="tklib/files/modules/canvas/canvas_epolyline.html"> canvas::edit::polyline </a> &#183; <a href="tklib/files/modules/canvas/canvas_equad.html"> canvas::edit::quadrilateral </a> &#183; <a href="tklib/files/modules/canvas/canvas_highlight.html"> canvas::highlight </a> &#183; <a href="tklib/files/modules/canvas/canvas_mvg.html"> canvas::mvg </a> &#183; <a href="tklib/files/modules/canvas/canvas_snap.html"> canvas::snap </a> &#183; <a href="tklib/files/modules/canvas/canvas_sqmap.html"> canvas::sqmap </a> &#183; <a href="tklib/files/modules/canvas/canvas_tags.html"> canvas::tag </a> &#183; <a href="tklib/files/modules/canvas/canvas_trlines.html"> canvas::track::lines </a> &#183; <a href="tklib/files/modules/tkpiechart/canvaslabel.html"> canvasLabel </a> &#183; <a href="tklib/files/modules/crosshair/crosshair.html"> crosshair </a> &#183; <a href="tklib/files/apps/dia.html"> dia </a> &#183; <a href="tklib/files/modules/diagrams/diagram.html"> diagram </a> &#183; <a href="tklib/files/modules/tkpiechart/pie.html"> pie </a> &#183; <a href="tklib/files/modules/tkpiechart/pieboxlabeler.html"> pieBoxLabeler </a> &#183; <a href="tklib/files/modules/tkpiechart/pieperipherallabeler.html"> piePeripheralLabeler </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key32"> cell </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_sqmap.html"> canvas::sqmap </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key41"> character </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/khim/khim.html"> khim </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key47"> charts </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/plotchart/plotchart.html"> Plotchart </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key28"> chat </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/chatwidget/chatwidget.html"> chatwidget </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key27"> chatwidget </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/chatwidget/chatwidget.html"> chatwidget </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key86"> circle </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key70"> clock </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/datefield/datefield.html"> datefield </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key30"> composite widget </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/chatwidget/chatwidget.html"> chatwidget </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key12"> concave </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_equad.html"> canvas::edit::quadrilateral </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key135"> controlling </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/controlwidget/controlwidget.html"> controlwidget </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key59"> conversion </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/apps/dia.html"> dia </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key13"> convex </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_equad.html"> canvas::edit::quadrilateral </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key44"> coordinate transformations </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/plotchart/plotchart.html"> Plotchart </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key53"> coordinates </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/plotchart/plotchart.html"> Plotchart </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key140"> cross-hairs </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/crosshair/crosshair.html"> crosshair </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key110"> crosshair </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_trlines.html"> canvas::track::lines </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key72"> cursor </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/cursor/cursor.html"> cursor </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c6">Keywords: D</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key120"> data entry lists </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widgetl/widget_listentry.html"> widget_listentry </a> &#183; <a href="tklib/files/modules/widgetl/widget_listsimple.html"> widget_listsimple </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key116"> data entry ordered list </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widgetl/widget_listentry.html"> widget_listentry </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key119"> data entry set of strings </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widgetl/widget_listentry.html"> widget_listentry </a> &#183; <a href="tklib/files/modules/widgetl/widget_listsimple.html"> widget_listsimple </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key115"> data entry unordered list </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widgetl/widget_listentry.html"> widget_listentry </a> &#183; <a href="tklib/files/modules/widgetl/widget_listsimple.html"> widget_listsimple </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key2"> date </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/datefield/datefield.html"> datefield </a> &#183; <a href="tklib/files/modules/widget/widget_calendar.html"> widget_calendar </a> &#183; <a href="tklib/files/modules/widget/widget_dateentry.html"> widget_dateentry </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key0"> dateentry </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/datefield/datefield.html"> datefield </a> &#183; <a href="tklib/files/modules/widget/widget.html"> widget </a> &#183; <a href="tklib/files/modules/widget/widget_dateentry.html"> widget_dateentry </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key58"> diagram </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/apps/dia.html"> dia </a> &#183; <a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key17"> dialog </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/getstring/tk_getString.html"> getstring </a> &#183; <a href="tklib/files/modules/swaplist/swaplist.html"> swaplist </a> &#183; <a href="tklib/files/modules/widget/widget.html"> widget </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key87"> diamond </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key147"> disjointlistbox </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/swaplist/swaplist.html"> swaplist </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key133"> displaying </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/controlwidget/controlwidget.html"> controlwidget </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key91"> dll </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/ico/ico.html"> ico </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key141"> dragging </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_drag.html"> canvas::drag </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key80"> drawing </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key73"> drum </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c7">Keywords: E</a>
</th></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key9"> editing </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_epoints.html"> canvas::edit::points </a> &#183; <a href="tklib/files/modules/canvas/canvas_epolyline.html"> canvas::edit::polyline </a> &#183; <a href="tklib/files/modules/canvas/canvas_equad.html"> canvas::edit::quadrilateral </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key144"> editor </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/apps/bitmap-editor.html"> bitmap-editor </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key88"> ellipse </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key107"> enter callback </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_highlight.html"> canvas::highlight </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key71"> entry </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/datefield/datefield.html"> datefield </a> &#183; <a href="tklib/files/modules/getstring/tk_getString.html"> getstring </a> &#183; <a href="tklib/files/modules/history/tklib_history.html"> history </a> &#183; <a href="tklib/files/modules/ico/ico.html"> ico </a> &#183; <a href="tklib/files/modules/ipentry/ipentry.html"> ipentry </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key93"> exe </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/ico/ico.html"> ico </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c8">Keywords: G</a>
</th></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key48"> graphical presentation </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/plotchart/plotchart.html"> Plotchart </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key123"> graphics </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_mvg.html"> canvas::mvg </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key33"> grid </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_sqmap.html"> canvas::sqmap </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c9">Keywords: H</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key98"> help </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/tooltip/tooltip.html"> tooltip </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key106"> highlighting </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_highlight.html"> canvas::highlight </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key114"> history </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/history/tklib_history.html"> history </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key97"> hover </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/tooltip/tooltip.html"> tooltip </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c10">Keywords: I</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key38"> i18n </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/khim/khim.html"> khim </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key94"> ico </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/ico/ico.html"> ico </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key92"> icon </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/ico/ico.html"> ico </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key36"> image </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/apps/bitmap-editor.html"> bitmap-editor </a> &#183; <a href="tklib/files/modules/canvas/canvas_snap.html"> canvas::snap </a> &#183; <a href="tklib/files/modules/canvas/canvas_sqmap.html"> canvas::sqmap </a> &#183; <a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key127"> imagemagick </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_mvg.html"> canvas::mvg </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key40"> input </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/khim/khim.html"> khim </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key102"> insert tag </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_tags.html"> canvas::tag </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key39"> international </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/khim/khim.html"> khim </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key84"> interpolation </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key90"> intersection </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key67"> invalid </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widgetv/widget_validator.html"> widget_validator </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key96"> ip address </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/ipentry/ipentry.html"> ipentry </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key29"> irc </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/chatwidget/chatwidget.html"> chatwidget </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key51"> isometric plots </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/plotchart/plotchart.html"> Plotchart </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c11">Keywords: L</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key63"> labeler </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/tkpiechart/canvaslabel.html"> canvasLabel </a> &#183; <a href="tklib/files/modules/tkpiechart/pie.html"> pie </a> &#183; <a href="tklib/files/modules/tkpiechart/pieboxlabeler.html"> pieBoxLabeler </a> &#183; <a href="tklib/files/modules/tkpiechart/pieperipherallabeler.html"> piePeripheralLabeler </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key105"> leave callback </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_highlight.html"> canvas::highlight </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key83"> line </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key118"> list entry panel </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widgetl/widget_listentry.html"> widget_listentry </a> &#183; <a href="tklib/files/modules/widgetl/widget_listsimple.html"> widget_listsimple </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key146"> listbox </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/swaplist/swaplist.html"> swaplist </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key139"> location </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/crosshair/crosshair.html"> crosshair </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c12">Keywords: M</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key121"> magick vector graphics </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_mvg.html"> canvas::mvg </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key35"> map </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_sqmap.html"> canvas::sqmap </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key31"> mega-widget </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/chatwidget/chatwidget.html"> chatwidget </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key4"> megawidget </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widget/widget.html"> widget </a> &#183; <a href="tklib/files/modules/widget/widget_calendar.html"> widget_calendar </a> &#183; <a href="tklib/files/modules/widget/widget_dateentry.html"> widget_dateentry </a> &#183; <a href="tklib/files/modules/widget/widget_toolbar.html"> widget_toolbar </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key26"> menu </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widget/widget.html"> widget </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key42"> method </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/khim/khim.html"> khim </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key89"> move </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key126"> mvg </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_mvg.html"> canvas::mvg </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c13">Keywords: N</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key95"> network </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/ipentry/ipentry.html"> ipentry </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key11"> non-convex </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_equad.html"> canvas::edit::quadrilateral </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key134"> numerical values </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/controlwidget/controlwidget.html"> controlwidget </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c14">Keywords: P</a>
</th></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key19"> panelframe </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widget/widget.html"> widget </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key129"> photo </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_snap.html"> canvas::snap </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key81"> picture </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key62"> pie </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/tkpiechart/canvaslabel.html"> canvasLabel </a> &#183; <a href="tklib/files/modules/tkpiechart/pie.html"> pie </a> &#183; <a href="tklib/files/modules/tkpiechart/pieboxlabeler.html"> pieBoxLabeler </a> &#183; <a href="tklib/files/modules/tkpiechart/pieperipherallabeler.html"> piePeripheralLabeler </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key54"> pie charts </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/plotchart/plotchart.html"> Plotchart </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key143"> pixel </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/apps/bitmap-editor.html"> bitmap-editor </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key79"> plane geometry </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key50"> plotting </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a> &#183; <a href="tklib/files/modules/plotchart/plotchart.html"> Plotchart </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key75"> point </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key131"> point cloud </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_epoints.html"> canvas::edit::points </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key130"> points </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_epoints.html"> canvas::edit::points </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key43"> polar plots </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/plotchart/plotchart.html"> Plotchart </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key113"> polyline </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_epolyline.html"> canvas::edit::polyline </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key124"> print screen </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_mvg.html"> canvas::mvg </a> &#183; <a href="tklib/files/modules/canvas/canvas_snap.html"> canvas::snap </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c15">Keywords: Q</a>
</th></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key14"> quadrilateral </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_equad.html"> canvas::edit::quadrilateral </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c16">Keywords: R</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key78"> raster image </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key6"> re_syntax </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/ntext/ntext.html"> ntext </a> &#183; <a href="tklib/files/modules/ntext/ntextIndent.html"> ntextIndent </a> &#183; <a href="tklib/files/modules/ntext/ntextWordBreak.html"> ntextWordBreak </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key8"> regexp </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/ntext/ntext.html"> ntext </a> &#183; <a href="tklib/files/modules/ntext/ntextIndent.html"> ntextIndent </a> &#183; <a href="tklib/files/modules/ntext/ntextWordBreak.html"> ntextWordBreak </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key103"> remove tag </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_tags.html"> canvas::tag </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key111"> rubberband </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_trlines.html"> canvas::track::lines </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key25"> ruler </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widget/widget.html"> widget </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c17">Keywords: S</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key132"> scale widget </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/controlwidget/controlwidget.html"> controlwidget </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key21"> screenruler </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widget/widget.html"> widget </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key109"> scroll </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/autoscroll/autoscroll.html"> autoscroll </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key108"> scrollbar </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/autoscroll/autoscroll.html"> autoscroll </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key16"> scrolledwindow </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widget/widget.html"> widget </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key125"> serialization </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_mvg.html"> canvas::mvg </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key117"> set entry panel </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widgetl/widget_listentry.html"> widget_listentry </a> &#183; <a href="tklib/files/modules/widgetl/widget_listsimple.html"> widget_listsimple </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key61"> slice </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/tkpiechart/canvaslabel.html"> canvasLabel </a> &#183; <a href="tklib/files/modules/tkpiechart/pie.html"> pie </a> &#183; <a href="tklib/files/modules/tkpiechart/pieboxlabeler.html"> pieBoxLabeler </a> &#183; <a href="tklib/files/modules/tkpiechart/pieperipherallabeler.html"> piePeripheralLabeler </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key128"> snapshot </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_snap.html"> canvas::snap </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key3"> snit </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widget/widget.html"> widget </a> &#183; <a href="tklib/files/modules/widget/widget_calendar.html"> widget_calendar </a> &#183; <a href="tklib/files/modules/widget/widget_dateentry.html"> widget_dateentry </a> &#183; <a href="tklib/files/modules/widget/widget_toolbar.html"> widget_toolbar </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key76"> spline </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key37"> square map </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_sqmap.html"> canvas::sqmap </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key66"> state management </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widgetv/widget_validator.html"> widget_validator </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key20"> statusbar </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widget/widget.html"> widget </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key136"> string </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/getstring/tk_getString.html"> getstring </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key56"> strip charts </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/plotchart/plotchart.html"> Plotchart </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key22"> superframe </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widget/widget.html"> widget </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key15"> syntax highlighting </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/ctext/ctext.html"> ctext </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c18">Keywords: T</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key45"> tables </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/plotchart/plotchart.html"> Plotchart </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key104"> tags </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_tags.html"> canvas::tag </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key7"> text </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/ctext/ctext.html"> ctext </a> &#183; <a href="tklib/files/modules/diagrams/diagram.html"> diagram </a> &#183; <a href="tklib/files/modules/ntext/ntext.html"> ntext </a> &#183; <a href="tklib/files/modules/ntext/ntextBindings.html"> ntextBindings </a> &#183; <a href="tklib/files/modules/ntext/ntextIndent.html"> ntextIndent </a> &#183; <a href="tklib/files/modules/ntext/ntextWordBreak.html"> ntextWordBreak </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key34"> tile </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_sqmap.html"> canvas::sqmap </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key46"> time charts </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/plotchart/plotchart.html"> Plotchart </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key18"> toolbar </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widget/widget.html"> widget </a> &#183; <a href="tklib/files/modules/widget/widget_toolbar.html"> widget_toolbar </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key100"> tooltip </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/tooltip/tooltip.html"> tooltip </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key112"> tracking </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_trlines.html"> canvas::track::lines </a> &#183; <a href="tklib/files/modules/crosshair/crosshair.html"> crosshair </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key64"> ttk::combobox </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widgetv/widget_validator.html"> widget_validator </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key65"> ttk::entry </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widgetv/widget_validator.html"> widget_validator </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c19">Keywords: V</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key69"> validation </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widgetv/widget_validator.html"> widget_validator </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key60"> vector </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/apps/dia.html"> dia </a> &#183; <a href="tklib/files/modules/diagrams/diagram.html"> diagram </a>
</td></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key122"> vector graphics </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_mvg.html"> canvas::mvg </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key138"> viewport </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/crosshair/crosshair.html"> crosshair </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c20">Keywords: W</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key1"> widget </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/chatwidget/chatwidget.html"> chatwidget </a> &#183; <a href="tklib/files/modules/ctext/ctext.html"> ctext </a> &#183; <a href="tklib/files/modules/datefield/datefield.html"> datefield </a> &#183; <a href="tklib/files/modules/widget/widget.html"> widget </a> &#183; <a href="tklib/files/modules/widget/widget_calendar.html"> widget_calendar </a> &#183; <a href="tklib/files/modules/widget/widget_dateentry.html"> widget_dateentry </a> &#183; <a href="tklib/files/modules/widgetl/widget_listentry.html"> widget_listentry </a> &#183; <a href="tklib/files/modules/widgetl/widget_listsimple.html"> widget_listsimple </a> &#183; <a href="tklib/files/modules/widget/widget_toolbar.html"> widget_toolbar </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key68"> widget validation </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/widgetv/widget_validator.html"> widget_validator </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c21">Keywords: X</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key145"> xbm </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/apps/bitmap-editor.html"> bitmap-editor </a>
</td></tr>
<tr class="#idxeven" valign=top>
<td class="#idxleft" width="35%"><a name="key49"> xy-plots </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/plotchart/plotchart.html"> Plotchart </a>
</td></tr>
<tr class="#idxheader"><th colspan="2">
<a name="c22">Keywords: Z</a>
</th></tr>
<tr class="#idxodd" valign=top>
<td class="#idxleft" width="35%"><a name="key137"> zoom </a></td>
<td class="#idxright" width="65%">
<a href="tklib/files/modules/canvas/canvas_zoom.html"> canvas::zoom </a>
</td></tr>
</table>
</body></html>

Added embedded/www/tklib/files/apps/bitmap-editor.html.





























































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174

<html><head>
<title>bitmap-editor - Bitmap handling</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/apps/bitmap-editor.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; 
   -->
<! -- CVS: $Id$ bitmap-editor.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../home">Tcllib Home</a>
| <a href="../../../toc.html">Main Table Of Contents</a>
| <a href="../../toc.html">Table Of Contents</a>
| <a href="../../../index.html">Keyword Index</a>
| <a href="../../../toc0.html">Categories</a>
| <a href="../../../toc1.html">Modules</a>
| <a href="../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">bitmap-editor(n) 1.0 tklib &quot;Bitmap handling&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>bitmap-editor - Editor for XBM images</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a>
<ul>
<li class="subsection"><a href="#subsection1">COMMAND LINE</a></li>
</ul>
</li>
<li class="section"><a href="#section2">BUGS, IDEAS, FEEDBACK</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#category">Category</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="syntax">
<li><a href="#1"><b class="cmd">bitmap-editor</b> <span class="opt">?<i class="arg">xbmfile</i>?</span></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>The application described by this document, <b class="syscmd">bitmap-editor</b>, is
a simple editor for XBM based bitmap images.
Written by Keith Vetter the original code can be found at
<a href="http://wiki.tcl.tk/6298">http://wiki.tcl.tk/6298</a>.</p>
<div id="subsection1" class="subsection"><h3><a name="subsection1">COMMAND LINE</a></h3>
<dl class="definitions">
<dt><a name="1"><b class="cmd">bitmap-editor</b> <span class="opt">?<i class="arg">xbmfile</i>?</span></a></dt>
<dd><p>Invoked without argument the editor GUI will be opened and show a
standard bitmap to edit. Invoked with an argument it is expected to be
the path to a bitmap file in XBM format, and the contained bitmap is
shown.</p>
<dl class="arguments">
<dt>path <i class="arg">xbmfile</i> (in/out)</dt>
<dd><p>This argument specifies the path to a bitmap file in XBM format, whose
contents is to shown and edited by the application.</p></dd>
</dl></dd>
</dl>
</div>
</div>
<div id="section2" class="section"><h2><a name="section2">BUGS, IDEAS, FEEDBACK</a></h2>
<p>This document, and the application it describes, will undoubtedly
contain bugs and other problems.
Please report such in the category <em>bitmap</em> of the
<a href="http://sourceforge.net/tracker/?group_id=12883">Tcllib SF Trackers</a>.
Please also report any ideas for enhancements you may have for either
application and/or documentation.</p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../index.html#key142">bitmap</a>, <a href="../../../index.html#key144">editor</a>, <a href="../../../index.html#key36">image</a>, <a href="../../../index.html#key143">pixel</a>, <a href="../../../index.html#key145">xbm</a></p>
</div>
<div id="category" class="section"><h2><a name="category">Category</a></h2>
<p>Image processing</p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; </p>
</div>
</div></body></html>

Added embedded/www/tklib/files/apps/dia.html.



















































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201

<html><head>
<title>dia - Documentation toolbox</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/apps/dia.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; 2010 Andreas Kupries &lt;andreas_kupries@users.sourceforge.net&gt;
   -->
<! -- CVS: $Id$ dia.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../home">Tcllib Home</a>
| <a href="../../../toc.html">Main Table Of Contents</a>
| <a href="../../toc.html">Table Of Contents</a>
| <a href="../../../index.html">Keyword Index</a>
| <a href="../../../toc0.html">Categories</a>
| <a href="../../../toc1.html">Modules</a>
| <a href="../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">dia(n) 1.0 tklib &quot;Documentation toolbox&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>dia - Lightweight Diagram Processor</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a>
<ul>
<li class="subsection"><a href="#subsection1">USE CASES</a></li>
<li class="subsection"><a href="#subsection2">COMMAND LINE</a></li>
</ul>
</li>
<li class="section"><a href="#section2">BUGS, IDEAS, FEEDBACK</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#category">Category</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="syntax">
<li><a href="#1"><b class="cmd">dia</b> <b class="method">show</b> <i class="arg">inputfile</i>...</a></li>
<li><a href="#2"><b class="cmd">dia</b> <b class="method">convert</b> <b class="option">-o</b> <i class="arg">output</i> <i class="arg">format</i> <i class="arg">inputfile</i>...</a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>The application described by this document, <b class="syscmd">dia</b>, is a
lightweight processor for tklib diagram files</p>
<p><b class="syscmd">dia</b> is based upon the package <b class="package"><a href="../modules/diagrams/diagram.html">diagram</a></b>.
See it for examples and language reference.</p>
<div id="subsection1" class="subsection"><h3><a name="subsection1">USE CASES</a></h3>
<p><b class="syscmd">dia</b> was written with the following two use cases in
mind.</p>
<ol class="enumerated">
<li><p>Processing and display of one or more diagram files.</p></li>
<li><p>Batch conversion of one or more diagram files into raster image files.</p></li>
</ol>
</div>
<div id="subsection2" class="subsection"><h3><a name="subsection2">COMMAND LINE</a></h3>
<dl class="definitions">
<dt><a name="1"><b class="cmd">dia</b> <b class="method">show</b> <i class="arg">inputfile</i>...</a></dt>
<dd><p>This is the form for use case [1]. The application opens a gui
showing the list of input files to the left, allowing the user to
choose which of them to render to the canvas on the right.</p></dd>
<dt><a name="2"><b class="cmd">dia</b> <b class="method">convert</b> <b class="option">-o</b> <i class="arg">output</i> <i class="arg">format</i> <i class="arg">inputfile</i>...</a></dt>
<dd><p>This is the form for use case [2]. The application converts
the input files into raster image of the specified <i class="arg">format</i>.</p>
<dl class="arguments">
<dt>path <i class="arg">output</i> (in)</dt>
<dd><p>This argument specifies where to write the generated image. It can
be the path to a file or directory.</p>
<p>If the <i class="arg">output</i> does not exist then [file dirname $output]
has to exist and must be a writable directory.</p>
<p>In case of multiple input files the generated image will be written to
a file in the directory, and the name of that file will be derived
from the <i class="arg">inputfile</i>, and <i class="arg">format</i>.</p>
<p>In case of a single input file the generated image will be written to
the file.</p></dd>
<dt>(handle) <i class="arg">format</i> (in)</dt>
<dd><p>This argument specifies the image format to convert the diagrams into
when processing the input. The application recognizes all formats
supported by the <b class="package">Img</b> package, i.e. for which it can load a
package <b class="package">img::<b class="variable">format</b></b></p></dd>
<dt>path <i class="arg">inputfile</i> (in)</dt>
<dd><p>This argument specifies the path to the diagram file to process. It
has to exist, must be readable, and written in <i class="term"><a href="../../../index.html#key58">diagram</a></i> format.</p></dd>
</dl></dd>
</dl>
</div>
</div>
<div id="section2" class="section"><h2><a name="section2">BUGS, IDEAS, FEEDBACK</a></h2>
<p>This document, and the application it describes, will undoubtedly
contain bugs and other problems.
Please report such in the category <em>diagram</em> of the
<a href="http://sourceforge.net/tracker/?group_id=12883">Tcllib SF Trackers</a>.
Please also report any ideas for enhancements you may have for either
application and/or documentation.</p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../index.html#key10">canvas</a>, <a href="../../../index.html#key59">conversion</a>, <a href="../../../index.html#key58">diagram</a>, <a href="../../../index.html#key60">vector</a></p>
</div>
<div id="category" class="section"><h2><a name="category">Category</a></h2>
<p>Documentation tools</p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; 2010 Andreas Kupries &lt;andreas_kupries@users.sourceforge.net&gt;</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/autoscroll/autoscroll.html.

































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176

<html><head>
<title>autoscroll - Automatic mapping of scrollbars</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/autoscroll/autoscroll.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ autoscroll.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">autoscroll(n) 1.1 tklib &quot;Automatic mapping of scrollbars&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>autoscroll - Provides for a scrollbar to automatically mapped and unmapped as needed</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl</b></li>
<li>package require <b class="pkgname">autoscroll <span class="opt">?1.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::autoscroll::autoscroll</b> <i class="arg">scrollbar</i></a></li>
<li><a href="#2"><b class="cmd">::autoscroll::unautoscroll</b> <i class="arg">scrollbar</i></a></li>
<li><a href="#3"><b class="cmd">::autoscroll::wrap</b></a></li>
<li><a href="#4"><b class="cmd">::autoscroll::unwrap</b></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package allows scrollbars to be mapped and
unmapped as needed depending on the size and
content of the scrollbars scrolled widget. The
scrollbar must be managed by either pack or grid,
other geometry managers are not supported.</p>
<p>When managed by pack, any geometry changes made in the
scrollbars parent between the time a scrollbar is
unmapped, and when it is mapped will be lost. It is
an error to destroy any of the scrollbars siblings while the
scrollbar is unmapped. When managed by grid, if anything
becomes gridded in the same row and column the scrollbar
occupied it will be replaced by the scrollbar when remapped.</p>
<p>This package may be used on any scrollbar-like widget
as long as it supports the <b class="const">set</b> subcommand in the same
style as scrollbar. If the <b class="const">set</b> subcommand is not used
then this package will have no effect.</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::autoscroll::autoscroll</b> <i class="arg">scrollbar</i></a></dt>
<dd><p>Arranges for the already existing scrollbar <b class="const">scrollbar</b>
to be mapped and unmapped as needed.</p></dd>
<dt><a name="2"><b class="cmd">::autoscroll::unautoscroll</b> <i class="arg">scrollbar</i></a></dt>
<dd><p>Returns the named scrollbar to its original static state.</p></dd>
<dt><a name="3"><b class="cmd">::autoscroll::wrap</b></a></dt>
<dd><p>Arranges for all scrollbars created after this command is run
to be automatically mapped and unmapped as needed.</p></dd>
<dt><a name="4"><b class="cmd">::autoscroll::unwrap</b></a></dt>
<dd><p>Turns off the automatic autoscrolling of all new scrollbars.
Does not effect existing scrollbars</p></dd>
</dl>
<pre class="example">
text .t -yscrollcommand &quot;.scrolly set&quot;
scrollbar .scrolly -orient v -command &quot;.t yview&quot;
pack .scrolly -side right -fill y
pack .t -side left -fill both -expand 1
::autoscroll::autoscroll .scrolly
</pre>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key109">scroll</a>, <a href="../../../../index.html#key108">scrollbar</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/canvas/canvas_drag.html.





























































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238

<html><head>
<title>canvas::drag - Variations on a canvas</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/canvas/canvas_drag.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ canvas::drag.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">canvas::drag(n) 0.1 tklib &quot;Variations on a canvas&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>canvas::drag - Manage the dragging of canvas items or item groups</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">API</a>
<ul>
<li class="subsection"><a href="#subsection1">Drag callback</a></li>
<li class="subsection"><a href="#subsection2">Options</a></li>
</ul>
</li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">canvas::drag <span class="opt">?0.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::canvas::drag</b> <b class="method">on</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">cmd</i> <i class="arg">option</i>...</a></li>
<li><a href="#2"><b class="cmd">::canvas::drag</b> <b class="method">off</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i></a></li>
<li><a href="#3"><b class="cmd">::canvas::drag</b> <b class="method">item</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">option</i>...</a></li>
<li><a href="#4"><b class="cmd">::canvas::drag</b> <b class="method">group</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">cmd</i> <i class="arg">option</i>...</a></li>
<li><a href="#5"><b class="cmd">{*}cmd</b> <b class="method">start</b> <i class="arg">canvas</i> <i class="arg">item</i></a></li>
<li><a href="#6"><b class="cmd">{*}cmd</b> <b class="method">move</b> <i class="arg">canvas</i> <i class="arg">clientdata</i> <i class="arg">dx</i> <i class="arg">dy</i></a></li>
<li><a href="#7"><b class="cmd">{*}cmd</b> <b class="method">done</b> <i class="arg">canvas</i> <i class="arg">clientdata</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides utility commands to setup and rmeove dragging of
items or item groups on a canvas, hiding all complexity regarding
bindings from the user.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">API</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::canvas::drag</b> <b class="method">on</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">cmd</i> <i class="arg">option</i>...</a></dt>
<dd><p>This command initializes item dragging on the <i class="arg">canvas</i> widget,
with the items used as drag handles identified by <i class="arg">tagOrId</i>.
The command prefix <i class="arg">cmd</i>, invoked for drag start and movement, is
responsible for the initialization and actual execution of the drag
operation.</p>
<p>The signature of the command prefix is described later, in
section <span class="sectref"><a href="#subsection1">Drag callback</a></span>.</p>
<p>Similarly, the accepted options and their values are described
in section <span class="sectref"><a href="#subsection2">Options</a></span></p>
<p>The result of the command is the empty string.</p></dd>
<dt><a name="2"><b class="cmd">::canvas::drag</b> <b class="method">off</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i></a></dt>
<dd><p>This command removes any drag operation set on the items of canvas
<i class="arg">canvas</i> identified by <i class="arg">tagOrId</i>.</p>
<p>The result of the command is the empty string.</p></dd>
<dt><a name="3"><b class="cmd">::canvas::drag</b> <b class="method">item</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">option</i>...</a></dt>
<dd><p>This is a convenience command wrapped around method <b class="method">on</b> (see above)
to drag single items of the <i class="arg">canvas</i> widget, identified by <i class="arg">tagOrId</i>.</p>
<p>It uses an internal standard callback for this.</p>
<p>The result of the command is the empty string.</p></dd>
<dt><a name="4"><b class="cmd">::canvas::drag</b> <b class="method">group</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">cmd</i> <i class="arg">option</i>...</a></dt>
<dd><p>This is a convenience command wrapped around method <b class="method">on</b> (see above)
to drag single items of the <i class="arg">canvas</i> widget, identified by <i class="arg">tagOrId</i>.</p>
<p>It uses an internal standard callback for this. The callback
<i class="arg">cmd</i> specified has the same signature as the <span class="sectref"><a href="#subsection1">Drag callback</a></span>,
except that</p>
<ol class="enumerated">
<li><p>The <b class="method">move</b> method is not invoked.</p></li>
<li><p>The result of the <b class="method">start</b> method <em>has to be</em> a
canvas tag refering to the whole group of items to move. In other words,
it must convert from drag handle (item id) to dragged groupt (tag).</p></li>
</ol>
<p>The result of the command is the empty string.</p></dd>
</dl>
<div id="subsection1" class="subsection"><h3><a name="subsection1">Drag callback</a></h3>
<p>The drag callback is a command prefix invoked in the following two
ways:</p>
<dl class="definitions">
<dt><a name="5"><b class="cmd">{*}cmd</b> <b class="method">start</b> <i class="arg">canvas</i> <i class="arg">item</i></a></dt>
<dd><p>This form is invoked when has initiated dragging using drag handle
identified by the canvas <i class="arg">item</i> id.
The callback now has to perform anything necessary for its type of
drag operation.</p>
<p>The result of the command can be anything. It is stored by the
system as client information and passed unchanged to the movement
callback for its use. In this manner the drag callback is able to
maintain custom state from start to movement.</p></dd>
<dt><a name="6"><b class="cmd">{*}cmd</b> <b class="method">move</b> <i class="arg">canvas</i> <i class="arg">clientdata</i> <i class="arg">dx</i> <i class="arg">dy</i></a></dt>
<dd><p>This form is invoked when the mouse moved during a drag operation.
It is invoked with the client data from the start callback (or the
previous move callback) and the distances the mouse has traveled in
horizontal and vertical directions.</p>
<p>The result of the command can be anything. It is stored by the
system as client information and passed unchanged to the next movement
callback for its use. In this manner the drag callback is able to
maintain custom state from movement to movement.</p></dd>
<dt><a name="7"><b class="cmd">{*}cmd</b> <b class="method">done</b> <i class="arg">canvas</i> <i class="arg">clientdata</i></a></dt>
<dd><p>This form is invoked when the drag operation ends.
It is invoked with the client data from the last movement callback (or
start callback if there had been no motion).</p>
<p>The result of the command is ignored.</p></dd>
</dl>
</div>
<div id="subsection2" class="subsection"><h3><a name="subsection2">Options</a></h3>
<p>The commands to create drag operations (<b class="method">on</b>, <b class="method">item</b>,
and <b class="method">group</b>) all accept the following options to configure the
new drag.</p>
<dl class="options">
<dt><b class="option">-event</b> <i class="arg">spec</i></dt>
<dd><p>The value of this option specifies the mouse button used to initiate
the drag operation, and the keyboard modifier, if any. Examples of
specifications:</p>
<p>To initiate a drag operation by pressing mouse button 3 on a
drag handle, use:</p>
<pre class="example"> -event 3 </pre>
<p>This is the default as well, if the option is not specified.</p>
<p>To initiate a drag operation by pressing mouse button 2 on a
drag handle while holding down the Control key, use:</p>
<pre class="example"> -event Control-2 </pre>
</dd>
</dl>
</div>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key141">dragging</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/canvas/canvas_epoints.html.



























































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317

<html><head>
<title>canvas::edit::points - Variations on a canvas</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/canvas/canvas_epoints.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ canvas::edit::points.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">canvas::edit::points(n) 0.1 tklib &quot;Variations on a canvas&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>canvas::edit::points - Editing a cloud of points on a canvas</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">Class API</a></li>
<li class="section"><a href="#section3">Instance API</a></li>
<li class="section"><a href="#section4">Options</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">canvas::edit::points <span class="opt">?0.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::canvas::edit</b> <b class="method">points</b> <i class="arg">objectName</i> <i class="arg">canvas</i> <i class="arg">options</i>...</a></li>
<li><a href="#2"><b class="cmd">objectName</b> <b class="method">destroy</b></a></li>
<li><a href="#3"><b class="cmd">objectName</b> <b class="method">enable</b></a></li>
<li><a href="#4"><b class="cmd">objectName</b> <b class="method">disable</b></a></li>
<li><a href="#5"><b class="cmd">objectName</b> <b class="method">active</b></a></li>
<li><a href="#6"><b class="cmd">objectName</b> <b class="method">add</b> <i class="arg">x</i> <i class="arg">y</i></a></li>
<li><a href="#7"><b class="cmd">objectName</b> <b class="method">clear</b></a></li>
<li><a href="#8"><b class="cmd">createCmd</b> <i class="arg">canvas</i> <i class="arg">x</i> <i class="arg">y</i></a></li>
<li><a href="#9"><b class="cmd">highlightCmd</b> <b class="method">on</b> <i class="arg">canvas</i> <i class="arg">item</i></a></li>
<li><a href="#10"><b class="cmd">highlightCmd</b> <b class="method">off</b> <i class="arg">canvas</i> <i class="arg">state</i></a></li>
<li><a href="#11"><b class="cmd">dataCmd</b> <b class="method">add</b> <i class="arg">editorObj</i> <i class="arg">id</i> <i class="arg">x</i> <i class="arg">y</i></a></li>
<li><a href="#12"><b class="cmd">dataCmd</b> <b class="method">remove</b> <i class="arg">editorObj</i> <i class="arg">id</i></a></li>
<li><a href="#13"><b class="cmd">dataCmd</b> <b class="method">move start</b> <i class="arg">editorObj</i> <i class="arg">id</i></a></li>
<li><a href="#14"><b class="cmd">dataCmd</b> <b class="method">move delta</b> <i class="arg">editorObj</i> <i class="arg">id</i> <i class="arg">x</i> <i class="arg">y</i> <i class="arg">dx</i> <i class="arg">dy</i></a></li>
<li><a href="#15"><b class="cmd">dataCmd</b> <b class="method">move done</b> <i class="arg">editorObj</i> <i class="arg">id</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a class whose instances handle editing a cloud
of point markers on a canvas. Instances can be configured with regard
to the visual appearance of markers (regular, and highlighted). Note
that instances do not store the edited points themselves, but delegate
this to a configurable object.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">Class API</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::canvas::edit</b> <b class="method">points</b> <i class="arg">objectName</i> <i class="arg">canvas</i> <i class="arg">options</i>...</a></dt>
<dd><p>This, the class command, creates and configures a new instance of a
point cloud editor, named <i class="arg">objectName</i>. The instance will be
connected to the specified <i class="arg">canvas</i> widget.</p>
<p>The result of the command is the fully qualified name of the
instance command.</p>
<p>The options accepted here, and their values, are explained in
the section <span class="sectref"><a href="#section4">Options</a></span>.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">Instance API</a></h2>
<p>Instances of the point cloud editors provide the following API:</p>
<dl class="definitions">
<dt><a name="2"><b class="cmd">objectName</b> <b class="method">destroy</b></a></dt>
<dd><p>This method destroys the point cloud editor and releases all its
internal resources.</p>
<p>Note that this operation does not destroy the items of the
point markers the editor managed on the attached canvas, nor the
canvas itself.</p>
<p>The result of the method is an empty string.</p></dd>
<dt><a name="3"><b class="cmd">objectName</b> <b class="method">enable</b></a></dt>
<dd><p>This method activates editing of the point cloud on the canvas. This
is the default after instance creation. A call is ignored if the
editor is already active.</p>
<p>The result of the method is an empty string.</p>
<p>The complementary method is <b class="method">disable</b>. The interogatory
method for the current state is <b class="method">active</b>.</p></dd>
<dt><a name="4"><b class="cmd">objectName</b> <b class="method">disable</b></a></dt>
<dd><p>This method disables editing of the point cloud on the canvas. A call
is ignored if the editor is already disabled.</p>
<p>The result of the method is an empty string.</p>
<p>The complementary method is <b class="method">enable</b>. The interogatory
method for the current state is <b class="method">active</b>.</p></dd>
<dt><a name="5"><b class="cmd">objectName</b> <b class="method">active</b></a></dt>
<dd><p>This method queries the editor state.</p>
<p>The result of the method is a boolean value, <b class="const">true</b> if
the editor is active, and <b class="const">false</b> otherwise, i.e. disabled.</p>
<p>The methods to change the state are <b class="method">enable</b> and
<b class="method">disable</b>.</p></dd>
<dt><a name="6"><b class="cmd">objectName</b> <b class="method">add</b> <i class="arg">x</i> <i class="arg">y</i></a></dt>
<dd><p>This method programmatically creates a point at the specified location.</p>
<p>The result of the method is an empty string.</p>
<p>Note that this method goes through the whole set of callbacks
invoked when the user interactively creates a point, i.e.
<b class="option">-create-cmd</b>, and, more importantly, <b class="option">-data-cmd</b>.</p>
<p>This is the method through which to load pre-existing points
into an editor instance.</p></dd>
<dt><a name="7"><b class="cmd">objectName</b> <b class="method">clear</b></a></dt>
<dd><p>This method programmatically removes all points from the editor.</p>
<p>The result of the method is an empty string.</p>
<p>Note that this method goes through the same callback invoked
when the user interactively removes a point, i.e. <b class="option">-data-cmd</b>.</p></dd>
</dl>
</div>
<div id="section4" class="section"><h2><a name="section4">Options</a></h2>
<p>The class command accepts the following options</p>
<dl class="options">
<dt><b class="option">-tag</b> <i class="arg">string</i></dt>
<dd><p>The value of this option is the name of the canvas tag with which to
identify all items of all points managed by the editor.</p>
<p>This option can only be set at construction time.</p>
<p>If not specified it defaults to <b class="const">POINT</b></p></dd>
<dt><b class="option">-create-cmd</b> <i class="arg">command-prefix</i></dt>
<dd><p>The value of this option is a command prefix the editor will invoke
when it has to create a new point.</p>
<p>This option can only be set at construction time.</p>
<p>If not specified it defaults to a command which will create a
black-bordered blue circle of radius 3 centered on the location of the
new point.</p>
<p>The signature of this command prefix is</p>
<dl class="definitions">
<dt><a name="8"><b class="cmd">createCmd</b> <i class="arg">canvas</i> <i class="arg">x</i> <i class="arg">y</i></a></dt>
<dd><p>The result of the command prefix <em>must</em> be a list of the canvas
items it created to represent the marker. Note here that the visual
representation of a &quot;point&quot; may consist of multiple canvas items in an
arbitrary shape.</p>
<p>The returned list of items is allowed to be empty, and such is
taken as signal that the callback vetoed the creation of the point.</p></dd>
</dl></dd>
<dt><b class="option">-highlight-cmd</b> <i class="arg">command-prefix</i></dt>
<dd><p>The value of this option is a command prefix the editor will invoke
when it has to (un)highlight a point.</p>
<p>This option can only be set at construction time.</p>
<p>If not specified it defaults to a command which will re-color
the item to highlight in red (and restores the color for
unhighlighting).</p>
<p>The two signatures of this command prefix are</p>
<dl class="definitions">
<dt><a name="9"><b class="cmd">highlightCmd</b> <b class="method">on</b> <i class="arg">canvas</i> <i class="arg">item</i></a></dt>
<dd><p>This method of the command prefix has to perform whatever is
needed to highlight the point the <i class="arg">item</i> is a part of (remember
the note above about points allowed to be constructed from multiple
canvas items).</p>
<p>The result of the command can be anything and will be passed as
is as argument <i class="arg">state</i> to the <b class="method">off</b> method.</p></dd>
<dt><a name="10"><b class="cmd">highlightCmd</b> <b class="method">off</b> <i class="arg">canvas</i> <i class="arg">state</i></a></dt>
<dd><p>This method is invoked to unhighlight a point described by the
<i class="arg">state</i>, which is the unchanged result of the <b class="method">on</b> method
of the command prefix. The result of this method is ignored.</p>
<p>Note any interaction between dragging and highlighting of
points is handled within the editor, and that the callback bears no
responsibility for doing such.</p></dd>
</dl></dd>
<dt><b class="option">-data-cmd</b> <i class="arg">command-prefix</i></dt>
<dd><p>The value of this option is a command prefix the editor will invoke
when a point was edited in some way. This is how the editor delegates
the actual storage of point information to an outside object.</p>
<p>This option can only be set at construction time.</p>
<p>If not specified it defaults to an empty string and is ignored
by the editor, i.e. not invoked.</p>
<p>The signatures of this command prefix are</p>
<dl class="definitions">
<dt><a name="11"><b class="cmd">dataCmd</b> <b class="method">add</b> <i class="arg">editorObj</i> <i class="arg">id</i> <i class="arg">x</i> <i class="arg">y</i></a></dt>
<dd><p>This callback is invoked when a new point was added to the instance,
either interactively, or programmatically.
See instance method <b class="method">add</b> for the latter.</p>
<p>The <i class="arg">id</i> identifies the point within the editor and will be
used by the two other callbacks to specify which point to modify.</p>
<p>The last two arguments <i class="arg">x</i> and <i class="arg">y</i> specify the location
of the new point in canvas coordinates.</p>
<p>The result of this method is ignored.</p></dd>
<dt><a name="12"><b class="cmd">dataCmd</b> <b class="method">remove</b> <i class="arg">editorObj</i> <i class="arg">id</i></a></dt>
<dd><p>This callback is invoked when a point removed from the editor
instance.</p>
<p>The <i class="arg">id</i> identifies the removed point within the editor.</p>
<p>The result of this method is ignored.</p></dd>
<dt><a name="13"><b class="cmd">dataCmd</b> <b class="method">move start</b> <i class="arg">editorObj</i> <i class="arg">id</i></a></dt>
<dd><p>This callback is invoked when the movement of a point in the editor
instance has started.</p>
<p>The <i class="arg">id</i> identifies the point within the editor about to be
moved.</p>
<p>The result of this method is ignored.</p></dd>
<dt><a name="14"><b class="cmd">dataCmd</b> <b class="method">move delta</b> <i class="arg">editorObj</i> <i class="arg">id</i> <i class="arg">x</i> <i class="arg">y</i> <i class="arg">dx</i> <i class="arg">dy</i></a></dt>
<dd><p>This callback is invoked when the point moved in the editor instance.</p>
<p>The <i class="arg">id</i> identifies the moved point within the editor, and
the remaining arguments <i class="arg">x</i>, <i class="arg">y</i>, <i class="arg">dx</i>, and <i class="arg">dy</i>
provide the new absolute location of the point, and full delta to the
original location.</p>
<p>At the time of the calls the system is <em>not</em> committed to
the move yet. Only after method <b class="method">move done</b> was invoked and
has accepted or rejected the last position will the editor update its
internal data structures, either committing to the new location, or
rolling the move back to the original one.</p>
<p>Given this the location data provided here should be saved only
in temporary storage until then.</p>
<p>The result of this method is ignored.</p></dd>
<dt><a name="15"><b class="cmd">dataCmd</b> <b class="method">move done</b> <i class="arg">editorObj</i> <i class="arg">id</i></a></dt>
<dd><p>This callback is invoked when the movement of a point in the editor
instance is complete.</p>
<p>The <i class="arg">id</i> identifies the moved point within the editor.</p>
<p>The result of this method must be a boolean value. If the
method returns <b class="const">false</b> the move is vetoed and rollbed back.</p></dd>
</dl></dd>
</dl>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key9">editing</a>, <a href="../../../../index.html#key131">point cloud</a>, <a href="../../../../index.html#key130">points</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/canvas/canvas_epolyline.html.





























































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286

<html><head>
<title>canvas::edit::polyline - Variations on a canvas</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/canvas/canvas_epolyline.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ canvas::edit::polyline.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">canvas::edit::polyline(n) 0.1 tklib &quot;Variations on a canvas&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>canvas::edit::polyline - Editing a polyline on a canvas</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">Class API</a></li>
<li class="section"><a href="#section3">Instance API</a></li>
<li class="section"><a href="#section4">Options</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">canvas::edit::points <span class="opt">?0.1?</span></b></li>
<li>package require <b class="pkgname">canvas::edit::polyline <span class="opt">?0.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::canvas::edit</b> <b class="method">polyline</b> <i class="arg">objectName</i> <i class="arg">canvas</i> <i class="arg">options</i>...</a></li>
<li><a href="#2"><b class="cmd">objectName</b> <b class="method">destroy</b></a></li>
<li><a href="#3"><b class="cmd">objectName</b> <b class="method">enable</b></a></li>
<li><a href="#4"><b class="cmd">objectName</b> <b class="method">disable</b></a></li>
<li><a href="#5"><b class="cmd">objectName</b> <b class="method">active</b></a></li>
<li><a href="#6"><b class="cmd">objectName</b> <b class="method">add</b> <i class="arg">x</i> <i class="arg">y</i></a></li>
<li><a href="#7"><b class="cmd">objectName</b> <b class="method">clear</b></a></li>
<li><a href="#8"><b class="cmd">createCmd</b> <i class="arg">canvas</i> <i class="arg">x</i> <i class="arg">y</i></a></li>
<li><a href="#9"><b class="cmd">highlightCmd</b> <b class="method">on</b> <i class="arg">canvas</i> <i class="arg">item</i></a></li>
<li><a href="#10"><b class="cmd">highlightCmd</b> <b class="method">off</b> <i class="arg">canvas</i> <i class="arg">state</i></a></li>
<li><a href="#11"><b class="cmd">dataCmd</b> <i class="arg">editorObj</i> <i class="arg">coordinates</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a class whose instances handle editing a single
poly-line on a canvas. Instances can be configured with regard to the
visual appearance (regular, and highlighted) of the markers denoting
the line's vertices. Note that instances do not store the edited
polyline themselves, but delegate this to a configurable object.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">Class API</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::canvas::edit</b> <b class="method">polyline</b> <i class="arg">objectName</i> <i class="arg">canvas</i> <i class="arg">options</i>...</a></dt>
<dd><p>This, the class command, creates and configures a new instance of a
polyline editor, named <i class="arg">objectName</i>. The instance will be
connected to the specified <i class="arg">canvas</i> widget.</p>
<p>The result of the command is the fully qualified name of the
instance command.</p>
<p>The options accepted here, and their values, are explained in
the section <span class="sectref"><a href="#section4">Options</a></span>.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">Instance API</a></h2>
<p>Instances of the polyline editors provide the following API:</p>
<dl class="definitions">
<dt><a name="2"><b class="cmd">objectName</b> <b class="method">destroy</b></a></dt>
<dd><p>This method destroys the polyline editor and releases all its
internal resources.</p>
<p>Note that this operation does not destroy the items the editor
managed on the attached canvas, nor the canvas itself.</p>
<p>The result of the method is an empty string.</p></dd>
<dt><a name="3"><b class="cmd">objectName</b> <b class="method">enable</b></a></dt>
<dd><p>This method activates editing of the polyline on the canvas. This
is the default after instance creation. A call is ignored if the
editor is already active.</p>
<p>The result of the method is an empty string.</p>
<p>The complementary method is <b class="method">disable</b>. The interogatory
method for the current state is <b class="method">active</b>.</p></dd>
<dt><a name="4"><b class="cmd">objectName</b> <b class="method">disable</b></a></dt>
<dd><p>This method disables editing of the polyline on the canvas. A call
is ignored if the editor is already disabled.</p>
<p>The result of the method is an empty string.</p>
<p>The complementary method is <b class="method">enable</b>. The interogatory
method for the current state is <b class="method">active</b>.</p></dd>
<dt><a name="5"><b class="cmd">objectName</b> <b class="method">active</b></a></dt>
<dd><p>This method queries the editor state.</p>
<p>The result of the method is a boolean value, <b class="const">true</b> if
the editor is active, and <b class="const">false</b> otherwise, i.e. disabled.</p>
<p>The methods to change the state are <b class="method">enable</b> and
<b class="method">disable</b>.</p></dd>
<dt><a name="6"><b class="cmd">objectName</b> <b class="method">add</b> <i class="arg">x</i> <i class="arg">y</i></a></dt>
<dd><p>This method programmatically adds a vertex at the specified location to the line.</p>
<p>The result of the method is an empty string.</p>
<p>Note that this method goes through the whole set of callbacks
invoked when the user interactively creates a vertex, i.e.
<b class="option">-create-cmd</b>, and, more importantly, <b class="option">-data-cmd</b>.</p>
<p>One important difference however. The new vertex is always added
at the end of the line, whereas interactive creation uses heuristics
to splice it into the line at a suitable location.</p>
<p>This is the method through which to load the vertices of a
pre-existing line into an editor instance.</p></dd>
<dt><a name="7"><b class="cmd">objectName</b> <b class="method">clear</b></a></dt>
<dd><p>This method programmatically removes all vertices from the editor,
essentially removing the whole line.</p>
<p>The result of the method is an empty string.</p>
<p>Note that this method goes through the same callbacks invoked
when the user interactively removes a vertex, i.e. <b class="option">-data-cmd</b>.</p></dd>
</dl>
</div>
<div id="section4" class="section"><h2><a name="section4">Options</a></h2>
<p>The class command accepts the following options</p>
<dl class="options">
<dt><b class="option">-tag</b> <i class="arg">string</i></dt>
<dd><p>The value of this option is the name of the canvas tag with which to
identify all items of all vertices managed by the editor.</p>
<p>This option can only be set at construction time.</p>
<p>If not specified it defaults to <b class="const">POLYLINE</b></p></dd>
<dt><b class="option">-create-cmd</b> <i class="arg">command-prefix</i></dt>
<dd><p>The value of this option is a command prefix the editor will invoke
when it has to create a new vertex.</p>
<p>This option can only be set at construction time.</p>
<p>If not specified it defaults to a command which will create a
black-bordered blue circle of radius 3 centered on the location of the
new point.</p>
<p>The signature of this command prefix is</p>
<dl class="definitions">
<dt><a name="8"><b class="cmd">createCmd</b> <i class="arg">canvas</i> <i class="arg">x</i> <i class="arg">y</i></a></dt>
<dd><p>The result of the command prefix <em>must</em> be a list of the canvas
items it created to represent the marker. Note here that the visual
representation of a &quot;vertex&quot; may consist of multiple canvas items in
an arbitrary shape.</p>
<p>The returned list of items is allowed to be empty, and such is
taken as signal that the callback vetoed the creation of the vertex.</p></dd>
</dl></dd>
<dt><b class="option">-highlight-cmd</b> <i class="arg">command-prefix</i></dt>
<dd><p>The value of this option is a command prefix the editor will invoke
when it has to (un)highlight a vertex.</p>
<p>This option can only be set at construction time.</p>
<p>If not specified it defaults to a command which will re-color
the item to highlight in red (and restores the color for
unhighlighting).</p>
<p>The two signatures of this command prefix are</p>
<dl class="definitions">
<dt><a name="9"><b class="cmd">highlightCmd</b> <b class="method">on</b> <i class="arg">canvas</i> <i class="arg">item</i></a></dt>
<dd><p>This method of the command prefix has to perform whatever is
needed to highlight the vertex the <i class="arg">item</i> is a part of (remember
the note above about points allowed to be constructed from multiple
canvas items).</p>
<p>The result of the command can be anything and will be passed as
is as argument <i class="arg">state</i> to the <b class="method">off</b> method.</p></dd>
<dt><a name="10"><b class="cmd">highlightCmd</b> <b class="method">off</b> <i class="arg">canvas</i> <i class="arg">state</i></a></dt>
<dd><p>This method is invoked to unhighlight a vertex described by the
<i class="arg">state</i>, which is the unchanged result of the <b class="method">on</b> method
of the command prefix. The result of this method is ignored.</p>
<p>Note any interaction between dragging and highlighting of
vertices is handled within the editor, and that the callback bears no
responsibility for doing such.</p></dd>
</dl></dd>
<dt><b class="option">-data-cmd</b> <i class="arg">command-prefix</i></dt>
<dd><p>The value of this option is a command prefix the editor will invoke
when the line was edited in some way (vertex added, removed,
moved). This is how the editor delegates the actual storage of the
line information to an outside object.</p>
<p>This option can only be set at construction time.</p>
<p>If not specified it defaults to an empty string and is ignored
by the editor, i.e. not invoked.</p>
<p>The signature of this command prefix is</p>
<dl class="definitions">
<dt><a name="11"><b class="cmd">dataCmd</b> <i class="arg">editorObj</i> <i class="arg">coordinates</i></a></dt>
<dd><p>This callback is invoked when the line was changed either interactively,
or programmatically.
See instance method <b class="method">add</b> for the latter.</p>
<p>The <i class="arg">editorObj</i> identifies the instance invoking the
callback, whereas <i class="arg">coordinates</i> is a list of vertex locations,
with each location a pair of x- and y-coordinates.</p>
<p>The result of this method is ignored.</p></dd>
</dl></dd>
</dl>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key9">editing</a>, <a href="../../../../index.html#key113">polyline</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/canvas/canvas_equad.html.





































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290

<html><head>
<title>canvas::edit::quadrilateral - Variations on a canvas</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/canvas/canvas_equad.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ canvas::edit::quadrilateral.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">canvas::edit::quadrilateral(n) 0.1 tklib &quot;Variations on a canvas&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>canvas::edit::quadrilateral - Editing a quadrilateral on a canvas</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">Class API</a></li>
<li class="section"><a href="#section3">Instance API</a></li>
<li class="section"><a href="#section4">Options</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">canvas::edit::points <span class="opt">?0.1?</span></b></li>
<li>package require <b class="pkgname">canvas::edit::quadrilateral <span class="opt">?0.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::canvas::edit</b> <b class="method">quadrilateral</b> <i class="arg">objectName</i> <i class="arg">canvas</i> <i class="arg">options</i>...</a></li>
<li><a href="#2"><b class="cmd">objectName</b> <b class="method">destroy</b></a></li>
<li><a href="#3"><b class="cmd">objectName</b> <b class="method">enable</b></a></li>
<li><a href="#4"><b class="cmd">objectName</b> <b class="method">disable</b></a></li>
<li><a href="#5"><b class="cmd">objectName</b> <b class="method">active</b></a></li>
<li><a href="#6"><b class="cmd">objectName</b> <b class="method">add</b> <i class="arg">x</i> <i class="arg">y</i></a></li>
<li><a href="#7"><b class="cmd">objectName</b> <b class="method">clear</b></a></li>
<li><a href="#8"><b class="cmd">createCmd</b> <i class="arg">canvas</i> <i class="arg">x</i> <i class="arg">y</i></a></li>
<li><a href="#9"><b class="cmd">highlightCmd</b> <b class="method">on</b> <i class="arg">canvas</i> <i class="arg">item</i></a></li>
<li><a href="#10"><b class="cmd">highlightCmd</b> <b class="method">off</b> <i class="arg">canvas</i> <i class="arg">state</i></a></li>
<li><a href="#11"><b class="cmd">dataCmd</b> <i class="arg">editorObj</i> <i class="arg">coordinates</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a class whose instances handle the editing of a
quadrilateral on a canvas. Instances can be configured with regard to
the visual appearance (regular, and highlighted) of vertex
markers. Note that instances do not store the edited quadrilateral
themselves, but delegate this to a configurable object.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">Class API</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::canvas::edit</b> <b class="method">quadrilateral</b> <i class="arg">objectName</i> <i class="arg">canvas</i> <i class="arg">options</i>...</a></dt>
<dd><p>This, the class command, creates and configures a new instance of a
quadrilateral editor, named <i class="arg">objectName</i>. The instance will be
connected to the specified <i class="arg">canvas</i> widget.</p>
<p>The result of the command is the fully qualified name of the
instance command.</p>
<p>The options accepted here, and their values, are explained in
the section <span class="sectref"><a href="#section4">Options</a></span>.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">Instance API</a></h2>
<p>Instances of the quadrilateral editors provide the following API:</p>
<dl class="definitions">
<dt><a name="2"><b class="cmd">objectName</b> <b class="method">destroy</b></a></dt>
<dd><p>This method destroys the quadrilateral editor and releases all its
internal resources.</p>
<p>Note that this operation does not destroy the items the editor
managed on the attached canvas, nor the canvas itself.</p>
<p>The result of the method is an empty string.</p></dd>
<dt><a name="3"><b class="cmd">objectName</b> <b class="method">enable</b></a></dt>
<dd><p>This method activates editing of the quadrilateral on the canvas. This
is the default after instance creation. A call is ignored if the
editor is already active.</p>
<p>The result of the method is an empty string.</p>
<p>The complementary method is <b class="method">disable</b>. The interogatory
method for the current state is <b class="method">active</b>.</p></dd>
<dt><a name="4"><b class="cmd">objectName</b> <b class="method">disable</b></a></dt>
<dd><p>This method disables editing of the quadrilateral on the canvas. A call
is ignored if the editor is already disabled.</p>
<p>The result of the method is an empty string.</p>
<p>The complementary method is <b class="method">enable</b>. The interogatory
method for the current state is <b class="method">active</b>.</p></dd>
<dt><a name="5"><b class="cmd">objectName</b> <b class="method">active</b></a></dt>
<dd><p>This method queries the editor state.</p>
<p>The result of the method is a boolean value, <b class="const">true</b> if
the editor is active, and <b class="const">false</b> otherwise, i.e. disabled.</p>
<p>The methods to change the state are <b class="method">enable</b> and
<b class="method">disable</b>.</p></dd>
<dt><a name="6"><b class="cmd">objectName</b> <b class="method">add</b> <i class="arg">x</i> <i class="arg">y</i></a></dt>
<dd><p>This method programmatically adds a vertex at the specified location
to the quadrilateral.</p>
<p>The result of the method is an empty string.</p>
<p>Note that this method goes through the whole set of callbacks
invoked when the user interactively creates a vertex, i.e.
<b class="option">-create-cmd</b>, and, more importantly, <b class="option">-data-cmd</b>.</p>
<p>This is the method through which to load the vertices of a
pre-existing quadrilateral into an editor instance.</p>
<p>Note that at most 4 vertices can be specified, and at least 4
must be specified for the quadrilateral to be complete.</p></dd>
<dt><a name="7"><b class="cmd">objectName</b> <b class="method">clear</b></a></dt>
<dd><p>This method programmatically unset the quadrilateral in the editor.</p>
<p>The result of the method is an empty string.</p>
<p>Note that this method goes through the same callback invoked
when the user interactively removes a vertex, i.e. <b class="option">-data-cmd</b>.</p></dd>
</dl>
</div>
<div id="section4" class="section"><h2><a name="section4">Options</a></h2>
<p>The class command accepts the following options</p>
<dl class="options">
<dt><b class="option">-convex</b> <i class="arg">boolean</i></dt>
<dd><p>The value of this option is a boolean flag. When the flag is set the
editor will accept only convex quadrilaterals and reject all
operations which would result in a violation of convexity.</p>
<p>This option can only be set at construction time.</p>
<p>If not specified it defaults to <b class="const">false</b>, i.e. acceptance
of any quadrilateral.</p></dd>
<dt><b class="option">-tag</b> <i class="arg">string</i></dt>
<dd><p>The value of this option is the name of the canvas tag with which to
identify all items of all quadrilateral managed by the editor.</p>
<p>This option can only be set at construction time.</p>
<p>If not specified it defaults to <b class="const">QUADRILATERAL</b></p></dd>
<dt><b class="option">-create-cmd</b> <i class="arg">command-prefix</i></dt>
<dd><p>The value of this option is a command prefix the editor will invoke
when it has to create a new vertex.</p>
<p>This option can only be set at construction time.</p>
<p>If not specified it defaults to a command which will create a
black-bordered blue circle of radius 3 centered on the location of the
new point.</p>
<p>The signature of this command prefix is</p>
<dl class="definitions">
<dt><a name="8"><b class="cmd">createCmd</b> <i class="arg">canvas</i> <i class="arg">x</i> <i class="arg">y</i></a></dt>
<dd><p>The result of the command prefix <em>must</em> be a list of the canvas
items it created to represent the marker. Note here that the visual
representation of a &quot;vertex&quot; may consist of multiple canvas items in an
arbitrary shape.</p></dd>
</dl></dd>
<dt><b class="option">-highlight-cmd</b> <i class="arg">command-prefix</i></dt>
<dd><p>The value of this option is a command prefix the editor will invoke
when it has to (un)highlight a vertex.</p>
<p>This option can only be set at construction time.</p>
<p>If not specified it defaults to a command which will re-color
the item to highlight in red (and restores the color for
unhighlighting).</p>
<p>The two signatures of this command prefix are</p>
<dl class="definitions">
<dt><a name="9"><b class="cmd">highlightCmd</b> <b class="method">on</b> <i class="arg">canvas</i> <i class="arg">item</i></a></dt>
<dd><p>This method of the command prefix has to perform whatever is
needed to highlight the vertex the <i class="arg">item</i> is a part of (remember
the note above about quadrilateral allowed to be constructed from multiple
canvas items).</p>
<p>The result of the command can be anything and will be passed as
is as argument <i class="arg">state</i> to the <b class="method">off</b> method.</p></dd>
<dt><a name="10"><b class="cmd">highlightCmd</b> <b class="method">off</b> <i class="arg">canvas</i> <i class="arg">state</i></a></dt>
<dd><p>This method is invoked to unhighlight a vertex described by the
<i class="arg">state</i>, which is the unchanged result of the <b class="method">on</b> method
of the command prefix. The result of this method is ignored.</p>
<p>Note any interaction between dragging and highlighting of
quadrilateral is handled within the editor, and that the callback bears no
responsibility for doing such.</p></dd>
</dl></dd>
<dt><b class="option">-data-cmd</b> <i class="arg">command-prefix</i></dt>
<dd><p>The value of this option is a command prefix the editor will invoke
when the quadrilateral was edited in some way. This is how the editor
delegates the actual storage of quadrilateral information to an
outside object.</p>
<p>This option can only be set at construction time.</p>
<p>If not specified it defaults to an empty string and is ignored
by the editor, i.e. not invoked.</p>
<p>The signatures of this command prefix are</p>
<dl class="definitions">
<dt><a name="11"><b class="cmd">dataCmd</b> <i class="arg">editorObj</i> <i class="arg">coordinates</i></a></dt>
<dd><p>This callback is invoked when the quarilateral was changed either
interactively, or programmatically.
See instance method <b class="method">add</b> for the latter.</p>
<p>The <i class="arg">editorObj</i> identifies the instance invoking the
callback, whereas <i class="arg">coordinates</i> is a list of vertex locations,
with each location a pair of x- and y-coordinates.</p>
<p>The result of this method is ignored.</p></dd>
</dl></dd>
</dl>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key12">concave</a>, <a href="../../../../index.html#key13">convex</a>, <a href="../../../../index.html#key9">editing</a>, <a href="../../../../index.html#key11">non-convex</a>, <a href="../../../../index.html#key14">quadrilateral</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/canvas/canvas_highlight.html.









































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196

<html><head>
<title>canvas::highlight - Variations on a canvas</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/canvas/canvas_highlight.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ canvas::highlight.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">canvas::highlight(n) 0.1 tklib &quot;Variations on a canvas&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>canvas::highlight - Manage the highlighting of canvas items or item groups</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">API</a>
<ul>
<li class="subsection"><a href="#subsection1">Highlight callback</a></li>
</ul>
</li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">canvas::highlight <span class="opt">?0.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::canvas::highlight</b> <b class="method">on</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">cmd</i></a></li>
<li><a href="#2"><b class="cmd">::canvas::highlight</b> <b class="method">off</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i></a></li>
<li><a href="#3"><b class="cmd">{*}cmd</b> <b class="method">on</b> <i class="arg">canvas</i> <i class="arg">item</i></a></li>
<li><a href="#4"><b class="cmd">{*}cmd</b> <b class="method">off</b> <i class="arg">canvas</i> <i class="arg">clientdata</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides utility commands for setting up and tearing down
of highlights for canvas items or item groups, the latter identified
by a tag.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">API</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::canvas::highlight</b> <b class="method">on</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">cmd</i></a></dt>
<dd><p>This command sets up a general highlight, with the items of canvas
<i class="arg">canvas</i> to highlight in this manner identified by <i class="arg">tagOrId</i>
and the <i class="arg">cmd</i> prefix providing the implementation, i.e. the how to
perform the highlight.</p>
<p>The signature of the command prefix is described later, in
section <span class="sectref"><a href="#subsection1">Highlight callback</a></span>.</p>
<p>The result of the command is the empty string.</p>
<p>Limitations:</p>
<ol class="enumerated">
<li><p>When a highlight is active no other highlight can be activated.
       This means that nested highlights are not possible.</p></li>
<li><p>The system may break if a highlight is removed from within its
       highlight callback.</p></li>
</ol></dd>
<dt><a name="2"><b class="cmd">::canvas::highlight</b> <b class="method">off</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i></a></dt>
<dd><p>This command removes any highlight set on the items of canvas
<i class="arg">canvas</i> identified by <i class="arg">tagOrId</i>.</p>
<p>The result of the command is the empty string.</p></dd>
</dl>
<div id="subsection1" class="subsection"><h3><a name="subsection1">Highlight callback</a></h3>
<p>The highlight callback is a command prefix invoked in the following
two ways:</p>
<dl class="definitions">
<dt><a name="3"><b class="cmd">{*}cmd</b> <b class="method">on</b> <i class="arg">canvas</i> <i class="arg">item</i></a></dt>
<dd><p>This form is invoked when the mouse has entered (one of) the item(s)
the highlight was set up for. The callback now has to perform any
reconfiguration necessary to highlight the item (group).</p>
<p>The result of the command can be anything. It is stored by the
system as client information and passed unchanged to the un-highlight
callback for its use. In this manner the highlight callback is able to
maintain custom state from highlighting to un-highlighting.</p>
<p>Note that the callback does not have to maintain state, nor
does it have to actually reconfigure the item (group). In the latter
case the callback simply serves as easy enter/leave notification.</p></dd>
<dt><a name="4"><b class="cmd">{*}cmd</b> <b class="method">off</b> <i class="arg">canvas</i> <i class="arg">clientdata</i></a></dt>
<dd><p>This form is invoked when the mouse has left (one of) the item(s) of
the currently active the highlight. The callback now has to perform
any reconfiguration necessary to un-highlight the item (group).</p>
<p>The result of the command must be a boolean value with the
usual value to be <b class="const">true</b>. By returning <b class="const">false</b> instead the
callback can veto the removal of the highlight.</p></dd>
</dl>
</div>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key107">enter callback</a>, <a href="../../../../index.html#key106">highlighting</a>, <a href="../../../../index.html#key105">leave callback</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/canvas/canvas_mvg.html.























































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155

<html><head>
<title>canvas::mvg - Variations on a canvas</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/canvas/canvas_mvg.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; 2010 Wolf-Dieter Busch (http://wiki.tcl.tk/15505)   -- Copyright &copy; 2010 Documentation, Andreas Kupries
   -->
<! -- CVS: $Id$ canvas::mvg.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">canvas::mvg(n) 1.0.1 tklib &quot;Variations on a canvas&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>canvas::mvg - Canvas to ImageMagick MVG vector format</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">API</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">canvas::mvg <span class="opt">?1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::canvas::mvg</b> <i class="arg">pathName</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a command to convert a canvas' contents to
ImageMagick's MVG vector format.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">API</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::canvas::mvg</b> <i class="arg">pathName</i></a></dt>
<dd><p>Dump the contents of the canvas <i class="arg">pathName</i>. The result is a string
in ImageMagick's MVG vector format.</p></dd>
</dl>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key123">graphics</a>, <a href="../../../../index.html#key127">imagemagick</a>, <a href="../../../../index.html#key121">magick vector graphics</a>, <a href="../../../../index.html#key126">mvg</a>, <a href="../../../../index.html#key124">print screen</a>, <a href="../../../../index.html#key125">serialization</a>, <a href="../../../../index.html#key122">vector graphics</a></p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; 2010 Wolf-Dieter Busch (http://wiki.tcl.tk/15505)<br>
Copyright &copy; 2010 Documentation, Andreas Kupries</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/canvas/canvas_snap.html.

































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160

<html><head>
<title>canvas::snap - Variations on a canvas</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/canvas/canvas_snap.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; 2004 George Petasis (http://wiki.tcl.tk/1404)   -- Copyright &copy; 2010 Documentation, Andreas Kupries
   -->
<! -- CVS: $Id$ canvas::snap.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">canvas::snap(n) 1.0.1 tklib &quot;Variations on a canvas&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>canvas::snap - Canvas snapshot to Tk photo image</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">API</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">canvas::snap <span class="opt">?1.0.1?</span></b></li>
<li>package require <b class="pkgname">img::window</b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::canvas::snap</b> <i class="arg">pathName</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a command to take snapshots of arbitrary
canvases.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">API</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::canvas::snap</b> <i class="arg">pathName</i></a></dt>
<dd><p>Takes a snapshot of the canvas <i class="arg">pathName</i>. The result is the name
of a new Tk photo image containing the snapshot.</p>
<p><em>Note</em> that this command has a side-effect. To avoid having white
rectangles where other windows may overlap the canvas this command
forces the toplevel window the canvas is in to the top of the stacking
order.</p></dd>
</dl>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key36">image</a>, <a href="../../../../index.html#key129">photo</a>, <a href="../../../../index.html#key124">print screen</a>, <a href="../../../../index.html#key128">snapshot</a></p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; 2004 George Petasis (http://wiki.tcl.tk/1404)<br>
Copyright &copy; 2010 Documentation, Andreas Kupries</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/canvas/canvas_sqmap.html.





















































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234

<html><head>
<title>canvas::sqmap - Variations on a canvas</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/canvas/canvas_sqmap.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ canvas::sqmap.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">canvas::sqmap(n) 0.3.1 tklib &quot;Variations on a canvas&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>canvas::sqmap - Canvas with map background based on square tiles</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">API</a>
<ul>
<li class="subsection"><a href="#subsection1">Options</a></li>
<li class="subsection"><a href="#subsection2">Methods</a></li>
</ul>
</li>
<li class="section"><a href="#section3">Image ownership</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.4</b></li>
<li>package require <b class="pkgname">Tk 8.4</b></li>
<li>package require <b class="pkgname">snit</b></li>
<li>package require <b class="pkgname">uevent::onidle</b></li>
<li>package require <b class="pkgname">cache::async</b></li>
<li>package require <b class="pkgname">canvas::sqmap <span class="opt">?0.3.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::canvas::sqmap</b> <i class="arg">pathName</i> <span class="opt">?options?</span></a></li>
<li><a href="#2"><i class="arg">canvasName</i> <b class="method">image set</b> <i class="arg">cell</i> <i class="arg">image</i></a></li>
<li><a href="#3"><i class="arg">canvasName</i> <b class="method">image unset</b> <i class="arg">cell</i></a></li>
<li><a href="#4"><i class="arg">canvasName</i> <b class="method">flush</b></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides an extended canvas widget for the display of
maps based on a set of square image tiles. The tiles are the
background of the canvas, with all other canvas items added always
shown in front of them. The number of tiles shown, tile size, and
where to get the images to show are all configurable.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">API</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::canvas::sqmap</b> <i class="arg">pathName</i> <span class="opt">?options?</span></a></dt>
<dd><p>Creates the canvas <i class="arg">pathName</i> and configures it. The new widget
supports all of the options and methods of a regular canvas, plus the
options and methods described below.</p>
<p>The result of the command is <i class="arg">pathName</i>.</p></dd>
</dl>
<div id="subsection1" class="subsection"><h3><a name="subsection1">Options</a></h3>
<dl class="options">
<dt><b class="option">-grid-cell-width</b></dt>
<dd><p>The value for this option is a non-negative integer. It specifies the
width of the cells the background is made up of.</p></dd>
<dt><b class="option">-grid-cell-height</b></dt>
<dd><p>The value for this option is a non-negative integer. It specifies the
height of the cells the background is made up of.</p></dd>
<dt><b class="option">-grid-cell-command</b></dt>
<dd><p>The value for this option is a command prefix. It is invoked whenever
the canvas needs the image for a specific cell of the background, with
two additional arguments, the id of the cell, and a command prefix to
invoke when the image is ready, or known to not exist.</p>
<p>The id of the cell is a 2-element list containing the row and column
number of the cell, in this order. The result command prefix (named
&quot;$result&quot; in the example below) has to be invoked with either two or
three arguments, i.e.</p>
<pre class="example">
    $result set   $cellid $image ; # image is known and ready
    $result unset $cellid        ; # image does not exist
</pre>
<p>This option may be left undefined, i.e. the canvas can operate without
it. In that case the only images shown in grid cells are those
explicitly set with the method <b class="method">image set</b>, see the next
section. All other grid cells will simply be empty.</p></dd>
<dt><b class="option">-viewport-command</b></dt>
<dd><p>This option specifies a command prefix to invoke when the viewport of
the canvas is changed, to allow users keep track of where in the
scroll-region we are at all times. This can be used, for example, to
drive derivate displays, or to keep items in view by moving them as
the viewport moves.</p></dd>
<dt><b class="option">-image-on-load</b></dt>
<dd><p>The value for this option is an image. If specified the image is shown
in a cell while the actual image for that cell is getting loaded
through the callback specified by the <b class="option">-grid-cell-command</b>.</p></dd>
<dt><b class="option">-image-on-unset</b></dt>
<dd><p>The value for this option is an image. If specified the image is shown
in a cell for which the callback specified by the <b class="option">-grid-cell-command</b>
reported that there is no actual image to be shown.</p></dd>
</dl>
</div>
<div id="subsection2" class="subsection"><h3><a name="subsection2">Methods</a></h3>
<dl class="definitions">
<dt><a name="2"><i class="arg">canvasName</i> <b class="method">image set</b> <i class="arg">cell</i> <i class="arg">image</i></a></dt>
<dd><p>Invoking this method places the <i class="arg">image</i> into the specified
<i class="arg">cell</i> of the background. The cell is given as a 2-element list
containing row and column number, in this order.</p>
<p>Note that an image is allowed to be associated with and displayed in
multiple cells of the canvas.</p></dd>
<dt><a name="3"><i class="arg">canvasName</i> <b class="method">image unset</b> <i class="arg">cell</i></a></dt>
<dd><p>Invoking this method declares the specified <i class="arg">cell</i> of the
background as empty, an existing image shown by this cell will be
forgotten.  The cell is given as a 2-element list containing row and
column number, in this order.</p></dd>
<dt><a name="4"><i class="arg">canvasName</i> <b class="method">flush</b></a></dt>
<dd><p>Invoking this method forces the canvas to completely reload the images
for all cells. Do not use this method if the canvas is operated
without a <b class="option">-grid-cell-command</b>, as in that case the canvas will
simply forget all images without being able to reload them.</p></dd>
</dl>
</div>
</div>
<div id="section3" class="section"><h2><a name="section3">Image ownership</a></h2>
<p>Note that the canvas <em>does not</em> take ownership of the images it
shows in the background. In other words, when we say that the canvas
forgets an image this means only that the association between a grid
cell and shown image is broken. The image is <em>not</em>
deleted. Managing the lifecycle of the images shown by the canvas is
responsibility of the user of the canvas.</p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key32">cell</a>, <a href="../../../../index.html#key33">grid</a>, <a href="../../../../index.html#key36">image</a>, <a href="../../../../index.html#key35">map</a>, <a href="../../../../index.html#key37">square map</a>, <a href="../../../../index.html#key34">tile</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/canvas/canvas_tags.html.













































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182

<html><head>
<title>canvas::tag - Variations on a canvas</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/canvas/canvas_tags.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ canvas::tag.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">canvas::tag(n) 0.1 tklib &quot;Variations on a canvas&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>canvas::tag - Easier management of the tags on canvas items or item groups</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">API</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">canvas::tag <span class="opt">?0.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::canvas::tag</b> <b class="method">append</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">tag</i>...</a></li>
<li><a href="#2"><b class="cmd">::canvas::tag</b> <b class="method">prepend</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">tag</i>...</a></li>
<li><a href="#3"><b class="cmd">::canvas::tag</b> <b class="method">append</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">index</i> <i class="arg">tag</i>...</a></li>
<li><a href="#4"><b class="cmd">::canvas::tag</b> <b class="method">remove</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">tag</i>...</a></li>
<li><a href="#5"><b class="cmd">::canvas::tag</b> <b class="method">match</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">pattern</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides utility commands for easier management of the
tag lists associated with canvas items or item groups.</p>
<p>The problem with the existing canvas API is that a tag list can
only be set as a whole, making adding and removing of tags from such
lists relatively complex operations reading the current tag list,
modifying it, and then writing the changed list back.</p>
<p>The commands provided by this package hide all this complexity
from the user.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">API</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::canvas::tag</b> <b class="method">append</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">tag</i>...</a></dt>
<dd><p>This command adds the tags <i class="arg">tag</i>... to the tag list for the items
identified by the <i class="arg">tagOrId</i> in the <i class="arg">canvas</i> widget. The new
tags are added at the end of the list.</p>
<p>The result of the command is the empty string.</p></dd>
<dt><a name="2"><b class="cmd">::canvas::tag</b> <b class="method">prepend</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">tag</i>...</a></dt>
<dd><p>This command adds the tags <i class="arg">tag</i>... to the tag list for the items
identified by the <i class="arg">tagOrId</i> in the <i class="arg">canvas</i> widget. The new
tags are added at the beginning of the list.</p>
<p>The result of the command is the empty string.</p></dd>
<dt><a name="3"><b class="cmd">::canvas::tag</b> <b class="method">append</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">index</i> <i class="arg">tag</i>...</a></dt>
<dd><p>This command adds the tags <i class="arg">tag</i>... to the tag list for the items
identified by the <i class="arg">tagOrId</i> in the <i class="arg">canvas</i> widget. The new
tags are inserted before the element at <i class="arg">index</i>.</p>
<p><i class="arg">index</i> <b class="const">0</b> refers to the beginning of the list.</p>
<p><i class="arg">index</i> <b class="const">end</b> refers to after the end of the list.</p>
<p>The result of the command is the empty string.</p></dd>
<dt><a name="4"><b class="cmd">::canvas::tag</b> <b class="method">remove</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">tag</i>...</a></dt>
<dd><p>This command removes the named tags <i class="arg">tag</i>... from the tag list for the items
identified by the <i class="arg">tagOrId</i> in the <i class="arg">canvas</i> widget.</p>
<p>The result of the command is the empty string.</p></dd>
<dt><a name="5"><b class="cmd">::canvas::tag</b> <b class="method">match</b> <i class="arg">canvas</i> <i class="arg">tagOrId</i> <i class="arg">pattern</i></a></dt>
<dd><p>This command finds all tags for the items identified by the
<i class="arg">tagOrId</i> in the <i class="arg">canvas</i> widget which match the glob
<i class="arg">pattern</i>.</p>
<p>The result of the command is a list of the matching tags. Which
may be empty.</p></dd>
</dl>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key101">append tag</a>, <a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key102">insert tag</a>, <a href="../../../../index.html#key103">remove tag</a>, <a href="../../../../index.html#key104">tags</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/canvas/canvas_trlines.html.















































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183

<html><head>
<title>canvas::track::lines - Variations on a canvas</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/canvas/canvas_trlines.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ canvas::track::lines.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">canvas::track::lines(n) 0.1 tklib &quot;Variations on a canvas&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>canvas::track::lines - Manage a group of rubber band lines</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">Class API</a></li>
<li class="section"><a href="#section3">Instance API</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">canvas::tag <span class="opt">?0.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::canvas::track</b> <b class="method">lines</b> <i class="arg">objectName</i> <i class="arg">canvas</i></a></li>
<li><a href="#2"><b class="cmd">objectName</b> <b class="method">destroy</b></a></li>
<li><a href="#3"><b class="cmd">objectName</b> <b class="method">start</b> <i class="arg">current</i> <i class="arg">p</i>...</a></li>
<li><a href="#4"><b class="cmd">objectName</b> <b class="method">move</b> <i class="arg">current</i></a></li>
<li><a href="#5"><b class="cmd">objectName</b> <b class="method">done</b></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a utility class managing the drawing of set of semi-crosshair (rubberband) lines.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">Class API</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::canvas::track</b> <b class="method">lines</b> <i class="arg">objectName</i> <i class="arg">canvas</i></a></dt>
<dd><p>This, the class command, creates and configures a new instance of the
tracker, named <i class="arg">objectName</i>. The instance will be
connected to the specified <i class="arg">canvas</i> widget.</p>
<p>The result of the command is the fully qualified name of the
instance command.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">Instance API</a></h2>
<p>Instances of this class provide the following API:</p>
<dl class="definitions">
<dt><a name="2"><b class="cmd">objectName</b> <b class="method">destroy</b></a></dt>
<dd><p>This method destroys the instance and releases all its
internal resources.</p>
<p>This operation does destroy the items representing the
tracked lines. It does not destroy the attached canvas.</p>
<p>The result of the method is an empty string.</p></dd>
<dt><a name="3"><b class="cmd">objectName</b> <b class="method">start</b> <i class="arg">current</i> <i class="arg">p</i>...</a></dt>
<dd><p>This method starts the tracking of a set of lines, one line per
point <i class="arg">p</i>, which specifies the destination end-point of each
line. All lines will have <i class="arg">current</i> as a common end-point.</p>
<p>Note that a previously tracked set of lines is removed.</p>
<p>The result of the method is an empty string.</p>
<p>Each point is specified through a 2-element list containing its
x- and y-coordinates, in this order.</p></dd>
<dt><a name="4"><b class="cmd">objectName</b> <b class="method">move</b> <i class="arg">current</i></a></dt>
<dd><p>This method updates the shared end-point of all rubberbands and redraws
them.</p>
<p>The result of the method is an empty string.</p>
<p>The point is specified through a 2-element list containing its
x- and y-coordinates, in this order.</p></dd>
<dt><a name="5"><b class="cmd">objectName</b> <b class="method">done</b></a></dt>
<dd><p>This method ends the tracking of the current set of lines and removes
them from the canvas.</p></dd>
</dl>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key110">crosshair</a>, <a href="../../../../index.html#key111">rubberband</a>, <a href="../../../../index.html#key112">tracking</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/canvas/canvas_zoom.html.













































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182

<html><head>
<title>canvas::zoom - Variations on a canvas</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/canvas/canvas_zoom.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ canvas::zoom.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">canvas::zoom(n) 0.2.1 tklib &quot;Variations on a canvas&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>canvas::zoom - Zoom control for canvas::sqmap</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">API</a>
<ul>
<li class="subsection"><a href="#subsection1">Options</a></li>
<li class="subsection"><a href="#subsection2">Methods</a></li>
</ul>
</li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.4</b></li>
<li>package require <b class="pkgname">Tk 8.4</b></li>
<li>package require <b class="pkgname">snit</b></li>
<li>package require <b class="pkgname">uevent::onidle</b></li>
<li>package require <b class="pkgname">canvas::zoom <span class="opt">?0.2.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::canvas::zoom</b> <i class="arg">pathName</i> <span class="opt">?options?</span></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a widget to enable the user of a map display to
control the zoom level.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">API</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::canvas::zoom</b> <i class="arg">pathName</i> <span class="opt">?options?</span></a></dt>
<dd><p>Creates the zoom control widget <i class="arg">pathName</i> and configures it. The
methods and options supported by the new widget are described in the
following sections.</p>
<p>The result of the command is <i class="arg">pathName</i>.</p></dd>
</dl>
<div id="subsection1" class="subsection"><h3><a name="subsection1">Options</a></h3>
<dl class="options">
<dt><b class="option">-orient</b></dt>
<dd><p>The value for this option is either <b class="const">vertical</b>, or
<b class="const">horizontal</b>, specifying the orientation of the major axis of
the widget. The default is <b class="const">vertical</b>.</p></dd>
<dt><b class="option">-levels</b></dt>
<dd><p>The value for this option is a non-negative integer. It specifies the
number of zoom levels to support.</p></dd>
<dt><b class="option">-variable</b></dt>
<dd><p>The value for this option is the name of a global or namespaced
variable which is connected with the widget. changes to the zoom level
made the widget are propagated to this variable, and in turn changes
to the variable are imported into the widget.</p></dd>
<dt><b class="option">-command</b></dt>
<dd><p>This option specifies a command prefix. This callback will be invoked
whenever the zoom level is changed. It is called with two additional
arguments, the zoom control widget, and the new zoom level, in this
order.</p></dd>
</dl>
</div>
<div id="subsection2" class="subsection"><h3><a name="subsection2">Methods</a></h3>
<p>The widget supports no methods beyond the standard (<b class="method">configure</b>,
<b class="method">cget</b>, etc.).</p>
</div>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key137">zoom</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/chatwidget/chatwidget.html.



















































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233

<html><head>
<title>chatwidget - Composite widget for chat applications</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/chatwidget/chatwidget.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ chatwidget.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">chatwidget(n) 1.0.0 tklib &quot;Composite widget for chat applications&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>chatwidget - Provides a multi-paned view suitable for display of chat room or irc channel information</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">COMMANDS</a></li>
<li class="section"><a href="#section3">WIDGET COMMANDS</a></li>
<li class="section"><a href="#section4">EXAMPLE</a></li>
<li class="section"><a href="#see-also">See Also</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">chatwidget <span class="opt">?1.0.0?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::chatwidget::chatwidget</b> <i class="arg">path</i> <span class="opt">?<i class="arg">options</i>?</span></a></li>
<li><a href="#2"><b class="cmd">$widget</b> topic <i class="arg">command</i> <i class="arg">args</i></a></li>
<li><a href="#3"><b class="cmd">$widget</b> name <i class="arg">nick</i> <i class="arg">args</i></a></li>
<li><a href="#4"><b class="cmd">$widget</b> message <i class="arg">text</i> <i class="arg">args</i></a></li>
<li><a href="#5"><b class="cmd">$widget</b> hook <i class="arg">command</i> <i class="arg">args</i></a></li>
<li><a href="#6"><b class="cmd">$widget</b> names <i class="arg">args</i></a></li>
<li><a href="#7"><b class="cmd">$widget</b> entry <i class="arg">args</i></a></li>
<li><a href="#8"><b class="cmd">$widget</b> chat <i class="arg">args</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This is a composite widget designed to simplify the construction of
chat applications. The widget contains display areas for chat
messages, user names and topic and an entry area. It automatically
handles colourization of messages per nick and manages nick
completion. A system of hooks permit the application author to adjust
display features. The main chat display area may be split for use
displaying history or for searching.</p>
<p>The widget is made up of a number of text widget and panedwindow
widgets so that the size of each part of the display may be adjusted
by the user. All the text widgets may be accessed via widget
passthrough commands if fine adjustment is required. The topic and
names sections can also be hidden if desired.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">COMMANDS</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::chatwidget::chatwidget</b> <i class="arg">path</i> <span class="opt">?<i class="arg">options</i>?</span></a></dt>
<dd><p>Create a new chatwidget using the Tk window id <i class="arg">path</i>. Any options
provided are currently passed directly to the main chat text widget.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">WIDGET COMMANDS</a></h2>
<dl class="definitions">
<dt><a name="2"><b class="cmd">$widget</b> topic <i class="arg">command</i> <i class="arg">args</i></a></dt>
<dd><p>The chat widget can display a topic string, for instance the topic or
name given to a multi-user chatroom or irc channel.</p>
<dl class="commands">
<dt><b class="cmd">show</b></dt>
<dd><p>Enable display of the topic.</p></dd>
<dt><b class="cmd">hide</b></dt>
<dd><p>Disable display of the topic</p></dd>
<dt><b class="cmd">set <i class="arg">topic</i></b></dt>
<dd><p>Set the topic text to <i class="arg">topic</i>.</p></dd>
</dl></dd>
<dt><a name="3"><b class="cmd">$widget</b> name <i class="arg">nick</i> <i class="arg">args</i></a></dt>
<dd><p>Control the names and tags associated with names.</p>
<dl class="commands">
<dt><b class="cmd">list <span class="opt">?<i class="arg">-full</i>?</span></b></dt>
<dd><p>Returns a list of all the user names from the names view. If <span class="opt">?-full?</span> is given then the list returned is a list of lists where each
sublist is made up of the nick followed by any options that have been
set on this nick entry. This may be used to examine any application
specific options that may be applied to a nick when using the 
<b class="cmd">add</b> command.</p></dd>
<dt><b class="cmd">add <i class="arg">nick</i> <span class="opt">?<i class="arg">options</i>?</span></b></dt>
<dd></dd>
<dt><b class="cmd">delete <i class="arg">nick</i></b></dt>
<dd></dd>
</dl></dd>
<dt><a name="4"><b class="cmd">$widget</b> message <i class="arg">text</i> <i class="arg">args</i></a></dt>
<dd><p>Add messages to the display. options are -nick, -time, -type, -mark
-tags</p></dd>
<dt><a name="5"><b class="cmd">$widget</b> hook <i class="arg">command</i> <i class="arg">args</i></a></dt>
<dd><p>Manage hooks. add (message, post names_group, names_nick, chatstate), remove, run</p></dd>
<dt><a name="6"><b class="cmd">$widget</b> names <i class="arg">args</i></a></dt>
<dd><p>Passthrough to the name display text widget. See the <b class="cmd"><a href="../../../../index.html#key7">text</a></b> widget manual
for all available commands. The chatwidget provides two additional
commands <b class="cmd">show</b> and <b class="cmd">hide</b> which are used to control the
display of this element in the widget.</p></dd>
<dt><a name="7"><b class="cmd">$widget</b> entry <i class="arg">args</i></a></dt>
<dd><p>Passthrough to the entry text widget. See the <b class="cmd"><a href="../../../../index.html#key7">text</a></b> widget manual
for all available commands.</p></dd>
<dt><a name="8"><b class="cmd">$widget</b> chat <i class="arg">args</i></a></dt>
<dd><p>Passthrough to the chat text widget. See the <b class="cmd"><a href="../../../../index.html#key7">text</a></b> widget manual for 
all available commands.</p></dd>
</dl>
</div>
<div id="section4" class="section"><h2><a name="section4">EXAMPLE</a></h2>
<pre class="example">
chatwidget::chatwidget .chat
proc speak {w msg} {$w message $msg -nick user}
.chat hook add post [list speak .chat]
pack .chat -side top -fill both -expand 1
.chat topic show
.chat topic set &quot;Chat widget demo&quot;
.chat name add &quot;admin&quot; -group admin
.chat name add &quot;user&quot; -group users -color tomato
.chat message &quot;Chatwidget ready&quot; -type system
.chat message &quot;Hello, user&quot; -nick admin
.chat message &quot;Hello, admin&quot; -nick user
</pre>
<p>A more extensive example is available by examining the code for the picoirc
program in the tclapps repository which ties the tcllib <b class="package">picoirc</b> package to this
<b class="package">chatwidget</b> package to create a simple irc client.</p>
</div>
<div id="see-also" class="section"><h2><a name="see-also">See Also</a></h2>
<p>text(n)</p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key28">chat</a>, <a href="../../../../index.html#key27">chatwidget</a>, <a href="../../../../index.html#key30">composite widget</a>, <a href="../../../../index.html#key29">irc</a>, <a href="../../../../index.html#key31">mega-widget</a>, <a href="../../../../index.html#key1">widget</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/controlwidget/controlwidget.html.



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521

<html><head>
<title>controlwidget - controlwidget</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/controlwidget/controlwidget.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; 2010 Ron Fox &lt;rfox@...&gt;   -- Copyright &copy; 2010 Gerhard Reithofer &lt;...@...&gt;   -- Copyright &copy; 2010 Marco Maggi &lt;...@...&gt;   -- Copyright &copy; 2010 Arjen Markus &lt;arjenmarkus@users.sourceforge.net&gt;
   -->
<! -- CVS: $Id$ controlwidget.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">controlwidget(n) 0.1 tklib &quot;controlwidget&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>controlwidget - Collection of widgets for displaying and controlling numerical values</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">TYPES OF WIDGETS</a></li>
<li class="section"><a href="#section3">COMMANDS</a></li>
<li class="section"><a href="#section4">ACKNOWLEDGMENTS</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl <span class="opt">?8.5?</span></b></li>
<li>package require <b class="pkgname">Tk <span class="opt">?8.5?</span></b></li>
<li>package require <b class="pkgname">snit <span class="opt">?2.0?</span></b></li>
<li>package require <b class="pkgname">controlwidget <span class="opt">?0.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::controlwidget::meter</b> <i class="arg">w</i> <i class="arg">args</i></a></li>
<li><a href="#2"><b class="cmd">::controlwidget::slider</b> <i class="arg">w</i> <i class="arg">args</i></a></li>
<li><a href="#3"><b class="cmd">::controlwidget::equalizerBar</b> <i class="arg">w</i> <i class="arg">args</i></a></li>
<li><a href="#4"><b class="cmd">::controlwidget::thermometer</b> <i class="arg">w</i> <i class="arg">args</i></a></li>
<li><a href="#5"><b class="cmd">::controlwidget::voltmeter</b> <i class="arg">w</i> <i class="arg">args</i></a></li>
<li><a href="#6"><b class="cmd">::controlwidget::tachometer</b> <i class="arg">w</i> <i class="arg">args</i></a></li>
<li><a href="#7"><b class="cmd">::controlwidget::rdial</b> <i class="arg">w</i> <i class="arg">args</i></a></li>
<li><a href="#8"><b class="cmd">$widget</b> get</a></li>
<li><a href="#9"><b class="cmd">$widget</b> set <i class="arg">value</i></a></li>
<li><a href="#10"><b class="cmd">::controlwidget::led</b> <i class="arg">w</i> <i class="arg">args</i></a></li>
<li><a href="#11"><b class="cmd">::controlwidget::radioMatrix</b> <i class="arg">w</i> <i class="arg">args</i></a></li>
<li><a href="#12"><b class="cmd">$led</b> on</a></li>
<li><a href="#13"><b class="cmd">$led</b> off</a></li>
<li><a href="#14"><b class="cmd">$led</b> setstate <i class="arg">state</i></a></li>
<li><a href="#15"><b class="cmd">$matrix</b> get</a></li>
<li><a href="#16"><b class="cmd">$matrix</b> set <i class="arg">index</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>The controlwidget package focuses on the display and interactive control of numerical values.
It mimicks several of the meters and controls found in laboratory settings but also
daily life: volt meters, equalizers and tachometers to name a few. They can be seen as alternatives
for the <em>scale widget</em>.</p>
<p><em>Note:</em> The package has not sofar been tested extensively, and that may result in
an unexpected appearance if you use sizes that are different than the defaults. Also
not all options for the coloring of the various parts and fonts and so on have been tested, so that
may be another source of bugs.</p>
<p>A last note: some parts have not been included in any option, most notably the colors of
parts that require lighter and darker shades to cooperate.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">TYPES OF WIDGETS</a></h2>
<p>The package distinguishes several typed of widgets:</p>
<ul class="itemized">
<li><p>Vertical meters: the value of the variable is translated into a vertical position, like with
the coloured bars you find on your stereo installation.</p></li>
<li><p>Angle displays: the value of the variable is related to the angle of a needle, like with tachometers.</p></li>
<li><p>Interactive widgets: most widgets allow you to change the value of the variable by pressing the mouse button
on the needle and shifting it up and down or left and right.</p></li>
<li><p>Non-interactive widgets: some widgets, like the thermometer widget, do not allow such interaction.</p></li>
<li><p>Logical or choice widgets: some widgets display the values as either on/off (or true/false) or as
one of a set of discrete choices.</p></li>
</ul>
<p>All widgets have in common, however, that you can connect them to a variable and that changing the variable
changes the display. Forthermore, all widgets have the set and get methods to interact with the value that
the widget displays (whether that is stored in a global variable or not).</p>
<p>They also have in common that their appearance and behaviour is determined by one or more options that
you can set at creation time and often later on as well. The widgets are all based on the <em>snit</em>
package, so that the methods <b class="method">configure</b> and <b class="method">cget</b> are available to set and get these options.</p>
</div>
<div id="section3" class="section"><h2><a name="section3">COMMANDS</a></h2>
<p>Currently the package contains these widgets of the <em>vertical meter</em> type:</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::controlwidget::meter</b> <i class="arg">w</i> <i class="arg">args</i></a></dt>
<dd><p>Create a vertical meter consisting of an axis and a moveable arrow.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the widget to be created.</p></dd>
<dt>arguments <i class="arg">args</i> (in)</dt>
<dd><p>List of key-value pairs, controlling the appearance and behaviour of the widget:</p>
<dl class="options">
<dt><b class="option">variable</b> name</dt>
<dd><p>Name of the variable to be associated with the meter</p></dd>
<dt><b class="option">background</b> color</dt>
<dd><p>Background color for the widget</p></dd>
<dt><b class="option">height</b> pixels</dt>
<dd><p>Height of the widget</p></dd>
<dt><b class="option">width</b> pixels</dt>
<dd><p>Width of the widget</p></dd>
<dt><b class="option">arrowthickness</b> pixels</dt>
<dd><p>Thickness of the displayed arrow in pixels</p></dd>
<dt><b class="option">arrowcolor</b> color</dt>
<dd><p>Color of the displayed arrow</p></dd>
<dt><b class="option">readonly</b> boolean</dt>
<dd><p>Whether the arrow can be moved interactively or not</p></dd>
</dl></dd>
</dl></dd>
<dt><a name="2"><b class="cmd">::controlwidget::slider</b> <i class="arg">w</i> <i class="arg">args</i></a></dt>
<dd><p>Create a widget containing one or more vertical sliders and an axis. You can shift the slider handles
interactively via the mouse.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the widget to be created.</p></dd>
<dt>arguments <i class="arg">args</i> (in)</dt>
<dd><p>List of key-value pairs, controlling the appearance and behaviour of the widget:</p>
<dl class="options">
<dt><b class="option">variable</b> name</dt>
<dd><p>Name of the (list) variable to be associated with the widget</p></dd>
<dt><b class="option">number</b> integer</dt>
<dd><p>Number of sliders in the widget</p></dd>
<dt><b class="option">background</b> color</dt>
<dd><p>Background color for the widget</p></dd>
<dt><b class="option">height</b> pixels</dt>
<dd><p>Height of the widget</p></dd>
<dt><b class="option">width</b> pixels</dt>
<dd><p>Width of the widget</p></dd>
<dt><b class="option">sliderthickness</b> pixels</dt>
<dd><p>Thickness of the slider handles</p></dd>
<dt><b class="option">sliderwidth</b> color</dt>
<dd><p>Width of the slider handles</p></dd>
<dt><b class="option">troughwidth</b> color</dt>
<dd><p>Width of the troughs holding the sliders</p></dd>
</dl></dd>
</dl></dd>
<dt><a name="3"><b class="cmd">::controlwidget::equalizerBar</b> <i class="arg">w</i> <i class="arg">args</i></a></dt>
<dd><p>Create a widget containing one or more vertical bars resembling those found on hifi graphical equalizers.
Note that it is a read-only widget.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the widget to be created.</p></dd>
<dt>arguments <i class="arg">args</i> (in)</dt>
<dd><p>List of key-value pairs, controlling the appearance and behaviour of the widget:</p>
<dl class="options">
<dt><b class="option">variable</b> name</dt>
<dd><p>Name of the (list) variable to be associated with the widget</p></dd>
<dt><b class="option">number</b> integer</dt>
<dd><p>Number of bars in the widget</p></dd>
<dt><b class="option">background</b> color</dt>
<dd><p>Background color for the widget</p></dd>
<dt><b class="option">height</b> pixels</dt>
<dd><p>Height of the widget</p></dd>
<dt><b class="option">width</b> pixels</dt>
<dd><p>Width of the widget</p></dd>
<dt><b class="option">barwidth</b> pixels</dt>
<dd><p>Width of the bars</p></dd>
<dt><b class="option">segments</b> integer</dt>
<dd><p>Number of segments the bars are divided in</p></dd>
<dt><b class="option">safecolor</b> color</dt>
<dd><p>Color for values lower than the warning level</p></dd>
<dt><b class="option">warningcolor</b> color</dt>
<dd><p>Color for values greater than the warning level</p></dd>
<dt><b class="option">warninglevel</b> double</dt>
<dd><p>Threshold value, determines at what level the color changes</p></dd>
</dl></dd>
</dl></dd>
<dt><a name="4"><b class="cmd">::controlwidget::thermometer</b> <i class="arg">w</i> <i class="arg">args</i></a></dt>
<dd><p>Create a thermometer widget (read-only)</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the widget to be created.</p></dd>
<dt>arguments <i class="arg">args</i> (in)</dt>
<dd><p>List of key-value pairs, controlling the appearance and behaviour of the widget:</p>
<dl class="options">
<dt><b class="option">variable</b> name</dt>
<dd><p>Name of the (list) variable to be associated with the widget</p></dd>
<dt><b class="option">background</b> color</dt>
<dd><p>Background color for the widget</p></dd>
<dt><b class="option">height</b> pixels</dt>
<dd><p>Height of the widget</p></dd>
<dt><b class="option">width</b> pixels</dt>
<dd><p>Width of the widget</p></dd>
<dt><b class="option">linethickness</b> pixels</dt>
<dd><p>Thickness of the line representing the &quot;temperature&quot;</p></dd>
<dt><b class="option">linecolor</b> color</dt>
<dd><p>Color of the line</p></dd>
</dl></dd>
</dl></dd>
</dl>
<p>These widgets all use a vertical axis and have the following options in common for configuring the
axis:</p>
<dl class="options">
<dt><b class="option">axisformat</b> string</dt>
<dd><p>Format string for formatting the numbers along the axis</p></dd>
<dt><b class="option">axisfont</b> string</dt>
<dd><p>Name of the font to be used for the numbers</p></dd>
<dt><b class="option">axiscolor</b> color</dt>
<dd><p>Color of the axis (including the numbers)</p></dd>
<dt><b class="option">from</b> color</dt>
<dd><p>Lower value for the axis</p></dd>
<dt><b class="option">to</b> color</dt>
<dd><p>Upper value for the axis</p></dd>
<dt><b class="option">majorticks</b> integer</dt>
<dd><p>Number of major tickmarks to draw (each is labelled)</p></dd>
<dt><b class="option">minorticks</b> integer</dt>
<dd><p>Number of minor tickmarks to draw between two major tickmarks</p></dd>
<dt><b class="option">log</b> boolean</dt>
<dd><p>Use a logarithmic axis (true) or a linear axis (false)</p></dd>
</dl>
<p>The package contains the following widget based on angle displays:</p>
<dl class="definitions">
<dt><a name="5"><b class="cmd">::controlwidget::voltmeter</b> <i class="arg">w</i> <i class="arg">args</i></a></dt>
<dd><p>Create a voltmeter-like widget.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the widget to be created.</p></dd>
<dt>arguments <i class="arg">args</i> (in)</dt>
<dd><p>List of key-value pairs, controlling the appearance and behaviour of the widget:</p>
<dl class="options">
<dt><b class="option">variable</b> name</dt>
<dd><p>Name of the variable to be associated with the meter</p></dd>
<dt><b class="option">value</b> value</dt>
<dd><p>Value for the meter (if not associated with a variable)</p></dd>
<dt><b class="option">min</b> value</dt>
<dd><p>The minimum value for data in the display</p></dd>
<dt><b class="option">max</b> value</dt>
<dd><p>The maximum value for data in the display</p></dd>
<dt><b class="option">labels</b> list</dt>
<dd><p>The labels to be shown along the scale. (These are simply considered texts, so no
relation with the minimum and maximum perse)</p></dd>
<dt><b class="option">title</b> string</dt>
<dd><p>String to be shown below the dial</p></dd>
<dt><b class="option">width</b> pixels</dt>
<dd><p>The width of the widget</p></dd>
<dt><b class="option">height</b> pixels</dt>
<dd><p>The height of the widget</p></dd>
<dt><b class="option">borderwidth</b> pixels</dt>
<dd><p>The width of the border surrounding the entire widget</p></dd>
<dt><b class="option">relief</b> string</dt>
<dd><p>The relief of the border surrounding the entire widget</p></dd>
<dt><b class="option">highlightthickness</b> pixels</dt>
<dd><p>The width of the border to indicate the widget has keyboard focus</p></dd>
<dt><b class="option">labelfont</b> fontname</dt>
<dd><p>Font of the labels to the scale</p></dd>
<dt><b class="option">titlefont</b> fontname</dt>
<dd><p>Font of the title below the dial</p></dd>
<dt><b class="option">dialcolor</b> color</dt>
<dd><p>Color of the dial holding the needle</p></dd>
<dt><b class="option">needlecolor</b> color</dt>
<dd><p>Color of the needle</p></dd>
<dt><b class="option">scalecolor</b> color</dt>
<dd><p>Color of the scale (arc and tickmarks)</p></dd>
<dt><b class="option">labelcolor</b> color</dt>
<dd><p>Color of the labels to the scale</p></dd>
<dt><b class="option">titlecolor</b> color</dt>
<dd><p>Color of the title below the dial</p></dd>
</dl></dd>
</dl></dd>
<dt><a name="6"><b class="cmd">::controlwidget::tachometer</b> <i class="arg">w</i> <i class="arg">args</i></a></dt>
<dd><p>Create a tachometer-like widget.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the widget to be created.</p></dd>
<dt>arguments <i class="arg">args</i> (in)</dt>
<dd><p>List of key-value pairs, controlling the appearance and behaviour of the widget. In addition
to the ones given for the voltmeter widget:</p>
<dl class="options">
<dt><b class="option">variable</b> name</dt>
<dd><p>Name of the variable to be associated with the meter</p></dd>
<dt><b class="option">value</b> value</dt>
<dd><p>Value for the meter (if not associated with a variable)</p></dd>
<dt><b class="option">dangerlevel</b> value</dt>
<dd><p>Level above which values are indicated with a different color</p></dd>
<dt><b class="option">dangercolor</b> color</dt>
<dd><p>Color for the values above the &quot;danger level&quot;</p></dd>
<dt><b class="option">dangerwidth</b> pixels</dt>
<dd><p>Width for the colored band indicating the &quot;danger level&quot;</p></dd>
<dt><b class="option">pincolor</b> color</dt>
<dd><p>Color for the needle and the pin</p></dd>
</dl></dd>
</dl></dd>
<dt><a name="7"><b class="cmd">::controlwidget::rdial</b> <i class="arg">w</i> <i class="arg">args</i></a></dt>
<dd><p>Create a rotating dial. You can drag the dial to change the value. With the shift button
depressed the value changes slowly, with the control button depressed it changes fast.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the widget to be created.</p></dd>
<dt>arguments <i class="arg">args</i> (in)</dt>
<dd><p>List of key-value pairs, controlling the appearance and behaviour of the widget:</p>
<dl class="options">
<dt><b class="option">variable</b> name</dt>
<dd><p>Name of the variable to be associated with the dial</p></dd>
<dt><b class="option">value</b> value</dt>
<dd><p>Value for the dial (if not associated with a variable)</p></dd>
<dt><b class="option">orient</b> string</dt>
<dd><p>Whether a horizontal disk/dial is required (&quot;horizontal&quot;) or a vertical one (&quot;vertical&quot;)</p></dd>
<dt><b class="option">step</b> value</dt>
<dd><p>Initial step for incrementing or decrementing the value</p></dd>
<dt><b class="option">slow</b> value</dt>
<dd><p>Factor on the step size for incrementing or decrementing the value slowly</p></dd>
<dt><b class="option">fast</b> value</dt>
<dd><p>Factor on the step size for incrementing or decrementing the value fast</p></dd>
<dt><b class="option">scale</b> value</dt>
<dd><p>Scale value to be applied to the actual value</p></dd>
<dt><b class="option">callback</b> command</dt>
<dd><p>Command to be called when the value changes</p></dd>
<dt><b class="option">width</b> pixels</dt>
<dd><p>The width of the widget</p></dd>
<dt><b class="option">height</b> pixels</dt>
<dd><p>The height of the widget</p></dd>
<dt><b class="option">background</b> color</dt>
<dd><p>The background color of the widget (coloring of the disk/dial)</p></dd>
<dt><b class="option">foreground</b> color</dt>
<dd><p>The foreground color of the widget (the marker lines)</p></dd>
</dl></dd>
</dl></dd>
</dl>
<p>All these widgets have the following methods:</p>
<dl class="definitions">
<dt><a name="8"><b class="cmd">$widget</b> get</a></dt>
<dd><p>Return the current value or values shown in the widget</p></dd>
<dt><a name="9"><b class="cmd">$widget</b> set <i class="arg">value</i></a></dt>
<dd><p>Reset the value or values shown in the widget. If the widget is associated with
a variable, that variable is set as well.</p>
<dl class="arguments">
<dt>value <i class="arg">double/list</i></dt>
<dd><p>New value or values for the widget</p></dd>
</dl></dd>
</dl>
<p>Two further widgets are available, meant to display logical values:</p>
<dl class="definitions">
<dt><a name="10"><b class="cmd">::controlwidget::led</b> <i class="arg">w</i> <i class="arg">args</i></a></dt>
<dd><p>Create a LED-like widget.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the widget to be created.</p></dd>
<dt>arguments <i class="arg">args</i> (in)</dt>
<dd><p>List of key-value pairs, controlling the appearance and behaviour of the widget. In addition
to the ones given for the voltmeter widget:</p>
<dl class="options">
<dt><b class="option">variable</b> name</dt>
<dd><p>Name of the variable to be associated with the LED</p></dd>
<dt><b class="option">size</b> pixels</dt>
<dd><p>Diameter of the LED widget</p></dd>
<dt><b class="option">on</b> color</dt>
<dd><p>Color to use for the &quot;on&quot; state</p></dd>
<dt><b class="option">off</b> color</dt>
<dd><p>Color to use for the &quot;off&quot; state</p></dd>
</dl></dd>
</dl></dd>
<dt><a name="11"><b class="cmd">::controlwidget::radioMatrix</b> <i class="arg">w</i> <i class="arg">args</i></a></dt>
<dd><p>Create a matrix of radio buttons that behaves as a single widget.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the widget to be created.</p></dd>
<dt>arguments <i class="arg">args</i> (in)</dt>
<dd><p>List of key-value pairs, controlling the appearance and behaviour of the widget. In addition
to the ones given for the voltmeter widget:</p>
<dl class="options">
<dt><b class="option">variable</b> name</dt>
<dd><p>Name of the variable to be associated with the matrix</p></dd>
<dt><b class="option">orient</b> string</dt>
<dd><p>The way the radio buttons are to be arranged (horizontal or vertical first)</p></dd>
<dt><b class="option">rows</b> integer</dt>
<dd><p>Number of rows in the matrix</p></dd>
<dt><b class="option">columns</b> integer</dt>
<dd><p>Number of columns in the matrix</p></dd>
<dt><b class="option">command</b> list</dt>
<dd><p>Command associated with the radio buttons. Invoked when the active radio button changes.</p></dd>
</dl></dd>
</dl></dd>
</dl>
<p>The LED widget has the following public methods:</p>
<dl class="definitions">
<dt><a name="12"><b class="cmd">$led</b> on</a></dt>
<dd><p>Set the state to &quot;on&quot;</p></dd>
<dt><a name="13"><b class="cmd">$led</b> off</a></dt>
<dd><p>Set the state to &quot;off&quot;</p></dd>
<dt><a name="14"><b class="cmd">$led</b> setstate <i class="arg">state</i></a></dt>
<dd><p>Set the state according to the value of &quot;state&quot;</p>
<dl class="arguments">
<dt>state <i class="arg">boolean</i> (in)</dt>
<dd><p>New state for the LED widget</p></dd>
</dl></dd>
</dl>
<p>The radioMatrix widget has two public methods:</p>
<dl class="definitions">
<dt><a name="15"><b class="cmd">$matrix</b> get</a></dt>
<dd><p>Return the index of the currently selected radio button</p></dd>
<dt><a name="16"><b class="cmd">$matrix</b> set <i class="arg">index</i></a></dt>
<dd><p>Select the radio button with index &quot;index&quot;</p>
<dl class="arguments">
<dt>index <i class="arg">integer</i></dt>
<dd><p>Index of the radio button to be set</p></dd>
</dl></dd>
</dl>
</div>
<div id="section4" class="section"><h2><a name="section4">ACKNOWLEDGMENTS</a></h2>
<p>The code for most of these widgets first appeared on the Wiki. In many cases, Arjen Markus merely
refactored the code a bit and &quot;snitified&quot; some of them. The original code was developed by the following people:</p>
<ul class="itemized">
<li><p>Vertical meter, LED display, radio matrix: Ron Fox</p></li>
<li><p>Rotating dials: Gerhard Reithofer</p></li>
<li><p>Voltmeter and tachometer: Marco Maggi</p></li>
<li><p>Code for moving the needle: ?</p></li>
</ul>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key135">controlling</a>, <a href="../../../../index.html#key133">displaying</a>, <a href="../../../../index.html#key134">numerical values</a>, <a href="../../../../index.html#key132">scale widget</a></p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; 2010 Ron Fox &lt;rfox@...&gt;<br>
Copyright &copy; 2010 Gerhard Reithofer &lt;...@...&gt;<br>
Copyright &copy; 2010 Marco Maggi &lt;...@...&gt;<br>
Copyright &copy; 2010 Arjen Markus &lt;arjenmarkus@users.sourceforge.net&gt;</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/crosshair/crosshair.html.











































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229

<html><head>
<title>crosshair - Crosshairs</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/crosshair/crosshair.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; 2003 Kevin Kenny   -- Copyright &copy; 2008 (docs) Andreas Kupries &lt;andreas_kupries@users.sourceforge.net&gt;   -- Copyright &copy; 2013 Frank Gover, Andreas Kupries
   -->
<! -- CVS: $Id$ crosshair.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">crosshair(n) 1.1 tklib &quot;Crosshairs&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>crosshair - Crosshairs for Tk canvas</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">API</a></li>
<li class="section"><a href="#section3">BUGS, IDEAS, FEEDBACK</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl <span class="opt">?8.4?</span></b></li>
<li>package require <b class="pkgname">Tk <span class="opt">?8.4?</span></b></li>
<li>package require <b class="pkgname">crosshair <span class="opt">?1.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">crosshair::crosshair</b> <i class="arg">w</i> <span class="opt">?<i class="arg">arg</i>...?</span></a></li>
<li><a href="#2"><b class="cmd">crosshair::off</b> <i class="arg">w</i></a></li>
<li><a href="#3"><b class="cmd">crosshair::configure</b> <i class="arg">w</i> <span class="opt">?<i class="arg">arg</i>...?</span></a></li>
<li><a href="#4"><b class="cmd">crosshair::track</b> <b class="method">on</b> <i class="arg">w</i> <i class="arg">cmdprefix</i></a></li>
<li><a href="#5"><b class="cmd">crosshair::track</b> <b class="method">off</b> <i class="arg">w</i></a></li>
<li><a href="#6"><b class="cmd">crosshair::bbox_add</b> <i class="arg">w</i> <i class="arg">bbox</i></a></li>
<li><a href="#7"><b class="cmd">crosshair::bbox_remove</b> <i class="arg">token</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>The <b class="package">crosshair</b> package provides commands to (de)activate and
track crosshairs on canvas widgets.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">API</a></h2>
<p>The following commands are exported to the public:</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">crosshair::crosshair</b> <i class="arg">w</i> <span class="opt">?<i class="arg">arg</i>...?</span></a></dt>
<dd><p>This command activates the display of a pair of cross-hairs for the
canvas widget <i class="arg">w</i>. The cross-hairs track the pointing device. The
result of the command is the empty string.</p>
<p>All arguments after the widget <i class="arg">w</i> are treated as options as for a
canvas line item in <i class="arg">w</i>. Of particular interest are <b class="option">-fill</b>
and <b class="option">-dash</b>.</p></dd>
<dt><a name="2"><b class="cmd">crosshair::off</b> <i class="arg">w</i></a></dt>
<dd><p>This command removes the cross-hairs from the canvas widget <i class="arg">w</i>.
Nothing is done if the widget had no cross-hairs. The result of the
command is the empty string.</p></dd>
<dt><a name="3"><b class="cmd">crosshair::configure</b> <i class="arg">w</i> <span class="opt">?<i class="arg">arg</i>...?</span></a></dt>
<dd><p>This command changes the appearance of the cross-hairs in the canvas
widget <i class="arg">w</i>. It is an error to call it for a canvas which has no
cross-hairs.</p>
<p>All arguments after the widget <i class="arg">w</i> are treated as options as for a
canvas line item in <i class="arg">w</i>. Of particular interest are <b class="option">-fill</b>
and <b class="option">-dash</b>.</p>
<p>The result of the command are the current configuration settings.</p></dd>
<dt><a name="4"><b class="cmd">crosshair::track</b> <b class="method">on</b> <i class="arg">w</i> <i class="arg">cmdprefix</i></a></dt>
<dd><p>This command activates reporting of the location of the cross-hairs in
the canvas widget <i class="arg">w</i>. It is an error to use this command for a
canvas which has no cross-hairs. The result of the command is the
empty string.</p>
<p>After the invokation of this command the specified command prefix
<i class="arg">cmdprefix</i> will be called whenever the mouse moves within the
canvas, with 7 arguments. These are, in order:</p>
<ol class="enumerated">
<li><p>The widget <i class="arg">w</i></p></li>
<li><p>The x-location of the cross-hairs, in pixels.</p></li>
<li><p>The y-location of the cross-hairs, in pixels.</p></li>
<li><p>The x-location of the top-left corner of the viewport, in pixels.</p></li>
<li><p>The y-location of the top-left corner of the viewport, in pixels.</p></li>
<li><p>The x-location of the bottom-right corner of the viewport, in pixels.</p></li>
<li><p>The y-location of the bottom-right corner of the viewport, in pixels.</p></li>
</ol>
<p>A previously existing callback for <i class="arg">w</i> will be disabled. I.e. per
canvas widget with cross-hairs only one callback reporting their
location is possible.</p></dd>
<dt><a name="5"><b class="cmd">crosshair::track</b> <b class="method">off</b> <i class="arg">w</i></a></dt>
<dd><p>This command disables the reporting of the location of the cross-hairs
in the canvas widget <i class="arg">w</i>. It is an error to use this command for a
canvas which has no cross-hairs. The result of the command is the
empty string.</p></dd>
<dt><a name="6"><b class="cmd">crosshair::bbox_add</b> <i class="arg">w</i> <i class="arg">bbox</i></a></dt>
<dd><p>This command adds a bounding box to the crosshairs for canvas <i class="arg">w</i>.
The crosshairs will only be active within that area.</p>
<p>The result of the command is a token with which the bounding
box can be removed again, see <b class="cmd">crosshair::bbox_remove</b> below.</p>
<p>The bounding box <i class="arg">bbox</i> is specified thorugh a list of 4
values, the lower left and upper right corners of the box. The order
of values in the list is:</p>
<pre class="example">llx lly urx ury</pre>
<p>Note that this command can be used multiple times, each call
adding one more bounding box. In such a case the visible area is the
<em>union</em> of all the specified bounding boxes.</p></dd>
<dt><a name="7"><b class="cmd">crosshair::bbox_remove</b> <i class="arg">token</i></a></dt>
<dd><p>This command removes the bounding box specified by the <i class="arg">token</i> (a
result of <b class="cmd">crosshair::bbox_add</b>) from the crosshairs for its
canvas widget.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">BUGS, IDEAS, FEEDBACK</a></h2>
<p>This document, and the package it describes, will undoubtedly contain
bugs and other problems.
Please report such in the category <em>tklib :: crosshair</em> of the
<a href="http://sourceforge.net/tracker/?group_id=12883">Tcllib SF Trackers</a>.
Please also report any ideas for enhancements you may have for either
package and/or documentation.</p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key140">cross-hairs</a>, <a href="../../../../index.html#key139">location</a>, <a href="../../../../index.html#key112">tracking</a>, <a href="../../../../index.html#key138">viewport</a></p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; 2003 Kevin Kenny<br>
Copyright &copy; 2008 (docs) Andreas Kupries &lt;andreas_kupries@users.sourceforge.net&gt;<br>
Copyright &copy; 2013 Frank Gover, Andreas Kupries</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/ctext/ctext.html.









































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356

<html><head>
<title>ctext - Ctext a text widget with highlighting support</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/ctext/ctext.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; George Peter Staplin &lt;GeorgePS@XMission.com&gt;
   -->
<! -- CVS: $Id$ ctext.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">ctext(n) 3.3 tklib &quot;Ctext a text widget with highlighting support&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>ctext - Ctext a text widget with highlighting support</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">COMMANDS</a></li>
<li class="section"><a href="#section3">HIGHLIGHTING</a></li>
<li class="section"><a href="#section4">WIDGET COMMANDS</a></li>
<li class="section"><a href="#section5">WIDGET OPTIONS</a></li>
<li class="section"><a href="#section6">EXAMPLE</a></li>
<li class="section"><a href="#section7">THANKS</a></li>
<li class="section"><a href="#see-also">See Also</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tk</b></li>
<li>package require <b class="pkgname">ctext <span class="opt">?3.3?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">ctext</b> <i class="arg">pathName</i> <span class="opt">?<i class="arg">options</i>?</span></a></li>
<li><a href="#2"><b class="cmd">::ctext::addHighlightClass</b> <i class="arg">pathName</i> <i class="arg">class</i> <i class="arg">color</i> <i class="arg">keywordlist</i></a></li>
<li><a href="#3"><b class="cmd">::ctext::addHighlightClassWithOnlyCharStart</b> <i class="arg">pathName</i> <i class="arg">class</i> <i class="arg">color</i> <i class="arg">char</i></a></li>
<li><a href="#4"><b class="cmd">::ctext::addHighlightClassForSpecialChars</b> <i class="arg">pathName</i> <i class="arg">class</i> <i class="arg">color</i> <i class="arg">charstring</i></a></li>
<li><a href="#5"><b class="cmd">::ctext::addHighlightClassForRegexp</b> <i class="arg">pathName</i> <i class="arg">class</i> <i class="arg">color</i> <i class="arg">pattern</i></a></li>
<li><a href="#6"><b class="cmd">::ctext::clearHighlightClasses</b> <i class="arg">pathName</i></a></li>
<li><a href="#7"><b class="cmd">::ctext::getHighlightClasses</b> <i class="arg">pathName</i></a></li>
<li><a href="#8"><b class="cmd">::ctext::deleteHighlightClass</b> <i class="arg">pathName</i> <i class="arg">class</i></a></li>
<li><a href="#9"><b class="cmd">::ctext::enableComments</b> <i class="arg">enable</i></a></li>
<li><a href="#10"><b class="cmd">::ctext::disableComments</b> <i class="arg">enable</i></a></li>
<li><a href="#11"><i class="arg">pathName</i> <b class="method">highlight</b> <i class="arg">startIndex</i> <i class="arg">endIndex</i></a></li>
<li><a href="#12"><i class="arg">pathName</i> <b class="method">fastdelete</b> <i class="arg">index1</i> <span class="opt">?<i class="arg">index2</i>?</span></a></li>
<li><a href="#13"><i class="arg">pathName</i> <b class="method">fastinsert</b></a></li>
<li><a href="#14"><i class="arg">pathName</i> <b class="method">copy</b></a></li>
<li><a href="#15"><i class="arg">pathName</i> <b class="method">cut</b></a></li>
<li><a href="#16"><i class="arg">pathName</i> <b class="method">paste</b></a></li>
<li><a href="#17"><i class="arg">pathName</i> <b class="method">append</b></a></li>
<li><a href="#18"><i class="arg">pathName</i> <b class="method">configure</b> <i class="arg">option</i> <i class="arg">value</i> <span class="opt">?...?</span></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>The <b class="package">ctext</b> package provides the ctext widget which
is an enhanced text widget with support for configurable syntax
highlighting and some extra commands.</p>
<p>Ctext overloads the text widget and provides
new commands, named <b class="method">highlight</b>, <b class="method">copy</b>, <b class="method">paste</b>,<b class="method">cut</b>,
<b class="method">append</b>, and <b class="method">edit</b>.  It also provides several
commands that allow you to define classes.
Each class corresponds to a tag in the widget.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">COMMANDS</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">ctext</b> <i class="arg">pathName</i> <span class="opt">?<i class="arg">options</i>?</span></a></dt>
<dd><p>Creates and configures a ctext widget.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">HIGHLIGHTING</a></h2>
<p>Highlighting is controlled with text widget tags, that are called highlight classes.
The <i class="arg">class</i> is a tag name and can be configured like any text widget tag.
Four types of highlight classes are supported. All highlight classes are automatically used
by the <b class="method">highlight</b> method of the widget.</p>
<dl class="definitions">
<dt><a name="2"><b class="cmd">::ctext::addHighlightClass</b> <i class="arg">pathName</i> <i class="arg">class</i> <i class="arg">color</i> <i class="arg">keywordlist</i></a></dt>
<dd><p>Add a highlighting class <i class="arg">class</i> to the ctext widget <i class="arg">pathName</i>.
The highligthing will be done with the color <i class="arg">color</i>. All words in the <i class="arg">keywordlist</i> will be
highlighted.</p>
<pre class="example">
	# highlight some tcl keywords
	::ctext::addHighlightClass .t tclkeywords red [list set info interp uplevel upvar]]
 </pre>
</dd>
<dt><a name="3"><b class="cmd">::ctext::addHighlightClassWithOnlyCharStart</b> <i class="arg">pathName</i> <i class="arg">class</i> <i class="arg">color</i> <i class="arg">char</i></a></dt>
<dd><p>Add a highlighting class <i class="arg">class</i> to the ctext widget <i class="arg">pathName</i>.
The highligthing will be done with the color <i class="arg">color</i>. All words starting with <i class="arg">char</i> will be
highlighted.</p>
<pre class="example">
	::ctext::addHighlightClassWithOnlyCharStart .t vars blue \$
 </pre>
</dd>
<dt><a name="4"><b class="cmd">::ctext::addHighlightClassForSpecialChars</b> <i class="arg">pathName</i> <i class="arg">class</i> <i class="arg">color</i> <i class="arg">charstring</i></a></dt>
<dd><p>Add a highlighting class <i class="arg">class</i> to the ctext widget <i class="arg">pathName</i>.
The highligthing will be done with the color <i class="arg">color</i>. All chars in <i class="arg">charstring</i> will be
highlighted.</p></dd>
<dt><a name="5"><b class="cmd">::ctext::addHighlightClassForRegexp</b> <i class="arg">pathName</i> <i class="arg">class</i> <i class="arg">color</i> <i class="arg">pattern</i></a></dt>
<dd><p>Add a highlighting class <i class="arg">class</i> to the ctext widget <i class="arg">pathName</i>.
The highligthing will be done with the color <i class="arg">color</i>. All text parts matching the regexp <i class="arg">pattern</i>
will be highligthed.</p></dd>
<dt><a name="6"><b class="cmd">::ctext::clearHighlightClasses</b> <i class="arg">pathName</i></a></dt>
<dd><p>Remove all highlight classes from the widget <i class="arg">pathName</i>.</p></dd>
<dt><a name="7"><b class="cmd">::ctext::getHighlightClasses</b> <i class="arg">pathName</i></a></dt>
<dd><p>List all highlight classes for the widget <i class="arg">pathName</i>.</p></dd>
<dt><a name="8"><b class="cmd">::ctext::deleteHighlightClass</b> <i class="arg">pathName</i> <i class="arg">class</i></a></dt>
<dd><p>Delete the highlight class <i class="arg">class</i> from the widget <i class="arg">pathName</i></p></dd>
<dt><a name="9"><b class="cmd">::ctext::enableComments</b> <i class="arg">enable</i></a></dt>
<dd><p>Enable C comment highlighting. The <i class="arg">class</i> for c-style comments is <b class="const">_cComment</b>.
The C comment highlighting is disabled by default.</p></dd>
<dt><a name="10"><b class="cmd">::ctext::disableComments</b> <i class="arg">enable</i></a></dt>
<dd><p>Disable C comment highlighting.</p></dd>
</dl>
</div>
<div id="section4" class="section"><h2><a name="section4">WIDGET COMMANDS</a></h2>
<p>Each ctext widget created with the above command supports the following
commands and options in addition to the standard text widget commands and
options.</p>
<dl class="definitions">
<dt><a name="11"><i class="arg">pathName</i> <b class="method">highlight</b> <i class="arg">startIndex</i> <i class="arg">endIndex</i></a></dt>
<dd><p>Highlight the text between <i class="arg">startIndex</i> and <i class="arg">endIndex</i>.</p></dd>
<dt><a name="12"><i class="arg">pathName</i> <b class="method">fastdelete</b> <i class="arg">index1</i> <span class="opt">?<i class="arg">index2</i>?</span></a></dt>
<dd><p>Delete text range without updating the highlighting. Arguments
are identical to the <i class="arg">pathName</i> <b class="method">delete</b> command inherited from
the standard text widget.</p></dd>
<dt><a name="13"><i class="arg">pathName</i> <b class="method">fastinsert</b></a></dt>
<dd><p>Insert text without updating the highlighting. Arguments
are identical to the <i class="arg">pathName</i> <b class="method">insert</b> command inherited from
the standard text widget.</p></dd>
<dt><a name="14"><i class="arg">pathName</i> <b class="method">copy</b></a></dt>
<dd><p>Call <b class="cmd">tk_textCopy</b> for the ctext instance.</p></dd>
<dt><a name="15"><i class="arg">pathName</i> <b class="method">cut</b></a></dt>
<dd><p>Call <b class="cmd">tk_textCut</b> for the ctext instance.</p></dd>
<dt><a name="16"><i class="arg">pathName</i> <b class="method">paste</b></a></dt>
<dd><p>Call <b class="cmd">tk_textPaste</b> for the ctext instance.</p></dd>
<dt><a name="17"><i class="arg">pathName</i> <b class="method">append</b></a></dt>
<dd><p>Append the current selection to the clipboard.</p></dd>
<dt><a name="18"><i class="arg">pathName</i> <b class="method">configure</b> <i class="arg">option</i> <i class="arg">value</i> <span class="opt">?...?</span></a></dt>
<dd><p>Set the options for the ctext widget. Each option name must be followed
the new value.</p></dd>
</dl>
</div>
<div id="section5" class="section"><h2><a name="section5">WIDGET OPTIONS</a></h2>
<dl class="tkoptions">
<dt>Command-Line Switch:	<b class="option">-linemap</b><br>
Database Name:	<b class="optdbname"></b><br>
Database Class:	<b class="optdbclass"></b><br>
</dt>
<dd><p>Creates (-linemap 1) or deletes (-linemap 0) a line number list on the
left of the widget. The default is to have a linemap displayed.</p></dd>
<dt>Command-Line Switch:	<b class="option">-linemapfg</b><br>
Database Name:	<b class="optdbname"></b><br>
Database Class:	<b class="optdbclass"></b><br>
</dt>
<dd><p>Changes the foreground of the linemap.
The default is the same color as the main text
widget.</p></dd>
<dt>Command-Line Switch:	<b class="option">-linemapbg</b><br>
Database Name:	<b class="optdbname"></b><br>
Database Class:	<b class="optdbclass"></b><br>
</dt>
<dd><p>Changes the background of the linemap.
The default is the same color as the main text
widget.</p></dd>
<dt>Command-Line Switch:	<b class="option">-linemap_select_fg</b><br>
Database Name:	<b class="optdbname"></b><br>
Database Class:	<b class="optdbclass"></b><br>
</dt>
<dd><p>Changes the selected
line foreground.  The default is black.</p></dd>
<dt>Command-Line Switch:	<b class="option">-linemap_select_bg</b><br>
Database Name:	<b class="optdbname"></b><br>
Database Class:	<b class="optdbclass"></b><br>
</dt>
<dd><p>Changes the selected line
background.  The default is yellow.</p></dd>
<dt>Command-Line Switch:	<b class="option">-linemap_mark_command</b><br>
Database Name:	<b class="optdbname"></b><br>
Database Class:	<b class="optdbclass"></b><br>
</dt>
<dd><p>Calls a procedure or command
with the <i class="arg">pathName</i> of the ctext window, the <i class="arg">type</i> which is
either <b class="const">marked</b> or <b class="const">unmarked</b>, and finally the line
number selected.
The proc prototype is:</p>
<pre class="example">
proc linemark_cmd {win type line}.
</pre>
<p>See also
ctext_test_interactive.tcl</p></dd>
<dt>Command-Line Switch:	<b class="option">-highlight</b><br>
Database Name:	<b class="optdbname"></b><br>
Database Class:	<b class="optdbclass"></b><br>
</dt>
<dd><p>Takes a boolean value which defines
whether or not to highlight text which is inserted
or deleted.  The default is 1.</p></dd>
<dt>Command-Line Switch:	<b class="option">-linemap_markable</b><br>
Database Name:	<b class="optdbname"></b><br>
Database Class:	<b class="optdbclass"></b><br>
</dt>
<dd><p>Takes a boolean value which
specifies whether or not lines in the linemap
are markable with the mouse.  The default is 1.</p></dd>
</dl>
</div>
<div id="section6" class="section"><h2><a name="section6">EXAMPLE</a></h2>
<pre class="example">
	package require Tk
	package require ctext
	
	proc main {} {
	pack [frame .f] -fill both -expand 1
	pack [scrollbar .f.s -command {.f.t yview}] -side right -fill y
	pack [ctext .f.t -bg black -fg white -insertbackground yellow  -yscrollcommand {.f.s set}] -fill both -expand 1
	ctext::addHighlightClass .f.t widgets purple  [list ctext button label text frame toplevel  scrollbar checkbutton canvas listbox menu menubar menubutton  radiobutton scale entry message tk_chooseDir tk_getSaveFile  tk_getOpenFile tk_chooseColor tk_optionMenu]
	ctext::addHighlightClass .f.t flags orange  [list -text -command -yscrollcommand  -xscrollcommand -background -foreground -fg -bg  -highlightbackground -y -x -highlightcolor -relief -width  -height -wrap -font -fill -side -outline -style -insertwidth  -textvariable -activebackground -activeforeground -insertbackground  -anchor -orient -troughcolor -nonewline -expand -type -message  -title -offset -in -after -yscroll -xscroll -forward -regexp -count  -exact -padx -ipadx -filetypes -all -from -to -label -value -variable  -regexp -backwards -forwards -bd -pady -ipady -state -row -column  -cursor -highlightcolors -linemap -menu -tearoff -displayof -cursor  -underline -tags -tag]
	ctext::addHighlightClass .f.t stackControl red  {proc uplevel namespace while for foreach if else}
	ctext::addHighlightClassWithOnlyCharStart .f.t vars mediumspringgreen &quot;\$&quot;
	ctext::addHighlightClass .f.t variable_funcs gold {set global variable unset}
	ctext::addHighlightClassForSpecialChars .f.t brackets green {[]{}}
	ctext::addHighlightClassForRegexp .f.t paths lightblue {\.[a-zA-Z0-9\_\-]+}
	ctext::addHighlightClassForRegexp .f.t comments khaki {#[^\n\r]*}
	.f.t fastinsert end [info body main]
	
	pack [frame .f1] -fill x
	.f.t highlight 1.0 end
	
	pack [button .f1.exit -text Exit -command exit] -side left
	pack [entry .e] -side bottom -fill x
	.e insert end &quot;ctext::deleteHighlightClass .f.t &quot;
	bind .e &lt;Return&gt; {eval [.e get]}
	}
	main
	
</pre>
<p>Further examples are in the source package for ctext.</p>
</div>
<div id="section7" class="section"><h2><a name="section7">THANKS</a></h2>
<p>Kevin Kenny, Neil Madden, Jeffrey Hobbs, Richard Suchenwirth,
Johan Bengtsson, Mac Cody, G&uuml;nther, Andreas Sievers, and Michael Schlenker.</p>
</div>
<div id="see-also" class="section"><h2><a name="see-also">See Also</a></h2>
<p><a href="../../../../index.html#key6">re_syntax</a>, <a href="../../../../index.html#key7">text</a></p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key15">syntax highlighting</a>, <a href="../../../../index.html#key7">text</a>, <a href="../../../../index.html#key1">widget</a></p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; George Peter Staplin &lt;GeorgePS@XMission.com&gt;</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/cursor/cursor.html.

















































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168

<html><head>
<title>cursor - Tk cursor routines</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/cursor/cursor.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; Jeffrey Hobbs &lt;jeff@hobbs.org&gt;
   -->
<! -- CVS: $Id$ cursor.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">cursor(n) 0.3.1 tklib &quot;Tk cursor routines&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>cursor - Procedures to handle CURSOR data</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">COMMANDS</a></li>
<li class="section"><a href="#see-also">See Also</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tk</b></li>
<li>package require <b class="pkgname">cursor <span class="opt">?0.3.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::cursor::propagate</b> <i class="arg">widget</i> <i class="arg">cursor</i></a></li>
<li><a href="#2"><b class="cmd">::cursor::restore</b> <i class="arg">widget</i> <span class="opt">?<i class="arg">cursor</i>?</span></a></li>
<li><a href="#3"><b class="cmd">::cursor::display</b> <span class="opt">?<i class="arg">parent</i>?</span></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>The <b class="package">cursor</b> package provides commands to handle Tk cursors.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">COMMANDS</a></h2>
<p>The following commands are available:</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::cursor::propagate</b> <i class="arg">widget</i> <i class="arg">cursor</i></a></dt>
<dd><p>Sets the cursor for the specified <i class="arg">widget</i> and all its descendants
to <i class="arg">cursor</i>.</p></dd>
<dt><a name="2"><b class="cmd">::cursor::restore</b> <i class="arg">widget</i> <span class="opt">?<i class="arg">cursor</i>?</span></a></dt>
<dd><p>Restore the original or previously set cursor for the specified
<i class="arg">widget</i> and all its descendants.  If <i class="arg">cursor</i> is specified,
that will be used if on any widget that did not have a preset cursor
(set by a previous call to <b class="cmd">::cursor::propagate</b>).</p></dd>
<dt><a name="3"><b class="cmd">::cursor::display</b> <span class="opt">?<i class="arg">parent</i>?</span></a></dt>
<dd><p>Pops up a dialog with a listbox containing all the cursor names.
Selecting a cursor name will display it in that dialog.  This is
simply for viewing any available cursors on the platform.</p></dd>
</dl>
</div>
<div id="see-also" class="section"><h2><a name="see-also">See Also</a></h2>
<p>Tk_GetCursor(3), cursors(n), options(n)</p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key72">cursor</a></p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; Jeffrey Hobbs &lt;jeff@hobbs.org&gt;</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/datefield/datefield.html.





























































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190

<html><head>
<title>datefield - Tk datefield widget</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/datefield/datefield.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; Keith Vetter &lt;keith@ebook.gemstar.com&gt;
   -->
<! -- CVS: $Id$ datefield.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">datefield(n) 0.2 tklib &quot;Tk datefield widget&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>datefield - Tk datefield widget</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">COMMANDS</a></li>
<li class="section"><a href="#section3">OPTIONS</a></li>
<li class="section"><a href="#section4">EXAMPLE</a></li>
<li class="section"><a href="#see-also">See Also</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#category">Category</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tk</b></li>
<li>package require <b class="pkgname">datefield <span class="opt">?0.2?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::datefield::datefield</b> <i class="arg">widgetpath</i> <span class="opt">?<i class="arg">options</i>?</span></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>The <b class="package">datefield</b> package provides the datefield widget which
is an enhanced text entry widget for the purpose of date entry. Only
valid dates of the form MM/DD/YYYY can be entered.</p>
<p>The datefield widget is, in fact, just an entry widget with
specialized bindings. This means all the command and options for an
entry widget apply equally here.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">COMMANDS</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::datefield::datefield</b> <i class="arg">widgetpath</i> <span class="opt">?<i class="arg">options</i>?</span></a></dt>
<dd><p>Creates and configures a date field widget.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">OPTIONS</a></h2>
<p>See the <b class="cmd"><a href="../../../../index.html#key71">entry</a></b> manual entry for details on all available options.</p>
</div>
<div id="section4" class="section"><h2><a name="section4">EXAMPLE</a></h2>
<pre class="example">
 package require datefield
 
 wm title . &quot;Datefield example&quot;
 proc DayOfWeek {args} {
     set now [clock scan $::myDate]
     set ::myDate2 [clock format $now -format %A]
 }
 trace variable myDate w DayOfWeek
 
 ::datefield::datefield .df -textvariable myDate
 label .l1 -text &quot;Enter a date:&quot;   -anchor e
 label .l2 -text &quot;That date is a:&quot; -anchor e
 label .l3 -textvariable myDate2 -relief sunken -width 12
 
 grid .l1 .df -sticky ew
 grid .l2 .l3 -sticky ew
 focus .df
</pre>
</div>
<div id="see-also" class="section"><h2><a name="see-also">See Also</a></h2>
<p>clock(n), entry(n)</p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key70">clock</a>, <a href="../../../../index.html#key2">date</a>, <a href="../../../../index.html#key0">dateentry</a>, <a href="../../../../index.html#key71">entry</a>, <a href="../../../../index.html#key1">widget</a></p>
</div>
<div id="category" class="section"><h2><a name="category">Category</a></h2>
<p>Widget</p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; Keith Vetter &lt;keith@ebook.gemstar.com&gt;</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/diagrams/diagram.html.















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583

<html><head>
<title>diagram - Documentation toolbox</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/diagrams/diagram.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ diagram.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">diagram(n) 0.3 tklib &quot;Documentation toolbox&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>diagram - Diagram drawing</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">API</a>
<ul>
<li class="subsection"><a href="#subsection1">Class API</a></li>
<li class="subsection"><a href="#subsection2">Object API</a></li>
</ul>
</li>
<li class="section"><a href="#section3">Language Reference</a>
<ul>
<li class="subsection"><a href="#subsection3">Elements</a></li>
<li class="subsection"><a href="#subsection4">Attributes</a></li>
<li class="subsection"><a href="#subsection5">Corners</a></li>
<li class="subsection"><a href="#subsection6">Named directions</a></li>
<li class="subsection"><a href="#subsection7">Miscellaneous Commands</a></li>
<li class="subsection"><a href="#subsection8">Variables</a></li>
</ul>
</li>
<li class="section"><a href="#section4">Diagram Classes</a></li>
<li class="section"><a href="#section5">References</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#category">Category</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">diagram 1</b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::diagram</b> <i class="arg">objectName</i> <i class="arg">canvas</i> <span class="opt">?<i class="arg">script</i>?</span></a></li>
<li><a href="#2"><i class="arg">diagramObject</i> <b class="method">new direction</b> <i class="arg">name</i> <span class="opt">?<i class="arg">key</i> <i class="arg">value</i>...?</span></a></li>
<li><a href="#3"><i class="arg">diagramObject</i> <b class="method">new element</b> <i class="arg">name</i> <i class="arg">attributes</i> <i class="arg">cmdprefix</i></a></li>
<li><a href="#4"><i class="arg">diagramObject</i> <b class="method">new alias</b> <i class="arg">name</i> <i class="arg">cmdprefix</i></a></li>
<li><a href="#5"><i class="arg">diagramObject</i> <b class="method">new command</b> <i class="arg">name</i> <i class="arg">arguments</i> <i class="arg">body</i></a></li>
<li><a href="#6"><i class="arg">diagramObject</i> <b class="method">new attribute</b> <i class="arg">name</i> <span class="opt">?<i class="arg">key</i> <i class="arg">value</i>...?</span></a></li>
<li><a href="#7"><i class="arg">diagramObject</i> <b class="method">unknown attribute</b> <i class="arg">cmdprefix</i></a></li>
<li><a href="#8"><i class="arg">diagramObject</i> <b class="method">draw</b> <i class="arg">script</i></a></li>
<li><a href="#9"><b class="cmd"><a href="../../../../index.html#key82">arc</a></b> <i class="arg">attr</i>...</a></li>
<li><a href="#10"><b class="cmd"><a href="../../../../index.html#key77">arrow</a></b> <i class="arg">attr</i>...</a></li>
<li><a href="#11"><b class="cmd">--&gt;</b> <i class="arg">attr</i>...</a></li>
<li><a href="#12"><b class="cmd">&lt;--&gt;</b> <i class="arg">attr</i>...</a></li>
<li><a href="#13"><b class="cmd">&lt;--&gt;</b> <i class="arg">attr</i>...</a></li>
<li><a href="#14"><b class="cmd">block</b> <i class="arg">script</i> <i class="arg">attr</i>...</a></li>
<li><a href="#15"><b class="cmd"><a href="../../../../index.html#key74">box</a></b> <i class="arg">attr</i>...</a></li>
<li><a href="#16"><b class="cmd"><a href="../../../../index.html#key86">circle</a></b> <i class="arg">attr</i>...</a></li>
<li><a href="#17"><b class="cmd">O</b> <i class="arg">attr</i>...</a></li>
<li><a href="#18"><b class="cmd"><a href="../../../../index.html#key87">diamond</a></b> <i class="arg">attr</i>...</a></li>
<li><a href="#19"><b class="cmd">&lt;&gt;</b> <i class="arg">attr</i>...</a></li>
<li><a href="#20"><b class="cmd"><a href="../../../../index.html#key73">drum</a></b> <i class="arg">attr</i>...</a></li>
<li><a href="#21"><b class="cmd"><a href="../../../../index.html#key88">ellipse</a></b> <i class="arg">attr</i>...</a></li>
<li><a href="#22"><b class="cmd"><a href="../../../../index.html#key83">line</a></b> <i class="arg">attr</i>...</a></li>
<li><a href="#23"><b class="cmd">--</b> <i class="arg">attr</i>...</a></li>
<li><a href="#24"><b class="cmd"><a href="../../../../index.html#key89">move</a></b> <i class="arg">attr</i></a></li>
<li><a href="#25"><b class="cmd"><a href="../../../../index.html#key76">spline</a></b> <i class="arg">attr</i>...</a></li>
<li><a href="#26"><b class="cmd"><a href="../../../../index.html#key7">text</a></b> <i class="arg">attr</i>...</a></li>
<li><a href="#27"><b class="cmd">west</b></a></li>
<li><a href="#28"><b class="cmd">w</b></a></li>
<li><a href="#29"><b class="cmd">left</b></a></li>
<li><a href="#30"><b class="cmd">l</b></a></li>
<li><a href="#31"><b class="cmd">south</b></a></li>
<li><a href="#32"><b class="cmd">s</b></a></li>
<li><a href="#33"><b class="cmd">down</b></a></li>
<li><a href="#34"><b class="cmd">bottom</b></a></li>
<li><a href="#35"><b class="cmd">bot</b></a></li>
<li><a href="#36"><b class="cmd">b</b></a></li>
<li><a href="#37"><b class="cmd">east</b></a></li>
<li><a href="#38"><b class="cmd">e</b></a></li>
<li><a href="#39"><b class="cmd">right</b></a></li>
<li><a href="#40"><b class="cmd">r</b></a></li>
<li><a href="#41"><b class="cmd">north</b></a></li>
<li><a href="#42"><b class="cmd">n</b></a></li>
<li><a href="#43"><b class="cmd">up</b></a></li>
<li><a href="#44"><b class="cmd">top</b></a></li>
<li><a href="#45"><b class="cmd">t</b></a></li>
<li><a href="#46"><b class="cmd">northwest</b></a></li>
<li><a href="#47"><b class="cmd">nw</b></a></li>
<li><a href="#48"><b class="cmd">up-left</b></a></li>
<li><a href="#49"><b class="cmd">upleft</b></a></li>
<li><a href="#50"><b class="cmd">leftup</b></a></li>
<li><a href="#51"><b class="cmd">northeast</b></a></li>
<li><a href="#52"><b class="cmd">ne</b></a></li>
<li><a href="#53"><b class="cmd">up-right</b></a></li>
<li><a href="#54"><b class="cmd">upright</b></a></li>
<li><a href="#55"><b class="cmd">rightup</b></a></li>
<li><a href="#56"><b class="cmd">southwest</b></a></li>
<li><a href="#57"><b class="cmd">sw</b></a></li>
<li><a href="#58"><b class="cmd">down-left</b></a></li>
<li><a href="#59"><b class="cmd">downleft</b></a></li>
<li><a href="#60"><b class="cmd">leftdown</b></a></li>
<li><a href="#61"><b class="cmd">southeast</b></a></li>
<li><a href="#62"><b class="cmd">se</b></a></li>
<li><a href="#63"><b class="cmd">down-right</b></a></li>
<li><a href="#64"><b class="cmd">downright</b></a></li>
<li><a href="#65"><b class="cmd">rightdown</b></a></li>
<li><a href="#66"><i class="arg">number</i> <b class="const">cm</b></a></li>
<li><a href="#67"><i class="arg">number</i> <b class="const">mm</b></a></li>
<li><a href="#68"><i class="arg">number</i> <b class="const">inch</b></a></li>
<li><a href="#69"><i class="arg">number</i> <b class="const">pt</b></a></li>
<li><a href="#70"><i class="arg">number</i> <i class="arg">number</i></a></li>
<li><a href="#71"><b class="cmd">by</b> <i class="arg">distance</i> <i class="arg">direction</i></a></li>
<li><a href="#72"><i class="arg">point1</i> <b class="cmd">+</b> <i class="arg">point2</i></a></li>
<li><a href="#73"><i class="arg">point1</i> <b class="cmd">-</b> <i class="arg">point2</i></a></li>
<li><a href="#74"><i class="arg">point</i> <b class="cmd">by</b> <i class="arg">distance</i> <i class="arg">direction</i></a></li>
<li><a href="#75"><i class="arg">point1</i> <b class="cmd">|</b> <i class="arg">point2</i></a></li>
<li><a href="#76"><i class="arg">n</i> <b class="cmd">between</b> <i class="arg">poin1</i> <i class="arg">point2</i></a></li>
<li><a href="#77"><b class="cmd">intersect</b> <i class="arg">elem1</i> <i class="arg">elem2</i></a></li>
<li><a href="#78"><i class="arg">element</i> <b class="cmd">names</b> <span class="opt">?<i class="arg">pattern</i>?</span></a></li>
<li><a href="#79"><i class="arg">element</i> <i class="arg">corner</i></a></li>
<li><a href="#80"><i class="arg">element</i> <i class="arg">corner1</i> <i class="arg">corner2</i>...</a></li>
<li><a href="#81"><i class="arg">element</i> <span class="opt">?<i class="arg">corner1</i>... <span class="opt">?<b class="method">names</b> <span class="opt">?<i class="arg">pattern</i>?</span>?</span>]?</span></a></li>
<li><a href="#82"><b class="cmd"><b class="variable">n</b>th</b> <span class="opt">?<i class="arg">corner</i>?</span></a></li>
<li><a href="#83"><b class="cmd"><b class="variable">n</b>th</b> <b class="cmd">last</b> <span class="opt">?<i class="arg">corner</i>?</span></a></li>
<li><a href="#84"><b class="cmd"><b class="variable">n</b>th</b> <i class="arg">shape</i> <span class="opt">?<i class="arg">corner</i>?</span></a></li>
<li><a href="#85"><b class="cmd"><b class="variable">n</b>th</b> <b class="cmd">last</b> <i class="arg">shape</i> <span class="opt">?<i class="arg">corner</i>?</span></a></li>
<li><a href="#86"><b class="cmd">last</b> <span class="opt">?<i class="arg">corner</i>?</span></a></li>
<li><a href="#87"><b class="cmd">last</b> <i class="arg">shape</i> <span class="opt">?<i class="arg">corner</i>?</span></a></li>
<li><a href="#88"><b class="cmd">1st</b></a></li>
<li><a href="#89"><b class="cmd">2nd</b></a></li>
<li><a href="#90"><b class="cmd">3rd</b></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>Welcome to <b class="package">diagram</b>, a package for the easy construction of
diagrams (sic), i.e. 2D vector graphics, sometimes also called <i class="term">pictures</i>.
Note that this package is not a replacement for <b class="package">Tk</b>'s canvas,
but rather a layer sitting on top of it, to make it easier to use.
In other words, using the canvas as the core graphics engine <b class="package">diagram</b> abstracts away from the minutiae of handling coordinates to
position and size the drawn elements, allowing the user to concentrate
on the content of the diagram instead.</p>
<p>This is similar to Brian Kernighan's PIC language for troff, which is
the spiritual ancestor of this package.</p>
<p>This document contains the reference to the API and drawing (language)
commands. Its intended audience are users of the package wishing to
refresh their memory.
Newcomers should read the <i class="term">Diagram Language Tutorial</i> first.
Developers wishing to work on the internals of the package and its
supporting packages should look at section
	<span class="sectref"><a href="#section4">Diagram Classes</a></span>
first, and then the comments in the sources of the packages itself.</p>
<p>In the remainder of the document we first describe the APIs of the
diagram class and its instances, followed by the language reference
for the drawing language itself.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">API</a></h2>
<div id="subsection1" class="subsection"><h3><a name="subsection1">Class API</a></h3>
<p>The package exports the API described here.</p>
<dl class="definitions">
	
<dt><a name="1"><b class="cmd">::diagram</b> <i class="arg">objectName</i> <i class="arg">canvas</i> <span class="opt">?<i class="arg">script</i>?</span></a></dt>
<dd><p>The command creates a new instance of a diagram
		controller and returns the fully qualified name of the
		object command as its result.
		The new instance is connected to the specified
		<i class="arg">canvas</i> object, which is used as the diagrams
		graphics engine. This is usually an instance of Tk's
		canvas, however any object which is API compatible to
		Tk's canvas can be used here.</p>
<p>The API of this object command is described in the
		following section, <span class="sectref"><a href="#subsection2">Object API</a></span>. It may be
		used to invoke various operations on the object.</p>
<p>If the <i class="arg">script</i> argument is specified then method
		<b class="method">draw</b> will be invoked on it.</p></dd>
</dl>
</div>
<div id="subsection2" class="subsection"><h3><a name="subsection2">Object API</a></h3>
<p>Instances of the diagram class support the following
	    methods:</p>
<dl class="definitions">
	
<dt><a name="2"><i class="arg">diagramObject</i> <b class="method">new direction</b> <i class="arg">name</i> <span class="opt">?<i class="arg">key</i> <i class="arg">value</i>...?</span></a></dt>
<dd><p>This method defines a new named direction and its
		attributes. The latter is given through the
		<i class="arg">key</i>/<i class="arg">value</i> pairs coming after the <i class="arg">name</i>.</p>
<p>Users are mostly free to specify arbitrary attributes
		with whatever meaning they desire. The exception are
		the names <em>angle</em> and <em>opposite</em>. They are
		special to the diagram package and have a fixed meaning.</p>
<dl class="definitions">
	
<dt>angle</dt>
<dd><p>This attribute specifies the angle of the direction in
		degrees, where 0 points east (to the right) and 90 points
		north (up).</p></dd>
<dt>opposite</dt>
<dd><p>This attribute specifies the name of the direction
		which should be considered as complementary to the
		named one.</p></dd>
</dl></dd>
<dt><a name="3"><i class="arg">diagramObject</i> <b class="method">new element</b> <i class="arg">name</i> <i class="arg">attributes</i> <i class="arg">cmdprefix</i></a></dt>
<dd><p>This method defines a new graphics element for the
		drawing language. I.e. <i class="arg">name</i> will become a new
		command in the language, and the specified command
		prefix (<i class="arg">cmdprefix</i>) will be called to perform
		the actual drawing.</p>
<p><i class="arg">attributes</i> specifies the set of attributes for which
		data has to be available. I.e. the system will run the
		...-callbacks for these attributes.
		See the method <b class="method">new attribute</b> for more information
		on attribute definitions.</p>
<p>The command prefix is expected to conform to the
		following signature:</p>
<dl class="definitions">
	
<dt><b class="cmd">cmdprefix</b> <i class="arg">canvas</i> <i class="arg">attributes</i></dt>
<dd><p>Where <i class="arg">canvas</i> is the handle of the canvas widget
		to draw to, and <i class="arg">attributes</i> is a dictionary
		holding the attributes for the element, be they
		user-specified, or defaults.</p>
<p>The results of the command has to be a list containing
		at least two and at most four items. These are, in order:</p>
<ol class="enumerated">
		
<li><p>The list of canvas items the drawn element consists of.</p></li>
<li><p>The dictionary of named locations in the element, its
			<i class="term">corners</i>.</p></li>
<li><p>An optional mode, either &quot;relative&quot; or &quot;absolute&quot;.
			When not returned &quot;relative&quot; is assumed. In the
			case of a relative element position the attributes
			&quot;with&quot; and &quot;at&quot; are used to determine the final
			position of the new element.</p></li>
<li><p>An optional name of a direction. If not the
			empty string this is handed to the automatic
			layouter as the new direction to follow.</p></li>
</ol></dd>
</dl></dd>
<dt><a name="4"><i class="arg">diagramObject</i> <b class="method">new alias</b> <i class="arg">name</i> <i class="arg">cmdprefix</i></a></dt>
<dd><p>This method defines a new command for the drawing
		language. I.e. <i class="arg">name</i> will become a new command in
		the language, and the specified command prefix
		(<i class="arg">cmdprefix</i>) will be called on use of this new
		command. Any arguments given to the command are
		simply passed to the prefix. There is no fixed siganture.</p>
<p>Note that the prefix is run in the context of the
		drawing language, allowing the direct use of any
		existing commands.</p></dd>
<dt><a name="5"><i class="arg">diagramObject</i> <b class="method">new command</b> <i class="arg">name</i> <i class="arg">arguments</i> <i class="arg">body</i></a></dt>
<dd><p>This is like <b class="method">new alias</b> except that the new
		command is defined as a procedure in the language's
		context, with regular argument list and body.</p></dd>
<dt><a name="6"><i class="arg">diagramObject</i> <b class="method">new attribute</b> <i class="arg">name</i> <span class="opt">?<i class="arg">key</i> <i class="arg">value</i>...?</span></a></dt>
<dd><p>This method defines a new named attribute which can be
		used by graphical elements. The handling of the
		attribute by the processor is declared through the
		<i class="arg">key</i>/<i class="arg">value</i> pairs coming after the <i class="arg">name</i>.</p>
<p>The accepted keys and their meanings are:</p>
<dl class="definitions">
		
<dt><b class="const">key</b></dt>
<dd><p>The value of this key is the name of the key
			under which the attribute's value shall be
			stored in the attribute dictionary given to
			the drawing command after attribute processing
			is complete.</p>
<p>This key is optional. If it is not specified it
			defaults to the name of the attribute.</p></dd>
<dt><b class="const">get</b></dt>
<dd><p>The value of this key is a command prefix
			which will be invoked to retrieve the
			attribute's argument(s) from the command
			line.</p>
<p>This key is optional. If it is not specified a
			default is used which takes the single word
			after the attribute name as the attribute's
			value.</p>
<p>The signature of the command prefix is</p>
<dl class="definitions">
			
<dt><b class="cmd">cmdprefix</b> <i class="arg">wordqueue</i></dt>
<dd><p>Where <i class="arg">wordqueue</i> is the handle of
				a queue object conforming to the API
				of the queues provided by package
				<b class="package">struct::queue</b>. This queue
				contains the not-yet-processed part of
				the attribute definitions, with one
				entry per word, with the first entry
				the word <em>after</em> name of the
				attribute. In other words, the
				attribute's name has already been
				removed from the queue.</p>
<p>The result of the command is the value
				of the attribute, which may have been
				taken from the queue, or not.</p></dd>
</dl></dd>
<dt><b class="const">transform</b></dt>
<dd><p>The value of this key is a command prefix
			which will be invoked to transform the
			retrieved value (See <b class="const">get</b>) into their
			final form.</p>
<p>This key is optional. If it is not specified
			no transformation is done.
			The signature of the command prefix is</p>
<dl class="definitions">
			
<dt><b class="cmd">cmdprefix</b> <i class="arg">value</i></dt>
<dd><p>Where <i class="arg">value</i> is the value to transform.</p>
<p>The result of the command is the final
				value of the attribute.</p></dd>
</dl></dd>
<dt><b class="const">type</b></dt>
<dd><p>The value of this key is a command prefix
			which will be invoked to validate the
			attribute's argument(s).</p>
<p>This key is optional. If it is not specified
			no validation is done.</p>
<p>The signature of the command prefix is that of
			snit validation types. See the documentation
			of the <b class="package"><a href="../../../../index.html#key3">snit</a></b> package.</p></dd>
<dt><b class="const">merge</b></dt>
<dd><p>The value of this key is a command prefix
			which will be invoked to insert the
			transformed and validated attribute value into
			the dictionary of collected attributes.</p>
<p>This key is optional. If it is not specified
			a default merge is chosen, based on the data
			for key <b class="const">aggregate</b>, see below.
			The signature of the command prefix is</p>
<dl class="definitions">
			
<dt><b class="cmd">cmdprefix</b> <i class="arg">value</i> <i class="arg">dict</i></dt>
<dd><p>Where <i class="arg">value</i> is the value to
				insert, and <i class="arg">dict</i> the dictionary
				of attributes and values collected so
				far.</p>
<p>The result of the command is the new
				dictionary of attributes.</p></dd>
</dl></dd>
<dt><b class="const">aggregate</b></dt>
<dd><p>The value of this key is a boolean flag. It
			has an effect if and only if the key <b class="const">merge</b> was not specified. This key is
			optional. If it is not specified it defaults
			to <b class="const">False</b>.</p>
<p>If the key is effective, the value of <b class="const">False</b> means that the attribute's value is
			<em>set</em> into the dictionary using the value
			of key <i class="arg">key</i> (see above) as index,
			<em>overwriting</em> any previously specified value.</p>
<p>If the key is effective, the value of <b class="const">True</b> means that the attribute's value is
			<em>added</em> to the dictionary using the value
			of key <i class="arg">key</i> (see above) as index,
			<em>extending</em> any previously specified value.
			This means that the final value of the
			attribute as seen after processing will be a
			list of the collected values.</p></dd>
<dt><b class="const">default</b></dt>
<dd><p>The value of this key is a command prefix
			which will be invoked after collection of
			attributes has been completed and this
			attribute is in the list of required
			attributes for the drawing element (See
			argument <i class="arg">attributes</i> of method
			<b class="method">new element</b>).</p>
<p>Note that the connection is made through the
			value of key <i class="arg">key</i>, not through the
			attribute name per se.</p>
<p>Further note that this command prefix is
			invoked even if a user specified attribute
			value is present. This allows the command
			to go beyond simply setting defaults, it
			can calculate and store derived values as
			well.</p>
<p>This key is optional. If an element requires
			this attribute, but <i class="arg">default</i> is not
			specified then nothing will be done.</p>
<p>The signature of the command prefix is</p>
<dl class="definitions">
			
<dt><b class="cmd">cmdprefix</b> <b class="method">init</b></dt>
<dd><p>This method is run when the attribute
				is defined, its responsibility is to
				initialize anything in the language
				namespace for the attribute and
				default processing.</p>
<p>The result of this method is ignored.</p></dd>
<dt><b class="cmd">cmdprefix</b> <b class="method">fill</b> <i class="arg">varname</i></dt>
<dd><p>This method is run to put defaults, or
				derived values into the attribute dictionary
				named by <i class="arg">varname</i>. This variable will
				be found in the calling context.</p>
<p>The result of this method is ignored.</p></dd>
<dt><b class="cmd">cmdprefix</b> <b class="method">set</b> <i class="arg">name</i> <i class="arg">value</i></dt>
<dd><p>This method is run to push current a
				attribute value into the language
				namespace, to make it the new default.</p>
<p>The result of this method is ignored.</p></dd>
</dl></dd>
<dt><b class="const">linked</b></dt>
<dd><p>This key is effective if and only if key
			<b class="const">default</b> is not specified. In that
			case is supplies a default handling for
			<b class="const">default</b>, linking the attribute to a
			variable in the language context.</p>
<p>The value for this key is a 2-element list
			containing the name of the variable to link
			to, and its initial value, in this order.</p></dd>
</dl></dd>
<dt><a name="7"><i class="arg">diagramObject</i> <b class="method">unknown attribute</b> <i class="arg">cmdprefix</i></a></dt>
<dd><p>This method registers the command prefix with the
		subsystem processing the attributes for element
		commands, telling it to call it when it encounters an
		attribute it is unable to handle on its on.</p>
<p>It is allowed to register more than callback, these
		will be called in order of registration (i.e. first to
		last), until one of the callbacks accepts the current
		input.
		The command prefix is expected to conform to the
		following signature:</p>
<dl class="definitions">
		
<dt><b class="cmd">cmdprefix</b> <i class="arg">wordqueue</i></dt>
<dd><p>Where <i class="arg">wordqueue</i> is the handle of a queue
			object conforming to the API of the queues
			provided by package <b class="package">struct::queue</b>.
			This queue contains the not-yet-processed part
			of the attribute definitions, with one entry
			per word, with the first entry the name of the
			attribute which could not be processed.</p>
<p>The results of the command has to be a boolean
			value where <b class="const">True</b> signals that this
			callback has accepted the attribute, processed
			it, and the new state of the <i class="arg">wordqueue</i>
			is where the general processing shall continue.</p>
<p>Given the signature the command has basically
			two ways of handling (rewriting) the attributes
			it recognizes:</p>
<ol class="enumerated">
			
<li><p>Replace the attribute (and arguments)
				with a different attribute and arguments.</p></li>
<li><p>Push additional words in front to get
				the general processing unstuck.</p></li>
</ol></dd>
</dl></dd>
<dt><a name="8"><i class="arg">diagramObject</i> <b class="method">draw</b> <i class="arg">script</i></a></dt>
<dd><p>This method runs the given <i class="arg">script</i> in the
		context of the drawing language definitions.
		See section <span class="sectref"><a href="#section3">Language Reference</a></span> for
		details on the available commands.</p>
<p><em>Note</em> that <i class="arg">script</i> is <em>trusted</em>.
		It is executed in the current interpreter with
		access to its full abilities.
		For the execution of untrusted diagram scripts this
		interpreter should be a safe one.</p></dd>
</dl>
</div>
</div>
<div id="section3" class="section"><h2><a name="section3">Language Reference</a></h2>
<div id="subsection3" class="subsection"><h3><a name="subsection3">Elements</a></h3>
<p>This section lists the commands for the predefined drawing elements,
aka shapes. These commands are all defined in the language's context.
All commands of this section return the handle of the newly created
element as their result. This handle also exists as a command which
can be used to query the element for its corners (names, values).
See section <span class="sectref"><a href="#subsection7">Miscellaneous Commands</a></span>.
<img alt="figure-02-basic-shapes" src="../../../../image/figure-02-basic-shapes.png"></p>
<dl class="definitions">
<dt><a name="9"><b class="cmd"><a href="../../../../index.html#key82">arc</a></b> <i class="arg">attr</i>...</a></dt>
<dd><p><img alt="figure-02-arc" src="../../../../image/figure-02-arc.png">
An open element with the corresponding corners, i.e. &quot;start&quot;, &quot;end&quot;,
and &quot;center&quot;.
Note however that it also has the compass rose of closed elements as
its corners, with the center of the arc's circle as the center of the
compass and the other points on the circle the arc is part of.
It handles the attributes</p>
<dl class="definitions">
<dt><b class="cmd">anchor</b> <i class="arg">name</i></dt>
<dd></dd>
<dt><b class="cmd">ljust</b></dt>
<dd></dd>
<dt><b class="cmd">rjust</b></dt>
<dd></dd>
<dt><b class="cmd">above</b></dt>
<dd></dd>
<dt><b class="cmd">below</b></dt>
<dd><p><img alt="figure-22-text-anchoring-3" src="../../../../image/figure-22-text-anchoring-3.png">
Specifies the anchor of the text which is to be placed at the
element's center, by name. I.e. this attribute defines the text's
position relative to the element's center.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">anchor</b>, which itself defaults to
<b class="const">center</b>.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm">Tk_GetAnchor</a>.
The commands without arguments are all shorthands with the anchor
implied. Note that they do not combine, only the last is used. For
comined directions the main attribute command, <b class="cmd">anchor</b> has to be
used.</p>
<dl class="definitions">
<dt><b class="cmd">ljust</b></dt>
<dd><p>&quot;anchor west&quot;</p></dd>
<dt><b class="cmd">rjust</b></dt>
<dd><p>&quot;anchor east&quot;</p></dd>
<dt><b class="cmd">above</b></dt>
<dd><p>&quot;anchor south&quot;</p></dd>
<dt><b class="cmd">below</b></dt>
<dd><p>&quot;anchor north&quot;</p></dd>
</dl></dd>
<dt><b class="cmd">clockwise</b></dt>
<dd></dd>
<dt><b class="cmd">cw</b></dt>
<dd><p>Specifies the direction of the <b class="cmd"><a href="../../../../index.html#key82">arc</a></b> element, here going
clockwise.
The complementary attribute is <b class="cmd">counterclockwise</b>.
If not specified the system falls back to the value taken from the
language variable <b class="variable">clockwise</b>, which itself defaults to 
<b class="const">false</b>, for counter-clockwise direction.</p></dd>
<dt><b class="cmd">color</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linecolor</b>, which itself defaults to <b class="const">black</b>.</p></dd>
<dt><b class="cmd">counterclockwise</b></dt>
<dd></dd>
<dt><b class="cmd">ccw</b></dt>
<dd><p>Specifies the direction of the <b class="cmd"><a href="../../../../index.html#key82">arc</a></b> element, here
counter-clockwise.
The complementary attribute is <b class="cmd">clockwise</b>.
If not specified the system falls back to the value taken from the
language variable <b class="variable">clockwise</b>, which itself defaults to 
<b class="const">false</b>, for counter-clockwise direction.</p></dd>
<dt><b class="cmd">fillcolor</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the inside of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">fillcolor</b>, which itself defaults to the empty
string, signaling &quot;no filling&quot;.</p></dd>
<dt><b class="cmd">from</b> <i class="arg">location</i></dt>
<dd><p>Specifies the location where the <b class="cmd"><a href="../../../../index.html#key82">arc</a></b> element begins.
Defaults to the current location as maintained by the layouting
system.</p></dd>
<dt><b class="cmd">justify</b> <b class="const">left</b>|<b class="const">center</b>|<b class="const">right</b></dt>
<dd><p>Specifies how multi-line text associated with the element is
positioned within its box.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">justify</b>, which itself defaults to
<b class="const">left</b>.
The legal values are <b class="const">left</b>, <b class="const">right</b>, and <b class="const">center</b>.</p></dd>
<dt><b class="cmd">radius</b> <i class="arg">length</i></dt>
<dd><p>Specifies the radius of the <b class="cmd"><a href="../../../../index.html#key82">arc</a></b> element, or rather, the radius
of the circle the shown arc is a part of.
If not specified the system falls back to the value taken from the
language variable <b class="variable">arcradius</b>, which itself defaults to the pixel
equivalent of <b class="const">1 cm</b>.</p></dd>
<dt><b class="cmd">stroke</b> <i class="arg">width</i></dt>
<dd><p><img alt="figure-20-style-stroke" src="../../../../image/figure-20-style-stroke.png">
Specifies the width of the lines drawn for the the element, in pixels.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linewidth</b>, which itself defaults to <b class="const">1</b>.</p></dd>
<dt><b class="cmd">style</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-18-style-dash" src="../../../../image/figure-18-style-dash.png">
Specifies the style used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linestyle</b>, which itself defaults to
<b class="const">solid</b> lines.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm">Tk_GetDash</a>,
and additionally all which are listed below:</p>
<dl class="definitions">
<dt><b class="const">solid</b>, empty string</dt>
<dd><p>Draw solid line.</p></dd>
<dt><b class="const">dash</b>, <b class="const">dashed</b>, <b class="const">-</b></dt>
<dd><p>Draw a dashed line.</p></dd>
<dt><b class="const">dot</b>, <b class="const">dotted</b>, <b class="const">.</b></dt>
<dd><p>Draw a dotted line.</p></dd>
<dt><b class="const">dash-dot</b>, <b class="const">-.</b></dt>
<dd><p>Draw a dash-dotted line</p></dd>
<dt><b class="const">dash-dot-dot</b>, <b class="const">-..</b></dt>
<dd><p>Draw a dash-dot-dotted line.</p></dd>
</dl>
<p>Note that the values &quot;solid&quot;, &quot;dot(ted)&quot;, &quot;dash(ed)&quot;, &quot;dash-dot&quot;, and
&quot;dash-dot-dot&quot; are all accepted as shorthands for the <b class="cmd">style</b>
command using them as argument.</p></dd>
<dt><b class="cmd"><a href="../../../../index.html#key7">text</a></b> <i class="arg">string</i></dt>
<dd><p>Specifies the text to associate with the element.
Defaults to nothing.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element.</p></dd>
<dt><b class="cmd">textcolor</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the color used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textcolor</b>, which itself defaults to
<b class="const">black</b>.</p></dd>
<dt><b class="cmd">textfont</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the font used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textfont</b>, which itself defaults to
<b class="const">Helvetica 12pt</b>.</p></dd>
<dt><b class="cmd">to</b> <i class="arg">location</i></dt>
<dd><p>Specifies the location where the <b class="cmd"><a href="../../../../index.html#key82">arc</a></b> element ends.
Defaults to a location such that a 90-degree arc is drawn in the
chosen direction, starting at <b class="cmd">from</b>.</p></dd>
</dl></dd>
<dt><a name="10"><b class="cmd"><a href="../../../../index.html#key77">arrow</a></b> <i class="arg">attr</i>...</a></dt>
<dd></dd>
<dt><a name="11"><b class="cmd">--&gt;</b> <i class="arg">attr</i>...</a></dt>
<dd></dd>
<dt><a name="12"><b class="cmd">&lt;--&gt;</b> <i class="arg">attr</i>...</a></dt>
<dd></dd>
<dt><a name="13"><b class="cmd">&lt;--&gt;</b> <i class="arg">attr</i>...</a></dt>
<dd><p><img alt="figure-02-arrow" src="../../../../image/figure-02-arrow.png">
An alias for the <b class="cmd"><a href="../../../../index.html#key83">line</a></b> element (see below), with the attribute
<b class="cmd">arrowhead</b> preset to <b class="const">-&gt;</b>, <b class="const">&lt;-&gt;</b>, or <b class="const">&lt;-</b>.  The
<b class="cmd"><a href="../../../../index.html#key77">arrow</a></b> is equivalent to <b class="cmd">--&gt;</b>.</p></dd>
<dt><a name="14"><b class="cmd">block</b> <i class="arg">script</i> <i class="arg">attr</i>...</a></dt>
<dd><p>A closed element with the corresponding corners, i.e. the eight
directions of the compass rose, and &quot;center&quot;.
The main effect is the aggregration of all elements created by the
<i class="arg">script</i> into one element.
This also means that while the elements created by the script are
visible in the element history while the script is executing,
afterward the history contains only the block itself, and not the
elements it is composed of.</p>
<p>The script has access to the current state of all variables in the
language context.
Any changes to the variables will be reverted after execution of the
block.
However, also, any variables set in the script will be exported as
corners of the element, allowing users to define their own named
locations in the block.</p>
<p>Regarding the layout mechanism any changes made by the script are
reverted after the element is done.
In other words, a block is an implicit <b class="cmd">group</b>.</p>
<p>Blocks handle all attributes, propgating their settings into the
script as the default values active during script execution.</p></dd>
<dt><a name="15"><b class="cmd"><a href="../../../../index.html#key74">box</a></b> <i class="arg">attr</i>...</a></dt>
<dd><p><img alt="figure-02-box" src="../../../../image/figure-02-box.png">
A closed element with the corresponding corners, i.e. the eight
directions of the compass rose, and &quot;center&quot;.
It handles the attributes</p>
<dl class="definitions">
<dt><b class="cmd">anchor</b> <i class="arg">name</i></dt>
<dd></dd>
<dt><b class="cmd">ljust</b></dt>
<dd></dd>
<dt><b class="cmd">rjust</b></dt>
<dd></dd>
<dt><b class="cmd">above</b></dt>
<dd></dd>
<dt><b class="cmd">below</b></dt>
<dd><p><img alt="figure-22-text-anchoring-3" src="../../../../image/figure-22-text-anchoring-3.png">
Specifies the anchor of the text which is to be placed at the
element's center, by name. I.e. this attribute defines the text's
position relative to the element's center.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">anchor</b>, which itself defaults to
<b class="const">center</b>.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm">Tk_GetAnchor</a>.
The commands without arguments are all shorthands with the anchor
implied. Note that they do not combine, only the last is used. For
comined directions the main attribute command, <b class="cmd">anchor</b> has to be
used.</p>
<dl class="definitions">
<dt><b class="cmd">ljust</b></dt>
<dd><p>&quot;anchor west&quot;</p></dd>
<dt><b class="cmd">rjust</b></dt>
<dd><p>&quot;anchor east&quot;</p></dd>
<dt><b class="cmd">above</b></dt>
<dd><p>&quot;anchor south&quot;</p></dd>
<dt><b class="cmd">below</b></dt>
<dd><p>&quot;anchor north&quot;</p></dd>
</dl></dd>
<dt><b class="cmd">at</b> <i class="arg">location</i></dt>
<dd><p>Specifies the location of the element's corner named by the attribute
<b class="cmd">with</b>.
Defaults to the current location as maintained by the layouting
system.</p></dd>
<dt><b class="cmd">color</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linecolor</b>, which itself defaults to <b class="const">black</b>.</p></dd>
<dt><b class="cmd">fillcolor</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the inside of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">fillcolor</b>, which itself defaults to the empty
string, signaling &quot;no filling&quot;.</p></dd>
<dt><b class="cmd">height</b> <i class="arg">length</i></dt>
<dd></dd>
<dt><b class="cmd">ht</b> <i class="arg">length</i></dt>
<dd><p>Specifies the height of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">boxheight</b>, which itself defaults to the
pixel equivalent of <b class="const">2 cm</b>.</p></dd>
<dt><b class="cmd">justify</b> <b class="const">left</b>|<b class="const">center</b>|<b class="const">right</b></dt>
<dd><p>Specifies how multi-line text associated with the element is
positioned within its box.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">justify</b>, which itself defaults to
<b class="const">left</b>.
The legal values are <b class="const">left</b>, <b class="const">right</b>, and <b class="const">center</b>.</p></dd>
<dt><b class="cmd">slant</b> <i class="arg">angle</i></dt>
<dd><p>Specifies the angle by which the <b class="cmd"><a href="../../../../index.html#key74">box</a></b> element is slanted, in
degrees.
If not specified the system falls back to the value taken from the
language variable <b class="variable">slant</b>, which itself defaults to <b class="const">90</b>,
i.e. vertical, no slant.
0 degrees is slanting straight east, pointing to the right.
90 degrees is slanting to the north, pointing straight up.</p></dd>
<dt><b class="cmd">stroke</b> <i class="arg">width</i></dt>
<dd><p><img alt="figure-20-style-stroke" src="../../../../image/figure-20-style-stroke.png">
Specifies the width of the lines drawn for the the element, in pixels.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linewidth</b>, which itself defaults to <b class="const">1</b>.</p></dd>
<dt><b class="cmd">style</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-18-style-dash" src="../../../../image/figure-18-style-dash.png">
Specifies the style used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linestyle</b>, which itself defaults to
<b class="const">solid</b> lines.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm">Tk_GetDash</a>,
and additionally all which are listed below:</p>
<dl class="definitions">
<dt><b class="const">solid</b>, empty string</dt>
<dd><p>Draw solid line.</p></dd>
<dt><b class="const">dash</b>, <b class="const">dashed</b>, <b class="const">-</b></dt>
<dd><p>Draw a dashed line.</p></dd>
<dt><b class="const">dot</b>, <b class="const">dotted</b>, <b class="const">.</b></dt>
<dd><p>Draw a dotted line.</p></dd>
<dt><b class="const">dash-dot</b>, <b class="const">-.</b></dt>
<dd><p>Draw a dash-dotted line</p></dd>
<dt><b class="const">dash-dot-dot</b>, <b class="const">-..</b></dt>
<dd><p>Draw a dash-dot-dotted line.</p></dd>
</dl>
<p>Note that the values &quot;solid&quot;, &quot;dot(ted)&quot;, &quot;dash(ed)&quot;, &quot;dash-dot&quot;, and
&quot;dash-dot-dot&quot; are all accepted as shorthands for the <b class="cmd">style</b>
command using them as argument.</p></dd>
<dt><b class="cmd"><a href="../../../../index.html#key7">text</a></b> <i class="arg">string</i></dt>
<dd><p>Specifies the text to associate with the element.
Defaults to nothing.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element.</p></dd>
<dt><b class="cmd">textcolor</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the color used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textcolor</b>, which itself defaults to
<b class="const">black</b>.</p></dd>
<dt><b class="cmd">textfont</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the font used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textfont</b>, which itself defaults to
<b class="const">Helvetica 12pt</b>.</p></dd>
<dt><b class="cmd">width</b> <i class="arg">length</i></dt>
<dd></dd>
<dt><b class="cmd">wid</b> <i class="arg">length</i></dt>
<dd><p>Specifies the width of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">boxwidth</b>, which itself defaults to the pixel
equivalent of <b class="const">2 cm</b>.</p></dd>
<dt><b class="cmd">with</b> <i class="arg">corner</i></dt>
<dd><p>Specifies the corner of the element to place at the location given by
the attribute <b class="cmd">at</b>.
Defaults to the current corner as maintained by the layouting system,
except if the value for <b class="cmd">at</b> was specified by the user. In that
case it defaults to <b class="const">center</b>.</p></dd>
</dl></dd>
<dt><a name="16"><b class="cmd"><a href="../../../../index.html#key86">circle</a></b> <i class="arg">attr</i>...</a></dt>
<dd></dd>
<dt><a name="17"><b class="cmd">O</b> <i class="arg">attr</i>...</a></dt>
<dd><p><img alt="figure-02-circle" src="../../../../image/figure-02-circle.png">
A closed element with the corresponding corners, i.e. the eight
directions of the compass rose, and &quot;center&quot;.
It handles the attributes</p>
<dl class="definitions">
<dt><b class="cmd">anchor</b> <i class="arg">name</i></dt>
<dd></dd>
<dt><b class="cmd">ljust</b></dt>
<dd></dd>
<dt><b class="cmd">rjust</b></dt>
<dd></dd>
<dt><b class="cmd">above</b></dt>
<dd></dd>
<dt><b class="cmd">below</b></dt>
<dd><p><img alt="figure-22-text-anchoring-3" src="../../../../image/figure-22-text-anchoring-3.png">
Specifies the anchor of the text which is to be placed at the
element's center, by name. I.e. this attribute defines the text's
position relative to the element's center.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">anchor</b>, which itself defaults to
<b class="const">center</b>.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm">Tk_GetAnchor</a>.
The commands without arguments are all shorthands with the anchor
implied. Note that they do not combine, only the last is used. For
comined directions the main attribute command, <b class="cmd">anchor</b> has to be
used.</p>
<dl class="definitions">
<dt><b class="cmd">ljust</b></dt>
<dd><p>&quot;anchor west&quot;</p></dd>
<dt><b class="cmd">rjust</b></dt>
<dd><p>&quot;anchor east&quot;</p></dd>
<dt><b class="cmd">above</b></dt>
<dd><p>&quot;anchor south&quot;</p></dd>
<dt><b class="cmd">below</b></dt>
<dd><p>&quot;anchor north&quot;</p></dd>
</dl></dd>
<dt><b class="cmd">at</b> <i class="arg">location</i></dt>
<dd><p>Specifies the location of the element's corner named by the attribute
<b class="cmd">with</b>.
Defaults to the current location as maintained by the layouting
system.</p></dd>
<dt><b class="cmd">color</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linecolor</b>, which itself defaults to <b class="const">black</b>.</p></dd>
<dt><b class="cmd">diameter</b> <i class="arg">length</i></dt>
<dd></dd>
<dt><b class="cmd">diam</b> <i class="arg">length</i></dt>
<dd><p>Specifies the diameter of the <b class="cmd"><a href="../../../../index.html#key86">circle</a></b> element, as an alternative
way to specify its <b class="cmd">radius</b>.
Effective if and only if the radius was not specified. I.e. if both
diameter and radius are specified then the radius infomration has
precendence.
This attribute has no default, because the defaults are taken from the
radius.</p></dd>
<dt><b class="cmd">fillcolor</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the inside of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">fillcolor</b>, which itself defaults to the empty
string, signaling &quot;no filling&quot;.</p></dd>
<dt><b class="cmd">justify</b> <b class="const">left</b>|<b class="const">center</b>|<b class="const">right</b></dt>
<dd><p>Specifies how multi-line text associated with the element is
positioned within its box.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">justify</b>, which itself defaults to
<b class="const">left</b>.
The legal values are <b class="const">left</b>, <b class="const">right</b>, and <b class="const">center</b>.</p></dd>
<dt><b class="cmd">radius</b> <i class="arg">length</i></dt>
<dd></dd>
<dt><b class="cmd">rad</b> <i class="arg">length</i></dt>
<dd><p>Specifies the radius of the <b class="cmd"><a href="../../../../index.html#key86">circle</a></b> element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">circleradius</b>, which itself defaults to the
pixel equivalent of <b class="const">1 cm</b>.</p></dd>
<dt><b class="cmd">stroke</b> <i class="arg">width</i></dt>
<dd><p><img alt="figure-20-style-stroke" src="../../../../image/figure-20-style-stroke.png">
Specifies the width of the lines drawn for the the element, in pixels.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linewidth</b>, which itself defaults to <b class="const">1</b>.</p></dd>
<dt><b class="cmd">style</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-18-style-dash" src="../../../../image/figure-18-style-dash.png">
Specifies the style used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linestyle</b>, which itself defaults to
<b class="const">solid</b> lines.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm">Tk_GetDash</a>,
and additionally all which are listed below:</p>
<dl class="definitions">
<dt><b class="const">solid</b>, empty string</dt>
<dd><p>Draw solid line.</p></dd>
<dt><b class="const">dash</b>, <b class="const">dashed</b>, <b class="const">-</b></dt>
<dd><p>Draw a dashed line.</p></dd>
<dt><b class="const">dot</b>, <b class="const">dotted</b>, <b class="const">.</b></dt>
<dd><p>Draw a dotted line.</p></dd>
<dt><b class="const">dash-dot</b>, <b class="const">-.</b></dt>
<dd><p>Draw a dash-dotted line</p></dd>
<dt><b class="const">dash-dot-dot</b>, <b class="const">-..</b></dt>
<dd><p>Draw a dash-dot-dotted line.</p></dd>
</dl>
<p>Note that the values &quot;solid&quot;, &quot;dot(ted)&quot;, &quot;dash(ed)&quot;, &quot;dash-dot&quot;, and
&quot;dash-dot-dot&quot; are all accepted as shorthands for the <b class="cmd">style</b>
command using them as argument.</p></dd>
<dt><b class="cmd"><a href="../../../../index.html#key7">text</a></b> <i class="arg">string</i></dt>
<dd><p>Specifies the text to associate with the element.
Defaults to nothing.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element.</p></dd>
<dt><b class="cmd">textcolor</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the color used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textcolor</b>, which itself defaults to
<b class="const">black</b>.</p></dd>
<dt><b class="cmd">textfont</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the font used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textfont</b>, which itself defaults to
<b class="const">Helvetica 12pt</b>.</p></dd>
<dt><b class="cmd">with</b> <i class="arg">corner</i></dt>
<dd><p>Specifies the corner of the element to place at the location given by
the attribute <b class="cmd">at</b>.
Defaults to the current corner as maintained by the layouting system,
except if the value for <b class="cmd">at</b> was specified by the user. In that
case it defaults to <b class="const">center</b>.</p></dd>
</dl></dd>
<dt><a name="18"><b class="cmd"><a href="../../../../index.html#key87">diamond</a></b> <i class="arg">attr</i>...</a></dt>
<dd></dd>
<dt><a name="19"><b class="cmd">&lt;&gt;</b> <i class="arg">attr</i>...</a></dt>
<dd><p><img alt="figure-02-diamond" src="../../../../image/figure-02-diamond.png">
A closed element with the corresponding corners, i.e. the eight
directions of the compass rose, and &quot;center&quot;.
It handles the attributes</p>
<dl class="definitions">
<dt><b class="cmd">anchor</b> <i class="arg">name</i></dt>
<dd></dd>
<dt><b class="cmd">ljust</b></dt>
<dd></dd>
<dt><b class="cmd">rjust</b></dt>
<dd></dd>
<dt><b class="cmd">above</b></dt>
<dd></dd>
<dt><b class="cmd">below</b></dt>
<dd><p><img alt="figure-22-text-anchoring-3" src="../../../../image/figure-22-text-anchoring-3.png">
Specifies the anchor of the text which is to be placed at the
element's center, by name. I.e. this attribute defines the text's
position relative to the element's center.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">anchor</b>, which itself defaults to
<b class="const">center</b>.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm">Tk_GetAnchor</a>.
The commands without arguments are all shorthands with the anchor
implied. Note that they do not combine, only the last is used. For
comined directions the main attribute command, <b class="cmd">anchor</b> has to be
used.</p>
<dl class="definitions">
<dt><b class="cmd">ljust</b></dt>
<dd><p>&quot;anchor west&quot;</p></dd>
<dt><b class="cmd">rjust</b></dt>
<dd><p>&quot;anchor east&quot;</p></dd>
<dt><b class="cmd">above</b></dt>
<dd><p>&quot;anchor south&quot;</p></dd>
<dt><b class="cmd">below</b></dt>
<dd><p>&quot;anchor north&quot;</p></dd>
</dl></dd>
<dt><b class="cmd">aspect</b> <i class="arg">number</i></dt>
<dd><p>Specifies the aspect ratio, i.e ratio of width to height, of the
<b class="cmd"><a href="../../../../index.html#key87">diamond</a></b> element.
The manner in which a default is calculated when not specified also
depends on the specifications of the attributes <b class="cmd">width</b> and
<b class="cmd">height</b>, if any.</p>
<p>If both <b class="cmd">width</b>, and <b class="cmd">height</b> are specified then any
specification of <b class="cmd">aspect</b> is ignored, as it is implicitly defined
in the width and height as well, and this takes precedence. A missing
specification is ignored in that case well, i.e. no defaults are
required.</p>
<p>If the <b class="cmd">aspect</b> is specified, and one of the attributes
<b class="cmd">width</b> or <b class="cmd">height</b>, then the missing attribute is calculated
from the two which are specified. No defaults are required for these
cases either.</p>
<p>If only one of the attributes <b class="cmd">width</b> or <b class="cmd">height</b> is specified
then the system uses a fallback for the <b class="cmd">aspect</b>, the value taken
from the language variable <b class="variable">diamondaspect</b>, which itselfs defaults
to <b class="const">2</b>.</p>
<p>If none of of the attributes <b class="cmd">width</b> or <b class="cmd">height</b> is specified
then the system uses a fallback for the <b class="cmd">width</b>, the value taken
from the language variable <b class="variable">boxwidth</b>, which itselfs defaults to
the pixel equivalent of <b class="const">2 cm</b>. For the aspect it uses either
the user-specified value or the default taken as described in the
previous paragraph.</p></dd>
<dt><b class="cmd">at</b> <i class="arg">location</i></dt>
<dd><p>Specifies the location of the element's corner named by the attribute
<b class="cmd">with</b>.
Defaults to the current location as maintained by the layouting
system.</p></dd>
<dt><b class="cmd">color</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linecolor</b>, which itself defaults to <b class="const">black</b>.</p></dd>
<dt><b class="cmd">fillcolor</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the inside of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">fillcolor</b>, which itself defaults to the empty
string, signaling &quot;no filling&quot;.</p></dd>
<dt><b class="cmd">height</b> <i class="arg">length</i></dt>
<dd><p>Specifies the height of the <b class="cmd"><a href="../../../../index.html#key87">diamond</a></b> element.
The manner in which a default is calculated when not specified also
depends on the specifications of the attributes <b class="cmd">aspect</b> and
<b class="cmd">width</b>, if any.</p>
<p>If both <b class="cmd">width</b>, and <b class="cmd">height</b> are specified then any
specification of <b class="cmd">aspect</b> is ignored, as it is implicitly defined
in the width and height as well, and this takes precedence. A missing
specification is ignored in that case well, i.e. no defaults are
required.</p>
<p>If the <b class="cmd">aspect</b> is specified, and one of the attributes
<b class="cmd">width</b> or <b class="cmd">height</b>, then the missing attribute is calculated
from the two which are specified. No defaults are required for these
cases either.</p>
<p>If only one of the attributes <b class="cmd">width</b> or <b class="cmd">height</b> is specified
then the system uses a fallback for the <b class="cmd">aspect</b>, the value taken
from the language variable <b class="variable">diamondaspect</b>, which itselfs defaults
to <b class="const">2</b>.</p>
<p>If none of of the attributes <b class="cmd">width</b> or <b class="cmd">height</b> is specified
then the system uses a fallback for the <b class="cmd">width</b>, the value taken
from the language variable <b class="variable">boxwidth</b>, which itselfs defaults to
the pixel equivalent of <b class="const">2 cm</b>. For the aspect it uses either
the user-specified value or the default taken as described in the
previous paragraph.</p></dd>
<dt><b class="cmd">justify</b> <b class="const">left</b>|<b class="const">center</b>|<b class="const">right</b></dt>
<dd><p>Specifies how multi-line text associated with the element is
positioned within its box.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">justify</b>, which itself defaults to
<b class="const">left</b>.
The legal values are <b class="const">left</b>, <b class="const">right</b>, and <b class="const">center</b>.</p></dd>
<dt><b class="cmd">stroke</b> <i class="arg">width</i></dt>
<dd><p><img alt="figure-20-style-stroke" src="../../../../image/figure-20-style-stroke.png">
Specifies the width of the lines drawn for the the element, in pixels.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linewidth</b>, which itself defaults to <b class="const">1</b>.</p></dd>
<dt><b class="cmd">style</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-18-style-dash" src="../../../../image/figure-18-style-dash.png">
Specifies the style used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linestyle</b>, which itself defaults to
<b class="const">solid</b> lines.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm">Tk_GetDash</a>,
and additionally all which are listed below:</p>
<dl class="definitions">
<dt><b class="const">solid</b>, empty string</dt>
<dd><p>Draw solid line.</p></dd>
<dt><b class="const">dash</b>, <b class="const">dashed</b>, <b class="const">-</b></dt>
<dd><p>Draw a dashed line.</p></dd>
<dt><b class="const">dot</b>, <b class="const">dotted</b>, <b class="const">.</b></dt>
<dd><p>Draw a dotted line.</p></dd>
<dt><b class="const">dash-dot</b>, <b class="const">-.</b></dt>
<dd><p>Draw a dash-dotted line</p></dd>
<dt><b class="const">dash-dot-dot</b>, <b class="const">-..</b></dt>
<dd><p>Draw a dash-dot-dotted line.</p></dd>
</dl>
<p>Note that the values &quot;solid&quot;, &quot;dot(ted)&quot;, &quot;dash(ed)&quot;, &quot;dash-dot&quot;, and
&quot;dash-dot-dot&quot; are all accepted as shorthands for the <b class="cmd">style</b>
command using them as argument.</p></dd>
<dt><b class="cmd"><a href="../../../../index.html#key7">text</a></b> <i class="arg">string</i></dt>
<dd><p>Specifies the text to associate with the element.
Defaults to nothing.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element.</p></dd>
<dt><b class="cmd">textcolor</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the color used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textcolor</b>, which itself defaults to
<b class="const">black</b>.</p></dd>
<dt><b class="cmd">textfont</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the font used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textfont</b>, which itself defaults to
<b class="const">Helvetica 12pt</b>.</p></dd>
<dt><b class="cmd">width</b> <i class="arg">length</i></dt>
<dd><p>Specifies the width of the <b class="cmd"><a href="../../../../index.html#key87">diamond</a></b> element.
The manner in which a default is calculated when not specified also
depends on the specifications of the attributes <b class="cmd">aspect</b> and
<b class="cmd">height</b>, if any.</p>
<p>If both <b class="cmd">width</b>, and <b class="cmd">height</b> are specified then any
specification of <b class="cmd">aspect</b> is ignored, as it is implicitly defined
in the width and height as well, and this takes precedence. A missing
specification is ignored in that case well, i.e. no defaults are
required.</p>
<p>If the <b class="cmd">aspect</b> is specified, and one of the attributes
<b class="cmd">width</b> or <b class="cmd">height</b>, then the missing attribute is calculated
from the two which are specified. No defaults are required for these
cases either.</p>
<p>If only one of the attributes <b class="cmd">width</b> or <b class="cmd">height</b> is specified
then the system uses a fallback for the <b class="cmd">aspect</b>, the value taken
from the language variable <b class="variable">diamondaspect</b>, which itselfs defaults
to <b class="const">2</b>.</p>
<p>If none of of the attributes <b class="cmd">width</b> or <b class="cmd">height</b> is specified
then the system uses a fallback for the <b class="cmd">width</b>, the value taken
from the language variable <b class="variable">boxwidth</b>, which itselfs defaults to
the pixel equivalent of <b class="const">2 cm</b>. For the aspect it uses either
the user-specified value or the default taken as described in the
previous paragraph.</p></dd>
<dt><b class="cmd">with</b> <i class="arg">corner</i></dt>
<dd><p>Specifies the corner of the element to place at the location given by
the attribute <b class="cmd">at</b>.
Defaults to the current corner as maintained by the layouting system,
except if the value for <b class="cmd">at</b> was specified by the user. In that
case it defaults to <b class="const">center</b>.</p></dd>
</dl></dd>
<dt><a name="20"><b class="cmd"><a href="../../../../index.html#key73">drum</a></b> <i class="arg">attr</i>...</a></dt>
<dd><p><img alt="figure-02-drum" src="../../../../image/figure-02-drum.png">
A closed element with the corresponding corners, i.e. the eight
directions of the compass rose, and &quot;center&quot;.
It handles the attributes</p>
<dl class="definitions">
<dt><b class="cmd">anchor</b> <i class="arg">name</i></dt>
<dd></dd>
<dt><b class="cmd">ljust</b></dt>
<dd></dd>
<dt><b class="cmd">rjust</b></dt>
<dd></dd>
<dt><b class="cmd">above</b></dt>
<dd></dd>
<dt><b class="cmd">below</b></dt>
<dd><p><img alt="figure-22-text-anchoring-3" src="../../../../image/figure-22-text-anchoring-3.png">
Specifies the anchor of the text which is to be placed at the
element's center, by name. I.e. this attribute defines the text's
position relative to the element's center.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">anchor</b>, which itself defaults to
<b class="const">center</b>.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm">Tk_GetAnchor</a>.
The commands without arguments are all shorthands with the anchor
implied. Note that they do not combine, only the last is used. For
comined directions the main attribute command, <b class="cmd">anchor</b> has to be
used.</p>
<dl class="definitions">
<dt><b class="cmd">ljust</b></dt>
<dd><p>&quot;anchor west&quot;</p></dd>
<dt><b class="cmd">rjust</b></dt>
<dd><p>&quot;anchor east&quot;</p></dd>
<dt><b class="cmd">above</b></dt>
<dd><p>&quot;anchor south&quot;</p></dd>
<dt><b class="cmd">below</b></dt>
<dd><p>&quot;anchor north&quot;</p></dd>
</dl></dd>
<dt><b class="cmd">aspect</b> <i class="arg">number</i></dt>
<dd><p>Specifies the aspect ratio, i.e ratio of width to height, of the
ellipses which are used to draw the top and bottom of the <b class="cmd"><a href="../../../../index.html#key73">drum</a></b>
element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">drumaspect</b>, which itself defaults to
<b class="const">0.35</b>.</p></dd>
<dt><b class="cmd">at</b> <i class="arg">location</i></dt>
<dd><p>Specifies the location of the element's corner named by the attribute
<b class="cmd">with</b>.
Defaults to the current location as maintained by the layouting
system.</p></dd>
<dt><b class="cmd">color</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linecolor</b>, which itself defaults to <b class="const">black</b>.</p></dd>
<dt><b class="cmd">fillcolor</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the inside of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">fillcolor</b>, which itself defaults to the empty
string, signaling &quot;no filling&quot;.</p></dd>
<dt><b class="cmd">height</b> <i class="arg">length</i></dt>
<dd></dd>
<dt><b class="cmd">ht</b> <i class="arg">length</i></dt>
<dd><p>Specifies the height of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">boxheight</b>, which itself defaults to the
pixel equivalent of <b class="const">2 cm</b>.</p></dd>
<dt><b class="cmd">justify</b> <b class="const">left</b>|<b class="const">center</b>|<b class="const">right</b></dt>
<dd><p>Specifies how multi-line text associated with the element is
positioned within its box.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">justify</b>, which itself defaults to
<b class="const">left</b>.
The legal values are <b class="const">left</b>, <b class="const">right</b>, and <b class="const">center</b>.</p></dd>
<dt><b class="cmd">stroke</b> <i class="arg">width</i></dt>
<dd><p><img alt="figure-20-style-stroke" src="../../../../image/figure-20-style-stroke.png">
Specifies the width of the lines drawn for the the element, in pixels.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linewidth</b>, which itself defaults to <b class="const">1</b>.</p></dd>
<dt><b class="cmd">style</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-18-style-dash" src="../../../../image/figure-18-style-dash.png">
Specifies the style used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linestyle</b>, which itself defaults to
<b class="const">solid</b> lines.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm">Tk_GetDash</a>,
and additionally all which are listed below:</p>
<dl class="definitions">
<dt><b class="const">solid</b>, empty string</dt>
<dd><p>Draw solid line.</p></dd>
<dt><b class="const">dash</b>, <b class="const">dashed</b>, <b class="const">-</b></dt>
<dd><p>Draw a dashed line.</p></dd>
<dt><b class="const">dot</b>, <b class="const">dotted</b>, <b class="const">.</b></dt>
<dd><p>Draw a dotted line.</p></dd>
<dt><b class="const">dash-dot</b>, <b class="const">-.</b></dt>
<dd><p>Draw a dash-dotted line</p></dd>
<dt><b class="const">dash-dot-dot</b>, <b class="const">-..</b></dt>
<dd><p>Draw a dash-dot-dotted line.</p></dd>
</dl>
<p>Note that the values &quot;solid&quot;, &quot;dot(ted)&quot;, &quot;dash(ed)&quot;, &quot;dash-dot&quot;, and
&quot;dash-dot-dot&quot; are all accepted as shorthands for the <b class="cmd">style</b>
command using them as argument.</p></dd>
<dt><b class="cmd"><a href="../../../../index.html#key7">text</a></b> <i class="arg">string</i></dt>
<dd><p>Specifies the text to associate with the element.
Defaults to nothing.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element.</p></dd>
<dt><b class="cmd">textcolor</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the color used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textcolor</b>, which itself defaults to
<b class="const">black</b>.</p></dd>
<dt><b class="cmd">textfont</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the font used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textfont</b>, which itself defaults to
<b class="const">Helvetica 12pt</b>.</p></dd>
<dt><b class="cmd">width</b> <i class="arg">length</i></dt>
<dd></dd>
<dt><b class="cmd">wid</b> <i class="arg">length</i></dt>
<dd><p>Specifies the width of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">boxwidth</b>, which itself defaults to the pixel
equivalent of <b class="const">2 cm</b>.</p></dd>
<dt><b class="cmd">with</b> <i class="arg">corner</i></dt>
<dd><p>Specifies the corner of the element to place at the location given by
the attribute <b class="cmd">at</b>.
Defaults to the current corner as maintained by the layouting system,
except if the value for <b class="cmd">at</b> was specified by the user. In that
case it defaults to <b class="const">center</b>.</p></dd>
</dl></dd>
<dt><a name="21"><b class="cmd"><a href="../../../../index.html#key88">ellipse</a></b> <i class="arg">attr</i>...</a></dt>
<dd><p><img alt="figure-02-ellipse" src="../../../../image/figure-02-ellipse.png">
A closed element with the corresponding corners, i.e. the eight
directions of the compass rose, and &quot;center&quot;.
It handles the attributes</p>
<dl class="definitions">
<dt><b class="cmd">anchor</b> <i class="arg">name</i></dt>
<dd></dd>
<dt><b class="cmd">ljust</b></dt>
<dd></dd>
<dt><b class="cmd">rjust</b></dt>
<dd></dd>
<dt><b class="cmd">above</b></dt>
<dd></dd>
<dt><b class="cmd">below</b></dt>
<dd><p><img alt="figure-22-text-anchoring-3" src="../../../../image/figure-22-text-anchoring-3.png">
Specifies the anchor of the text which is to be placed at the
element's center, by name. I.e. this attribute defines the text's
position relative to the element's center.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">anchor</b>, which itself defaults to
<b class="const">center</b>.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm">Tk_GetAnchor</a>.
The commands without arguments are all shorthands with the anchor
implied. Note that they do not combine, only the last is used. For
comined directions the main attribute command, <b class="cmd">anchor</b> has to be
used.</p>
<dl class="definitions">
<dt><b class="cmd">ljust</b></dt>
<dd><p>&quot;anchor west&quot;</p></dd>
<dt><b class="cmd">rjust</b></dt>
<dd><p>&quot;anchor east&quot;</p></dd>
<dt><b class="cmd">above</b></dt>
<dd><p>&quot;anchor south&quot;</p></dd>
<dt><b class="cmd">below</b></dt>
<dd><p>&quot;anchor north&quot;</p></dd>
</dl></dd>
<dt><b class="cmd">at</b> <i class="arg">location</i></dt>
<dd><p>Specifies the location of the element's corner named by the attribute
<b class="cmd">with</b>.
Defaults to the current location as maintained by the layouting
system.</p></dd>
<dt><b class="cmd">color</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linecolor</b>, which itself defaults to <b class="const">black</b>.</p></dd>
<dt><b class="cmd">fillcolor</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the inside of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">fillcolor</b>, which itself defaults to the empty
string, signaling &quot;no filling&quot;.</p></dd>
<dt><b class="cmd">height</b> <i class="arg">length</i></dt>
<dd></dd>
<dt><b class="cmd">ht</b> <i class="arg">length</i></dt>
<dd><p>Specifies the height of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">boxheight</b>, which itself defaults to the
pixel equivalent of <b class="const">2 cm</b>.</p></dd>
<dt><b class="cmd">justify</b> <b class="const">left</b>|<b class="const">center</b>|<b class="const">right</b></dt>
<dd><p>Specifies how multi-line text associated with the element is
positioned within its box.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">justify</b>, which itself defaults to
<b class="const">left</b>.
The legal values are <b class="const">left</b>, <b class="const">right</b>, and <b class="const">center</b>.</p></dd>
<dt><b class="cmd">stroke</b> <i class="arg">width</i></dt>
<dd><p><img alt="figure-20-style-stroke" src="../../../../image/figure-20-style-stroke.png">
Specifies the width of the lines drawn for the the element, in pixels.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linewidth</b>, which itself defaults to <b class="const">1</b>.</p></dd>
<dt><b class="cmd">style</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-18-style-dash" src="../../../../image/figure-18-style-dash.png">
Specifies the style used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linestyle</b>, which itself defaults to
<b class="const">solid</b> lines.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm">Tk_GetDash</a>,
and additionally all which are listed below:</p>
<dl class="definitions">
<dt><b class="const">solid</b>, empty string</dt>
<dd><p>Draw solid line.</p></dd>
<dt><b class="const">dash</b>, <b class="const">dashed</b>, <b class="const">-</b></dt>
<dd><p>Draw a dashed line.</p></dd>
<dt><b class="const">dot</b>, <b class="const">dotted</b>, <b class="const">.</b></dt>
<dd><p>Draw a dotted line.</p></dd>
<dt><b class="const">dash-dot</b>, <b class="const">-.</b></dt>
<dd><p>Draw a dash-dotted line</p></dd>
<dt><b class="const">dash-dot-dot</b>, <b class="const">-..</b></dt>
<dd><p>Draw a dash-dot-dotted line.</p></dd>
</dl>
<p>Note that the values &quot;solid&quot;, &quot;dot(ted)&quot;, &quot;dash(ed)&quot;, &quot;dash-dot&quot;, and
&quot;dash-dot-dot&quot; are all accepted as shorthands for the <b class="cmd">style</b>
command using them as argument.</p></dd>
<dt><b class="cmd"><a href="../../../../index.html#key7">text</a></b> <i class="arg">string</i></dt>
<dd><p>Specifies the text to associate with the element.
Defaults to nothing.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element.</p></dd>
<dt><b class="cmd">textcolor</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the color used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textcolor</b>, which itself defaults to
<b class="const">black</b>.</p></dd>
<dt><b class="cmd">textfont</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the font used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textfont</b>, which itself defaults to
<b class="const">Helvetica 12pt</b>.</p></dd>
<dt><b class="cmd">width</b> <i class="arg">length</i></dt>
<dd></dd>
<dt><b class="cmd">wid</b> <i class="arg">length</i></dt>
<dd><p>Specifies the width of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">boxwidth</b>, which itself defaults to the pixel
equivalent of <b class="const">2 cm</b>.</p></dd>
<dt><b class="cmd">with</b> <i class="arg">corner</i></dt>
<dd><p>Specifies the corner of the element to place at the location given by
the attribute <b class="cmd">at</b>.
Defaults to the current corner as maintained by the layouting system,
except if the value for <b class="cmd">at</b> was specified by the user. In that
case it defaults to <b class="const">center</b>.</p></dd>
</dl></dd>
<dt><a name="22"><b class="cmd"><a href="../../../../index.html#key83">line</a></b> <i class="arg">attr</i>...</a></dt>
<dd></dd>
<dt><a name="23"><b class="cmd">--</b> <i class="arg">attr</i>...</a></dt>
<dd><p><img alt="figure-02-line" src="../../../../image/figure-02-line.png">
An open element with the corresponding corners, i.e. &quot;start&quot;, &quot;end&quot;,
and &quot;center&quot;.
It handles the attributes</p>
<dl class="definitions">
<dt><b class="cmd">anchor</b> <i class="arg">name</i></dt>
<dd></dd>
<dt><b class="cmd">ljust</b></dt>
<dd></dd>
<dt><b class="cmd">rjust</b></dt>
<dd></dd>
<dt><b class="cmd">above</b></dt>
<dd></dd>
<dt><b class="cmd">below</b></dt>
<dd><p><img alt="figure-22-text-anchoring-3" src="../../../../image/figure-22-text-anchoring-3.png">
Specifies the anchor of the text which is to be placed at the
element's center, by name. I.e. this attribute defines the text's
position relative to the element's center.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">anchor</b>, which itself defaults to
<b class="const">center</b>.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm">Tk_GetAnchor</a>.
The commands without arguments are all shorthands with the anchor
implied. Note that they do not combine, only the last is used. For
comined directions the main attribute command, <b class="cmd">anchor</b> has to be
used.</p>
<dl class="definitions">
<dt><b class="cmd">ljust</b></dt>
<dd><p>&quot;anchor west&quot;</p></dd>
<dt><b class="cmd">rjust</b></dt>
<dd><p>&quot;anchor east&quot;</p></dd>
<dt><b class="cmd">above</b></dt>
<dd><p>&quot;anchor south&quot;</p></dd>
<dt><b class="cmd">below</b></dt>
<dd><p>&quot;anchor north&quot;</p></dd>
</dl></dd>
<dt><b class="cmd">arrowhead</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-19-style-arrowheads" src="../../../../image/figure-19-style-arrowheads.png">
Specifies where to draw arrowheads on the <b class="cmd"><a href="../../../../index.html#key83">line</a></b> element, at the
beginning or end, at both ends, or none.
If not specified the system falls back to the value taken from the
language variable <b class="variable">arrowhead</b>, which itself defaults to
<b class="const">none</b>.
The legal values are</p>
<dl class="definitions">
<dt><b class="const">none</b>, <b class="const">-</b></dt>
<dd><p>Draw no arrowheads, at neither end of the line.</p></dd>
<dt><b class="const">start</b>, <b class="const">first</b>, <b class="const">&lt;-</b></dt>
<dd><p>Draw an arrowhead at the beginning of the line, but not at its end.</p></dd>
<dt><b class="const">end</b>, <b class="const">last</b>, <b class="const">-&gt;</b></dt>
<dd><p>Draw an arrowhead at the end of the line, but not at its beginning.</p></dd>
<dt><b class="const">both</b>, <b class="const">&lt;-&gt;</b></dt>
<dd><p>Draw arrowheads at both ends of the line.</p></dd>
</dl>
<p>Note that the values &quot;start&quot;, &quot;end&quot;, &quot;-&quot;, &quot;-&gt;&quot;, &quot;&lt;-&quot;, and &quot;&lt;-&gt;&quot; are
all accepted as shorthands for the <b class="cmd">arrowhead</b> command using them
as argument.</p></dd>
<dt><b class="cmd">at</b> <i class="arg">location</i></dt>
<dd><p><b class="cmd"><a href="../../../../index.html#key83">Line</a></b> elements are normally positioned absolutely, using the
locations specified through the attributes <b class="cmd">from</b>, <b class="cmd">then</b>, and
<b class="cmd">to</b>.
If <b class="cmd">at</b> is specified however then these positions are translated a
last time, moving the line's corner named by the attribute <b class="cmd">with</b>
to the location given by this attribute.</p></dd>
<dt><b class="cmd">chop</b> <span class="opt">?<i class="arg">length</i>?</span></dt>
<dd><p>Specifies the length of the <b class="cmd"><a href="../../../../index.html#key83">line</a></b> element to remove from the
beginning and/or end.
Defaults to nothing.
If specified once the chopping applies to both beginning and end of
the line.
If specified twice or more the last two specifications are used, and
applied to beginning and end of the line, in this order.
Whenever the attribute is specified without an explicit length, the
system falls back to the value taken from the language variable
<b class="variable">circleradius</b>, which itself defaults to the pixel equivalent of
<b class="const">1 cm</b></p></dd>
<dt><b class="cmd">color</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linecolor</b>, which itself defaults to <b class="const">black</b>.</p></dd>
<dt><b class="cmd">fillcolor</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the inside of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">fillcolor</b>, which itself defaults to the empty
string, signaling &quot;no filling&quot;.</p></dd>
<dt><b class="cmd">from</b> <i class="arg">location</i></dt>
<dd><p>Specifies the location where the <b class="cmd"><a href="../../../../index.html#key83">line</a></b> element begins.
Defaults to the current location as maintained by the layouting
system.</p></dd>
<dt><b class="cmd">justify</b> <b class="const">left</b>|<b class="const">center</b>|<b class="const">right</b></dt>
<dd><p>Specifies how multi-line text associated with the element is
positioned within its box.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">justify</b>, which itself defaults to
<b class="const">left</b>.
The legal values are <b class="const">left</b>, <b class="const">right</b>, and <b class="const">center</b>.</p></dd>
<dt><b class="cmd">noturn</b></dt>
<dd><p>Specifies that the direction of <b class="cmd"><a href="../../../../index.html#key83">line</a></b> element at its end is not
propagated to the layout management.
If not specified the direction of the line becomes the new direction
the layout.</p></dd>
<dt><b class="cmd">smooth</b></dt>
<dd><p>Specifies the use of bezier splines for the <b class="cmd"><a href="../../../../index.html#key83">line</a></b> element.
If not specified lines are drawn exactly through the specified
waypoints, without any smooth curves.</p></dd>
<dt><b class="cmd">stroke</b> <i class="arg">width</i></dt>
<dd><p><img alt="figure-20-style-stroke" src="../../../../image/figure-20-style-stroke.png">
Specifies the width of the lines drawn for the the element, in pixels.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linewidth</b>, which itself defaults to <b class="const">1</b>.</p></dd>
<dt><b class="cmd">style</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-18-style-dash" src="../../../../image/figure-18-style-dash.png">
Specifies the style used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linestyle</b>, which itself defaults to
<b class="const">solid</b> lines.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm">Tk_GetDash</a>,
and additionally all which are listed below:</p>
<dl class="definitions">
<dt><b class="const">solid</b>, empty string</dt>
<dd><p>Draw solid line.</p></dd>
<dt><b class="const">dash</b>, <b class="const">dashed</b>, <b class="const">-</b></dt>
<dd><p>Draw a dashed line.</p></dd>
<dt><b class="const">dot</b>, <b class="const">dotted</b>, <b class="const">.</b></dt>
<dd><p>Draw a dotted line.</p></dd>
<dt><b class="const">dash-dot</b>, <b class="const">-.</b></dt>
<dd><p>Draw a dash-dotted line</p></dd>
<dt><b class="const">dash-dot-dot</b>, <b class="const">-..</b></dt>
<dd><p>Draw a dash-dot-dotted line.</p></dd>
</dl>
<p>Note that the values &quot;solid&quot;, &quot;dot(ted)&quot;, &quot;dash(ed)&quot;, &quot;dash-dot&quot;, and
&quot;dash-dot-dot&quot; are all accepted as shorthands for the <b class="cmd">style</b>
command using them as argument.</p></dd>
<dt><b class="cmd"><a href="../../../../index.html#key7">text</a></b> <i class="arg">string</i></dt>
<dd><p>Specifies the text to associate with the element.
Defaults to nothing.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element.</p></dd>
<dt><b class="cmd">textcolor</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the color used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textcolor</b>, which itself defaults to
<b class="const">black</b>.</p></dd>
<dt><b class="cmd">textfont</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the font used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textfont</b>, which itself defaults to
<b class="const">Helvetica 12pt</b>.</p></dd>
<dt><b class="cmd">then</b> <i class="arg">location</i></dt>
<dd></dd>
<dt><b class="cmd">then</b> (&lt;direction&gt; <span class="opt">?<i class="arg">length</i>?</span>)...</dt>
<dd></dd>
<dt>(&lt;direction&gt; <span class="opt">?<i class="arg">length</i>?</span>)...</dt>
<dd><p>This attribute specifies an intermediate location the <b class="cmd"><a href="../../../../index.html#key83">line</a></b>
element has to go through.
It can be specified multiple times, with each use adding one
additional location to the series which the line will go
through. These location will be traversed in the order they were
specified.</p>
<p>The location can be given explicitly, or as a series of directions
with distances. In the latter case the names of all known directions
are accepted for the direction part.
If no distance is specified for a direction the system falls back to
the value taken from the language variable <b class="variable">movelength</b>, which
itself defaults to the pixel equivalent of <b class="const">2 cm</b>.
The whole set of direction,distance pairs is treated as a series of
translations which are added up to provide the final translation
specifying the intermediate point (relative to the preceding point).</p>
<p>The last named direction is propagated to the layout system as the
direction to follow. The use of <b class="cmd">noturn</b> is not able to overide
this behaviour.</p>
<p>At last, the names of the registered directions also serve as
attribute commands, with an implicit attribute <b class="cmd">then</b> in front of
them.</p>
<p>If no intermediate or last location is specified for the line the
system falls back to a point <b class="variable">movelength</b> pixels away from the
starting location, in the current direction as maintained by the
layouting system</p></dd>
<dt><b class="cmd">to</b> <i class="arg">location</i></dt>
<dd><p>Specifies the location where the <b class="cmd"><a href="../../../../index.html#key83">line</a></b> element ends.
This attribute has no default. The default is handled by the attribute
<b class="cmd">then</b>, which makes it appear as if <b class="cmd">to</b> has a default when
not specified.</p></dd>
<dt><b class="cmd">with</b> <i class="arg">corner</i></dt>
<dd><p><b class="cmd"><a href="../../../../index.html#key83">Line</a></b> elements are normally positioned absolutely, using the
locations specified through the attributes <b class="cmd">from</b>, <b class="cmd">then</b>, and
<b class="cmd">to</b>.
If <b class="cmd">at</b> is specified however then these positions are translated a
last time, moving the line's corner named by the attribute <b class="cmd">with</b>
to the location given by this attribute.
This means that <i class="arg">with</i> is effective if and only if the attribute
<b class="cmd">at</b> was specified as well for the line.</p></dd>
</dl></dd>
<dt><a name="24"><b class="cmd"><a href="../../../../index.html#key89">move</a></b> <i class="arg">attr</i></a></dt>
<dd><p>An open element with the corresponding corners, i.e. &quot;start&quot;, &quot;end&quot;,
and &quot;center&quot;.
A <b class="cmd"><a href="../../../../index.html#key89">move</a></b> element is in essence an invisible <b class="cmd"><a href="../../../../index.html#key83">line</a></b>.
While the main effect we are interested in is the change it makes to
the layout system, it is an actual element, i.e. it has the same
corners as an ordinary line, and shows up in the history as well,
allowing future references to all the places it touched.
It handles the same attibutes as <b class="cmd"><a href="../../../../index.html#key83">line</a></b> elements.</p></dd>
<dt><a name="25"><b class="cmd"><a href="../../../../index.html#key76">spline</a></b> <i class="arg">attr</i>...</a></dt>
<dd><p><img alt="figure-02-spline" src="../../../../image/figure-02-spline.png">
An alias for the <b class="cmd"><a href="../../../../index.html#key83">line</a></b> element (see above), with the attribute
<b class="cmd">smooth</b> preset.</p></dd>
<dt><a name="26"><b class="cmd"><a href="../../../../index.html#key7">text</a></b> <i class="arg">attr</i>...</a></dt>
<dd><p><img alt="figure-02-text" src="../../../../image/figure-02-text.png">
A closed element with the corresponding corners, i.e. the eight
directions of the compass rose, and &quot;center&quot;.
It handles the attributes</p>
<dl class="definitions">
<dt><b class="cmd">anchor</b> <i class="arg">name</i></dt>
<dd></dd>
<dt><b class="cmd">ljust</b></dt>
<dd></dd>
<dt><b class="cmd">rjust</b></dt>
<dd></dd>
<dt><b class="cmd">above</b></dt>
<dd></dd>
<dt><b class="cmd">below</b></dt>
<dd><p><img alt="figure-22-text-anchoring-3" src="../../../../image/figure-22-text-anchoring-3.png">
Specifies the anchor of the text which is to be placed at the
element's center, by name. I.e. this attribute defines the text's
position relative to the element's center.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">anchor</b>, which itself defaults to
<b class="const">center</b>.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm">Tk_GetAnchor</a>.
The commands without arguments are all shorthands with the anchor
implied. Note that they do not combine, only the last is used. For
comined directions the main attribute command, <b class="cmd">anchor</b> has to be
used.</p>
<dl class="definitions">
<dt><b class="cmd">ljust</b></dt>
<dd><p>&quot;anchor west&quot;</p></dd>
<dt><b class="cmd">rjust</b></dt>
<dd><p>&quot;anchor east&quot;</p></dd>
<dt><b class="cmd">above</b></dt>
<dd><p>&quot;anchor south&quot;</p></dd>
<dt><b class="cmd">below</b></dt>
<dd><p>&quot;anchor north&quot;</p></dd>
</dl></dd>
<dt><b class="cmd">at</b> <i class="arg">location</i></dt>
<dd><p>Specifies the location of the element's corner named by the attribute
<b class="cmd">with</b>.
Defaults to the current location as maintained by the layouting
system.</p></dd>
<dt><b class="cmd">height</b> <i class="arg">length</i></dt>
<dd><p>Specifies the height of the <b class="cmd"><a href="../../../../index.html#key7">text</a></b> element.
Defaults to the natural height of its text.</p></dd>
<dt><b class="cmd">justify</b> <b class="const">left</b>|<b class="const">center</b>|<b class="const">right</b></dt>
<dd><p>Specifies how multi-line text associated with the element is
positioned within its box.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">justify</b>, which itself defaults to
<b class="const">left</b>.
The legal values are <b class="const">left</b>, <b class="const">right</b>, and <b class="const">center</b>.</p></dd>
<dt><b class="cmd"><a href="../../../../index.html#key7">text</a></b> <i class="arg">string</i></dt>
<dd><p>Specifies the text to associate with the element.
Defaults to nothing.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element.</p></dd>
<dt><b class="cmd">textcolor</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the color used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textcolor</b>, which itself defaults to
<b class="const">black</b>.</p></dd>
<dt><b class="cmd">textfont</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the font used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textfont</b>, which itself defaults to
<b class="const">Helvetica 12pt</b>.</p></dd>
<dt><b class="cmd">width</b> <i class="arg">length</i></dt>
<dd><p>Specifies the width of the <b class="cmd"><a href="../../../../index.html#key7">text</a></b> element.
Defaults to the natural width of its text.</p></dd>
<dt><b class="cmd">with</b> <i class="arg">corner</i></dt>
<dd><p>Specifies the corner of the element to place at the location given by
the attribute <b class="cmd">at</b>.
Defaults to the current corner as maintained by the layouting system,
except if the value for <b class="cmd">at</b> was specified by the user. In that
case it defaults to <b class="const">center</b>.</p></dd>
</dl></dd>
</dl>
</div>
<div id="subsection4" class="subsection"><h3><a name="subsection4">Attributes</a></h3>
<p>The set of all attributes supported by all the element commands is
shown below.
While we speak of them as commands, and provide a syntax, they are not
truly available as actual commands, but only as part of the arguments
for an element command.</p>
<p>Note that some of the attribute names are overloaded, i.e. have
multiple, different, definitions. During processing of attributes for
an element the actual definition used is chosen based on the type of
the element the processing is for.</p>
<p>Further, as a catch-all clause, any attribute which could not be
processed according to the definitions below will be treated as the
argument of an implicit <b class="cmd"><a href="../../../../index.html#key7">text</a></b> attribute.</p>
<dl class="definitions">
<dt><b class="cmd">anchor</b> <i class="arg">name</i></dt>
<dd></dd>
<dt><b class="cmd">ljust</b></dt>
<dd></dd>
<dt><b class="cmd">rjust</b></dt>
<dd></dd>
<dt><b class="cmd">above</b></dt>
<dd></dd>
<dt><b class="cmd">below</b></dt>
<dd><p><img alt="figure-22-text-anchoring-3" src="../../../../image/figure-22-text-anchoring-3.png">
Specifies the anchor of the text which is to be placed at the
element's center, by name. I.e. this attribute defines the text's
position relative to the element's center.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">anchor</b>, which itself defaults to
<b class="const">center</b>.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm">Tk_GetAnchor</a>.
The commands without arguments are all shorthands with the anchor
implied. Note that they do not combine, only the last is used. For
comined directions the main attribute command, <b class="cmd">anchor</b> has to be
used.</p>
<dl class="definitions">
<dt><b class="cmd">ljust</b></dt>
<dd><p>&quot;anchor west&quot;</p></dd>
<dt><b class="cmd">rjust</b></dt>
<dd><p>&quot;anchor east&quot;</p></dd>
<dt><b class="cmd">above</b></dt>
<dd><p>&quot;anchor south&quot;</p></dd>
<dt><b class="cmd">below</b></dt>
<dd><p>&quot;anchor north&quot;</p></dd>
</dl></dd>
<dt><b class="cmd">arrowhead</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-19-style-arrowheads" src="../../../../image/figure-19-style-arrowheads.png">
Specifies where to draw arrowheads on the <b class="cmd"><a href="../../../../index.html#key83">line</a></b> element, at the
beginning or end, at both ends, or none.
If not specified the system falls back to the value taken from the
language variable <b class="variable">arrowhead</b>, which itself defaults to
<b class="const">none</b>.
The legal values are</p>
<dl class="definitions">
<dt><b class="const">none</b>, <b class="const">-</b></dt>
<dd><p>Draw no arrowheads, at neither end of the line.</p></dd>
<dt><b class="const">start</b>, <b class="const">first</b>, <b class="const">&lt;-</b></dt>
<dd><p>Draw an arrowhead at the beginning of the line, but not at its end.</p></dd>
<dt><b class="const">end</b>, <b class="const">last</b>, <b class="const">-&gt;</b></dt>
<dd><p>Draw an arrowhead at the end of the line, but not at its beginning.</p></dd>
<dt><b class="const">both</b>, <b class="const">&lt;-&gt;</b></dt>
<dd><p>Draw arrowheads at both ends of the line.</p></dd>
</dl>
<p>Note that the values &quot;start&quot;, &quot;end&quot;, &quot;-&quot;, &quot;-&gt;&quot;, &quot;&lt;-&quot;, and &quot;&lt;-&gt;&quot; are
all accepted as shorthands for the <b class="cmd">arrowhead</b> command using them
as argument.</p></dd>
<dt><b class="cmd">aspect</b> <i class="arg">number</i></dt>
<dd><p>Specifies the aspect ratio, i.e ratio of width to height, of the
<b class="cmd"><a href="../../../../index.html#key87">diamond</a></b> element.
The manner in which a default is calculated when not specified also
depends on the specifications of the attributes <b class="cmd">width</b> and
<b class="cmd">height</b>, if any.</p>
<p>If both <b class="cmd">width</b>, and <b class="cmd">height</b> are specified then any
specification of <b class="cmd">aspect</b> is ignored, as it is implicitly defined
in the width and height as well, and this takes precedence. A missing
specification is ignored in that case well, i.e. no defaults are
required.</p>
<p>If the <b class="cmd">aspect</b> is specified, and one of the attributes
<b class="cmd">width</b> or <b class="cmd">height</b>, then the missing attribute is calculated
from the two which are specified. No defaults are required for these
cases either.</p>
<p>If only one of the attributes <b class="cmd">width</b> or <b class="cmd">height</b> is specified
then the system uses a fallback for the <b class="cmd">aspect</b>, the value taken
from the language variable <b class="variable">diamondaspect</b>, which itselfs defaults
to <b class="const">2</b>.</p>
<p>If none of of the attributes <b class="cmd">width</b> or <b class="cmd">height</b> is specified
then the system uses a fallback for the <b class="cmd">width</b>, the value taken
from the language variable <b class="variable">boxwidth</b>, which itselfs defaults to
the pixel equivalent of <b class="const">2 cm</b>. For the aspect it uses either
the user-specified value or the default taken as described in the
previous paragraph.</p></dd>
<dt><b class="cmd">aspect</b> <i class="arg">number</i></dt>
<dd><p>Specifies the aspect ratio, i.e ratio of width to height, of the
ellipses which are used to draw the top and bottom of the <b class="cmd"><a href="../../../../index.html#key73">drum</a></b>
element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">drumaspect</b>, which itself defaults to
<b class="const">0.35</b>.</p></dd>
<dt><b class="cmd">at</b> <i class="arg">location</i></dt>
<dd><p>Specifies the location of the element's corner named by the attribute
<b class="cmd">with</b>.
Defaults to the current location as maintained by the layouting
system.</p></dd>
<dt><b class="cmd">at</b> <i class="arg">location</i></dt>
<dd><p><b class="cmd"><a href="../../../../index.html#key83">Line</a></b> elements are normally positioned absolutely, using the
locations specified through the attributes <b class="cmd">from</b>, <b class="cmd">then</b>, and
<b class="cmd">to</b>.
If <b class="cmd">at</b> is specified however then these positions are translated a
last time, moving the line's corner named by the attribute <b class="cmd">with</b>
to the location given by this attribute.</p></dd>
<dt><b class="cmd">chop</b> <span class="opt">?<i class="arg">length</i>?</span></dt>
<dd><p>Specifies the length of the <b class="cmd"><a href="../../../../index.html#key83">line</a></b> element to remove from the
beginning and/or end.
Defaults to nothing.
If specified once the chopping applies to both beginning and end of
the line.
If specified twice or more the last two specifications are used, and
applied to beginning and end of the line, in this order.
Whenever the attribute is specified without an explicit length, the
system falls back to the value taken from the language variable
<b class="variable">circleradius</b>, which itself defaults to the pixel equivalent of
<b class="const">1 cm</b></p></dd>
<dt><b class="cmd">clockwise</b></dt>
<dd></dd>
<dt><b class="cmd">cw</b></dt>
<dd><p>Specifies the direction of the <b class="cmd"><a href="../../../../index.html#key82">arc</a></b> element, here going
clockwise.
The complementary attribute is <b class="cmd">counterclockwise</b>.
If not specified the system falls back to the value taken from the
language variable <b class="variable">clockwise</b>, which itself defaults to 
<b class="const">false</b>, for counter-clockwise direction.</p></dd>
<dt><b class="cmd">color</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linecolor</b>, which itself defaults to <b class="const">black</b>.</p></dd>
<dt><b class="cmd">counterclockwise</b></dt>
<dd></dd>
<dt><b class="cmd">ccw</b></dt>
<dd><p>Specifies the direction of the <b class="cmd"><a href="../../../../index.html#key82">arc</a></b> element, here
counter-clockwise.
The complementary attribute is <b class="cmd">clockwise</b>.
If not specified the system falls back to the value taken from the
language variable <b class="variable">clockwise</b>, which itself defaults to 
<b class="const">false</b>, for counter-clockwise direction.</p></dd>
<dt><b class="cmd">diameter</b> <i class="arg">length</i></dt>
<dd></dd>
<dt><b class="cmd">diam</b> <i class="arg">length</i></dt>
<dd><p>Specifies the diameter of the <b class="cmd"><a href="../../../../index.html#key86">circle</a></b> element, as an alternative
way to specify its <b class="cmd">radius</b>.
Effective if and only if the radius was not specified. I.e. if both
diameter and radius are specified then the radius infomration has
precendence.
This attribute has no default, because the defaults are taken from the
radius.</p></dd>
<dt><b class="cmd">fillcolor</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-21-style-colors" src="../../../../image/figure-21-style-colors.png">
Specifies the color used to draw the inside of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">fillcolor</b>, which itself defaults to the empty
string, signaling &quot;no filling&quot;.</p></dd>
<dt><b class="cmd">from</b> <i class="arg">location</i></dt>
<dd><p>Specifies the location where the <b class="cmd"><a href="../../../../index.html#key83">line</a></b> element begins.
Defaults to the current location as maintained by the layouting
system.</p></dd>
<dt><b class="cmd">from</b> <i class="arg">location</i></dt>
<dd><p>Specifies the location where the <b class="cmd"><a href="../../../../index.html#key82">arc</a></b> element begins.
Defaults to the current location as maintained by the layouting
system.</p></dd>
<dt><b class="cmd">height</b> <i class="arg">length</i></dt>
<dd></dd>
<dt><b class="cmd">ht</b> <i class="arg">length</i></dt>
<dd><p>Specifies the height of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">boxheight</b>, which itself defaults to the
pixel equivalent of <b class="const">2 cm</b>.</p></dd>
<dt><b class="cmd">height</b> <i class="arg">length</i></dt>
<dd><p>Specifies the height of the <b class="cmd"><a href="../../../../index.html#key87">diamond</a></b> element.
The manner in which a default is calculated when not specified also
depends on the specifications of the attributes <b class="cmd">aspect</b> and
<b class="cmd">width</b>, if any.</p>
<p>If both <b class="cmd">width</b>, and <b class="cmd">height</b> are specified then any
specification of <b class="cmd">aspect</b> is ignored, as it is implicitly defined
in the width and height as well, and this takes precedence. A missing
specification is ignored in that case well, i.e. no defaults are
required.</p>
<p>If the <b class="cmd">aspect</b> is specified, and one of the attributes
<b class="cmd">width</b> or <b class="cmd">height</b>, then the missing attribute is calculated
from the two which are specified. No defaults are required for these
cases either.</p>
<p>If only one of the attributes <b class="cmd">width</b> or <b class="cmd">height</b> is specified
then the system uses a fallback for the <b class="cmd">aspect</b>, the value taken
from the language variable <b class="variable">diamondaspect</b>, which itselfs defaults
to <b class="const">2</b>.</p>
<p>If none of of the attributes <b class="cmd">width</b> or <b class="cmd">height</b> is specified
then the system uses a fallback for the <b class="cmd">width</b>, the value taken
from the language variable <b class="variable">boxwidth</b>, which itselfs defaults to
the pixel equivalent of <b class="const">2 cm</b>. For the aspect it uses either
the user-specified value or the default taken as described in the
previous paragraph.</p></dd>
<dt><b class="cmd">height</b> <i class="arg">length</i></dt>
<dd><p>Specifies the height of the <b class="cmd"><a href="../../../../index.html#key7">text</a></b> element.
Defaults to the natural height of its text.</p></dd>
<dt><b class="cmd">justify</b> <b class="const">left</b>|<b class="const">center</b>|<b class="const">right</b></dt>
<dd><p>Specifies how multi-line text associated with the element is
positioned within its box.
The value is ignored if no text was specified for the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">justify</b>, which itself defaults to
<b class="const">left</b>.
The legal values are <b class="const">left</b>, <b class="const">right</b>, and <b class="const">center</b>.</p></dd>
<dt><b class="cmd">noturn</b></dt>
<dd><p>Specifies that the direction of <b class="cmd"><a href="../../../../index.html#key83">line</a></b> element at its end is not
propagated to the layout management.
If not specified the direction of the line becomes the new direction
the layout.</p></dd>
<dt><b class="cmd">radius</b> <i class="arg">length</i></dt>
<dd></dd>
<dt><b class="cmd">rad</b> <i class="arg">length</i></dt>
<dd><p>Specifies the radius of the <b class="cmd"><a href="../../../../index.html#key86">circle</a></b> element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">circleradius</b>, which itself defaults to the
pixel equivalent of <b class="const">1 cm</b>.</p></dd>
<dt><b class="cmd">radius</b> <i class="arg">length</i></dt>
<dd><p>Specifies the radius of the <b class="cmd"><a href="../../../../index.html#key82">arc</a></b> element, or rather, the radius
of the circle the shown arc is a part of.
If not specified the system falls back to the value taken from the
language variable <b class="variable">arcradius</b>, which itself defaults to the pixel
equivalent of <b class="const">1 cm</b>.</p></dd>
<dt><b class="cmd">slant</b> <i class="arg">angle</i></dt>
<dd><p>Specifies the angle by which the <b class="cmd"><a href="../../../../index.html#key74">box</a></b> element is slanted, in
degrees.
If not specified the system falls back to the value taken from the
language variable <b class="variable">slant</b>, which itself defaults to <b class="const">90</b>,
i.e. vertical, no slant.
0 degrees is slanting straight east, pointing to the right.
90 degrees is slanting to the north, pointing straight up.</p></dd>
<dt><b class="cmd">smooth</b></dt>
<dd><p>Specifies the use of bezier splines for the <b class="cmd"><a href="../../../../index.html#key83">line</a></b> element.
If not specified lines are drawn exactly through the specified
waypoints, without any smooth curves.</p></dd>
<dt><b class="cmd">stroke</b> <i class="arg">width</i></dt>
<dd><p><img alt="figure-20-style-stroke" src="../../../../image/figure-20-style-stroke.png">
Specifies the width of the lines drawn for the the element, in pixels.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linewidth</b>, which itself defaults to <b class="const">1</b>.</p></dd>
<dt><b class="cmd">style</b> <i class="arg">spec</i></dt>
<dd><p><img alt="figure-18-style-dash" src="../../../../image/figure-18-style-dash.png">
Specifies the style used to draw the lines of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">linestyle</b>, which itself defaults to
<b class="const">solid</b> lines.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm">Tk_GetDash</a>,
and additionally all which are listed below:</p>
<dl class="definitions">
<dt><b class="const">solid</b>, empty string</dt>
<dd><p>Draw solid line.</p></dd>
<dt><b class="const">dash</b>, <b class="const">dashed</b>, <b class="const">-</b></dt>
<dd><p>Draw a dashed line.</p></dd>
<dt><b class="const">dot</b>, <b class="const">dotted</b>, <b class="const">.</b></dt>
<dd><p>Draw a dotted line.</p></dd>
<dt><b class="const">dash-dot</b>, <b class="const">-.</b></dt>
<dd><p>Draw a dash-dotted line</p></dd>
<dt><b class="const">dash-dot-dot</b>, <b class="const">-..</b></dt>
<dd><p>Draw a dash-dot-dotted line.</p></dd>
</dl>
<p>Note that the values &quot;solid&quot;, &quot;dot(ted)&quot;, &quot;dash(ed)&quot;, &quot;dash-dot&quot;, and
&quot;dash-dot-dot&quot; are all accepted as shorthands for the <b class="cmd">style</b>
command using them as argument.</p></dd>
<dt><b class="cmd"><a href="../../../../index.html#key7">text</a></b> <i class="arg">string</i></dt>
<dd><p>Specifies the text to associate with the element.
Defaults to nothing.
When specified multiple times the actually shown text is the
concatenation of the individual strings, vertically stacked, with the
first string specified being the topmost element.</p></dd>
<dt><b class="cmd">textcolor</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the color used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textcolor</b>, which itself defaults to
<b class="const">black</b>.</p></dd>
<dt><b class="cmd">textfont</b> <i class="arg">spec</i></dt>
<dd><p>Specifies the font used to draw the text of an element with.
Ignored if there is no text.
If not specified the system falls back to the value taken from the
language variable <b class="variable">textfont</b>, which itself defaults to
<b class="const">Helvetica 12pt</b>.</p></dd>
<dt><b class="cmd">then</b> <i class="arg">location</i></dt>
<dd></dd>
<dt><b class="cmd">then</b> (&lt;direction&gt; <span class="opt">?<i class="arg">length</i>?</span>)...</dt>
<dd></dd>
<dt>(&lt;direction&gt; <span class="opt">?<i class="arg">length</i>?</span>)...</dt>
<dd><p>This attribute specifies an intermediate location the <b class="cmd"><a href="../../../../index.html#key83">line</a></b>
element has to go through.
It can be specified multiple times, with each use adding one
additional location to the series which the line will go
through. These location will be traversed in the order they were
specified.</p>
<p>The location can be given explicitly, or as a series of directions
with distances. In the latter case the names of all known directions
are accepted for the direction part.
If no distance is specified for a direction the system falls back to
the value taken from the language variable <b class="variable">movelength</b>, which
itself defaults to the pixel equivalent of <b class="const">2 cm</b>.
The whole set of direction,distance pairs is treated as a series of
translations which are added up to provide the final translation
specifying the intermediate point (relative to the preceding point).</p>
<p>The last named direction is propagated to the layout system as the
direction to follow. The use of <b class="cmd">noturn</b> is not able to overide
this behaviour.</p>
<p>At last, the names of the registered directions also serve as
attribute commands, with an implicit attribute <b class="cmd">then</b> in front of
them.</p>
<p>If no intermediate or last location is specified for the line the
system falls back to a point <b class="variable">movelength</b> pixels away from the
starting location, in the current direction as maintained by the
layouting system</p></dd>
<dt><b class="cmd">to</b> <i class="arg">location</i></dt>
<dd><p>Specifies the location where the <b class="cmd"><a href="../../../../index.html#key83">line</a></b> element ends.
This attribute has no default. The default is handled by the attribute
<b class="cmd">then</b>, which makes it appear as if <b class="cmd">to</b> has a default when
not specified.</p></dd>
<dt><b class="cmd">to</b> <i class="arg">location</i></dt>
<dd><p>Specifies the location where the <b class="cmd"><a href="../../../../index.html#key82">arc</a></b> element ends.
Defaults to a location such that a 90-degree arc is drawn in the
chosen direction, starting at <b class="cmd">from</b>.</p></dd>
<dt><b class="cmd">width</b> <i class="arg">length</i></dt>
<dd></dd>
<dt><b class="cmd">wid</b> <i class="arg">length</i></dt>
<dd><p>Specifies the width of the element.
If not specified the system falls back to the value taken from the
language variable <b class="variable">boxwidth</b>, which itself defaults to the pixel
equivalent of <b class="const">2 cm</b>.</p></dd>
<dt><b class="cmd">width</b> <i class="arg">length</i></dt>
<dd><p>Specifies the width of the <b class="cmd"><a href="../../../../index.html#key87">diamond</a></b> element.
The manner in which a default is calculated when not specified also
depends on the specifications of the attributes <b class="cmd">aspect</b> and
<b class="cmd">height</b>, if any.</p>
<p>If both <b class="cmd">width</b>, and <b class="cmd">height</b> are specified then any
specification of <b class="cmd">aspect</b> is ignored, as it is implicitly defined
in the width and height as well, and this takes precedence. A missing
specification is ignored in that case well, i.e. no defaults are
required.</p>
<p>If the <b class="cmd">aspect</b> is specified, and one of the attributes
<b class="cmd">width</b> or <b class="cmd">height</b>, then the missing attribute is calculated
from the two which are specified. No defaults are required for these
cases either.</p>
<p>If only one of the attributes <b class="cmd">width</b> or <b class="cmd">height</b> is specified
then the system uses a fallback for the <b class="cmd">aspect</b>, the value taken
from the language variable <b class="variable">diamondaspect</b>, which itselfs defaults
to <b class="const">2</b>.</p>
<p>If none of of the attributes <b class="cmd">width</b> or <b class="cmd">height</b> is specified
then the system uses a fallback for the <b class="cmd">width</b>, the value taken
from the language variable <b class="variable">boxwidth</b>, which itselfs defaults to
the pixel equivalent of <b class="const">2 cm</b>. For the aspect it uses either
the user-specified value or the default taken as described in the
previous paragraph.</p></dd>
<dt><b class="cmd">width</b> <i class="arg">length</i></dt>
<dd><p>Specifies the width of the <b class="cmd"><a href="../../../../index.html#key7">text</a></b> element.
Defaults to the natural width of its text.</p></dd>
<dt><b class="cmd">with</b> <i class="arg">corner</i></dt>
<dd><p>Specifies the corner of the element to place at the location given by
the attribute <b class="cmd">at</b>.
Defaults to the current corner as maintained by the layouting system,
except if the value for <b class="cmd">at</b> was specified by the user. In that
case it defaults to <b class="const">center</b>.</p></dd>
<dt><b class="cmd">with</b> <i class="arg">corner</i></dt>
<dd><p><b class="cmd"><a href="../../../../index.html#key83">Line</a></b> elements are normally positioned absolutely, using the
locations specified through the attributes <b class="cmd">from</b>, <b class="cmd">then</b>, and
<b class="cmd">to</b>.
If <b class="cmd">at</b> is specified however then these positions are translated a
last time, moving the line's corner named by the attribute <b class="cmd">with</b>
to the location given by this attribute.
This means that <i class="arg">with</i> is effective if and only if the attribute
<b class="cmd">at</b> was specified as well for the line.</p></dd>
</dl>
</div>
<div id="subsection5" class="subsection"><h3><a name="subsection5">Corners</a></h3>
<p>Corners are named values for in elements, usually locations.</p>
<ul class="itemized">
<li><p>The <i class="term">closed</i> elements define corners for the compass rose,
including the &quot;center&quot;, and their &quot;width&quot; and &quot;height&quot;.</p>
<p><img alt="figure-27-corners-closed" src="../../../../image/figure-27-corners-closed.png"></p></li>
<li><p><b class="cmd">block</b> elements additionally export all variables which were set
during their definition as corners.</p></li>
<li><p>The <i class="term">open</i> elements on the other hand define &quot;start&quot;, &quot;end&quot;, and
&quot;center&quot;. The first two map to the locations originally provided
through the attributes <b class="cmd">from</b> and <b class="cmd">to</b> of the element.</p>
<p><img alt="figure-28-corners-open" src="../../../../image/figure-28-corners-open.png"></p></li>
<li><p>The center of <b class="cmd"><a href="../../../../index.html#key83">line</a></b> and <b class="cmd"><a href="../../../../index.html#key89">move</a></b> elements is the location
halfway between &quot;start&quot; and &quot;end&quot; corners, this is regardless of any
intermediate locations the element may have.</p></li>
<li><p>The <b class="cmd"><a href="../../../../index.html#key83">line</a></b> and <b class="cmd"><a href="../../../../index.html#key89">move</a></b> elements additionally name all their
locations as corners using numbers as names, starting from <b class="const">1</b>
(equivalent to &quot;start&quot;), in order of traversal.</p>
<p><img alt="figure-15-spline-1" src="../../../../image/figure-15-spline-1.png"></p></li>
<li><p>The center of <b class="cmd"><a href="../../../../index.html#key82">arc</a></b> elements is the center of the circle the arc
is part off.</p></li>
<li><p>The <b class="cmd"><a href="../../../../index.html#key82">arc</a></b> elements additionally define the compass rose of
closed elements as well.</p></li>
</ul>
</div>
<div id="subsection6" class="subsection"><h3><a name="subsection6">Named directions</a></h3>
<p>The named directions are commands which tell the layout system in
which direction to go when placing the next element without an
explicit position specification.
They can also be used as arguments to the attribute <b class="cmd">then</b>, and
the command <b class="cmd">by</b> for relative points, see there for the relevant
syntax.</p>
<p>The diagram core defines the directions of the compass rose, plus a
number of aliases. See below for the full list.</p>
<p><img alt="figure-27-corners-closed" src="../../../../image/figure-27-corners-closed.png"></p>
<p>This overlaps with the pre-defined corners for closed elements. This
is used by the layout system, when are going in direction X the name
of the opposite direction is the name of the corner at which the new
element will be attached to the current position, and if this corner
does not exist the nearest actual corner by angle is used.</p>
<dl class="definitions">
<dt><a name="27"><b class="cmd">west</b></a></dt>
<dd></dd>
<dt><a name="28"><b class="cmd">w</b></a></dt>
<dd></dd>
<dt><a name="29"><b class="cmd">left</b></a></dt>
<dd></dd>
<dt><a name="30"><b class="cmd">l</b></a></dt>
<dd></dd>
<dt><a name="31"><b class="cmd">south</b></a></dt>
<dd></dd>
<dt><a name="32"><b class="cmd">s</b></a></dt>
<dd></dd>
<dt><a name="33"><b class="cmd">down</b></a></dt>
<dd></dd>
<dt><a name="34"><b class="cmd">bottom</b></a></dt>
<dd></dd>
<dt><a name="35"><b class="cmd">bot</b></a></dt>
<dd></dd>
<dt><a name="36"><b class="cmd">b</b></a></dt>
<dd></dd>
<dt><a name="37"><b class="cmd">east</b></a></dt>
<dd></dd>
<dt><a name="38"><b class="cmd">e</b></a></dt>
<dd></dd>
<dt><a name="39"><b class="cmd">right</b></a></dt>
<dd></dd>
<dt><a name="40"><b class="cmd">r</b></a></dt>
<dd></dd>
<dt><a name="41"><b class="cmd">north</b></a></dt>
<dd></dd>
<dt><a name="42"><b class="cmd">n</b></a></dt>
<dd></dd>
<dt><a name="43"><b class="cmd">up</b></a></dt>
<dd></dd>
<dt><a name="44"><b class="cmd">top</b></a></dt>
<dd></dd>
<dt><a name="45"><b class="cmd">t</b></a></dt>
<dd></dd>
<dt><a name="46"><b class="cmd">northwest</b></a></dt>
<dd></dd>
<dt><a name="47"><b class="cmd">nw</b></a></dt>
<dd></dd>
<dt><a name="48"><b class="cmd">up-left</b></a></dt>
<dd></dd>
<dt><a name="49"><b class="cmd">upleft</b></a></dt>
<dd></dd>
<dt><a name="50"><b class="cmd">leftup</b></a></dt>
<dd></dd>
<dt><a name="51"><b class="cmd">northeast</b></a></dt>
<dd></dd>
<dt><a name="52"><b class="cmd">ne</b></a></dt>
<dd></dd>
<dt><a name="53"><b class="cmd">up-right</b></a></dt>
<dd></dd>
<dt><a name="54"><b class="cmd">upright</b></a></dt>
<dd></dd>
<dt><a name="55"><b class="cmd">rightup</b></a></dt>
<dd></dd>
<dt><a name="56"><b class="cmd">southwest</b></a></dt>
<dd></dd>
<dt><a name="57"><b class="cmd">sw</b></a></dt>
<dd></dd>
<dt><a name="58"><b class="cmd">down-left</b></a></dt>
<dd></dd>
<dt><a name="59"><b class="cmd">downleft</b></a></dt>
<dd></dd>
<dt><a name="60"><b class="cmd">leftdown</b></a></dt>
<dd></dd>
<dt><a name="61"><b class="cmd">southeast</b></a></dt>
<dd></dd>
<dt><a name="62"><b class="cmd">se</b></a></dt>
<dd></dd>
<dt><a name="63"><b class="cmd">down-right</b></a></dt>
<dd></dd>
<dt><a name="64"><b class="cmd">downright</b></a></dt>
<dd></dd>
<dt><a name="65"><b class="cmd">rightdown</b></a></dt>
<dd></dd>
</dl>
</div>
<div id="subsection7" class="subsection"><h3><a name="subsection7">Miscellaneous Commands</a></h3>
<dl class="definitions">
<dt><a name="66"><i class="arg">number</i> <b class="const">cm</b></a></dt>
<dd></dd>
<dt><a name="67"><i class="arg">number</i> <b class="const">mm</b></a></dt>
<dd></dd>
<dt><a name="68"><i class="arg">number</i> <b class="const">inch</b></a></dt>
<dd></dd>
<dt><a name="69"><i class="arg">number</i> <b class="const">pt</b></a></dt>
<dd><p>These commands allow the specification of distances and coordinates in
metric and imperial units, returning the equivalent distance or
coordinate in pixels, which is the unit used internally for all
calculations.</p>
<p>The conversion factors are based on the result of <b class="cmd">tk scaling</b>
and are computed once, at the time the package is sourced, future
changes of the <b class="cmd">tk scaling</b> factor have no effect.</p></dd>
<dt><a name="70"><i class="arg">number</i> <i class="arg">number</i></a></dt>
<dd><p><img alt="figure-50-point-cons-absolute" src="../../../../image/figure-50-point-cons-absolute.png"></p>
<p>This command takes the x and y coordinates of a location and returns
the <i class="term">absolute</i> point for it.</p></dd>
<dt><a name="71"><b class="cmd">by</b> <i class="arg">distance</i> <i class="arg">direction</i></a></dt>
<dd><p><img alt="figure-51-point-cons-relative" src="../../../../image/figure-51-point-cons-relative.png"></p>
<p>This command takes a <i class="arg">distance</i> and <i class="arg">direction</i> (angle in
degress, or registered direction name) and returns the <i class="term">relative</i>
point for it, i.e. the <i class="term">delta</i> or <i class="term">translation</i> it
represents.</p>
<p>Note also the (dis)similarities to the directional specifications for
the attribute <b class="cmd">then</b> of <b class="cmd"><a href="../../../../index.html#key83">line</a></b> and <b class="cmd"><a href="../../../../index.html#key89">move</a></b> elements.
Where we say here</p>
<pre class="example">by 50 east</pre>
<p>for the attribute we say</p>
<pre class="example">... then east 50 ...</pre>
<p>or just</p>
<pre class="example">... then east ...</pre>
</dd>
<dt><a name="72"><i class="arg">point1</i> <b class="cmd">+</b> <i class="arg">point2</i></a></dt>
<dd><p><img alt="figure-48-point-vectoradd" src="../../../../image/figure-48-point-vectoradd.png"></p>
<p>This command interprets two points as vectors and adds them together.
If at least one of the points is <i class="term">absolute</i> the result is
absolute as well.
The result is a <i class="term">relative</i> point if and only if both points are
<i class="term">relative</i>.</p></dd>
<dt><a name="73"><i class="arg">point1</i> <b class="cmd">-</b> <i class="arg">point2</i></a></dt>
<dd><p><img alt="figure-49-point-vectorsub" src="../../../../image/figure-49-point-vectorsub.png"></p>
<p>This command interprets two points as vectors and subtracts the second
from the first.
If at least one of the points is <i class="term">absolute</i> the result is
absolute as well.
The result is a <i class="term">relative</i> point if and only if both points are
<i class="term">relative</i>.</p></dd>
<dt><a name="74"><i class="arg">point</i> <b class="cmd">by</b> <i class="arg">distance</i> <i class="arg">direction</i></a></dt>
<dd><p>This command is a more convenient, or at least shorter, form of</p>
<pre class="example">
    [$point + [by $distance $direction]]
</pre>
</dd>
<dt><a name="75"><i class="arg">point1</i> <b class="cmd">|</b> <i class="arg">point2</i></a></dt>
<dd><p><img alt="figure-31-point-projection" src="../../../../image/figure-31-point-projection.png"></p>
<p>This command calculates the <i class="term">projection</i> of two points, i.e. the
result is the point having the x-coordinate of <i class="arg">point1</i> and the
y-coordinate of <i class="arg">point2</i>.</p></dd>
<dt><a name="76"><i class="arg">n</i> <b class="cmd">between</b> <i class="arg">poin1</i> <i class="arg">point2</i></a></dt>
<dd><p><img alt="figure-29-point-interpolation-1" src="../../../../image/figure-29-point-interpolation-1.png"></p>
<p>This command computes the point which is <i class="arg">n</i>*100 percent of the
way between <i class="arg">point1</i> and <i class="arg">point2</i>, and returns it as its
result.
This means that for</p>
<dl class="definitions">
<dt><i class="arg">n</i> == 0</dt>
<dd><p>The result is <i class="arg">point1</i>.</p></dd>
<dt><i class="arg">n</i> == 1</dt>
<dd><p>The result is <i class="arg">point2</i>.</p></dd>
<dt><i class="arg">n</i> == 0.5</dt>
<dd><p>The result is half way between the two points.</p></dd>
</dl>
<p>etc.
<em>Note</em> that it is allowed to use values &lt; 0 and &gt; 1 for <i class="arg">n</i></p></dd>
<dt><a name="77"><b class="cmd">intersect</b> <i class="arg">elem1</i> <i class="arg">elem2</i></a></dt>
<dd><p><img alt="figure-32-point-intersection" src="../../../../image/figure-32-point-intersection.png"></p>
<p>This command takes two <i class="term">open</i> elements, computes the lines going
through their &quot;start&quot;- and &quot;end&quot;-corners, and returns the point where
these two lines intersect.
The command throws an error if the lines do not intersect, or are
coincident.</p></dd>
<dt><a name="78"><i class="arg">element</i> <b class="cmd">names</b> <span class="opt">?<i class="arg">pattern</i>?</span></a></dt>
<dd><p>This command returns a list containing the names of all corners for
the <i class="arg">element</i>. If a pattern is specified then only the names
matching it (via <b class="cmd">string match</b> are returned. Otherwise all
names are returned (equivalent to a default pattern of <b class="const">*</b>).</p></dd>
<dt><a name="79"><i class="arg">element</i> <i class="arg">corner</i></a></dt>
<dd><p>This command returns the value for the <i class="arg">corner</i> of the
<i class="arg">element</i>.
This can be anything, including points and elements.</p></dd>
<dt><a name="80"><i class="arg">element</i> <i class="arg">corner1</i> <i class="arg">corner2</i>...</a></dt>
<dd><p>This is a convenience shorthand for</p>
<pre class="example">
[[[$elem $corner1] $corner2] ...]
</pre>
<p>assuming that the value for</p>
<pre class="example"> [$elem $corner1] </pre>
<p>, etc. is
again an element.</p></dd>
<dt><a name="81"><i class="arg">element</i> <span class="opt">?<i class="arg">corner1</i>... <span class="opt">?<b class="method">names</b> <span class="opt">?<i class="arg">pattern</i>?</span>?</span>]?</span></a></dt>
<dd><p>This is a convenience shorthand for</p>
<pre class="example">
[[[$elem $corner1] ...] names ?pattern?]
</pre>
<p>assuming that the value for</p>
<pre class="example"> [$elem $corner1] </pre>
<p>, etc. is
again an element.</p></dd>
<dt><a name="82"><b class="cmd"><b class="variable">n</b>th</b> <span class="opt">?<i class="arg">corner</i>?</span></a></dt>
<dd><p>This command asks the diagram history for the <b class="variable">n</b>th element
created, searching from the beginning of the history (counting from 1)
and returns it as its result.
If the <i class="arg">corner</i> is specified then the value for this corner is
returned instead.</p></dd>
<dt><a name="83"><b class="cmd"><b class="variable">n</b>th</b> <b class="cmd">last</b> <span class="opt">?<i class="arg">corner</i>?</span></a></dt>
<dd><p>This command asks the diagram history for the <b class="variable">n</b>th element
created, searching from the end of the history and returns it as its
result.
If the <i class="arg">corner</i> is specified then the value for this corner is
returned instead.</p></dd>
<dt><a name="84"><b class="cmd"><b class="variable">n</b>th</b> <i class="arg">shape</i> <span class="opt">?<i class="arg">corner</i>?</span></a></dt>
<dd><p>This command asks the diagram history for the <b class="variable">n</b>th element
created, of the given <i class="arg">shape</i>, searching from the beginning of the
history (counting from 1) and returns it as its result.
If the <i class="arg">corner</i> is specified then the value for this corner is
returned instead.</p></dd>
<dt><a name="85"><b class="cmd"><b class="variable">n</b>th</b> <b class="cmd">last</b> <i class="arg">shape</i> <span class="opt">?<i class="arg">corner</i>?</span></a></dt>
<dd><p>This command asks the diagram history for the <b class="variable">n</b>th element
created, of the given <i class="arg">shape</i>, searching from the end of the
history and returns it as its result.
If the <i class="arg">corner</i> is specified then the value for this corner is
returned instead.</p></dd>
<dt><a name="86"><b class="cmd">last</b> <span class="opt">?<i class="arg">corner</i>?</span></a></dt>
<dd></dd>
<dt><a name="87"><b class="cmd">last</b> <i class="arg">shape</i> <span class="opt">?<i class="arg">corner</i>?</span></a></dt>
<dd><p>Convenience commands mapping to &quot;<b class="cmd">1st last</b>&quot;
and &quot;<b class="cmd">1st last</b> <i class="arg">shape</i>&quot;.</p></dd>
<dt><a name="88"><b class="cmd">1st</b></a></dt>
<dd></dd>
<dt><a name="89"><b class="cmd">2nd</b></a></dt>
<dd></dd>
<dt><a name="90"><b class="cmd">3rd</b></a></dt>
<dd><p>Aliases for <b class="cmd">1th</b>, <b class="cmd">2th</b>, and <b class="cmd">3th</b>, for readability,
usable whereever <b class="cmd"><b class="variable">n</b>th</b> can ocur.</p></dd>
</dl>
</div>
<div id="subsection8" class="subsection"><h3><a name="subsection8">Variables</a></h3>
<p>The language context contains a number of predefined variables which
hold the default values for various attributes. These variables, their
uses, and values are:</p>
<dl class="definitions">
<dt><b class="variable">anchor</b></dt>
<dd><p>The default value for the attribute <b class="cmd">anchor</b>.
Initialized to <b class="const">center</b>.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetAnchor.htm">Tk_GetAnchor</a>.</p></dd>
<dt><b class="variable">arcradius</b></dt>
<dd><p>The default value for the attribute <b class="cmd">radius</b> of <b class="cmd"><a href="../../../../index.html#key82">arc</a></b>
elements.
Initialized to the pixel equivalent of <b class="const">1 cm</b>.</p></dd>
<dt><b class="variable">arrowhead</b></dt>
<dd><p>The default value for the attribute <b class="cmd">arrowhead</b>.
Initialized to <b class="const">none</b>.
The legal values are</p>
<dl class="definitions">
<dt><b class="const">none</b>, <b class="const">-</b></dt>
<dd><p>Draw no arrowheads, at neither end of the line.</p></dd>
<dt><b class="const">start</b>, <b class="const">first</b>, <b class="const">&lt;-</b></dt>
<dd><p>Draw an arrowhead at the beginning of the line, but not at its end.</p></dd>
<dt><b class="const">end</b>, <b class="const">last</b>, <b class="const">-&gt;</b></dt>
<dd><p>Draw an arrowhead at the end of the line, but not at its beginning.</p></dd>
<dt><b class="const">both</b>, <b class="const">&lt;-&gt;</b></dt>
<dd><p>Draw arrowheads at both ends of the line.</p></dd>
</dl></dd>
<dt><b class="variable">boxheight</b></dt>
<dd><p>The default value for the attribute <b class="cmd">height</b> of <b class="cmd"><a href="../../../../index.html#key74">box</a></b>,
<b class="cmd"><a href="../../../../index.html#key87">diamond</a></b> and <b class="cmd"><a href="../../../../index.html#key88">ellipse</a></b> elements.
Initialized to the pixel equivalent of <b class="const">2 cm</b>.</p></dd>
<dt><b class="variable">boxwidth</b></dt>
<dd><p>The default value for the attribute <b class="cmd">width</b> of <b class="cmd"><a href="../../../../index.html#key74">box</a></b>,
<b class="cmd"><a href="../../../../index.html#key87">diamond</a></b> and <b class="cmd"><a href="../../../../index.html#key88">ellipse</a></b> elements.
Initialized to the pixel equivalent of <b class="const">2 cm</b>.</p></dd>
<dt><b class="variable">clockwise</b></dt>
<dd><p>The default value for the attributes <b class="cmd">clockwise</b> and
<b class="cmd">counterclockwise</b> of <b class="cmd"><a href="../../../../index.html#key82">arc</a></b> elements.
Initialized to <b class="const">False</b>, for counter-clockwise direction.</p></dd>
<dt><b class="variable">circleradius</b></dt>
<dd><p>The default value for the attribute <b class="cmd">radius</b> of <b class="cmd"><a href="../../../../index.html#key86">circle</a></b>
elements, and also the default for the attribute <b class="cmd">chop</b>, when
specified without an explicit length.
Initialized to the pixel equivalent of <b class="const">1 cm</b>.</p></dd>
<dt><b class="variable">drumaspect</b></dt>
<dd><p>The default value for the attribute <b class="cmd">aspect</b> of <b class="cmd"><a href="../../../../index.html#key73">drum</a></b>
elements.
Initialized to <b class="const">0.35</b>.</p></dd>
<dt><b class="variable">fillcolor</b></dt>
<dd><p>The default value for the attribute <b class="cmd">fillcolor</b> of all elements
which can be filled.
Initialized to the empty string, signaling that the element is not
filled.</p></dd>
<dt><b class="variable">justify</b></dt>
<dd><p>The default value for the attribute <b class="cmd">justify</b>.
Initialized to <b class="const">left</b>.
The legal values are <b class="const">left</b>, <b class="const">right</b>, and <b class="const">center</b>.</p></dd>
<dt><b class="variable">linecolor</b></dt>
<dd><p>The default value for the attribute <b class="cmd">color</b> of all elements having
to draw lines (all but <b class="cmd"><a href="../../../../index.html#key7">text</a></b>).
Initialized to <b class="const">black</b>.</p></dd>
<dt><b class="variable">linestyle</b></dt>
<dd><p>The default value for the attribute <b class="cmd">style</b> of all elements
having to draw some line.
Initialized to <b class="const">solid</b>.
The legal values are all those accepted by
<a href="http://www.tcl.tk/man/tcl8.5/TkLib/GetDash.htm">Tk_GetDash</a>,
and additionally all which are listed below:</p>
<dl class="definitions">
<dt><b class="const">solid</b>, empty string</dt>
<dd><p>Draw solid line.</p></dd>
<dt><b class="const">dash</b>, <b class="const">dashed</b>, <b class="const">-</b></dt>
<dd><p>Draw a dashed line.</p></dd>
<dt><b class="const">dot</b>, <b class="const">dotted</b>, <b class="const">.</b></dt>
<dd><p>Draw a dotted line.</p></dd>
<dt><b class="const">dash-dot</b>, <b class="const">-.</b></dt>
<dd><p>Draw a dash-dotted line</p></dd>
<dt><b class="const">dash-dot-dot</b>, <b class="const">-..</b></dt>
<dd><p>Draw a dash-dot-dotted line.</p></dd>
</dl></dd>
<dt><b class="variable">linewidth</b></dt>
<dd><p>The default value for the attribute <b class="cmd">stroke</b> of all elements
having to draw some line.
Initialized to <b class="const">1</b> (pixels).</p></dd>
<dt><b class="variable">movelength</b></dt>
<dd><p>The default value for the directional specification of intermediate
locations by the attribute <b class="cmd">then</b> of <b class="cmd"><a href="../../../../index.html#key83">line</a></b> and <b class="cmd"><a href="../../../../index.html#key89">move</a></b>
elements.
Initialized to the pixel equivalent of <b class="const">2 cm</b>.</p></dd>
<dt><b class="variable">slant</b></dt>
<dd><p>The default value for the attribute <b class="cmd">slant</b> of <b class="cmd"><a href="../../../../index.html#key74">box</a></b> elements.
Initialized to 90 degrees, i.e. slant straight up.</p></dd>
<dt><b class="variable">textcolor</b></dt>
<dd><p>The default value for the attribute <b class="cmd">textcolor</b> of all elements
having to draw some text.
Initialized to <b class="const">black</b>.</p></dd>
<dt><b class="variable">textfont</b></dt>
<dd><p>The default value for the attribute <b class="cmd">textfont</b> of all elements
having to draw some text.
Initialized to <b class="const">Helvetica 12pt</b>.</p></dd>
</dl>
</div>
</div>
<div id="section4" class="section"><h2><a name="section4">Diagram Classes</a></h2>
<p>The intended audience of this section are developers wishing to work
on the internals of the diagram package.
Regular users of <b class="package">diagram</b> can skip this section without
missing anything.</p>
<p>The main information seen here is the figure below, showing the
hierarchy of the classes implementing diagram.</p>
<p><img alt="figure-00-dependencies" src="../../../../image/figure-00-dependencies.png"></p>
<p>At the bottom, all at the same level are the supporting packages like
<b class="package"><a href="../../../../index.html#key3">snit</a></b>, etc. These can all be found in Tcllib.</p>
<p>Above them is the set of diagram classes implementing the various
aspects of the system, i.e.:</p>
<dl class="definitions">
<dt><b class="class">diagram</b></dt>
<dd><p>The main class, that which is seen by the user.</p></dd>
<dt><b class="class">diagram::core</b></dt>
<dd><p>The core engine, itself distributed over four helper classes.</p></dd>
<dt><b class="class">diagram::basic</b></dt>
<dd><p>The implementation of the standard shapes, like box, circle, etc.,
based on the extension features of the core.</p></dd>
<dt><b class="class">diagram::element</b></dt>
<dd><p>Core support class, the database of created elements. It also keeps
the history, i.e. the order in which elements were created.</p></dd>
<dt><b class="class">diagram::attribute</b></dt>
<dd><p>Core support class, the generic handling of definition and processing
of attributes.</p></dd>
<dt><b class="class">diagram::direction</b></dt>
<dd><p>Core support class, the database of named directions.</p></dd>
<dt><b class="class">diagram::navigation</b></dt>
<dd><p>Core support class, the state of layout engine, i.e. current position
and directin, and operations on it.</p></dd>
<dt><b class="class">diagram::point</b></dt>
<dd><p>General support class handling various vector operations.</p></dd>
</dl>
</div>
<div id="section5" class="section"><h2><a name="section5">References</a></h2>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key85">2D geometry</a>, <a href="../../../../index.html#key82">arc</a>, <a href="../../../../index.html#key77">arrow</a>, <a href="../../../../index.html#key74">box</a>, <a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key86">circle</a>, <a href="../../../../index.html#key58">diagram</a>, <a href="../../../../index.html#key87">diamond</a>, <a href="../../../../index.html#key80">drawing</a>, <a href="../../../../index.html#key73">drum</a>, <a href="../../../../index.html#key88">ellipse</a>, <a href="../../../../index.html#key36">image</a>, <a href="../../../../index.html#key84">interpolation</a>, <a href="../../../../index.html#key90">intersection</a>, <a href="../../../../index.html#key83">line</a>, <a href="../../../../index.html#key89">move</a>, <a href="../../../../index.html#key81">picture</a>, <a href="../../../../index.html#key79">plane geometry</a>, <a href="../../../../index.html#key50">plotting</a>, <a href="../../../../index.html#key75">point</a>, <a href="../../../../index.html#key78">raster image</a>, <a href="../../../../index.html#key76">spline</a>, <a href="../../../../index.html#key7">text</a>, <a href="../../../../index.html#key60">vector</a></p>
</div>
<div id="category" class="section"><h2><a name="category">Category</a></h2>
<p>Documentation tools</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/getstring/tk_getString.html.









































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164

<html><head>
<title>getstring - A dialog which prompts for a string input</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/getstring/tk_getString.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ getstring.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">getstring(n) 0.1 tklib &quot;A dialog which prompts for a string input&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>getstring - A string dialog</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">EXAMPLE</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.4</b></li>
<li>package require <b class="pkgname">getstring <span class="opt">?0.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::getstring::tk_getString</b> <i class="arg">pathName</i> <i class="arg">variable</i> <i class="arg">text</i> <span class="opt">?options?</span></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a dialog which consists of an Entry, OK, and
Cancel buttons.</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::getstring::tk_getString</b> <i class="arg">pathName</i> <i class="arg">variable</i> <i class="arg">text</i> <span class="opt">?options?</span></a></dt>
<dd><p>Creates a dialog which prompts the user with <i class="arg">text</i> to input a text string.
The contents of the entry are put in the <i class="arg">variable</i> upon closure of the
dialog. The command returns a boolean indicating if the user pressed OK or
not. If -geometry is not specified, the dialog is centered in its parent
toplevel unless its parent is . in which case the dialog is centered in the
screen. 
Options:
-title
-allowempty a boolean argument indicating if the dialog should accept an empty entry
-entryoptions simply passes its arguments through to the entry widget. This is valuble for performing extra validation
using the Entry widget validation hooks.
-geometry specifies the geometry of the window</p></dd>
</dl>
</div>
<div id="section2" class="section"><h2><a name="section2">EXAMPLE</a></h2>
<pre class="example">
package require getstring
namespace import getstring::*
if {[tk_getString .gs text &quot;Feed me a string please:&quot;]} {
    puts &quot;user entered: $text&quot;
}
</pre>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key17">dialog</a>, <a href="../../../../index.html#key71">entry</a>, <a href="../../../../index.html#key136">string</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/history/tklib_history.html.















































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183

<html><head>
<title>history - Provides a history for Entry widgets</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/history/tklib_history.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ history.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">history(n) 0.1 tklib &quot;Provides a history for Entry widgets&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>history - Provides a history for Entry widgets</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.4</b></li>
<li>package require <b class="pkgname">Tk 8.4</b></li>
<li>package require <b class="pkgname">history <span class="opt">?0.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::history::init</b> <i class="arg">pathName</i> <span class="opt">?length?</span></a></li>
<li><a href="#2"><b class="cmd">::history::remove</b> <i class="arg">pathName</i></a></li>
<li><a href="#3"><b class="cmd">::history::add</b> <i class="arg">pathName</i> <i class="arg">text</i></a></li>
<li><a href="#4"><b class="cmd">::history::get</b> <i class="arg">pathName</i></a></li>
<li><a href="#5"><b class="cmd">::history::clear</b> <i class="arg">pathName</i></a></li>
<li><a href="#6"><b class="cmd">::history::configure</b> <i class="arg">pathName</i> <i class="arg">option</i> <span class="opt">?value?</span></a></li>
<li><a href="#7">bell</a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a convenient history mechanism for Entry widgets.
The history may be accessed with the up and down arrow keys.</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::history::init</b> <i class="arg">pathName</i> <span class="opt">?length?</span></a></dt>
<dd><p>Arranges to remember the history of the named Entry widget. An optional length
determines the number of history entries to keep. This may be changed later
with <b class="cmd">::history::configure</b>. History entries must be added with the
<b class="cmd">::history::add</b> command before they can be seen.</p></dd>
<dt><a name="2"><b class="cmd">::history::remove</b> <i class="arg">pathName</i></a></dt>
<dd><p>Forgets all history entries for the Entry <i class="arg">pathName</i> and removes the history
bindings.</p></dd>
<dt><a name="3"><b class="cmd">::history::add</b> <i class="arg">pathName</i> <i class="arg">text</i></a></dt>
<dd><p>This command is used to add history entries to an Entry that has previously had
<b class="cmd">::history::init</b> called on it. This command should be called from your Entry
handler with the contents of the entry (or whatever you wish to add to the history).</p></dd>
<dt><a name="4"><b class="cmd">::history::get</b> <i class="arg">pathName</i></a></dt>
<dd><p>This command returns a list containing the history entries for the Entry <i class="arg">pathName</i></p></dd>
<dt><a name="5"><b class="cmd">::history::clear</b> <i class="arg">pathName</i></a></dt>
<dd><p>This command clears the history list for the named Entry.</p></dd>
<dt><a name="6"><b class="cmd">::history::configure</b> <i class="arg">pathName</i> <i class="arg">option</i> <span class="opt">?value?</span></a></dt>
<dd><p>This command queries or sets configuration options. Currently the options recognized
are <i class="arg">length</i> and <i class="arg">alert</i>. Setting the length determines the number of history entries to keep for
the named Entry. Alert specifies the command to run when the user reaches the end of the history, it defaults to</p></dd>
<dt><a name="7">bell</a></dt>
<dd><p>. Although configure requires a <i class="arg">pathName</i> argument, the setting for alert is global and the path is ignored.</p></dd>
</dl>
<pre class="example">
entry .e
bind .e &lt;Return&gt; [list ProcessEntry %W]
::history::init .e
pack .e
proc ProcessEntry {w} {
    set text [$w get]
    if {$text == &quot;&quot;} { return }
    ::history::add $w $text
    puts $text
    $w delete 0 end
}
</pre>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key71">entry</a>, <a href="../../../../index.html#key114">history</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/ico/ico.html.











































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309

<html><head>
<title>ico - Windows ICO handling</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/ico/ico.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ ico.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">ico(n) 1.0.5 tklib &quot;Windows ICO handling&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>ico - Reading and writing windows icons</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">API</a></li>
<li class="section"><a href="#section3">EXAMPLE</a></li>
<li class="section"><a href="#section4">LIMITATIONS</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.4</b></li>
<li>package require <b class="pkgname">ico <span class="opt">?1.0.5?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::ico::icons</b> <i class="arg">file</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></li>
<li><a href="#2"><b class="cmd">::ico::iconMembers</b> <i class="arg">file</i> <i class="arg">name</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></li>
<li><a href="#3"><b class="cmd">::ico::getIcon</b> <i class="arg">file</i> <i class="arg">name</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></li>
<li><a href="#4"><b class="cmd">::ico::getIconByName</b> <i class="arg">file</i> <i class="arg">name</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></li>
<li><a href="#5"><b class="cmd">::ico::getFileIcon</b> <i class="arg">file</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></li>
<li><a href="#6"><b class="cmd">::ico::writeIcon</b> <i class="arg">file</i> <i class="arg">name</i> <i class="arg">depth</i> <i class="arg">data</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></li>
<li><a href="#7"><b class="cmd">::ico::copyIcon</b> <i class="arg">file</i> <i class="arg">index</i> <i class="arg">file2</i> <i class="arg">index2</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></li>
<li><a href="#8"><b class="cmd">::ico::EXEtoICO</b> <i class="arg">file</i> <span class="opt">?dir?</span></a></li>
<li><a href="#9"><b class="cmd">::ico::clearCache</b> <span class="opt">?file?</span></a></li>
<li><a href="#10"><b class="cmd">::ico::transparentColor</b> <i class="arg">image</i> <i class="arg">color</i></a></li>
<li><a href="#11"><b class="cmd">::ico::Show</b> <i class="arg">file</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides functions for reading and writing Windows icons
from ICO, EXE, DLL, ICL, and BMP files.
As used in this module an icon is a visual representation of an object.
An icon consists of one or more images usually with varying resolution
and color depth. Each icon and image has a resource identifier which
may be a text string or a positive integer value. Most commands use this
identifier to specify which icon or image to operate on.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">API</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::ico::icons</b> <i class="arg">file</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></dt>
<dd><p>Returns a list of icons found in <i class="arg">file</i> where each element is the
name or numeric ID. Recognizes the following options:</p>
<dl class="options">
<dt><b class="option">-type</b> fileFormat</dt>
<dd></dd>
</dl></dd>
<dt><a name="2"><b class="cmd">::ico::iconMembers</b> <i class="arg">file</i> <i class="arg">name</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></dt>
<dd><p>Returns a list of images that make up the icon with ID <i class="arg">name</i>. Each element is itself a
sublist in the format {name width height bpp}. Recognizes the following options:</p>
<dl class="options">
<dt><b class="option">-type</b> fileFormat</dt>
<dd></dd>
</dl></dd>
<dt><a name="3"><b class="cmd">::ico::getIcon</b> <i class="arg">file</i> <i class="arg">name</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></dt>
<dd><p>Extracts the icon with ID <i class="arg">name</i> from <i class="arg">file</i>.
The default <b class="option">-format</b> is <b class="const">image</b> which will return the
name of a Tk image containing the icon. The resolution and color depth
are selected with the <span class="opt">?-res?</span>, <span class="opt">?-bpp?</span>, and <span class="opt">?-exact?</span> options.
If -exact is specified and there is no exact match, an error is thrown.
Optionally <b class="option">-image</b> may be used to specify the name of the Tk
image that is created. If <b class="option">-format</b> is <b class="const">colors</b> then a
list of color names in the #RRGGBB format is returned. Each list element
is a horizontal row. Each horizontal row contains a list of colors for
all the pixels in that row from left to right. If <b class="option">-format</b> is
<b class="const">name</b> then the resource name of the image chosen is returned.
This is useful for calling writeIcon or getIconByName.
Recognizes the following <i class="arg">option</i>s.</p>
<dl class="options">
<dt><b class="option">-type</b> fileFormat</dt>
<dd></dd>
<dt><b class="option">-format</b> value</dt>
<dd></dd>
<dt><b class="option">-image</b> value</dt>
<dd></dd>
<dt><b class="option">-res</b> value</dt>
<dd></dd>
<dt><b class="option">-bpp</b> value</dt>
<dd></dd>
<dt><b class="option">-exact</b> value</dt>
<dd></dd>
</dl></dd>
<dt><a name="4"><b class="cmd">::ico::getIconByName</b> <i class="arg">file</i> <i class="arg">name</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></dt>
<dd><p>Extracts the image with ID <i class="arg">name</i> from <i class="arg">file</i>. This name should be the name of a
specific image as returned by <b class="cmd">::ico::iconMembers</b>, not an icon name returned from
<b class="cmd">::ico::icons</b>. If there is no matching resource ID
in <i class="arg">file</i> an error is thrown. Recognizes the following options:</p>
<dl class="options">
<dt><b class="option">-type</b> fileFormat</dt>
<dd></dd>
<dt><b class="option">-format</b> value</dt>
<dd></dd>
</dl></dd>
<dt><a name="5"><b class="cmd">::ico::getFileIcon</b> <i class="arg">file</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></dt>
<dd><p>This command is only functional when running under Windows. It reads the Windows
registry to determine the display icon for <i class="arg">file</i> as it would appear in Explorer
or similar. <i class="arg">file</i> does not need to exist and may also be specified as a file
extension with a leading dot. If <i class="arg">file</i> is a directory or you specify the
special name <b class="const">Folder</b> then the icon representing a folder is returned. This
command takes the same arguments and usage as <b class="cmd">getIcon</b>:</p>
<dl class="options">
<dt><b class="option">-format</b> value</dt>
<dd></dd>
<dt><b class="option">-image</b> value</dt>
<dd></dd>
<dt><b class="option">-res</b> value</dt>
<dd></dd>
<dt><b class="option">-bpp</b> value</dt>
<dd></dd>
<dt><b class="option">-exact</b> value</dt>
<dd></dd>
</dl></dd>
<dt><a name="6"><b class="cmd">::ico::writeIcon</b> <i class="arg">file</i> <i class="arg">name</i> <i class="arg">depth</i> <i class="arg">data</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></dt>
<dd><p>Writes an image to <i class="arg">file</i>. <i class="arg">name</i> is the resource identifier of the
image in <i class="arg">file</i> to write.
When writing to an EXE, DLL, or ICL file you may only overwrite existing icons with an
icon of the same dimensions and color depth. No icons may be added to these file types.</p>
<p>When writing to BMP the name is ignored as this type can contain only one image. This means
if the file already existed it is completely overwritten.</p>
<p>When writing to an ICO or ICODATA file if the name
specified does not exist then an image is appended and will be named the next in sequence
(the specified name is ignored). Images in ICO and ICODATA files may be overwritten with differing
dimensions or color depths.
Note that you will get strange results when displaying icons if you fail to change every image
which makes up a given icon.</p>
<dl class="arguments">
<dt>integer <i class="arg">depth</i> (in)</dt>
<dd><p>This argument must have a value of <b class="const">1</b>, <b class="const">4</b>, <b class="const">8</b>,
<b class="const">24</b>, or <b class="const">32</b>. If <i class="arg">data</i> has more colors than the
color depth allows an error will be generated.</p></dd>
<dt>options <i class="arg">data</i> (in)</dt>
<dd><p>This argument is either a list of colors in the format returned by
<b class="cmd">::ico::getIcon -format colors</b> or the name of a Tk image.</p></dd>
</dl>
<p>Recognizes the following <i class="arg">option</i>s.</p>
<dl class="options">
<dt><b class="option">-type</b> fileFormat</dt>
<dd></dd>
</dl></dd>
<dt><a name="7"><b class="cmd">::ico::copyIcon</b> <i class="arg">file</i> <i class="arg">index</i> <i class="arg">file2</i> <i class="arg">index2</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></dt>
<dd><p>Copies the icon at <i class="arg">index</i> in <i class="arg">file</i> to <i class="arg">index2</i> in <i class="arg">file2</i>.</p>
<dl class="options">
<dt><b class="option">-fromtype</b> fileFormat</dt>
<dd></dd>
<dt><b class="option">-totype</b> fileFormat</dt>
<dd></dd>
</dl></dd>
<dt><a name="8"><b class="cmd">::ico::EXEtoICO</b> <i class="arg">file</i> <span class="opt">?dir?</span></a></dt>
<dd><p>Extracts all icons from the executable <i class="arg">file</i> to ICO files placed in <i class="arg">dir</i>. <span class="opt">?dir?</span> defaults to the directory <i class="arg">file</i> is located in. Icon files will be named in the form <i class="arg">file</i>-ID.ico where ID is the icon resource identifier.</p>
<dl class="options">
<dt><b class="option">-type</b> fileFormat</dt>
<dd></dd>
</dl></dd>
<dt><a name="9"><b class="cmd">::ico::clearCache</b> <span class="opt">?file?</span></a></dt>
<dd><p>The <b class="cmd">::ico::getIconList</b> command caches icon offsets inside EXE, DLL, ICL,
and ICO files in order to speed up extraction.  This command clears that
cache for the specific <span class="opt">?file?</span> or all files.</p></dd>
<dt><a name="10"><b class="cmd">::ico::transparentColor</b> <i class="arg">image</i> <i class="arg">color</i></a></dt>
<dd><p>If <i class="arg">image</i> is a single word it is assumed to be the name of a Tk image.
All pixels matching <i class="arg">color</i> in the <i class="arg">image</i> will be set transparent.
Alternatively, <i class="arg">image</i> may be a color list in which case a modified list
is returned.</p></dd>
<dt><a name="11"><b class="cmd">::ico::Show</b> <i class="arg">file</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></dt>
<dd><p>Application level command which displays a window showing all the
icons in <i class="arg">file</i> and their name.</p>
<dl class="options">
<dt><b class="option">-type</b> fileFormat</dt>
<dd></dd>
<dt><b class="option">-parent</b> pathName</dt>
<dd></dd>
</dl></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">EXAMPLE</a></h2>
<pre class="example">
    button .explore -image [::ico::getIcon explorer.exe 0 -name explore -res 16 -bpp 8]
    set i [lsearch -inline [::ico::iconMembers tclkit.exe 0] {* 32 32 8}]
    set colorlist [::ico::getIconByName tclkit.exe [lindex $i 0] -format colors]
</pre>
</div>
<div id="section4" class="section"><h2><a name="section4">LIMITATIONS</a></h2>
<p>Icons may not be added or removed from file types other than ICO. Icons in these files
may only be replaced with icons of the same dimensions and color depth.</p>
<p>Icons of 8bpp or lower must include black in the pallete, this means if your icon does
not have black in it, you will need to leave a color free so that it may be included by
writeIcon.</p>
<p>There is currently no way to read alpha channel information from 32bpp icons.</p>
<p>Tk images do not have an alpha channel so the only way to write a true 32bpp icon is from
a color list. writing a 32bpp icon from a Tkimage is identical to writing a 24bpp icon.</p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key91">dll</a>, <a href="../../../../index.html#key71">entry</a>, <a href="../../../../index.html#key93">exe</a>, <a href="../../../../index.html#key94">ico</a>, <a href="../../../../index.html#key92">icon</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/ipentry/ipentry.html.

























































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284

<html><head>
<title>ipentry - An IP address entry widget</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/ipentry/ipentry.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ ipentry.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">ipentry(n) 0.3 tklib &quot;An IP address entry widget&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>ipentry - An IP address entry widget</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">Widget options</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#category">Category</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.4</b></li>
<li>package require <b class="pkgname">Tk 8.4</b></li>
<li>package require <b class="pkgname">ipentry <span class="opt">?0.3?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::ipentry::ipentry</b> <i class="arg">pathName</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></li>
<li><a href="#2"><b class="cmd">::ipentry::ipentry6</b> <i class="arg">pathName</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></li>
<li><a href="#3"><i class="arg">pathName</i> <b class="method">complete</b></a></li>
<li><a href="#4"><i class="arg">pathName</i> <b class="method">get</b></a></li>
<li><a href="#5"><i class="arg">pathName</i> <b class="method">insert</b> <i class="arg">iplist</i></a></li>
<li><a href="#6"><i class="arg">pathName</i> <b class="method">icursor</b> <i class="arg">index</i></a></li>
<li><a href="#7"><i class="arg">pathName</i> <b class="method">configure</b> <i class="arg">option</i> <i class="arg">value</i>...</a></li>
<li><a href="#8"><i class="arg">pathName</i> <b class="method">cget</b> <i class="arg">option</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a widget for the entering of a IP address.</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::ipentry::ipentry</b> <i class="arg">pathName</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></dt>
<dd><p>Creates a new IPv4 ipentry widget and configures it with the given options and
their values.</p></dd>
<dt><a name="2"><b class="cmd">::ipentry::ipentry6</b> <i class="arg">pathName</i> <span class="opt">?<i class="arg">option</i> <i class="arg">value</i>...?</span></a></dt>
<dd><p>Creates a new ipentry widget for the entry of an IPv6 address. All options
are the same as the IPv4 widget.</p></dd>
</dl>
<p>Each widget created with the command above supports the following methods:</p>
<dl class="definitions">
<dt><a name="3"><i class="arg">pathName</i> <b class="method">complete</b></a></dt>
<dd><p>Returns a boolean value. True indicates that the entry contains a
complete IP address, meaning all fields have a value. In some cases
IPv6 address are valid when fields are missing. You will need to do your
own validation to detect this.</p></dd>
<dt><a name="4"><i class="arg">pathName</i> <b class="method">get</b></a></dt>
<dd><p>Returns the contents of the entry as a list consisting of 4 or 8 elements.</p></dd>
<dt><a name="5"><i class="arg">pathName</i> <b class="method">insert</b> <i class="arg">iplist</i></a></dt>
<dd><p>IPv4
Takes a list of 4 elements and inserts one into each quad of the entry, in order.
All values in the list must be empty or integers. Values outside the range 0 to 255
are modified to be within the range.
IPv6
Takes a list of 8 elements and inserts one into each quad of the entry, in order.
All values in the list must be empty or 1 to 4 hex digits.</p></dd>
<dt><a name="6"><i class="arg">pathName</i> <b class="method">icursor</b> <i class="arg">index</i></a></dt>
<dd><p>Sets the position of the widgets insertion cursor. Only integer values between
0 and 15 are valid for ipentry and 0 to 31 for ipentry6.
Setting the icursor will only have an effect if the widget
already has the input focus.</p></dd>
<dt><a name="7"><i class="arg">pathName</i> <b class="method">configure</b> <i class="arg">option</i> <i class="arg">value</i>...</a></dt>
<dd><p>Modifies the configuration of the widget. For options and
their meaning see the widget options section.</p></dd>
<dt><a name="8"><i class="arg">pathName</i> <b class="method">cget</b> <i class="arg">option</i></a></dt>
<dd><p>Returns information about the current configuration of the widget, for
the specified option. For options and their meaning see the widget
options section.</p></dd>
</dl>
</div>
<div id="section2" class="section"><h2><a name="section2">Widget options</a></h2>
<dl class="tkoptions">
<dt>Command-Line Switch:	<b class="option">-textvariable</b><br>
Database Name:	<b class="optdbname">textvariable</b><br>
Database Class:	<b class="optdbclass">Variable</b><br>
</dt>
<dd><p>The name of a variable which holds the value of the IP address.
The value must be a string of the form NNN.NNN.NNN.NNN for IPv4 or
HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH:HHHH for IPv6 where H is a hex digit.
The variable will be modified to represent a valid IP address if it is not
already.</p></dd>
<dt>Command-Line Switch:	<b class="option">-state</b><br>
Database Name:	<b class="optdbname">state</b><br>
Database Class:	<b class="optdbclass">State</b><br>
</dt>
<dd><p>Specifies one of three states for the entry: <b class="const">normal</b>,
<b class="const">disabled</b>, or <b class="const">readonly</b>.</p></dd>
<dt>Command-Line Switch:	<b class="option">-font</b><br>
Database Name:	<b class="optdbname">font</b><br>
Database Class:	<b class="optdbclass">Font</b><br>
</dt>
<dd></dd>
<dt>Command-Line Switch:	<b class="option">-bd</b><br>
Database Name:	<b class="optdbname">borderWidth</b><br>
Database Class:	<b class="optdbclass">BorderWidth</b><br>
</dt>
<dd></dd>
<dt>Command-Line Switch:	<b class="option">-fg</b><br>
Database Name:	<b class="optdbname">foreground</b><br>
Database Class:	<b class="optdbclass">Foreground</b><br>
</dt>
<dd></dd>
<dt>Command-Line Switch:	<b class="option">-bg</b><br>
Database Name:	<b class="optdbname">background</b><br>
Database Class:	<b class="optdbclass">Background</b><br>
</dt>
<dd></dd>
<dt>Command-Line Switch:	<b class="option">-relief</b><br>
Database Name:	<b class="optdbname">relief</b><br>
Database Class:	<b class="optdbclass">Relief</b><br>
</dt>
<dd></dd>
<dt>Command-Line Switch:	<b class="option">-highlightthickness</b><br>
Database Name:	<b class="optdbname">highlightThickness</b><br>
Database Class:	<b class="optdbclass">HighlightThickness</b><br>
</dt>
<dd></dd>
<dt>Command-Line Switch:	<b class="option">-highlightcolor</b><br>
Database Name:	<b class="optdbname">highlightColor</b><br>
Database Class:	<b class="optdbclass">HighlightColor</b><br>
</dt>
<dd></dd>
<dt>Command-Line Switch:	<b class="option">-highlightbackground</b><br>
Database Name:	<b class="optdbname">highlightBackground</b><br>
Database Class:	<b class="optdbclass">HighlightBackground</b><br>
</dt>
<dd></dd>
<dt>Command-Line Switch:	<b class="option">-selectbackground</b><br>
Database Name:	<b class="optdbname">selectBackground</b><br>
Database Class:	<b class="optdbclass">Background</b><br>
</dt>
<dd></dd>
<dt>Command-Line Switch:	<b class="option">-selectforeground</b><br>
Database Name:	<b class="optdbname">selectForeground</b><br>
Database Class:	<b class="optdbclass">Foreground</b><br>
</dt>
<dd></dd>
<dt>Command-Line Switch:	<b class="option">-selectborderwidth</b><br>
Database Name:	<b class="optdbname">selectBorderWidth</b><br>
Database Class:	<b class="optdbclass">BorderWidth</b><br>
</dt>
<dd></dd>
<dt>Command-Line Switch:	<b class="option">-disabledbackground</b><br>
Database Name:	<b class="optdbname">disabledBackground</b><br>
Database Class:	<b class="optdbclass">DisabledBackground</b><br>
</dt>
<dd></dd>
<dt>Command-Line Switch:	<b class="option">-disabledforeground</b><br>
Database Name:	<b class="optdbname">disabledForeground</b><br>
Database Class:	<b class="optdbclass">DisabledForeground</b><br>
</dt>
<dd></dd>
<dt>Command-Line Switch:	<b class="option">-readonlybackground</b><br>
Database Name:	<b class="optdbname">readonlyBackground</b><br>
Database Class:	<b class="optdbclass">ReadonlyBackground</b><br>
</dt>
<dd></dd>
<dt>Command-Line Switch:	<b class="option">-insertbackground</b><br>
Database Name:	<b class="optdbname">insertBackground</b><br>
Database Class:	<b class="optdbclass">Background</b><br>
</dt>
<dd><p>Standard widget options. See <b class="cmd">options</b> for a description of their
meanings and values.</p></dd>
</dl>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key71">entry</a>, <a href="../../../../index.html#key96">ip address</a>, <a href="../../../../index.html#key95">network</a></p>
</div>
<div id="category" class="section"><h2><a name="category">Category</a></h2>
<p>Widget</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/khim/khim.html.



















































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265

<html><head>
<title>khim - Kevin's Hacky Input Method</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/khim/khim.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ khim.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">khim(n) 1.0 tklib &quot;Kevin's Hacky Input Method&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>khim - Provides key bindings for entering international characters on a keyboard that does not support them</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">PROCEDURES</a></li>
<li class="section"><a href="#section3">LOCALISATION</a></li>
<li class="section"><a href="#section4">ACKNOWLEDGMENTS</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl</b></li>
<li>package require <b class="pkgname">khim <span class="opt">?1.0?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::khim::getOptions</b> <i class="arg">path</i></a></li>
<li><a href="#2"><b class="cmd">::khim::getConfig</b></a></li>
<li><a href="#3"><b class="cmd">::khim::setConfig</b> <i class="arg">version</i> <i class="arg">enabled</i> <i class="arg">compose</i> <i class="arg">map</i></a></li>
<li><a href="#4"><b class="cmd">::khim::showHelp</b> <i class="arg">path</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a set of key bindings to allow
a user to enter arbitrary characters on a keyboard that
does not support them.  It works by designating some seldom-used key
of the keyboard as a &quot;Compose&quot; key (this key is distinct from any key
so labeled, and is often &quot;Pause,&quot; &quot;F12&quot; or &quot;L2&quot;), and having the
&quot;Compose&quot; key, followed by a two-key sequence, have the effect of
inserting some character in a widget.
In addition, the &quot;Compose&quot; key, when struck twice in succession,
brings up a dialog containing a Unicode character map, allowing
arbitrary characters to be inserted.</p>
<p>The vast bulk of the package's functionality is implemented in a
single bindtag, <b class="const">KHIM</b>.  An application can request that any
text or entry widget use the package to allow for entry of arbitrary
characters by placing this binding tag ahead of the <b class="const">Text</b> or
<b class="const">Entry</b> binding tag for the widget:</p>
<pre class="example">
text .t -width 80 -height 24
bindtags .t {.t KHIM Text . all}
</pre>
<p>Note that the <b class="const">KHIM</b> tag must precede the <b class="const">Text</b> or
<b class="const">Entry</b> class binding, or the package will not function
correctly.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">PROCEDURES</a></h2>
<p>In addition to commands supporting the KHIM binding tag, the following
commands are exported from the package:</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::khim::getOptions</b> <i class="arg">path</i></a></dt>
<dd><p>Posts a top-level modal dialog with the path name <i class="arg">path</i> that
prompts the user for KHIM options.  The user is allowed to reconfigure
the key sequences for the &quot;Compose&quot; key, change the choice of key to
use for the &quot;Compose&quot; function, and enable/disable the KHIM key
bindings entirely.</p></dd>
<dt><a name="2"><b class="cmd">::khim::getConfig</b></a></dt>
<dd><p>Returns a Tcl script that restores the current configuration of KHIM:
the enabled/disabled state, the choice of &quot;Compose&quot; key, and the key
sequences that may be composed.  This script is designed to be
saved to a configuration file for use in a subsequent invocation of
the same application:</p>
<pre class="example">
# Save KHIM configuration
set f [open ~/.khimrc w]
puts $f [::khim::getConfig]
close $f
# Restore KHIM configuration
source ~/.khimrc
</pre>
</dd>
<dt><a name="3"><b class="cmd">::khim::setConfig</b> <i class="arg">version</i> <i class="arg">enabled</i> <i class="arg">compose</i> <i class="arg">map</i></a></dt>
<dd><p>Restores an earlier saved configuration.  Few, if any, applications
will call this command in any other way than to evaluate it as
returned from <b class="cmd">::khim::getConfig</b>.</p></dd>
<dt><a name="4"><b class="cmd">::khim::showHelp</b> <i class="arg">path</i></a></dt>
<dd><p>Displays a top-level dialog giving user-level help for KHIM; the
dialog will have the path name <i class="arg">path</i>.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">LOCALISATION</a></h2>
<p>Programmers who wish to make KHIM available in a non-English-speaking
locale may do so by providing a <b class="const">.msg</b> file with the appropriate
localised text.  The catalog requires the following messages:</p>
<dl class="definitions">
<dt><b class="const">Apply</b></dt>
<dd><p>Text that will appear on the &quot;Apply&quot; button in the dialog that sets
KHIM options.</p></dd>
<dt><b class="const">Cancel</b></dt>
<dd><p>Text that will appear on the &quot;Cancel&quot; button in several dialogs.</p></dd>
<dt><b class="const">Change</b></dt>
<dd><p>Text that will appear on the &quot;Change&quot; button, which alters the binding
of a pair of composed characters (creating or replacing as
appropriate).</p></dd>
<dt><b class="const">Character</b></dt>
<dd><p>Text that will appear on the label of the entry widget that accepts a
character resulting from a composed sequence.</p></dd>
<dt><b class="const">{Compose Key}</b></dt>
<dd><p>Window title for a dialog that prompts the user to strike the key that
will be used for the &quot;Compose&quot; key.</p></dd>
<dt><b class="const">{Compose key:}</b></dt>
<dd><p>Label that identifies a component showing the &quot;Compose&quot; key choice in
the KHIM options dialog.</p></dd>
<dt><b class="const">{Composed sequence must be two characters long}</b></dt>
<dd><p>Error message that is displayed if the user attempts to define a
&quot;Compose&quot; sequence that is shorter or longer than two characters.</p></dd>
<dt><b class="const">Delete</b></dt>
<dd><p>Text for a button that deletes a &quot;Compose&quot; sequence.</p></dd>
<dt><b class="const">Help...</b></dt>
<dd><p>Text for a button that displays the KHIM user help dialog.</p></dd>
<dt><b class="const">HELPTEXT</b></dt>
<dd><p>Complete text for the user-level help for KHIM.  Refer to
&quot;<b class="file">en.msg</b>&quot; for the English-language version of the help.</p></dd>
<dt><b class="const">{Input key sequence}</b></dt>
<dd><p>Text for a label of the entry widget that prompts the user for a
two-character sequence to use with the &quot;Compose&quot; key.</p></dd>
<dt><b class="const">{Insert Character}</b></dt>
<dd><p>Window title of the dialog box that displays a Unicode character map
and prompts the user to select a character to insert.</p></dd>
<dt><b class="const">{Key sequences}</b></dt>
<dd><p>Text for a label at the head of a listbox showing the composed
sequences that are currently bound.</p></dd>
<dt><b class="const">{KHIM Controls}</b></dt>
<dd><p>Window title for the dialog box that prompts for KHIM settings.</p></dd>
<dt><b class="const">{KHIM Help}</b></dt>
<dd><p>Window title for the window that display help text for KHIM.</p></dd>
<dt><b class="const">OK</b></dt>
<dd><p>Label for the OK button on several dialogs.</p></dd>
<dt><b class="const">Select code page:</b></dt>
<dd><p>Label for a spinbox that prompts the user for a Unicode code page number.</p></dd>
<dt><b class="const">SELECT COMPOSE KEY</b></dt>
<dd><p>A message, which should be composed in short lines, prompting the user
to press the key that will become the &quot;Compose&quot; key in KHIM.</p></dd>
<dt><b class="const">Unicode...</b></dt>
<dd><p>Text for a button that brings up the character map to select the
character to which a composed sequence binds.</p></dd>
<dt><b class="const">{Use KHIM}</b></dt>
<dd><p>Text for a checkbutton that asks whether the user wishes to use KHIM
to manage composed key sequences.</p></dd>
</dl>
</div>
<div id="section4" class="section"><h2><a name="section4">ACKNOWLEDGMENTS</a></h2>
<p>KHIM was originally inspired by the key bindings that Brent Welch
developed for the 'sedit' editor used in the 'exmh' mail user agent.
The code for KHIM is entirely separate from that for 'sedit'.</p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key41">character</a>, <a href="../../../../index.html#key38">i18n</a>, <a href="../../../../index.html#key40">input</a>, <a href="../../../../index.html#key39">international</a>, <a href="../../../../index.html#key42">method</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/menubar/menubar.html.























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747

<html><head>
<title>menubar - Create and manipulate menubars</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/menubar/menubar.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; 2009 Tom Krehbiel &lt;krehbiel.tom@gmail.com&gt; All rights reserved.
   -->
<! -- CVS: $Id$ menubar.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">menubar(n) 0.5 tklib &quot;Create and manipulate menubars&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>menubar - Creates an instance of the <em>menubar</em> Class.</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">Options</a></li>
<li class="section"><a href="#section3">Introduction</a></li>
<li class="section"><a href="#section4">Terminology</a></li>
<li class="section"><a href="#section5">Methods</a></li>
<li class="section"><a href="#section6">Methods - menu.xxx</a></li>
<li class="section"><a href="#section7">Methods - tag.xxx</a></li>
<li class="section"><a href="#section8">Methods - group.xxx</a></li>
<li class="section"><a href="#section9">Methods - notebook.xxx</a></li>
<li class="section"><a href="#section10">Scope Control</a></li>
<li class="section"><a href="#section11">Example</a></li>
<li class="section"><a href="#section12">Caveats</a></li>
<li class="section"><a href="#see-also">See Also</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.6</b></li>
<li>package require <b class="pkgname">Tk 8.6</b></li>
<li>package require <b class="pkgname">menubar <span class="opt">?0.5?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">menubar new</b> <span class="opt">?options?</span></a></li>
<li><a href="#2"><i class="arg">mBarInst</i> <b class="cmd">define</b> <i class="arg">body</i></a></li>
<li><a href="#3"><i class="arg">mBarInst</i> <b class="cmd">install</b> <i class="arg">pathName body</i></a></li>
<li><a href="#4"><i class="arg">mBarInst</i> <b class="cmd">menu.configure</b> <i class="arg">option tag-settings ?option tag-settings ...?</i></a></li>
<li><a href="#5"><i class="arg">mBarInst</i> <b class="cmd">menu.namespace</b> <i class="arg">tag namespace</i></a></li>
<li><a href="#6"><i class="arg">mBarInst</i> <b class="cmd">menu.hide</b> <i class="arg">tag</i></a></li>
<li><a href="#7"><i class="arg">mBarInst</i> <b class="cmd">menu.show</b> <i class="arg">tag</i></a></li>
<li><a href="#8"><i class="arg">mBarInst</i> <b class="cmd">tag.add</b> <i class="arg">tag value</i></a></li>
<li><a href="#9"><i class="arg">mBarInst</i> <b class="cmd">tag.configure</b> <i class="arg">pathName tag ?option value ...option value?</i></a></li>
<li><a href="#10"><i class="arg">mBarInst</i> <b class="cmd">tag.cget</b> <i class="arg">pathName tag ?option?</i></a></li>
<li><a href="#11"><i class="arg">mBarInst</i> <b class="cmd">group.add</b> <i class="arg">tag label ?cmd? ?accel? ?sequence? ?state?</i></a></li>
<li><a href="#12"><i class="arg">mBarInst</i> <b class="cmd">group.delete</b> <i class="arg">tag label</i></a></li>
<li><a href="#13"><i class="arg">mBarInst</i> <b class="cmd">group.move</b> <i class="arg">direction tag label</i></a></li>
<li><a href="#14"><i class="arg">mBarInst</i> <b class="cmd">group.configure</b> <i class="arg">tag label ?option value ...option value?</i></a></li>
<li><a href="#15"><i class="arg">mBarInst</i> <b class="cmd">group.serialize</b> <i class="arg">tag</i></a></li>
<li><a href="#16"><i class="arg">mBarInst</i> <b class="cmd">group.deserialize</b> <i class="arg">tag stream</i></a></li>
<li><a href="#17"><i class="arg">mBarInst</i> <b class="cmd">notebook.addTabStore</b> <i class="arg">pathname</i></a></li>
<li><a href="#18"><i class="arg">mBarInst</i> <b class="cmd">notebook.deleteTabStore</b> <i class="arg">pathname</i></a></li>
<li><a href="#19"><i class="arg">mBarInst</i> <b class="cmd">notebook.setTabValue</b> <i class="arg">pathname tag</i></a></li>
<li><a href="#20"><i class="arg">mBarInst</i> <b class="cmd">notebook.restoreTabValues</b> <i class="arg">pathname</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">menubar new</b> <span class="opt">?options?</span></a></dt>
<dd></dd>
</dl>
<p>Create and return a new instance of the menubar class. The
menubar class encapsulates the definition, installation and
dynamic behavior of a menubar. The class doesn't depend on a
widget framework and therefore can be used with or without a
framework (e.g. Bwidget, IWidget, Snit, etc.). Unlike other Tk
widget commands, the menubar command doesn't have a <em>pathName</em>
argument because menubars are handled by the window manager (i.e. wm)
and not the application.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">Options</a></h2>
<p>The following options can be passed to the <em>menubar new</em> command.</p>
<p>These options are inherited from the Tk menu command, their effect is
platform specific.</p>
<dl class="options">
<dt><b class="option"><a href="http://docs.activestate.com/activetcl/8.5/tcl/TkCmd/options.htm#M-activebackground">-activebackground</a></b></dt>
<dd></dd>
<dt><b class="option"><a href="http://docs.activestate.com/activetcl/8.5/tcl/TkCmd/options.htm#M-activeborderwidth">-activeborderwidth</a></b></dt>
<dd></dd>
<dt><b class="option"><a href="http://docs.activestate.com/activetcl/8.5/tcl/TkCmd/options.htm#M-activeforeground">-activeforeground</a></b></dt>
<dd></dd>
<dt><b class="option"><a href="http://docs.activestate.com/activetcl/8.5/tcl/TkCmd/options.htm#M-background">-background</a></b></dt>
<dd></dd>
<dt><b class="option"><a href="http://docs.activestate.com/activetcl/8.5/tcl/TkCmd/options.htm#M-borderwidth">-borderwidth</a></b></dt>
<dd></dd>
<dt><b class="option"><a href="http://docs.activestate.com/activetcl/8.5/tcl/TkCmd/options.htm#M-cursor">-cursor</a></b></dt>
<dd></dd>
<dt><b class="option"><a href="http://docs.activestate.com/activetcl/8.5/tcl/TkCmd/options.htm#M-disabledforeground">-disabledforeground</a></b></dt>
<dd></dd>
<dt><b class="option"><a href="http://docs.activestate.com/activetcl/8.5/tcl/TkCmd/options.htm#M-font">-font</a></b></dt>
<dd></dd>
<dt><b class="option"><a href="http://docs.activestate.com/activetcl/8.5/tcl/TkCmd/options.htm#M-foreground">-foreground</a></b></dt>
<dd></dd>
<dt><b class="option"><a href="http://docs.activestate.com/activetcl/8.5/tcl/TkCmd/options.htm#M-relief">-relief</a></b></dt>
<dd></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">Introduction</a></h2>
<p>An instance of the menubar class provides methods for compiling a
description of the menubar, configuring menu items and 
installing the menubar in toplevel windows.</p>
<p>A menubar can be thought of as a tree of cascading menus. Users define
a menubar using a language that results in a human readable description
of a menubar. The description of the menubar is then compiled by an
instance of the menubar class after which it can be installed in one or more
toplevel windows.</p>
<p>The menubar class provides many unique capabilities that are not
found in other tcl/tk menubar implementation. Some of these are:</p>
<ul class="itemized">
<li><p>A tagging system that simplifies access to menu entries in the menu tree.</p></li>
<li><p>Support for user defined tags that depend on the toplevel window context.</p></li>
<li><p>A simplified and uniform interface for all callback commands.</p></li>
<li><p>Namespace support for all callback commands so callback commands can be easily grouped into namespaces.</p></li>
<li><p>Support for hiding and exposing menus on the menubar.</p></li>
<li><p>A simplified method for creating radiobutton groups.</p></li>
<li><p>Automatic management of state variables for checkbuttons and radiobuttons.</p></li>
<li><p>Scope control for the state variables of checkbuttons and radiobuttons.</p></li>
<li><p>Tear-off menu management that ensures only one tearoff menu is created.</p></li>
<li><p>Support for dynamic menu extension to simplify the creation of recent document menus.</p></li>
<li><p>Support for saving and restoring dynamic menu extensions.</p></li>
</ul>
</div>
<div id="section4" class="section"><h2><a name="section4">Terminology</a></h2>
<dl class="definitions">
	
<dt>MENUBAR</dt>
<dd><p>The visible rendering of a menubar in a toplevel window is a horizontally
	group of cascading Tk menus.</p></dd>
<dt>MENU</dt>
<dd><p>A menu is an ordered list of items that is rendered
	vertically. Menus are not visible until a user
	preforms some action (normally a &lt;ButtonPress-1&gt; event). A menu
	may contain any number of child menus that are rendered as
	cascading menus. Cascading menus are rendered next to the parent menu
	when they are activated.</p></dd>
<dt>MENU ENTRY</dt>
<dd><p>A menu contains an ordered list of items called entries.
	Menu entries have a type and the menubar class supports the
	following 6 entry types: 
	<em>Command</em>, <em>Checkbutton</em>, <em>Radiobutton</em>, <em>Separator</em>, <em>Group</em> and <em>Menu</em>.</p></dd>
<dt>ENTRY LABEL</dt>
<dd><p>Each menu entry has a visible string that is called the entry label.</p></dd>
<dt>TAG</dt>
<dd><p>A tag is name that is normally used to referr to an item in a menu
	tree. A tag name is an alphanumeric character string
	that may include the underscore character. Menu tree tags are
	defined for all nodes and leafs in a menu tree. This provides a
	flat abstraction of the tree and simplifies item referencing in
	menubar methods. Without this abstraction it would be
	necessary to reference menu elements using a tree path which
	could change at run-time. The menubar class also has a method that
	can create a user defined tag. User
	defined tags store values that change based on the currently
	active toplevel window. User defined tags can be used to store widget
	pathnames use by callback code so that output can be routed to the
	appropriate toplevel window.</p></dd>
</dl>
</div>
<div id="section5" class="section"><h2><a name="section5">Methods</a></h2>
<dl class="definitions">
	
<dt><a name="2"><i class="arg">mBarInst</i> <b class="cmd">define</b> <i class="arg">body</i></a></dt>
<dd><p>Compiles <em>body</em> into a tree of menu entries which define the 
	visual layout of the menubar. The <em>body</em> argument 
	describes the layout using the following syntax, where the
	elements of the syntax are described below.</p>
<p><em>body == definitions</em></p>
<pre class="example">
definitions    ::= { &lt;ignore&gt; | &lt;definition&gt; | &lt;definition&gt; &lt;definitions&gt; }
ignore         ::= { &lt;nl&gt; | &lt;white-space&gt; &lt;nl&gt; | # &lt;comment&gt; &lt;nl&gt; }
definition     ::= { &lt;command&gt; | &lt;checkbutton&gt; | &lt;radiobutton&gt; | &lt;separator&gt; | &lt;group&gt; | &lt;menu&gt; }
command        ::= &lt;label&gt; C &lt;tag&gt; &lt;nl&gt;
checkbutton    ::= &lt;label&gt; X&lt;scope&gt; { &lt;tag&gt; | &lt;tag&gt;+ } &lt;nl&gt;
radiobutton    ::= &lt;label&gt; R&lt;scope&gt; { &lt;tag&gt; | &lt;tag&gt;+ } &lt;nl&gt;
separator      ::= &lt;stext&gt; S &lt;tag&gt; &lt;nl&gt;
group          ::= &lt;dummy&gt; G &lt;tag&gt; &lt;nl&gt;
menu           ::= &lt;label&gt; { M:&lt;tag&gt; | M:&lt;tag&gt;+ } &lt;nl&gt; &lt;definitions&gt;
stext          ::= '--' | &lt;label&gt;
scope          ::= '' | '@' | '='
</pre>
<p><em> </em></p>
<dl class="definitions">
	
<dt>C - Command</dt>
<dd><p>The C type entry is the most common type of entry. This entry executes
	a command when it is invoked.</p></dd>
<dt>X - Checkbutton</dt>
<dd><p>A X type entry behaves much like a Tk checkbutton
	widget. When it is invoked it toggles back and forth between
	a selected and deselected states. The value of a checkbutton
	is a boolean (i.e. 1 or 0). By default all checkbuttons are
	deselected. If you want the checkbutton to be initially selected
	then include a trailing plus (+) with the tag name. See SCOPE CONTROL
	below for a description of the scope indicator.</p></dd>
<dt>R - Radiobutton</dt>
<dd><p>A R type menu entry behaves much like a Tk radiobutton widget. Each
	radiobutton entry is a member of a radiobutton group that
	controls the behavior of the radiobuttons in the group. All
	radiobuttons in a group are given the same tag name. In the
	example below Red, Green and Blue all have the same tag and are
	therefore all in the same radiobutton group. A trailing plus
	(+) on the tag name of a radiobutton entry will cause the entry to be 
	the initially selected entry. See SCOPE CONTROL
	below for a description of the scope indicator.</p></dd>
<dt>S - Separator</dt>
<dd><p>A S type menu entry is an entry that is displayed either as a horizontal
	dividing line or a label. Separators are not active elements of a menu and
	have no associated behavior if they are invoked. If &lt;stext&gt; is two dashes
	(i.e. '--') then the separator will be displayed as a horizontal line
	otherwise &lt;stext&gt; will be displayed as a bold label surrounded by double
	dashes (e.g. &quot;-- &lt;stext&gt; --&quot;) with a lightgray background.</p></dd>
<dt>G - Command Group</dt>
<dd><p>The G type menu entry marks a location in the menu tree where
	entries can be dynamically added and removed. Menu extension can only
	occur at the end of a menu so G type entries must be the last item on a menu. 
	A G	type entry is rendered as a separator line. The <em>group.&lt;xxx&gt;</em>
	sub-commands are used to manipulate command group entries.</p></dd>
<dt>M - Menu</dt>
<dd><p>An M type entry is used to define both menubar menus and cascading
	menus. Menu entries are the most complicated of the 6 menu types.
	A menu entry is composed of three list elements. The first element
	of the list is its label. The second element of the list is a
	composite string consisting of a type identifier (M) followed by
	an optional tag (beginning with a ':' separator) and finally an
	optional plus (+) which indicates that the menu is a tear-off
	menu. The final element of the list is a LIST VALUE.</p></dd>
</dl></dd>
</dl>
<dl class="definitions">
	
<dt><a name="3"><i class="arg">mBarInst</i> <b class="cmd">install</b> <i class="arg">pathName body</i></a></dt>
<dd><p>The <em>install</em> method installs the menubar created with the
	<em>define</em> method into toplevel window <em>pathName</em>. The
	<em>body</em> argument of the command contains a tcl script which
	is used to initialize the installed menubar. Normally the tcl
	script will contain calls to various menubar methods to perform
	the initialization. The initialization code is only run once
	when the menubar is installed. The namespace in which the <em>install</em> 
	method is executed becomes the default namespace for callback commands
	(see <em>menu.namespace</em> below for more details).</p></dd>
</dl>
</div>
<div id="section6" class="section"><h2><a name="section6">Methods - menu.xxx</a></h2>
<dl class="definitions">
	
<dt><a name="4"><i class="arg">mBarInst</i> <b class="cmd">menu.configure</b> <i class="arg">option tag-settings ?option tag-settings ...?</i></a></dt>
<dd><p>Configures the tags of a menubar and returns an empty string. This method provides a convenient
		way to configure a larger number of tags without the verbosity of using the <em>tag.configure</em> method.</p>
<dl class="definitions">
		
<dt><i class="arg">option</i></dt>
<dd><p><em>Option</em> may have any of the values accepted by the <em>tag.configure</em> method.</p></dd>
<dt><i class="arg">tag-settings</i></dt>
<dd><p>The <em>tag-settings</em> argument is a string that is converted to a list of tag-value pairs
			using the following syntax.</p>
<p>Syntax for <em>tag-settings</em>.</p>
<pre class="example">
tag-settings ::= { &lt;ignore&gt; | &lt;value&gt; | &lt;value&gt; &lt;tag-settings&gt; }
ignore       ::= { &lt;nl&gt; | &lt;white-space&gt; &lt;nl&gt; | # &lt;comment&gt; &lt;nl&gt; }
value        ::= &lt;tag&gt; &lt;option-value&gt; &lt;nl&gt;
</pre>
</dd>
</dl></dd>
</dl>
<dl class="definitions">
	
<dt><a name="5"><i class="arg">mBarInst</i> <b class="cmd">menu.namespace</b> <i class="arg">tag namespace</i></a></dt>
<dd><p>Change the namespace for a sub-tree of the menubar
		starting at entry <em>tag</em>. The new value will be <em>namespace</em>. 
		Each entry in the menubar tree has an
		associated namespace which will be used for its callback
		procedure. The default namespace is the namespace where
		the <em>install</em>  method was executed. The <em>namespace</em> 
		method can be used to change the namespace
		that will be used for callbacks in a sub-tree of the
		menubar. This method can only be used in the context of
		an <em>install</em> script.</p></dd>
</dl>
<dl class="definitions">
		
	
<dt><a name="6"><i class="arg">mBarInst</i> <b class="cmd">menu.hide</b> <i class="arg">tag</i></a></dt>
<dd><p>Remove (hide) a menubar entry. When a
		menubar tree is defined all entries are visible by default.
		This method can be used to hide a menubar entry.
		The <em>hide</em> methods can be used in the
		context of an <em>install</em> script so that a menu will be
		initially hidden at application start up. The <em>tag</em> argument
		is the tag name of the menu to be hidden.</p></dd>
<dt><a name="7"><i class="arg">mBarInst</i> <b class="cmd">menu.show</b> <i class="arg">tag</i></a></dt>
<dd><p>Exposes (shows) a hidden menubar entry. When a
		menubar tree is defined all entries are visible by default.
		If a entry is hidden from the user (using the menu.hide method)
		then it can be exposed again using the show method. The <em>tag</em>
		argument is the tag name of the menu to be shown.</p></dd>
</dl>
</div>
<div id="section7" class="section"><h2><a name="section7">Methods - tag.xxx</a></h2>
<dl class="definitions">
	
<dt><a name="8"><i class="arg">mBarInst</i> <b class="cmd">tag.add</b> <i class="arg">tag value</i></a></dt>
<dd><p>Add a user defined <em>tag</em> value. The <em>tag.add</em> method
		adds a new tag-value pair to the the tags defined for a
		menubar. User defined tags are different from the tags
		created by the <em>define</em> method. The <em>tag.add</em>
		method can only be used in an <em>install</em> script and its
		value is associated with the toplevel where the menubar is
		installed. This makes the tag context sensitive so callback
		code that queries the tag value will receive a value that
		is associated with the window that performed the callback.</p></dd>
</dl>
<dl class="definitions">
	
<dt><a name="9"><i class="arg">mBarInst</i> <b class="cmd">tag.configure</b> <i class="arg">pathName tag ?option value ...option value?</i></a></dt>
<dd><p>Given the <em>pathName</em> of a toplevel window and a <em>tag</em> this method configures the
		menu entry associated with the tag and return an empty string.</p>
<dl class="definitions">
			
<dt><i class="arg">Standard Options</i></dt>
<dd><p>These option are the same as those described for menu entries in the Tk <em>menu</em> documentation.</p>
<dl class="options">
			
<dt><b class="option">-activebackground</b></dt>
<dd></dd>
<dt><b class="option">-activeforeground</b></dt>
<dd></dd>
<dt><b class="option">-background</b></dt>
<dd></dd>
<dt><b class="option">-bitmap</b></dt>
<dd></dd>
<dt><b class="option">-columnbreak</b></dt>
<dd></dd>
<dt><b class="option">-compound</b></dt>
<dd></dd>
<dt><b class="option">-font</b></dt>
<dd></dd>
<dt><b class="option">-foreground</b></dt>
<dd></dd>
<dt><b class="option">-hidemargin</b></dt>
<dd></dd>
<dt><b class="option">-image</b></dt>
<dd></dd>
<dt><b class="option">-indicatoron</b></dt>
<dd></dd>
<dt><b class="option">-label</b></dt>
<dd></dd>
<dt><b class="option">-selectcolor</b></dt>
<dd></dd>
<dt><b class="option">-selectimage</b></dt>
<dd></dd>
<dt><b class="option">-state</b></dt>
<dd></dd>
</dl>
<p><em> </em></p></dd>
<dt>Class Specific Options</dt>
<dd><dl class="options">
			
<dt><b class="option">-bind</b> {uline accel sequence}</dt>
<dd><p>The value of the <em>-bind</em> option is three element list where the values are as follows.</p>
<dl class="definitions">
			
<dt>uline</dt>
<dd><p>An integer index of a character to underline in the entry.
			  This value performs the same function as the Tk <em>menu</em> -underline option.
			  If this value is an empty string then no underlining is performed.</p></dd>
<dt>accel</dt>
<dd><p>A string to display at the right side of the menu
			  entry. The string normally describes an accelerator keystroke sequence that
			  may be typed to invoke the same function as the menu entry.
			  This value performs the same function as the Tk <em>menu</em> -accelerator option.
			  If this value is an empty string then no accelerator is displayed.</p></dd>
<dt>sequence</dt>
<dd><p>A bind sequence that will cause the entries associated command to fire.</p></dd>
</dl></dd>
<dt><b class="option">-command</b> cmdprefix</dt>
<dd><p>The value of the <em>-command</em> option a command
			  prefix that is evaluated when the menu entry is invoked.
			  By default the callback is evaluate in the
			  namespace where the <em>install</em> method was executed. Additional values
			  are appended to the <em>cmdprefix</em> and are thus passed to the
			  callback command as argument. These additional arguments are described
			  in the list below.</p>
<dl class="definitions">
			
<dt>command entry</dt>
<dd><p>1) The pathname of the toplevel window that invoked the callback.</p></dd>
<dt>checkbutton entry</dt>
<dd><p>1) The pathname of the toplevel window that invoked the callback.</p>
<p>2) The checkbutton's tag name</p>
<p>3) The new value for the checkbutton</p></dd>
<dt>radiobutton entry</dt>
<dd><p>1) The pathname of the toplevel window that invoked the callback.</p>
<p>2) The radiobutton's tag name</p>
<p>3) The label of the button that was selected</p></dd>
<dt>group entry</dt>
<dd><p>1) The pathname of the toplevel window that invoked the callback.</p></dd>
</dl></dd>
</dl></dd>
</dl></dd>
</dl>
<dl class="definitions">
	
<dt><a name="10"><i class="arg">mBarInst</i> <b class="cmd">tag.cget</b> <i class="arg">pathName tag ?option?</i></a></dt>
<dd><p>Returns the value of the configuration option given by <em>option</em>
	or the value of a user defined tag. The option argument may be any
	of the options accepted by the <em>tag.configure</em> method for the
	<em>tag</em> type. User defined tags are queried without an <em>option</em>
	value.</p></dd>
</dl>
</div>
<div id="section8" class="section"><h2><a name="section8">Methods - group.xxx</a></h2>
<dl class="definitions">
	
<dt><a name="11"><i class="arg">mBarInst</i> <b class="cmd">group.add</b> <i class="arg">tag label ?cmd? ?accel? ?sequence? ?state?</i></a></dt>
<dd><p>Add a command to the group with tag name <em>tag</em>. This method
	appends a new command entry to the end of a command group. The order of the
	arguments is fixed but arguments to the right can be ignored. Arguments to
	this method have the following meaning.</p>
<dl class="arguments">
	
<dt>tag <i class="arg">(string)</i></dt>
<dd><p>The tag name of the command group.</p></dd>
<dt>label <i class="arg">(string)</i></dt>
<dd><p>The displayed label for the menu entry.</p></dd>
<dt>cmd <i class="arg">(string)</i></dt>
<dd><p>A command prefix that will be used for callback command.</p></dd>
<dt>accel <i class="arg">(string)</i></dt>
<dd><p>An accelerator string that will be displayed next to the entry label.</p></dd>
<dt>sequence <i class="arg">(string)</i></dt>
<dd><p>A bind sequence that will be bound to the callback command.</p></dd>
<dt>state <i class="arg">(enum)</i></dt>
<dd><p>Sets the active state of the command. One of:  normal, disabled, active</p></dd>
</dl></dd>
</dl>
<dl class="definitions">
	
<dt><a name="12"><i class="arg">mBarInst</i> <b class="cmd">group.delete</b> <i class="arg">tag label</i></a></dt>
<dd><p>Delete a command from a group with tag name <em>tag</em>. This method
	deletes command <em>label</em> from a command group.</p></dd>
</dl>
<dl class="definitions">
	
<dt><a name="13"><i class="arg">mBarInst</i> <b class="cmd">group.move</b> <i class="arg">direction tag label</i></a></dt>
<dd><p>Change the position of an entry in a group with tag name <em>tag</em>.
	The <em>direction</em> argument is the direction ('up' or 'down') the
	entry will be moved. The entry that is moved has the name <em>label</em>.</p></dd>
</dl>
<dl class="definitions">
	
<dt><a name="14"><i class="arg">mBarInst</i> <b class="cmd">group.configure</b> <i class="arg">tag label ?option value ...option value?</i></a></dt>
<dd><p>Configure the options of an entry in the command group with
	tag name <em>tag</em>. This method is similar to the <em>tag.configure</em> 
	method except that it works on entries in a command group. Set documentation 
	for the <em>tag.configure</em> method (above) for more details on command
	entry options.</p></dd>
</dl>
<dl class="definitions">
	
<dt><a name="15"><i class="arg">mBarInst</i> <b class="cmd">group.serialize</b> <i class="arg">tag</i></a></dt>
<dd><p>Return a string serialization of the entries in a command group. The
	argument <em>tag</em> is the tag name for the group that is to be serialized.
	The resulting serialization is a list containing three
	element  (1) the tag name of the group  (2) a dictionary
	containing group level options (3) a list of zero or more similar three
	element lists that describe the entries in the group.</p></dd>
</dl>
<dl class="definitions">
	
<dt><a name="16"><i class="arg">mBarInst</i> <b class="cmd">group.deserialize</b> <i class="arg">tag stream</i></a></dt>
<dd><p>Replace the contents of group tag <em>tag</em> with the commands
	defined in the serialization <em>stream</em>. The original contents of
	the group are lost.</p></dd>
</dl>
</div>
<div id="section9" class="section"><h2><a name="section9">Methods - notebook.xxx</a></h2>
<dl class="definitions">
	
<dt><a name="17"><i class="arg">mBarInst</i> <b class="cmd">notebook.addTabStore</b> <i class="arg">pathname</i></a></dt>
<dd><p>This method should be used in code that creates a new notebook tab.
	Execution of this method will cause state storage to be allocated
	for the new notebook tab. The pathname for the notebook tab is passed
	as an argument to the method.</p></dd>
</dl>
<dl class="definitions">
	
<dt><a name="18"><i class="arg">mBarInst</i> <b class="cmd">notebook.deleteTabStore</b> <i class="arg">pathname</i></a></dt>
<dd><p>This command deallocates the state store for a notebook tab. The
	pathname for the notebook tab is passed as an argument to the method.</p></dd>
</dl>
<dl class="definitions">
	
<dt><a name="19"><i class="arg">mBarInst</i> <b class="cmd">notebook.setTabValue</b> <i class="arg">pathname tag</i></a></dt>
<dd><p>This method should be used in the callback for menubar checkbuttons or
	radiobuttons that have notebook tab scope control. When this method is
	executed it will move the value associated with tag into the tab store
	for the tab identified by pathname.</p></dd>
</dl>
<dl class="definitions">
	
<dt><a name="20"><i class="arg">mBarInst</i> <b class="cmd">notebook.restoreTabValues</b> <i class="arg">pathname</i></a></dt>
<dd><p>This method should be place in a bind script that is triggered by
	a notebooks &lt;&lt;NotebookTabChanged&gt;&gt; event.</p></dd>
</dl>
</div>
<div id="section10" class="section"><h2><a name="section10">Scope Control</a></h2>
<p>By default a menubar instance looks the same in all installed toplevel
windows. As changes are made to one instance of a menubar all the other
instances are immediately updated. This means the internal state of all
the menu entries for the instances are synchronized. This behavior is
called global scope control of the menubar state.</p>
<p>The menubar class allows finer scope control on check and radio buttons.
The scope of these entry types can be modified by adding a
modifier character to their type character. Two
modifier characters are supported as show in the table below.</p>
<pre class="example">
''  ::= global scope (no character)
'@' ::= local scope modifier
'=' ::= notebook tab scope modifier
</pre>
<p>When the local scope character (@) is added to the definition of a button,
the button is given a new variable for each installed toplevel window. This
has the effect of making the button's state local to the window (i.e. local scope).
An example use case for this behavior might be a status bar that can be
toggled on an off by a checkbutton. The developer may want to allow the
user to control the visibility of the status bar on a per window basis. In this
case a local modifier would be added to the status bar selector so the callback
code would receive an appropriate value based on the current toplevel window.</p>
<p>The notebook tab scope character (=) is similar in effect to the local scope
character but it allows a notebook tab selection to also manage the state of
of a button. Adding the notebook tab scope modifier enables notebook tab
scope control but the developer must then make use of the notebook.xxxx sub-commands
to actively manage state values as tabs are added, deleted and selected.</p>
</div>
<div id="section11" class="section"><h2><a name="section11">Example</a></h2>
<pre class="example">
package require Tcl
package require Tk
package require menubar
set tout [text .t -width 25 -height 12]
pack ${tout} -expand 1 -fill both
set mbar [menubar new \
    -borderwidth 4 \
    -relief groove  \
    -foreground black \
    -background tan \
    ]
${mbar} define {
    File M:file {
        Exit                 C      exit
    }
    Edit M:items+ {
    #   Label               Type    Tag Name(s)
    #   -----------------   ----    ---------
        &quot;Cut&quot;               C       cut
        &quot;Copy&quot;              C       copy
        &quot;Paste&quot;             C       paste
        --                  S       s2
        &quot;Options&quot; M:opts {
            &quot;CheckList&quot; M:chx+ {
                Coffee      X       coffee+
                Donut       X       donut
                Eggs        X       eggs
                }
            &quot;RadioButtons&quot; M:btn+ {
                &quot;Red&quot;       R       color
                &quot;Green&quot;     R       color+
                &quot;Blue&quot;      R       color
                }
        }
    }
    Help M:help {
        About               C       about
    }
}
${mbar} install . {
    ${mbar} tag.add tout ${tout}
    ${mbar} menu.configure -command {
        # file menu
        exit            {Exit}
        # Item menu
        cut             {CB Edit cut}
        copy            {CB Edit copy}
        paste           {CB Edit paste}
        # boolean menu
        coffee          {CB CheckButton}
        donut           {CB CheckButton}
        eggs            {CB CheckButton}
        # radio menu
        color           {CB RadioButton}
        # Help menu
        about           {CB About}
    } -bind {
        exit        {1 Cntl+Q  Control-Key-q}
        cut         {2 Cntl+X  Control-Key-x}
        copy        {0 Cntl+C  Control-Key-c}
        paste       {0 Cntl+V  Control-Key-v}
        coffee      {0 Cntl+A  Control-Key-a}
        donut       {0 Cntl+B  Control-Key-b}
        eggs        {0 Cntl+C  Control-Key-c}
        about       0
    } -background {
        exit red
    } -foreground {
        exit white
    }
}
proc pout { txt } {
    global mbar
    set tout [${mbar} tag.cget . tout]
    ${tout} insert end &quot;${txt}\n&quot;
}
proc Exit { args } {
    puts &quot;Goodbye&quot;
    exit
}
proc CB { args } {
    set alist [lassign ${args} cmd]
    pout &quot;${cmd}: [join ${alist} {, }]&quot;
}
wm minsize . 300 300
wm geometry . +4+4
wm protocol . WM_DELETE_WINDOW exit
wm title . &quot;Example&quot;
wm focusmodel . active
pout &quot;Example started ...&quot;
</pre>
</div>
<div id="section12" class="section"><h2><a name="section12">Caveats</a></h2>
<p>This implementation uses TclOO so it requires 8.6. The code has been
tested on Windows (Vista), Linux and OSX (10.4).</p>
</div>
<div id="see-also" class="section"><h2><a name="see-also">See Also</a></h2>
<p><a href="http://wiki.tcl.tk/25231">A command that creates menubar objects</a>, <a href="http://www.tcl.tk/man/tcl8.6/TkCmd/menu.htm">menu</a></p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; 2009 Tom Krehbiel &lt;krehbiel.tom@gmail.com&gt; All rights reserved.</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/ntext/ntext.html.











































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197

<html><head>
<title>ntext - Alternative Bindings for the Text Widget</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/ntext/ntext.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ ntext.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">ntext(n) 0.81 tklib &quot;Alternative Bindings for the Text Widget&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>ntext - Alternative Bindings for the Text Widget</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">CONFIGURATION OPTIONS</a></li>
<li class="section"><a href="#section3">EXAMPLE</a></li>
<li class="section"><a href="#see-also">See Also</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">ntext <span class="opt">?0.81?</span></b></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>The purpose of the <b class="package">ntext</b> package is to make the text widget behave more like other text-editing applications. It makes the text widget more useful for implementing a text editor, and makes it behave in a way that will be more familiar to most users.</p>
<p>The package provides a binding tag named <em>Ntext</em> for use by text widgets in place of the default <em>Text</em> binding tag.</p>
<p>Package <b class="package">ntext</b> 's functions and variables are contained entirely in the <b class="variable">::ntext</b> namespace; its other code is contained in the binding tag <em>Ntext</em>.  <b class="package">ntext</b> has no exports to the global or other namespaces, and no new widget commands.  It uses modified copies of the Tk code, leaving the original code, and the <em>Text</em> binding tag, unchanged.</p>
<p>The differences between the <em>Ntext</em> binding tag and the default <em>Text</em> binding tag are in three categories:</p>
<ul class="itemized">
<li><p>Some <em>Text</em> bindings behave differently from most text-editing applications.  <em>Ntext</em> gives these bindings more familiar behaviour.  For details see <i class="term"><a href="ntextBindings.html">ntextBindings</a></i>.</p></li>
<li><p>When a logical line with leading whitespace is word-wrapped onto more than one display line, the wrapped display lines begin further to the left than the first display line, which can make the text layout untidy and difficult to read.  <em>Ntext</em> can indent the wrapped lines to match the leading whitespace of the first display line (this facility is switched off by default).  For details see <i class="term"><a href="ntextIndent.html">ntextIndent</a></i>.</p></li>
<li><p>When the user navigates or selects text, Tcl/Tk sometimes needs to detect word boundaries.  <em>Ntext</em> provides improved rules for word boundary detection.  For details see <i class="term"><a href="ntextWordBreak.html">ntextWordBreak</a></i>.</p></li>
</ul>
<p>The remainder of this page describes the basic use and configuration of all three aspects of <em>Ntext</em>.  For more detailed information on the different facilities of <em>Ntext</em>, see the pages <i class="term"><a href="ntextBindings.html">ntextBindings</a></i>, <i class="term"><a href="ntextIndent.html">ntextIndent</a></i>, and <i class="term"><a href="ntextWordBreak.html">ntextWordBreak</a></i>.</p>
<p>See Section <span class="sectref"><a href="#section3">EXAMPLE</a></span> for how to apply the <em>Ntext</em> binding tag in place of the <em>Text</em> binding tag.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">CONFIGURATION OPTIONS</a></h2>
<p><em>Ntext</em> provides alternatives to a number of behaviours of the classic <em>Text</em> binding tag.  Where there is an option, the <em>Ntext</em> behaviour (except for display-line indentation) is switched on by default.</p>
<p>The behaviour of <em>Ntext</em> may be configured application-wide by setting the values of a number of namespace variables:</p>
<p><b class="variable">::ntext::classicAnchor</b></p>
<ul class="itemized">
<li><p><b class="const">0</b> - (default value) selects <em>Ntext</em> behaviour, i.e. the anchor point is fixed</p></li>
<li><p><b class="const">1</b> - selects classic <em>Text</em> behaviour, i.e. the anchor point is variable</p></li>
</ul>
<p><b class="variable">::ntext::classicExtras</b></p>
<ul class="itemized">
<li><p><b class="const">0</b> - (default value) selects <em>Ntext</em> behaviour, i.e. several traditional <em>Text</em> bindings are de-activated</p></li>
<li><p><b class="const">1</b> - selects classic <em>Text</em> behaviour, i.e. all <em>Text</em> bindings are activated</p></li>
</ul>
<p><b class="variable">::ntext::classicMouseSelect</b></p>
<ul class="itemized">
<li><p><b class="const">0</b> - (default value) selects <em>Ntext</em> behaviour, i.e. the anchor point for mouse selection operations is moved by keyboard navigation</p></li>
<li><p><b class="const">1</b> - selects classic <em>Text</em> behaviour</p></li>
</ul>
<p><b class="variable">::ntext::classicWordBreak</b></p>
<ul class="itemized">
<li><p><b class="const">0</b> - (default value) selects <em>Ntext</em> behaviour, i.e. platform-independent, two classes of word characters and one class of non-word characters.</p></li>
<li><p><b class="const">1</b> - selects classic <em>Text</em> behaviour, i.e. platform-dependent, one class of word characters and one class of non-word characters</p></li>
<li><p>After changing this value, the matching patterns should be recalculated.  See <i class="term"><a href="ntextWordBreak.html">ntextWordBreak</a></i> for details and advanced configuration options.</p></li>
</ul>
<p><b class="variable">::ntext::classicWrap</b></p>
<ul class="itemized">
<li><p><b class="const">0</b> - selects <em>Ntext</em> behaviour, i.e. display lines of text widgets in <i class="arg">-wrap</i> <i class="arg">word</i> mode are indented to match the initial whitespace of the first display line of a logical line.  If the widget already holds text when this value is set, a function call may be necessary.  See <i class="term"><a href="ntextIndent.html">ntextIndent</a></i> for detailed instructions on the use of <em>Ntext</em> 's indentation.</p></li>
<li><p><b class="const">1</b> - (default value) selects classic <em>Text</em> behaviour, i.e. no indentation</p></li>
</ul>
<p><b class="variable">::ntext::overwrite</b></p>
<ul class="itemized">
<li><p><b class="const">0</b> - (initial value) text typed at the keyboard is inserted into the widget</p></li>
<li><p><b class="const">1</b> - text typed at the keyboard overwrites text already in the widget</p></li>
<li><p>The value is toggled by the <em>Insert</em> key.</p></li>
</ul>
</div>
<div id="section3" class="section"><h2><a name="section3">EXAMPLE</a></h2>
<p>To create a text widget .t and use the <em>Ntext</em> bindings:</p>
<pre class="example">
package require ntext
text .t
bindtags .t {.t Ntext . all}
</pre>
<p>See bindtags for more information.</p>
</div>
<div id="see-also" class="section"><h2><a name="see-also">See Also</a></h2>
<p><a href="../../../../index.html#key5">bindtags</a>, <a href="ntextBindings.html">ntextBindings</a>, <a href="ntextIndent.html">ntextIndent</a>, <a href="ntextWordBreak.html">ntextWordBreak</a>, <a href="../../../../index.html#key6">re_syntax</a>, <a href="../../../../index.html#key8">regexp</a>, <a href="../../../../index.html#key7">text</a></p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key5">bindtags</a>, <a href="../../../../index.html#key6">re_syntax</a>, <a href="../../../../index.html#key8">regexp</a>, <a href="../../../../index.html#key7">text</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/ntext/ntextBindings.html.







































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195

<html><head>
<title>ntextBindings - Alternative Bindings for the Text Widget</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/ntext/ntextBindings.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ ntextBindings.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">ntextBindings(n) 0.81 tklib &quot;Alternative Bindings for the Text Widget&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>ntextBindings - Alternative Bindings for the Text Widget</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">CONFIGURATION OPTIONS</a></li>
<li class="section"><a href="#section3">EXAMPLE</a></li>
<li class="section"><a href="#see-also">See Also</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">ntext <span class="opt">?0.81?</span></b></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>The <b class="package"><a href="ntext.html">ntext</a></b> package provides a binding tag named <em>Ntext</em> for use by text widgets in place of the default <em>Text</em> binding tag.</p>
<p>The <em>Text</em> binding tag provides around one hundred bindings to the text widget (the exact number is platform-dependent).  A few of these behave in a way that is different from most contemporary text-editing applications.  <em>Ntext</em> aims to provide more familiar behaviour.</p>
<p>Features of the <em>Ntext</em> bindings that differ from the default <em>Text</em> bindings:</p>
<ul class="itemized">
<li><p>Clicking near the end of a (logical) line moves the cursor to the end of that line <em>(not the start of the next line)</em>.  If the widget is in <i class="arg">-wrap</i> <i class="arg">word</i> mode, the same rule applies to display lines.</p></li>
<li><p>Double-clicking or dragging near the end of a (logical) line will highlight/select characters from the end of that line <em>(not the next line, or the region at the end of the line where there are no characters)</em>.  If the widget is in <i class="arg">-wrap</i> <i class="arg">word</i> mode, the same rule applies to display lines.</p></li>
<li><p>The <em>End</em> key implements &quot;Smart End&quot; (successive keypresses move the cursor to the end of the display line, then to the end of the logical line); the <em>Home</em> key implements &quot;Smart Home&quot; (which is similar to &quot;Smart End&quot;, but also toggles between the beginning and end of leading whitespace).</p></li>
<li><p>When a selection exists, a &lt;&lt;Paste&gt;&gt; operation (e.g. &lt;Control-v&gt;) overwrites the selection (as most editors do), and does so on all platforms.</p></li>
<li><p>The &lt;Insert&gt; key toggles between &quot;Insert&quot; and &quot;Overwrite&quot; modes for keyboard input.  <em>(In contrast, the Text binding tag uses &lt;Insert&gt; as a method to paste the &quot;primary selection&quot;, a task that can be accomplished instead by mouse middle-click.)</em></p></li>
<li><p>The &lt;Escape&gt; key clears the selection.</p></li>
<li><p>Selecting with &lt;Shift-Button1&gt; selects from the previous position of the insertion cursor. <em>(In the Text binding tag, the selection anchor may be the position of the previous mouse click.)</em></p></li>
<li><p>&lt;Shift-Button1&gt; operations do not alter the selection anchor. <em>(In the Text binding tag, they do.)</em></p></li>
<li><p>By default, the <em>Ntext</em> binding tag does not provide several of the Control-key bindings supplied by the <em>Text</em> binding tag.  Modern keyboards offer alternatives, such as cursor keys for navigation; modern applications often use the Control-key bindings for other purposes (e.g. &lt;Control-p&gt; for &quot;print&quot;).</p></li>
</ul>
<p>The last three cases, the behavior of <em>Text</em> is often useful, so <em>Ntext</em> gives you the option of retaining it, by setting variables defined in the ::ntext namespace to 1 (instead of their default 0).  Explaining these features in more detail:</p>
<ul class="itemized">
<li><p>If the mouse is clicked at position A, then the keyboard is used to move the cursor to B, then shift is held down, and the mouse is clicked at C: the <em>Text</em> binding tag gives a selection from A to C; the <em>Ntext</em> gives a selection from B to C.  If you want <em>Ntext</em> to behave like <em>Text</em> in this respect, set <b class="variable">::ntext::classicMouseSelect</b> to 1.</p></li>
<li><p>The <em>Text</em> binding tag allows successive &lt;Shift-Button-1&gt; events to change both ends of the selection, by moving the selection anchor to the end of the selection furthest from the mouse click.  Instead, the <em>Ntext</em> binding tag fixes the anchor, and multiple Shift-Button-1 events can only move the non-anchored end of the selection.  If you want <em>Ntext</em> to behave like <em>Text</em> in this respect, set <b class="variable">::ntext::classicAnchor</b> to 1.  In both <em>Text</em> and <em>Ntext</em>, keyboard navigation with the Shift key held down alters the selection and keeps the selection anchor fixed.</p></li>
<li><p>The following &quot;extra&quot; <em>Text</em> bindings are switched off by default, but can be activated in <em>Ntext</em> by setting <b class="variable">::ntext::classicExtras</b> to 1: &lt;Control-a&gt;, &lt;Control-b&gt;, &lt;Control-d&gt;, &lt;Control-e&gt;, &lt;Control-f&gt;, &lt;Control-h&gt;, &lt;Control-i&gt;, &lt;Control-k&gt;, &lt;Control-n&gt;, &lt;Control-o&gt;, &lt;Control-p&gt;, &lt;Control-t&gt;, &lt;Control-space&gt;, &lt;Control-Shift-space&gt;.</p></li>
</ul>
</div>
<div id="section2" class="section"><h2><a name="section2">CONFIGURATION OPTIONS</a></h2>
<p><em>Ntext</em> provides alternatives to a number of behaviours of the classic <em>Text</em> binding tag.  Where there is an option, the <em>Ntext</em> behaviour is switched on by default, except for display-line indentation which is discussed on a separate page at <i class="term"><a href="ntextIndent.html">ntextIndent</a></i>.</p>
<p>The behaviour of <em>Ntext</em> may be configured application-wide by setting the values of a number of namespace variables:</p>
<p><b class="variable">::ntext::classicAnchor</b></p>
<ul class="itemized">
<li><p><b class="const">0</b> - (default value) selects <em>Ntext</em> behaviour, i.e. the anchor point is fixed</p></li>
<li><p><b class="const">1</b> - selects classic <em>Text</em> behaviour, i.e. the anchor point is variable</p></li>
</ul>
<p><b class="variable">::ntext::classicExtras</b></p>
<ul class="itemized">
<li><p><b class="const">0</b> - (default value) selects <em>Ntext</em> behaviour, i.e. several &quot;extra&quot; <em>Text</em> bindings are de-activated</p></li>
<li><p><b class="const">1</b> - selects classic <em>Text</em> behaviour, i.e. the &quot;extra&quot; <em>Text</em> bindings are activated</p></li>
</ul>
<p><b class="variable">::ntext::classicMouseSelect</b></p>
<ul class="itemized">
<li><p><b class="const">0</b> - (default value) selects <em>Ntext</em> behaviour, i.e. the anchor point for mouse selection operations is moved by keyboard navigation</p></li>
<li><p><b class="const">1</b> - selects classic <em>Text</em> behaviour</p></li>
</ul>
<p><b class="variable">::ntext::overwrite</b></p>
<ul class="itemized">
<li><p><b class="const">0</b> - (initial value) text typed at the keyboard is inserted into the widget</p></li>
<li><p><b class="const">1</b> - text typed at the keyboard overwrites text already in the widget</p></li>
<li><p>The value is toggled by the <em>Insert</em> key.</p></li>
</ul>
</div>
<div id="section3" class="section"><h2><a name="section3">EXAMPLE</a></h2>
<p>To use <em>Ntext</em> but keep classic <em>Text</em> 's variable-anchor feature:</p>
<pre class="example">
package require ntext
text .t
set ::ntext::classicAnchor 1
bindtags .t {.t Ntext . all}
</pre>
</div>
<div id="see-also" class="section"><h2><a name="see-also">See Also</a></h2>
<p><a href="../../../../index.html#key5">bindtags</a>, <a href="ntext.html">ntext</a>, <a href="ntextIndent.html">ntextIndent</a>, <a href="../../../../index.html#key7">text</a></p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key5">bindtags</a>, <a href="../../../../index.html#key7">text</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/ntext/ntextIndent.html.







































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227

<html><head>
<title>ntextIndent - ntext Indentation for the Text Widget</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/ntext/ntextIndent.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ ntextIndent.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">ntextIndent(n) 0.81 tklib &quot;ntext Indentation for the Text Widget&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>ntextIndent - ntext Indentation for the Text Widget</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">CONFIGURATION OPTIONS</a></li>
<li class="section"><a href="#section3">INDENTING DISPLAY LINES</a></li>
<li class="section"><a href="#section4">FUNCTIONS</a></li>
<li class="section"><a href="#section5">EXAMPLES</a></li>
<li class="section"><a href="#see-also">See Also</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">ntext <span class="opt">?0.81?</span></b></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>The <b class="package"><a href="ntext.html">ntext</a></b> package provides a binding tag named <em>Ntext</em> for use by text widgets in place of the default <em>Text</em> binding tag.</p>
<p>Tk's text widget may be configured to wrap lines of text that are longer than the width of the text area, a feature that is familiar from text editors and word processors.  A complete line of text (delimited by newlines, or by the beginning or end of the document) is called a &quot;logical line&quot;.  When a logical line is wrapped onto more than one line of the display area, these fragments of the logical line are called &quot;display lines&quot;.</p>
<p>If a logical line begins with whitespace, then wrapped display lines begin further to the left than the first display line, which can make the text layout untidy and difficult to read.  The <em>Ntext</em> binding tag provides facilities so that a text widget in <i class="arg">-wrap</i> <i class="arg">word</i> mode will automatically indent display lines (other than the first) to match the initial whitespace of the first display line.</p>
<p>This indentation is available to text widgets only in <i class="arg">-wrap</i> <i class="arg">word</i> mode.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">CONFIGURATION OPTIONS</a></h2>
<p>The behavior of <em>Ntext</em> may be configured application-wide by setting the values of a number of namespace variables:</p>
<p><b class="variable">::ntext::classicWrap</b></p>
<ul class="itemized">
<li><p>0 - selects <em>Ntext</em> behaviour, i.e. display lines are indented to match the initial whitespace of the first display line of a logical line.</p>
<p>No other action is required if this option, and the text widget's <i class="arg">-wrap</i> option, are set before any text is entered in the widget, and if text is entered and edited only by the mouse and keyboard.  If, instead, text is manipulated by the script, or if the text widget's <i class="arg">-wrap</i> option or the value of <b class="variable">::ntext::classicWrap</b> are changed while the widget holds text, then calls to <em>ntext</em> functions are needed to alter the indentation.  See the section <span class="sectref"><a href="#section3">INDENTING DISPLAY LINES</a></span> for detailed instructions.</p></li>
<li><p>1 - (default value) selects classic <em>Text</em> behaviour, i.e. no indentation.</p></li>
</ul>
<p><em>Advanced Use</em></p>
<p><b class="variable">::ntext::newWrapRegexp</b></p>
<ul class="itemized">
<li><p>the value is a regexp pattern that determines the character of a logical line to which display lines other than the first will be aligned.  The default value, <b class="const">[^[:space:]]</b>, ensures alignment with the first non-whitespace character.</p></li>
</ul>
</div>
<div id="section3" class="section"><h2><a name="section3">INDENTING DISPLAY LINES</a></h2>
<p>To use <em>Ntext</em> 's display line indentation:</p>
<ol class="enumerated">
<li><p>Set the variable <b class="variable">::ntext::classicWrap</b> to <b class="const">0</b> (default value is <b class="const">1</b>).  This enables bindings that will preserve indentation whenever the user modifies the widget contents using the keyboard and mouse.  If the widget already holds text, call <b class="function">::ntext::wrapIndent</b> to initialise indentation.</p>
<p>Further instructions apply if the program changes the widget's contents, wrap configuration, or indent configuration.</p></li>
<li><p>The program can change the text contents, e.g. by the .text insert command.  Such a change does not trigger a window binding, so the program should explicitly call function <b class="function">::ntext::wrapIndent</b> after inserting text.</p></li>
<li><p>Auto-indentation occurs only if the widget is in <i class="arg">-wrap</i> <i class="arg">word</i> mode.  If the program changes to or from <i class="arg">-wrap</i> <i class="arg">word</i> when the widget is not empty, it should call <b class="function">::ntext::wrapIndent</b> to format the widget's text.</p></li>
<li><p>If indentation is used, and then switched off by setting <b class="variable">::ntext::classicWrap</b> to <b class="const">1</b>,  call <b class="function">::ntext::wrapIndent</b> to remove indentation.</p></li>
</ol>
</div>
<div id="section4" class="section"><h2><a name="section4">FUNCTIONS</a></h2>
<p><b class="function">::ntext::wrapIndent</b> <i class="arg">textWidget</i> <span class="opt">?index1?</span> <span class="opt">?index2?</span></p>
<ul class="itemized">
<li><p>Adjust the indentation of a text widget.  Different cases are discussed below.</p></li>
</ul>
<p><b class="function">::ntext::wrapIndent</b> <i class="arg">textWidget</i></p>
<ul class="itemized">
<li><p>Adjust the indentation of all the text in text widget <i class="arg">textWidget</i>.</p></li>
</ul>
<p><b class="function">::ntext::wrapIndent</b> <i class="arg">textWidget</i> <i class="arg">index1</i></p>
<ul class="itemized">
<li><p>Adjust the indentation of a single logical line of a text widget - the line of <i class="arg">textWidget</i> that contains the index <i class="arg">index1</i>.</p></li>
</ul>
<p><b class="function">::ntext::wrapIndent</b> <i class="arg">textWidget</i> <i class="arg">index1</i> <i class="arg">index2</i></p>
<ul class="itemized">
<li><p>Adjust the indentation of a range of logical lines of a text widget - the lines of <i class="arg">textWidget</i> that contain indices <i class="arg">index1</i> to <i class="arg">index2</i>.</p></li>
</ul>
<p><em>Usage</em></p>
<ul class="itemized">
<li><p><b class="function">::ntext::wrapIndent</b> should be called only if the script changes the widget's contents or display properties.  If the contents of the widget have been modified by the keyboard or mouse, it is not necessary for the script to call <b class="function">::ntext::wrapIndent</b> because the appropriate calls are made automatically by the <em>Ntext</em> bindings.</p></li>
<li><p>The script should normally call <b class="function">::ntext::wrapIndent</b> if, for example, the script changes one of the following when the widget is not empty: the value of <b class="variable">::ntext::classicWrap</b>, or the widget's <i class="arg">-wrap</i> status, or the widget's tab spacing, or the font size, or the widget's contents.</p></li>
<li><p>A call of the form <b class="function">::ntext::wrapIndent</b> <i class="arg">textWidget</i> will always suffice, but if changes are needed only to certain lines, it is more efficient to specify those lines with the optional arguments <span class="opt">?index1?</span>, <span class="opt">?index2?</span>.</p></li>
<li><p>If the widget is in <i class="arg">-word</i> <i class="arg">wrap</i> mode, and if <b class="variable">::ntext::classicWrap</b> is set to <b class="const">0</b>, <b class="function">::ntext::wrapIndent</b> will apply indentation to the logical lines within the range specified by the function's arguments.</p></li>
<li><p>In other cases, i.e. if the widget is in <i class="arg">-word</i> <i class="arg">char</i> or <i class="arg">-word</i> <i class="arg">none</i> mode, or if <b class="variable">::ntext::classicWrap</b> is set to <b class="const">1</b>,  <b class="function">::ntext::wrapIndent</b> will remove the indentation of the logical lines within the range specified by the function's arguments.</p></li>
</ul>
</div>
<div id="section5" class="section"><h2><a name="section5">EXAMPLES</a></h2>
<p>To switch on <em>Ntext</em> 's indentation and use it in widget .t:</p>
<pre class="example">
package require ntext
set ::ntext::classicWrap 0
text .t -wrap word
bindtags .t {.t Ntext . all}
</pre>
<p>To decide later to switch off <em>Ntext</em> 's indentation:</p>
<pre class="example">
set ::ntext::classicWrap 1
::ntext::wrapIndent .t
</pre>
<p>To decide later to switch <em>Ntext</em> 's indentation back on:</p>
<pre class="example">
set ::ntext::classicWrap 0
::ntext::wrapIndent .t 1.0 end
</pre>
<p>To inject some text into the widget:</p>
<pre class="example">
set foo [.t index end]
.t insert end {This line was added by the script, not the keyboard!}
::ntext::wrapIndent .t $foo end
</pre>
<p>To switch to <i class="arg">-wrap</i> <i class="arg">char</i> mode:</p>
<pre class="example">
.t configure -wrap char
::ntext::wrapIndent .t
</pre>
</div>
<div id="see-also" class="section"><h2><a name="see-also">See Also</a></h2>
<p><a href="../../../../index.html#key5">bindtags</a>, <a href="ntext.html">ntext</a>, <a href="../../../../index.html#key6">re_syntax</a>, <a href="../../../../index.html#key8">regexp</a>, <a href="../../../../index.html#key7">text</a></p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key5">bindtags</a>, <a href="../../../../index.html#key6">re_syntax</a>, <a href="../../../../index.html#key8">regexp</a>, <a href="../../../../index.html#key7">text</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/ntext/ntextWordBreak.html.























































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219

<html><head>
<title>ntextWordBreak - ntext Word Boundary Detection for the Text Widget</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/ntext/ntextWordBreak.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ ntextWordBreak.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">ntextWordBreak(n) 0.81 tklib &quot;ntext Word Boundary Detection for the Text Widget&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>ntextWordBreak - ntext Word Boundary Detection for the Text Widget</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">CONFIGURATION OPTIONS</a></li>
<li class="section"><a href="#section3">Advanced Use</a></li>
<li class="section"><a href="#section4">Variables (Advanced Use)</a></li>
<li class="section"><a href="#section5">Functions (Advanced Use)</a></li>
<li class="section"><a href="#section6">FUNCTIONS</a></li>
<li class="section"><a href="#section7">WORD BOUNDARY MATCHING</a></li>
<li class="section"><a href="#section8">EXAMPLE</a></li>
<li class="section"><a href="#see-also">See Also</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">ntext <span class="opt">?0.81?</span></b></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>The <b class="package"><a href="ntext.html">ntext</a></b> package provides a binding tag named <em>Ntext</em> for use by text widgets in place of the default <em>Text</em> binding tag.</p>
<p>Navigation and selection in a text widget require the detection of words and their boundaries.  The word boundary detection facilities provided by Tcl/Tk through the <em>Text</em> binding tag are limited because they define only one class of &quot;word&quot; characters and one class of &quot;non-word&quot; characters.  The <em>Ntext</em> binding tag uses more general rules for word boundary detection, that define <em>two</em> classes of &quot;word&quot; characters and one class of &quot;non-word&quot; characters.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">CONFIGURATION OPTIONS</a></h2>
<p>The behaviour of <em>Ntext</em> may be configured application-wide by setting the values of a number of namespace variables.  One of these is relevant to word boundary detection:</p>
<p><b class="variable">::ntext::classicWordBreak</b></p>
<ul class="itemized">
<li><p><b class="const">0</b> - (default value) selects <em>Ntext</em> behaviour, i.e. platform-independent, two classes of word characters and one class of non-word characters.</p></li>
<li><p><b class="const">1</b> - selects classic <em>Text</em> behaviour, i.e. platform-dependent, one class of word characters and one class of non-word characters</p></li>
<li><p>After changing this value, <em>Ntext</em> 's regexp matching patterns should be recalculated.  See <span class="sectref"><a href="#section6">FUNCTIONS</a></span> for details and advanced configuration options.</p></li>
</ul>
</div>
<div id="section3" class="section"><h2><a name="section3">Advanced Use</a></h2>
</div>
<div id="section4" class="section"><h2><a name="section4">Variables (Advanced Use)</a></h2>
<p><b class="variable">::ntext::tcl_match_wordBreakAfter</b></p>
<p><b class="variable">::ntext::tcl_match_wordBreakBefore</b></p>
<p><b class="variable">::ntext::tcl_match_endOfWord</b></p>
<p><b class="variable">::ntext::tcl_match_startOfNextWord</b></p>
<p><b class="variable">::ntext::tcl_match_startOfPreviousWord</b></p>
<p>These variables hold the regexp patterns that are used by <em>Ntext</em> to search for word boundaries.  If they are changed, subsequent searches are immediately altered.  In many situations, it it unnecessary to alter the values of these variables directly: instead call one of the functions <b class="function">::ntext::initializeMatchPatterns</b>, <b class="function">::ntext::createMatchPatterns</b>.</p>
<p>In the <em>Text</em> binding tag one can change the search rules by changing the values of the global variables <b class="variable">tcl_wordchars</b> and <b class="variable">tcl_nonwordchars</b>.  The equivalent operation in the <em>Ntext</em> binding tag is to call <b class="function">::ntext::createMatchPatterns</b> with appropriate arguments.</p>
</div>
<div id="section5" class="section"><h2><a name="section5">Functions (Advanced Use)</a></h2>
<p>If a simple regexp search should prove insufficient, the following functions (analogous to the Tcl/Tk core's <b class="function">tcl_wordBreakAfter</b> etc) may be replaced by the developer:</p>
<p><b class="function">ntext::new_wordBreakAfter</b></p>
<p><b class="function">ntext::new_wordBreakBefore</b></p>
<p><b class="function">ntext::new_endOfWord</b></p>
<p><b class="function">ntext::new_startOfNextWord</b></p>
<p><b class="function">ntext::new_startOfPreviousWord</b></p>
</div>
<div id="section6" class="section"><h2><a name="section6">FUNCTIONS</a></h2>
<p>Each function calculates the five regexp search patterns that define the word boundary searches.  These values are stored in the namespace variables listed above.</p>
<p><b class="function">::ntext::initializeMatchPatterns</b></p>
<ul class="itemized">
<li><p>This function is called when <em>Ntext</em> is first used, and needs to be called again only if the script changes the value of either <b class="variable">::ntext::classicWordBreak</b> or <b class="variable">::tcl_platform(platform)</b>.  The function is called with no arguments.  It is useful when the desired search patterns are the default patterns for either the <em>Ntext</em> or <em>Text</em> binding tag, and so are implicitly specified by the values of <b class="variable">::ntext::classicWordBreak</b> and <b class="variable">::tcl_platform(platform)</b> alone.</p></li>
</ul>
<p><b class="function">::ntext::createMatchPatterns</b> <i class="arg">new_nonwordchars</i> <i class="arg">new_word1chars</i> <span class="opt">?new_word2chars?</span></p>
<ul class="itemized">
<li><p>This function is useful in a wider range of situations than <b class="function">::ntext::initializeMatchPatterns</b>.  It calculates the regexp search patterns for any case with one class of &quot;non-word&quot; characters and one or two classes of &quot;word&quot; characters.</p>
<p>Each argument should be a regexp expression defining a class of characters.  An argument will usually be a bracket expression, but might alternatively be a class-shorthand escape, or a single character.  The third argument may be omitted, or supplied as the empty string, in which case it is unused.</p>
<p>The first argument is interpreted as the class of non-word characters; the second argument (and the third, if present) are classes of word characters.  The classes should include all possible characters and will normally be mutually exclusive: it is often convenient to define one class as the negation of the other two.</p></li>
</ul>
</div>
<div id="section7" class="section"><h2><a name="section7">WORD BOUNDARY MATCHING</a></h2>
<p>The problem of word boundary selection is a vexed one, because text is used to represent a universe of different types of information, and there are no simple rules that are useful for all data types or for all purposes.</p>
<p><em>Ntext</em> attempts to improve on the facilities available in classic <em>Text</em> by providing facilities for more complex definitions of words (with three classes of characters instead of two).</p>
<p><em>What is a word?  Why two classes of word?</em></p>
<p>When using the modified cursor keys &lt;Control-Left&gt; and &lt;Control-Right&gt; to navigate through a <em>Ntext</em> widget, the cursor is placed at the start of a word.  A word is defined as a sequence of one or more characters from only one of the two defined &quot;word&quot; classes; it may be preceded by a character from the other &quot;word&quot; class or from the &quot;non-word&quot; class.</p>
<p>The double-click of mouse button 1 selects a word of text, where in this case a &quot;word&quot; may be as defined above, or alternatively may be a sequence of one or more characters from the &quot;non-word&quot; class of characters.</p>
<p>Traditionally Tcl has defined only one word class and one non-word class: on Windows, the non-word class is whitespace, and so alphanumerics and punctuation belong to the same class.  On other platforms, punctuation is bundled with whitespace as &quot;non-word&quot; characters.  In either case, the navigation and selection of text are unnecessarily coarse-grained, and sometimes give unhelpful results.</p>
<p>The use of three classes of characters might make selection too fine-grained; but in this case, holding down the <em>Shift</em> key and double-clicking another word is an excellent way to select a longer range of text (a useful binding that Tcl/Tk has long provided but which is missing in other systems).</p>
<p>As well as its defaults, <em>Ntext</em> permits the developer to define their own classes of characters, or to revert to the classic <em>Text</em> definitions, or to specify their own regexp matching patterns.</p>
</div>
<div id="section8" class="section"><h2><a name="section8">EXAMPLE</a></h2>
<p>To use <em>Ntext</em> with Tcl/Tk's usual word-boundary detection rules:</p>
<pre class="example">
package require ntext
text .t
bindtags .t {.t Ntext . all}
set ::ntext::classicWordBreak 1
::ntext::initializeMatchPatterns
</pre>
<p>See bindtags for more information.</p>
<p>To define a different set of word-boundary detection rules:</p>
<pre class="example">
package require ntext
text .t
bindtags .t {.t Ntext . all}
::ntext::createMatchPatterns \ 
  {[[:space:][:cntrl:]]} {[[:punct:]]} {[^[:punct:][:space:][:cntrl:]]}
</pre>
<p>See regexp, re_syntax for more information.</p>
</div>
<div id="see-also" class="section"><h2><a name="see-also">See Also</a></h2>
<p><a href="../../../../index.html#key5">bindtags</a>, <a href="ntext.html">ntext</a>, <a href="../../../../index.html#key6">re_syntax</a>, <a href="../../../../index.html#key8">regexp</a>, <a href="../../../../index.html#key7">text</a></p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key5">bindtags</a>, <a href="../../../../index.html#key6">re_syntax</a>, <a href="../../../../index.html#key8">regexp</a>, <a href="../../../../index.html#key7">text</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/plotchart/plotchart.html.



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921

<html><head>
<title>Plotchart - Plotchart</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/plotchart/plotchart.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; 2011 Arjen Markus &lt;arjenmarkus@users.sourceforge.net&gt;
   -->
<! -- CVS: $Id$ Plotchart.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">Plotchart(n) 2.0.2 tklib &quot;Plotchart&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>Plotchart - Simple plotting and charting package</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">PLOT CREATION COMMANDS</a></li>
<li class="section"><a href="#section3">PLOT METHODS</a></li>
<li class="section"><a href="#section4">COORDINATE TRANSFORMATIONS</a></li>
<li class="section"><a href="#section5">MISSING VALUES</a></li>
<li class="section"><a href="#section6">OTHER OUTPUT FORMATS</a></li>
<li class="section"><a href="#section7">SPECIAL EFFECTS</a></li>
<li class="section"><a href="#section8">ROOM FOR IMPROVEMENT</a></li>
<li class="section"><a href="#section9">RESIZING</a></li>
<li class="section"><a href="#section10">ZOOMING IN</a></li>
<li class="section"><a href="#section11">CONFIGURATION OPTIONS</a></li>
<li class="section"><a href="#section12">SCROLLING FOR TIMECHARTS AND GANTT CHARTS</a></li>
<li class="section"><a href="#section13">SPECIALISED PLOTS</a></li>
<li class="section"><a href="#section14">TABLE CHARTS</a></li>
<li class="section"><a href="#section15">CONTROL DISPLAYS</a></li>
<li class="section"><a href="#section16">ARRANGING MULTIPLE PLOTS IN A CANVAS</a></li>
<li class="section"><a href="#section17">INTERACTIVE USE</a></li>
<li class="section"><a href="#section18">NOTES ON TAGS</a></li>
<li class="section"><a href="#section19">TODO - SOME PRIVATE NOTES</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl <span class="opt">?8.5?</span></b></li>
<li>package require <b class="pkgname">Tk <span class="opt">?8.5?</span></b></li>
<li>package require <b class="pkgname">Plotchart <span class="opt">?2.1.0?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::Plotchart::createXYPlot</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i> <i class="arg">args</i></a></li>
<li><a href="#2"><b class="cmd">::Plotchart::createStripchart</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i></a></li>
<li><a href="#3"><b class="cmd">::Plotchart::createTXPlot</b> <i class="arg">w</i> <i class="arg">timeaxis</i> <i class="arg">xaxis</i></a></li>
<li><a href="#4"><b class="cmd">::Plotchart::createXLogYPlot</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i></a></li>
<li><a href="#5"><b class="cmd">::Plotchart::createLogXYPlot</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i></a></li>
<li><a href="#6"><b class="cmd">::Plotchart::createLogXLogYPlot</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i></a></li>
<li><a href="#7"><b class="cmd">::Plotchart::createPolarPlot</b> <i class="arg">w</i> <i class="arg">radius_data</i></a></li>
<li><a href="#8"><b class="cmd">::Plotchart::createWindrose</b> <i class="arg">w</i> <i class="arg">radius_data</i> <i class="arg">sectors</i></a></li>
<li><a href="#9"><b class="cmd">::Plotchart::createIsometricPlot</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i> <i class="arg">stepsize</i></a></li>
<li><a href="#10"><b class="cmd">::Plotchart::createHistogram</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i></a></li>
<li><a href="#11"><b class="cmd">::Plotchart::create3DPlot</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i> <i class="arg">zaxis</i></a></li>
<li><a href="#12"><b class="cmd">::Plotchart::create3DRibbonPlot</b> <i class="arg">w</i> <i class="arg">yaxis</i> <i class="arg">zaxis</i></a></li>
<li><a href="#13"><b class="cmd">::Plotchart::createPiechart</b> <i class="arg">w</i></a></li>
<li><a href="#14"><b class="cmd">::Plotchart::createSpiralPie</b> <i class="arg">w</i></a></li>
<li><a href="#15"><b class="cmd">::Plotchart::createRadialchart</b> <i class="arg">w</i> <i class="arg">names</i> <i class="arg">scale</i> <i class="arg">style</i></a></li>
<li><a href="#16"><b class="cmd">::Plotchart::createBarchart</b> <i class="arg">w</i> <i class="arg">xlabels</i> <i class="arg">yaxis</i> <i class="arg">noseries</i></a></li>
<li><a href="#17"><b class="cmd">::Plotchart::createHorizontalBarchart</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">ylabel</i> <i class="arg">noseries</i></a></li>
<li><a href="#18"><b class="cmd">::Plotchart::create3DBarchart</b> <i class="arg">w</i> <i class="arg">yaxis</i> <i class="arg">nobars</i></a></li>
<li><a href="#19"><b class="cmd">::Plotchart::create3DRibbonChart</b> <i class="arg">w</i> <i class="arg">names</i> <i class="arg">yaxis</i> <i class="arg">zaxis</i></a></li>
<li><a href="#20"><b class="cmd">::Plotchart::createBoxplot</b> <i class="arg">w</i> <i class="arg">xdata</i> <i class="arg">ydata</i> <i class="arg">orientation</i></a></li>
<li><a href="#21"><b class="cmd">::Plotchart::createTimechart</b> <i class="arg">w</i> <i class="arg">time_begin</i> <i class="arg">time_end</i> <i class="arg">args</i></a></li>
<li><a href="#22"><b class="cmd">::Plotchart::createGanttchart</b> <i class="arg">w</i> <i class="arg">time_begin</i> <i class="arg">time_end</i> <i class="arg">args</i></a></li>
<li><a href="#23"><b class="cmd">::Plotchart::createRightAxis</b> <i class="arg">w_or_plot</i> <i class="arg">yaxis</i></a></li>
<li><a href="#24"><b class="cmd">::Plotchart::createTableChart</b> <i class="arg">w</i> <i class="arg">columns</i> <span class="opt">?widths?</span></a></li>
<li><a href="#25"><b class="cmd">$anyplot</b> title <i class="arg">text</i> <i class="arg">position</i></a></li>
<li><a href="#26"><b class="cmd">$anyplot</b> subtitle <i class="arg">text</i></a></li>
<li><a href="#27"><b class="cmd">$anyplot</b> canvas</a></li>
<li><a href="#28"><b class="cmd">$anyplot</b> saveplot <i class="arg">filename</i> <i class="arg">args</i></a></li>
<li><a href="#29"><b class="cmd">$anyplot</b> xtext <i class="arg">text</i></a></li>
<li><a href="#30"><b class="cmd">$anyplot</b> ytext <i class="arg">text</i></a></li>
<li><a href="#31"><b class="cmd">$anyplot</b> vtext <i class="arg">text</i></a></li>
<li><a href="#32"><b class="cmd">$anyplot</b> xsubtext <i class="arg">text</i></a></li>
<li><a href="#33"><b class="cmd">$anyplot</b> ysubtext <i class="arg">text</i></a></li>
<li><a href="#34"><b class="cmd">$anyplot</b> vsubtext <i class="arg">text</i></a></li>
<li><a href="#35"><b class="cmd">$anyplot</b> xconfig <b class="option">-option</b> <i class="arg">value</i> ...</a></li>
<li><a href="#36"><b class="cmd">$anyplot</b> yconfig <b class="option">-option</b> <i class="arg">value</i> ...</a></li>
<li><a href="#37"><b class="cmd">$anyplot</b> background <i class="arg">part</i> <i class="arg">colour_or_image</i> <i class="arg">dir</i> <span class="opt">?brightness?</span></a></li>
<li><a href="#38"><b class="cmd">$anyplot</b> xticklines <i class="arg">colour</i> <span class="opt">?dash?</span></a></li>
<li><a href="#39"><b class="cmd">$anyplot</b> yticklines <i class="arg">colour</i> <span class="opt">?dash?</span></a></li>
<li><a href="#40"><b class="cmd">$anyplot</b> legend <i class="arg">series</i> <i class="arg">text</i> <span class="opt">?spacing?</span></a></li>
<li><a href="#41"><b class="cmd">$anyplot</b> removefromlegend <i class="arg">series</i></a></li>
<li><a href="#42"><b class="cmd">$anyplot</b> legendconfig <b class="option">-option</b> <i class="arg">value</i> ...</a></li>
<li><a href="#43"><b class="cmd">$anyplot</b> balloon <i class="arg">x</i> <i class="arg">y</i> <i class="arg">text</i> <i class="arg">dir</i></a></li>
<li><a href="#44"><b class="cmd">$anyplot</b> balloonconfig <i class="arg">args</i></a></li>
<li><a href="#45"><b class="cmd">$anyplot</b> plaintext <i class="arg">x</i> <i class="arg">y</i> <i class="arg">text</i> <i class="arg">dir</i></a></li>
<li><a href="#46"><b class="cmd">$anyplot</b> plaintextconfig <i class="arg">args</i></a></li>
<li><a href="#47"><b class="cmd">$anyplot</b> object <i class="arg">itemtype</i> <i class="arg">series</i> <i class="arg">args</i></a></li>
<li><a href="#48"><b class="cmd">$anyplot</b> deletedata</a></li>
<li><a href="#49"><b class="cmd">$xyplot</b> plot <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ycrd</i></a></li>
<li><a href="#50"><b class="cmd">$xyplot</b> plotlist <i class="arg">series</i> <i class="arg">xlist</i> <i class="arg">ylist</i> <i class="arg">every</i></a></li>
<li><a href="#51"><b class="cmd">$histogram</b> plotcumulative <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ycrd</i></a></li>
<li><a href="#52"><b class="cmd">$xyplot</b> trend <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ycrd</i></a></li>
<li><a href="#53"><b class="cmd">$xyplot</b> rchart <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ycrd</i></a></li>
<li><a href="#54"><b class="cmd">$xyplot</b> interval <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ymin</i> <i class="arg">ymax</i> <span class="opt">?ycentr?</span></a></li>
<li><a href="#55"><b class="cmd">$xyplot</b> box-and-whiskers <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ycrd</i></a></li>
<li><a href="#56"><b class="cmd">$xyplot</b> vector <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ycrd</i> <i class="arg">ucmp</i> <i class="arg">vcmp</i></a></li>
<li><a href="#57"><b class="cmd">$xyplot</b> vectorconfig <i class="arg">series</i> <b class="option">-option</b> <i class="arg">value</i> ...</a></li>
<li><a href="#58"><b class="cmd">$xyplot</b> dot <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ycrd</i> <i class="arg">value</i></a></li>
<li><a href="#59"><b class="cmd">$xyplot</b> dotconfig <i class="arg">series</i> <b class="option">-option</b> <i class="arg">value</i> ...</a></li>
<li><a href="#60"><b class="cmd">$xyplot</b> contourlines <i class="arg">xcrd</i> <i class="arg">ycrd</i> <i class="arg">values</i> <span class="opt">?classes?</span></a></li>
<li><a href="#61"><b class="cmd">$xyplot</b> contourlinesfunctionvalues <i class="arg">xvec</i> <i class="arg">yvec</i> <i class="arg">valuesmat</i> <span class="opt">?classes?</span></a></li>
<li><a href="#62"><b class="cmd">$xyplot</b> contourfill <i class="arg">xcrd</i> <i class="arg">ycrd</i> <i class="arg">values</i> <span class="opt">?classes?</span></a></li>
<li><a href="#63"><b class="cmd">$xyplot</b> contourbox <i class="arg">xcrd</i> <i class="arg">ycrd</i> <i class="arg">values</i> <span class="opt">?classes?</span></a></li>
<li><a href="#64"><b class="cmd">$xyplot</b> colorMap <i class="arg">colours</i></a></li>
<li><a href="#65"><b class="cmd">$xyplot</b> legendisolines <i class="arg">values</i> <i class="arg">classes</i></a></li>
<li><a href="#66"><b class="cmd">$xyplot</b> legendshades <i class="arg">values</i> <i class="arg">classes</i></a></li>
<li><a href="#67"><b class="cmd">$xyplot</b> grid <i class="arg">xcrd</i> <i class="arg">ycrd</i></a></li>
<li><a href="#68"><b class="cmd">$xyplot</b> xband <i class="arg">ymin</i> <i class="arg">ymax</i></a></li>
<li><a href="#69"><b class="cmd">$xyplot</b> yband <i class="arg">xmin</i> <i class="arg">xmax</i></a></li>
<li><a href="#70"><b class="cmd">$xyplot</b> labeldot <i class="arg">x</i> <i class="arg">y</i> <i class="arg">text</i> <i class="arg">orient</i></a></li>
<li><a href="#71"><b class="cmd">$polarplot</b> plot <i class="arg">series</i> <i class="arg">radius</i> <i class="arg">angle</i></a></li>
<li><a href="#72"><b class="cmd">$windrose</b> plot <i class="arg">data</i> <i class="arg">colour</i></a></li>
<li><a href="#73"><b class="cmd">$plot3d</b> plotfunc <i class="arg">function</i></a></li>
<li><a href="#74"><b class="cmd">$plot3d</b> plotfuncont <i class="arg">function</i> <i class="arg">contours</i></a></li>
<li><a href="#75"><b class="cmd">$plot3d</b> gridsize <i class="arg">nxcells</i> <i class="arg">nycells</i></a></li>
<li><a href="#76"><b class="cmd">$plot3d</b> plotdata <i class="arg">data</i></a></li>
<li><a href="#77"><b class="cmd">$plot3d</b> colours <i class="arg">fill</i> <i class="arg">border</i></a></li>
<li><a href="#78"><b class="cmd">$plot3d</b> ribbon <i class="arg">yzpairs</i></a></li>
<li><a href="#79"><b class="cmd">$plot3d</b> plot <i class="arg">yzpairs</i></a></li>
<li><a href="#80"><b class="cmd">$xyplot</b> dataconfig <i class="arg">series</i> <b class="option">-option</b> <i class="arg">value</i> ...</a></li>
<li><a href="#81"><b class="cmd">$pie</b> plot <i class="arg">data</i></a></li>
<li><a href="#82"><b class="cmd">$pie</b> colours <i class="arg">colour1</i> <i class="arg">colour2</i> ...</a></li>
<li><a href="#83"><b class="cmd">$pie</b> explode <i class="arg">segment</i></a></li>
<li><a href="#84"><b class="cmd">$radial</b> plot <i class="arg">data</i> <i class="arg">colour</i> <i class="arg">thickness</i></a></li>
<li><a href="#85"><b class="cmd">$pie</b> colours <i class="arg">colour1</i> <i class="arg">colour2</i> ...</a></li>
<li><a href="#86"><b class="cmd">$barchart</b> plot <i class="arg">series</i> <i class="arg">ydata</i> <i class="arg">colour</i> <span class="opt">?dir?</span> <span class="opt">?brightness?</span></a></li>
<li><a href="#87"><b class="cmd">$barchart</b> config <b class="option">-option</b> <i class="arg">value</i> ...</a></li>
<li><a href="#88"><b class="cmd">$barchart</b> plot <i class="arg">series</i> <i class="arg">xdata</i> <i class="arg">colour</i> <span class="opt">?dir?</span> <span class="opt">?brightness?</span></a></li>
<li><a href="#89"><b class="cmd">$barchart</b> config <b class="option">-option</b> <i class="arg">value</i> ...</a></li>
<li><a href="#90"><b class="cmd">$barchart</b> plot <i class="arg">label</i> <i class="arg">yvalue</i> <i class="arg">colour</i></a></li>
<li><a href="#91"><b class="cmd">$barchart</b> config <b class="option">-option</b> <i class="arg">value</i> ...</a></li>
<li><a href="#92"><b class="cmd">$ribbon</b> line <i class="arg">xypairs</i> <i class="arg">colour</i></a></li>
<li><a href="#93"><b class="cmd">$ribbon</b> area <i class="arg">xypairs</i> <i class="arg">colour</i></a></li>
<li><a href="#94"><b class="cmd">$boxplot</b> plot <i class="arg">series</i> <i class="arg">label</i> <i class="arg">values</i></a></li>
<li><a href="#95"><b class="cmd">$timechart</b> period <i class="arg">text</i> <i class="arg">time_begin</i> <i class="arg">time_end</i> <i class="arg">colour</i></a></li>
<li><a href="#96"><b class="cmd">$timechart</b> milestone <i class="arg">text</i> <i class="arg">time</i> <i class="arg">colour</i></a></li>
<li><a href="#97"><b class="cmd">$timechart</b> vertline <i class="arg">text</i> <i class="arg">time</i></a></li>
<li><a href="#98"><b class="cmd">$timechart</b> hscroll <i class="arg">scrollbar</i></a></li>
<li><a href="#99"><b class="cmd">$timechart</b> vscroll <i class="arg">scrollbar</i></a></li>
<li><a href="#100"><b class="cmd">$ganttchart</b> task <i class="arg">text</i> <i class="arg">time_begin</i> <i class="arg">time_end</i> <i class="arg">completed</i></a></li>
<li><a href="#101"><b class="cmd">$ganttchart</b> milestone <i class="arg">text</i> <i class="arg">time</i> <i class="arg">colour</i></a></li>
<li><a href="#102"><b class="cmd">$ganttchart</b> vertline <i class="arg">text</i> <i class="arg">time</i></a></li>
<li><a href="#103"><b class="cmd">$ganttchart</b> connect <i class="arg">from</i> <i class="arg">to</i></a></li>
<li><a href="#104"><b class="cmd">$ganttchart</b> summary <i class="arg">text</i> <i class="arg">args</i></a></li>
<li><a href="#105"><b class="cmd">$ganttchart</b> color <i class="arg">keyword</i> <i class="arg">newcolor</i></a></li>
<li><a href="#106"><b class="cmd">$ganttchart</b> font <i class="arg">keyword</i> <i class="arg">newfont</i></a></li>
<li><a href="#107"><b class="cmd">$ganttchart</b> hscroll <i class="arg">scrollbar</i></a></li>
<li><a href="#108"><b class="cmd">$ganttchart</b> vscroll <i class="arg">scrollbar</i></a></li>
<li><a href="#109"><b class="cmd">$isoplot</b> plot rectangle <i class="arg">x1</i> <i class="arg">y1</i> <i class="arg">x2</i> <i class="arg">y2</i> <i class="arg">colour</i></a></li>
<li><a href="#110"><b class="cmd">$isoplot</b> plot filled-rectangle <i class="arg">x1</i> <i class="arg">y1</i> <i class="arg">x2</i> <i class="arg">y2</i> <i class="arg">colour</i></a></li>
<li><a href="#111"><b class="cmd">$isoplot</b> plot circle <i class="arg">xc</i> <i class="arg">yc</i> <i class="arg">radius</i> <i class="arg">colour</i></a></li>
<li><a href="#112"><b class="cmd">$isoplot</b> plot filled-circle <i class="arg">xc</i> <i class="arg">yc</i> <i class="arg">radius</i> <i class="arg">colour</i></a></li>
<li><a href="#113"><b class="cmd">$table</b> row <i class="arg">items</i></a></li>
<li><a href="#114"><b class="cmd">$table</b> separator</a></li>
<li><a href="#115"><b class="cmd">$table</b> formatcommand <i class="arg">procname</i></a></li>
<li><a href="#116"><b class="cmd">$table</b> cellconfigure <i class="arg">args</i></a></li>
<li><a href="#117"><b class="cmd">::Plotchart::viewPort</b> <i class="arg">w</i> <i class="arg">pxmin</i> <i class="arg">pymin</i> <i class="arg">pxmax</i> <i class="arg">pymax</i></a></li>
<li><a href="#118"><b class="cmd">::Plotchart::worldCoordinates</b> <i class="arg">w</i> <i class="arg">xmin</i> <i class="arg">ymin</i> <i class="arg">xmax</i> <i class="arg">ymax</i></a></li>
<li><a href="#119"><b class="cmd">::Plotchart::world3DCoordinates</b> <i class="arg">w</i> <i class="arg">xmin</i> <i class="arg">ymin</i> <i class="arg">zmin</i> <i class="arg">xmax</i> <i class="arg">ymax</i> <i class="arg">zmax</i></a></li>
<li><a href="#120"><b class="cmd">::Plotchart::coordsToPixel</b> <i class="arg">w</i> <i class="arg">x</i> <i class="arg">y</i></a></li>
<li><a href="#121"><b class="cmd">::Plotchart::coords3DToPixel</b> <i class="arg">w</i> <i class="arg">x</i> <i class="arg">y</i> <i class="arg">z</i></a></li>
<li><a href="#122"><b class="cmd">::Plotchart::polarCoordinates</b> <i class="arg">w</i> <i class="arg">radmax</i></a></li>
<li><a href="#123"><b class="cmd">::Plotchart::polarToPixel</b> <i class="arg">w</i> <i class="arg">rad</i> <i class="arg">phi</i></a></li>
<li><a href="#124"><b class="cmd">::Plotchart::pixelToCoords</b> <i class="arg">w</i> <i class="arg">x</i> <i class="arg">y</i></a></li>
<li><a href="#125"><b class="cmd">::Plotchart::pixelToIndex</b> <i class="arg">w</i> <i class="arg">x</i> <i class="arg">y</i></a></li>
<li><a href="#126"><b class="cmd">::Plotchart::determineScale</b> <i class="arg">xmin</i> <i class="arg">xmax</i> <i class="arg">inverted</i></a></li>
<li><a href="#127"><b class="cmd">::Plotchart::determineScaleFromList</b> <i class="arg">values</i> <i class="arg">inverted</i></a></li>
<li><a href="#128"><b class="cmd">::Plotchart::plotconfig</b> <i class="arg">charttype</i> <i class="arg">component</i> <i class="arg">property</i> <i class="arg">value</i></a></li>
<li><a href="#129"><b class="cmd">::Plotchart::plotstyle</b> <i class="arg">subcmd</i> <i class="arg">style</i> <i class="arg">args</i></a></li>
<li><a href="#130"><b class="cmd">::Plotchart::createTargetDiagram</b> <i class="arg">w</i> <i class="arg">limits</i> <i class="arg">scale</i></a></li>
<li><a href="#131"><b class="cmd">$target</b> plot <i class="arg">series</i> <i class="arg">xvalues</i> <i class="arg">yvalues</i></a></li>
<li><a href="#132"><b class="cmd">::Plotchart::createPerformanceProfile</b> <i class="arg">w</i> <i class="arg">max</i></a></li>
<li><a href="#133"><b class="cmd">$performance</b> plot <i class="arg">series_and_data_pairs</i></a></li>
<li><a href="#134"><b class="cmd">::Plotchart::plotmethod</b> <i class="arg">charttype</i> <i class="arg">methodname</i> <i class="arg">plotproc</i></a></li>
<li><a href="#135"><b class="cmd">::Plotchart::plotpack</b> <i class="arg">w</i> <i class="arg">dir</i> <i class="arg">args</i></a></li>
<li><a href="#136"><b class="cmd">$anyplot</b> bindplot <i class="arg">event</i> <i class="arg">command</i> <i class="arg">args</i></a></li>
<li><a href="#137"><b class="cmd">$anyplot</b> bindlast <i class="arg">series</i> <i class="arg">event</i> <i class="arg">command</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>Plotchart is a Tcl-only package that focuses on the easy creation of
xy-plots, barcharts and other common types of graphical presentations.
The emphasis is on ease of use, rather than flexibility. The procedures
that create a plot use the entire canvas window, making the layout
of the plot completely automatic.</p>
<p>This results in the creation of an xy-plot in, say, ten lines of code:</p>
<pre class="example">
    package require Plotchart
    canvas .c -background white -width 400 -height 200
    pack   .c -fill both
    #
    # Create the plot with its x- and y-axes
    #
    set s [::Plotchart::createXYPlot .c {0.0 100.0 10.0} {0.0 100.0 20.0}]
    foreach {x y} {0.0 32.0 10.0 50.0 25.0 60.0 78.0 11.0 } {
        $s plot series1 $x $y
    }
    $s title &quot;Data series&quot;
</pre>
<p>A drawback of the package might be that it does not do any data
management. So if the canvas that holds the plot is to be resized, the
whole plot must be redrawn.
The advantage, though, is that it offers a number of plot and chart
types:</p>
<ul class="itemized">
<li><p>XY-plots like the one shown above with any number of data series.</p></li>
<li><p>Stripcharts, a kind of XY-plots where the horizontal axis is adjusted
automatically. The result is a kind of sliding window on the data
series.</p></li>
<li><p>Polar plots, where the coordinates are polar instead of cartesian.</p></li>
<li><p>Histograms, for plotting statistical information.</p></li>
<li><p>Isometric plots, where the scale of the coordinates in the two
directions is always the same, i.e. a circle in world coordinates
appears as a circle on the screen.</p>
<p>You can zoom in and out, as well as pan with these plots (<em>Note:</em>
this works best if no axes are drawn, the zooming and panning routines
do not distinguish the axes), using the mouse buttons with the control
key and the arrow keys with the control key.</p></li>
<li><p>Piecharts, with automatic scaling to indicate the proportions.</p></li>
<li><p>Barcharts, with either vertical or horizontal bars, stacked bars or
bars side by side.</p></li>
<li><p>Timecharts, where bars indicate a time period and milestones or other
important moments in time are represented by triangles.</p></li>
<li><p>3D plots (both for displaying surfaces and 3D bars)</p></li>
</ul>
<p>With version 1.5 a new command has been introduced: plotconfig, which
can be used to configure the plot options for particular types of plots
and charts (cf. <span class="sectref"><a href="#section11">CONFIGURATION OPTIONS</a></span>)
With version 1.8.3 several new features were introduced, which allow more interactivity
(cf. <span class="sectref"><a href="#section17">INTERACTIVE USE</a></span>)</p>
</div>
<div id="section2" class="section"><h2><a name="section2">PLOT CREATION COMMANDS</a></h2>
<p>You create the plot or chart with one single command and then fill the
plot with data:</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::Plotchart::createXYPlot</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i> <i class="arg">args</i></a></dt>
<dd><p>Create a new xy-plot (configuration type: xyplot).</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">xaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the x-axis, in this order.
For an inverted axis, where the maximum appears on the left-hand side,
use: maximum, minimum and a <em>negative</em> stepsize.</p></dd>
<dt>list <i class="arg">yaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order.
For an inverted axis, where the maximum appears at the bottom,
use: maximum, minimum and a <em>negative</em> stepsize.</p></dd>
<dt>list <i class="arg">args</i> (in)</dt>
<dd><p>Zero or more options that influence the appearance of the plot:</p>
<ul class="itemized">
<li><p><em>-xlabels {labels}:</em> Custom labels for the x-axis. If the labels
are numeric, they are positioned according to the given scale,
otherwise they are positioned with equal distance, based on the number
of labels. Note: this only works if the stepsize of the xaxis argument is
the empty string.</p></li>
<li><p><em>-ylabels {labels}:</em> Similarly, custom labels for the y-axis.</p></li>
<li><p><em>-box {measures}:</em> See <span class="sectref"><a href="#section16">ARRANGING MULTIPLE PLOTS IN A CANVAS</a></span></p></li>
<li><p><em>-axesbox {measures}:</em> See <span class="sectref"><a href="#section16">ARRANGING MULTIPLE PLOTS IN A CANVAS</a></span></p></li>
</ul></dd>
</dl></dd>
<dt><a name="2"><b class="cmd">::Plotchart::createStripchart</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i></a></dt>
<dd><p>Create a new strip chart (configuration type: stripchart). The
only difference to a regular XY plot is
that the x-axis will be automatically adjusted when the x-coordinate
of a new point exceeds the maximum.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">xaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the x-axis, in this order.
Note that an inverted x-axis is <em>not</em> supported for this type of plot.</p></dd>
<dt>list <i class="arg">yaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order.
For an inverted axis, where the maximum appears at the bottom,
use: maximum, minimum and a <em>negative</em> stepsize.</p></dd>
</dl></dd>
<dt><a name="3"><b class="cmd">::Plotchart::createTXPlot</b> <i class="arg">w</i> <i class="arg">timeaxis</i> <i class="arg">xaxis</i></a></dt>
<dd><p>Create a new time-x-plot (configuration type: txplot). The horizontal axis represents the date/time
of the data and the vertical axis the values themselves.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">timeaxis</i> (in)</dt>
<dd><p>A 3-element list containing the minimum and maximum date/time to be
shown and the stepsize (<em>in days</em>) for the time-axis, in this order.
Note that an inverted time-axis is <em>not</em> supported.</p></dd>
<dt>list <i class="arg">xaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the
vertical axis, in this order.
For an inverted axis, where the maximum appears at the bottom,
use: maximum, minimum and a <em>negative</em> stepsize.</p></dd>
</dl></dd>
<dt><a name="4"><b class="cmd">::Plotchart::createXLogYPlot</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i></a></dt>
<dd><p>Create a new xy-plot where the y-axis has a logarithmic scale (configuration type: xlogyplot).</p>
<p>The data should be given as for a linear scale, as the logarithmic transformation
is taken of internally.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">xaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the x-axis, in this order.
For an inverted axis, where the maximum appears on the left-hand side,
use: maximum, minimum and a <em>negative</em> stepsize.</p></dd>
<dt>list <i class="arg">yaxis</i> (in)</dt>
<dd><p>A 2-element list containing minimum and maximum for the y-axis, in this order.
Note that an inverted logarithmic axis is <em>not</em> supported.</p></dd>
</dl></dd>
<dt><a name="5"><b class="cmd">::Plotchart::createLogXYPlot</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i></a></dt>
<dd><p>Create a new xy-plot where the x-axis has a logarithmic scale (configuration type: logxyplot).</p>
<p>The data should be given as for a linear scale, as the logarithmic transformation
is taken of internally.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">xaxis</i> (in)</dt>
<dd><p>A 2-element list containing minimum and maximum for the x-axis, in this order.
Note that an inverted logarithmic axis is <em>not</em> supported.</p></dd>
<dt>list <i class="arg">yaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order.
For an inverted axis, where the maximum appears on the left-hand side,
use: maximum, minimum and a <em>negative</em> stepsize.</p></dd>
</dl></dd>
<dt><a name="6"><b class="cmd">::Plotchart::createLogXLogYPlot</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i></a></dt>
<dd><p>Create a new xy-plot where both the x-axis and the y-axis have a logarithmic scale
(configuration type: logxlogyplot).</p>
<p>The data should be given as for a linear scale, as the logarithmic transformation
is taken of internally.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">xaxis</i> (in)</dt>
<dd><p>A 2-element list containing minimum and maximum for the x-axis, in this order.
Note that an inverted logarithmic axis is <em>not</em> supported.</p></dd>
<dt>list <i class="arg">yaxis</i> (in)</dt>
<dd><p>A 2-element list containing minimum and maximum for the y-axis, in this order.
Note that an inverted logarithmic axis is <em>not</em> supported.</p></dd>
</dl></dd>
<dt><a name="7"><b class="cmd">::Plotchart::createPolarPlot</b> <i class="arg">w</i> <i class="arg">radius_data</i></a></dt>
<dd><p>Create a new polar plot (configuration type: polarplot).</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">radius_data</i> (in)</dt>
<dd><p>A 2-element list containing maximum radius and stepsize for the radial
axis, in this order.</p></dd>
</dl></dd>
<dt><a name="8"><b class="cmd">::Plotchart::createWindrose</b> <i class="arg">w</i> <i class="arg">radius_data</i> <i class="arg">sectors</i></a></dt>
<dd><p>Create a new windrose diagram. The diagram will consist of concentric
circles as defined by the <i class="term">radius_data</i> argument and a number of
sectors (given by the <i class="term">sectors</i> argument). The sectors are drawn in
the &quot;nautical&quot; convention, that is: the first is located at the positive
y-axis, the second is to the right and so on in a clockwise direction.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the diagram</p></dd>
<dt>list <i class="arg">radius_data</i> (in)</dt>
<dd><p>A 2-element list, the first element is the maximum radius, the second is
the step to be used for the circles.</p></dd>
<dt>int <i class="arg">sectors</i></dt>
<dd><p>Number of sectors to use (defaults to 16).</p></dd>
</dl></dd>
<dt><a name="9"><b class="cmd">::Plotchart::createIsometricPlot</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i> <i class="arg">stepsize</i></a></dt>
<dd><p>Create a new isometric plot, where the vertical and the horizontal
coordinates are scaled so that a circle will truly appear as a circle (configuration type: isometric).</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">xaxis</i> (in)</dt>
<dd><p>A 2-element list containing minimum, and maximum for the x-axis, in this order.</p></dd>
<dt>list <i class="arg">yaxis</i> (in)</dt>
<dd><p>A 2-element list containing minimum, and maximum for the y-axis, in this order.</p></dd>
<dt>float|<b class="const">noaxes</b> <i class="arg">stepsize</i> (in)</dt>
<dd><p>Either the stepsize used by both axes or the keyword <b class="const">noaxes</b> to
signal the plot that it should use the full area of the widget, to not
draw any of the axes.</p></dd>
</dl></dd>
<dt><a name="10"><b class="cmd">::Plotchart::createHistogram</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i></a></dt>
<dd><p>Create a new histogram (configuration type: histogram).</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">xaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the x-axis, in this order.</p></dd>
<dt>list <i class="arg">yaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order.</p></dd>
</dl></dd>
<dt><a name="11"><b class="cmd">::Plotchart::create3DPlot</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">yaxis</i> <i class="arg">zaxis</i></a></dt>
<dd><p>Create a new 3D plot.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">xaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the x-axis, in this order.</p></dd>
<dt>list <i class="arg">yaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order.</p></dd>
<dt>list <i class="arg">zaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the z-axis, in this order.</p></dd>
</dl></dd>
<dt><a name="12"><b class="cmd">::Plotchart::create3DRibbonPlot</b> <i class="arg">w</i> <i class="arg">yaxis</i> <i class="arg">zaxis</i></a></dt>
<dd><p>Create a new 3D ribbon plot. It is a simplification of the full 3D plot and allows for
the drawing of a ribbon only (the x-axis is dropped).</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">yaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order.</p></dd>
<dt>list <i class="arg">zaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the z-axis, in this order.</p></dd>
</dl></dd>
<dt><a name="13"><b class="cmd">::Plotchart::createPiechart</b> <i class="arg">w</i></a></dt>
<dd><p>Create a new piechart (configuration type: piechart).</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
</dl></dd>
<dt><a name="14"><b class="cmd">::Plotchart::createSpiralPie</b> <i class="arg">w</i></a></dt>
<dd><p>Create a new &quot;spiral pie&quot; (configuration type: spiralpie), a variation on the ordinary
piechart. The value is used to scale the radius, rather than the angle. By default the
data are sorted.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
</dl></dd>
<dt><a name="15"><b class="cmd">::Plotchart::createRadialchart</b> <i class="arg">w</i> <i class="arg">names</i> <i class="arg">scale</i> <i class="arg">style</i></a></dt>
<dd><p>Create a new radial chart (the data are drawn as a line connecting the
spokes of the diagram) (configuration type: radialchart).</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">names</i> (in)</dt>
<dd><p>Names for the spokes.</p></dd>
<dt>float <i class="arg">scale</i> (in)</dt>
<dd><p>Scale value to determine the position of the data along the spokes.</p></dd>
<dt>string <i class="arg">style</i> (in)</dt>
<dd><p>Style of the chart (optional). One of:</p>
<ul class="itemized">
<li><p><em>lines</em> - the default: draw the data as independent polylines.</p></li>
<li><p><em>cumulative</em> - draw the data as polylines where the data are
accumulated.</p></li>
<li><p><em>filled</em> - draw the data as filled polygons where the data are
accumulated</p></li>
</ul></dd>
</dl></dd>
<dt><a name="16"><b class="cmd">::Plotchart::createBarchart</b> <i class="arg">w</i> <i class="arg">xlabels</i> <i class="arg">yaxis</i> <i class="arg">noseries</i></a></dt>
<dd><p>Create a new barchart with vertical bars (configuration type: vertbars). The horizontal axis will
display the labels contained in the argument <i class="arg">xlabels</i>. The number
of series given by <i class="arg">noseries</i> determines both the width of the
bars, and the way the series will be drawn.</p>
<p>If the keyword <b class="const">stacked</b> was specified the series will be drawn
stacked on top of each other. Otherwise each series that is drawn will
be drawn shifted to the right.</p>
<p>The number of series determines the width of the bars, so that there is
space of that number of bars. If you use a floating-point number, like
2.2, instead of an integer, like 2, a small gap between the sets of bars
will be drawn - the width depends on the fractional part.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">xlabels</i> (in)</dt>
<dd><p>List of labels for the x-axis. Its length also determines the number of
bars that will be plotted per series.</p></dd>
<dt>list <i class="arg">yaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order.</p></dd>
<dt>int|<b class="const">stacked</b> <i class="arg">noseries</i> (in)</dt>
<dd><p>The number of data series that will be plotted. This has to be an
integer number greater than zero (if <b class="const">stacked</b> is not used).</p></dd>
</dl></dd>
<dt><a name="17"><b class="cmd">::Plotchart::createHorizontalBarchart</b> <i class="arg">w</i> <i class="arg">xaxis</i> <i class="arg">ylabel</i> <i class="arg">noseries</i></a></dt>
<dd><p>Create a new barchart with horizontal bars (configuration type: horizbars). The vertical axis will
display the labels contained in the argument <i class="arg">ylabels</i>. The number
of series given by <i class="arg">noseries</i> determines both the width of the
bars, and the way the series will be drawn.</p>
<p>If the keyword <b class="const">stacked</b> was specified the series will be drawn
stacked from left to right. Otherwise each series that is drawn will
be drawn shifted upward.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">xaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the x-axis, in this order.</p></dd>
<dt>list <i class="arg">ylabels</i> (in)</dt>
<dd><p>List of labels for the y-axis. Its length also determines the number of
bars that will be plotted per series.</p></dd>
<dt>int|<b class="const">stacked</b> <i class="arg">noseries</i> (in)</dt>
<dd><p>The number of data series that will be plotted. This has to be an
integer number greater than zero (if <b class="const">stacked</b> is not used).</p></dd>
</dl></dd>
<dt><a name="18"><b class="cmd">::Plotchart::create3DBarchart</b> <i class="arg">w</i> <i class="arg">yaxis</i> <i class="arg">nobars</i></a></dt>
<dd><p>Create a new barchart with 3D vertical bars (configuration type: 3dbars). The horizontal axis will
display the labels per bar. The number of bars given by <i class="arg">nobars</i>
determines the position and the width of the bars. The colours can be
varied per bar. (This type of chart was inspired by the Wiki page on 3D
bars by Richard Suchenwirth.)</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">yaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order.</p></dd>
<dt>int <i class="arg">nobars</i> (in)</dt>
<dd><p>The number of bars that will be plotted.</p></dd>
</dl></dd>
<dt><a name="19"><b class="cmd">::Plotchart::create3DRibbonChart</b> <i class="arg">w</i> <i class="arg">names</i> <i class="arg">yaxis</i> <i class="arg">zaxis</i></a></dt>
<dd><p>Create a new &quot;ribbon chart&quot; (configuration type: 3dribbon). This is
a chart where the data series are
represented as ribbons in a three-dimensional axis system. Along the
x-axis (which is &quot;into&quot; the screen) the names are plotted, each
representing a single series. The first plot command draws the furthest
series, the second draws the series in front of that and so on.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Names of the series, plotted as labels along the x-axis</p></dd>
<dt>list <i class="arg">yaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the y-axis
(drawn horizontally!), in this order.</p></dd>
<dt>list <i class="arg">zaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the z-axis
(drawn vertically), in this order.</p></dd>
<dt>int <i class="arg">nobars</i> (in)</dt>
<dd><p>The number of bars that will be plotted.</p></dd>
</dl></dd>
<dt><a name="20"><b class="cmd">::Plotchart::createBoxplot</b> <i class="arg">w</i> <i class="arg">xdata</i> <i class="arg">ydata</i> <i class="arg">orientation</i></a></dt>
<dd><p>Create a new boxplot with horizontal or vertical boxes (box-and-whiskers) (configuration type: boxplot). Depending
on the orientation the x- or y-axis is drawn with labels. The boxes are drawn based on the raw data
(see the plot subcommand for this type of plot).</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">xdata</i> (in)</dt>
<dd><p>This is either a 3-element list containing minimum, maximum and stepsize for the x-axis, in this order
(when orientation is horizontal), or a list of labels for the x-axis (when orientation is vertical). The length
of the label list also determines the number of boxes that can be plotted. The labels are also used in the plot
subcommand.</p></dd>
<dt>list <i class="arg">ydata</i> (in)</dt>
<dd><p>This is either a 3-element list containing minimum, maximum and stepsize for the y-axis, in this order
(when orientation is vertical), or a list of labels for the y-axis (when orientation is horizontal). The length
of the label list also determines the number of boxes that can be plotted. The labels are also used in the plot
subcommand.</p></dd>
<dt>string <i class="arg">orientation</i> (in)</dt>
<dd><p>If given, &quot;horizontal&quot; or &quot;vertical&quot; determines the orientation of the boxes. This optional value (default: horizontal)
also determines the interpretation of the xdata and ydata arguments.</p></dd>
</dl></dd>
<dt><a name="21"><b class="cmd">::Plotchart::createTimechart</b> <i class="arg">w</i> <i class="arg">time_begin</i> <i class="arg">time_end</i> <i class="arg">args</i></a></dt>
<dd><p>Create a new timechart (configuration type: timechart).
The time axis (= x-axis) goes from <i class="arg">time_begin</i> to <i class="arg">time_end</i>,
and the vertical spacing is determined by the number of items to plot.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>string <i class="arg">time_begin</i> (in)</dt>
<dd><p>The start time given in a form that is recognised by the <b class="cmd">clock scan</b>
command (e.g. &quot;1 january 2004&quot;).</p></dd>
<dt>string <i class="arg">time_end</i> (in)</dt>
<dd><p>The end time given in a form that is recognised by the <b class="cmd">clock scan</b>
command (e.g. &quot;1 january 2004&quot;).</p></dd>
<dt>arguments <i class="arg">args</i> (in)</dt>
<dd><p>The remaining arguments can be:</p>
<ul class="itemized">
<li><p>The expected/maximum number of items. This determines the vertical
spacing. (If given, it must be the first argument after &quot;time_end&quot;</p></li>
<li><p>The keyword -barheight and the number of pixels per bar. This is an
alternative method to determine the vertical spacing.</p></li>
<li><p>The keyword -ylabelwidth and the number of pixels to reserve for the
labels at the y-axis.</p></li>
</ul></dd>
</dl></dd>
<dt><a name="22"><b class="cmd">::Plotchart::createGanttchart</b> <i class="arg">w</i> <i class="arg">time_begin</i> <i class="arg">time_end</i> <i class="arg">args</i></a></dt>
<dd><p>Create a new Gantt chart (configuration type: ganttchart).
The time axis (= x-axis) goes from <i class="arg">time_begin</i> to <i class="arg">time_end</i>,
and the vertical spacing is determined by the number of items to plot.
Via the specific commands you can then add tasks and connections between
the tasks.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>string <i class="arg">time_begin</i> (in)</dt>
<dd><p>The start time given in a form that is recognised by the <b class="cmd">clock scan</b>
command (e.g. &quot;1 january 2004&quot;).</p></dd>
<dt>string <i class="arg">time_end</i> (in)</dt>
<dd><p>The end time given in a form that is recognised by the <b class="cmd">clock scan</b>
command (e.g. &quot;1 january 2004&quot;).</p></dd>
<dt>arguments <i class="arg">args</i> (in)</dt>
<dd><p>The remaining arguments can be:</p>
<ul class="itemized">
<li><p>The expected/maximum number of items. This determines the vertical
spacing. (If given this way, it must be the first argument after &quot;time_end&quot;)</p></li>
<li><p>The expected/maximum width of the descriptive text (roughly in characters,
for the actual space reserved for the text, it is assumed that a
character is about ten pixels wide). Defaults to 20. (If given this way,
it must be the second argument after &quot;time_end&quot;).</p></li>
<li><p>The keyword -barheight and the number of pixels per bar. This is an
alternative method to determine the vertical spacing.</p></li>
<li><p>The keyword -ylabelwidth and the number of pixels to reserve for the
labels at the y-axis.</p></li>
</ul></dd>
</dl></dd>
<dt><a name="23"><b class="cmd">::Plotchart::createRightAxis</b> <i class="arg">w_or_plot</i> <i class="arg">yaxis</i></a></dt>
<dd><p>Create a plot command that will use a right axis instead of the left
axis (configuration type: inherited from the existing plot). The canvas widget
must already contain an ordinary plot, as the
horizontal axis and other properties are reused. Preferably use the
plot command, as with multiple plots in a canvas (also when redefining an existing
plot!), the wrong geometry might be used.</p>
<p>To plot data using the
right axis, use this new command, to plot data using the <em>left</em>
axis, use the original plot command.</p>
<dl class="arguments">
<dt>widget <i class="arg">w_or_plot</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot or preferably the
plot command for the plot with the left axis.</p></dd>
<dt>list <i class="arg">yaxis</i> (in)</dt>
<dd><p>A 3-element list containing minimum, maximum and stepsize for the y-axis, in this order.</p></dd>
</dl></dd>
<dt><a name="24"><b class="cmd">::Plotchart::createTableChart</b> <i class="arg">w</i> <i class="arg">columns</i> <span class="opt">?widths?</span></a></dt>
<dd><p>Create a command to draw a table. You can use a variety of commands to
draw the actual rows of the table, but the number of columns is fixed.
(See <span class="sectref"><a href="#section14">TABLE CHARTS</a></span> for an example)</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the canvas widget to hold the table.</p></dd>
<dt>list <i class="arg">columns</i> (in)</dt>
<dd><p>The headers of the columns in the table. The number of elements
determines the number of columns.</p></dd>
<dt>list <i class="arg">widths</i> (in)</dt>
<dd><p>If given, either a single value, the width in pixels for all columns or
for each column the width of that column. If not given, the table is
spread out over the width of the canvas (minus the margins).</p></dd>
</dl></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">PLOT METHODS</a></h2>
<p>Each of the creation commands explained in the last section returns
the name of a new object command that can be used to manipulate the
plot or chart. The subcommands available to a chart command depend on
the type of the chart.</p>
<p>General subcommands for all types of charts. \$anyplot is the command
returned by the creation command:</p>
<dl class="definitions">
<dt><a name="25"><b class="cmd">$anyplot</b> title <i class="arg">text</i> <i class="arg">position</i></a></dt>
<dd><p>Specify the title of the whole chart.</p>
<dl class="arguments">
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>The text of the title to be drawn.</p></dd>
<dt>string <i class="arg">position</i> (in)</dt>
<dd><p>The position of the title. The default position is &quot;center&quot;, but you can
alternatively use &quot;left&quot; or &quot;right&quot;. You can use multiple titles with
different positions.</p></dd>
</dl></dd>
<dt><a name="26"><b class="cmd">$anyplot</b> subtitle <i class="arg">text</i></a></dt>
<dd><p>Specify the subtitle of the whole chart.</p>
<dl class="arguments">
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>The text of the subtitle to be drawn.</p></dd>
</dl></dd>
<dt><a name="27"><b class="cmd">$anyplot</b> canvas</a></dt>
<dd><p>Return the name of the canvas (or the alias if you use more than one plot within a
canvas). Use this value for the coordinate transformations.</p></dd>
<dt><a name="28"><b class="cmd">$anyplot</b> saveplot <i class="arg">filename</i> <i class="arg">args</i></a></dt>
<dd><p>Draws the plot into a file, using PostScript.</p>
<dl class="arguments">
<dt>string <i class="arg">filename</i> (in)</dt>
<dd><p>Contain the path name of the file to write the plot to.</p></dd>
<dt>list <i class="arg">args</i> (in)</dt>
<dd><p>If the standard PostScript output is used, the option -plotregion can be specifed
to save the whole plot (value: bbox) regardless of what is visible in the window.
The default (value: window) is to only plot the visible part of the plot.</p>
<p>Optionally you can specify the option -format &quot;some picture format&quot; to
store the plot in a different file than a PostScript file. This,
however, relies on the Img package to do the actual job.</p>
<p><em>Note:</em>
Because the window holding the plot must be fully visible before Img can
successfully grab it, it is raised first.
On some systems, for instance Linux with KDE, raising
a window is not done automatically, but instead you need to click on the
window in the task bar. Similar things happen on Windows XP.</p>
<p>There seems to be something wrong under some circumstances, so instead
of waiting for the visibility of the window, the procedure simply waits
two seconds. It is not ideal, but it seems to work better.</p></dd>
</dl></dd>
<dt><a name="29"><b class="cmd">$anyplot</b> xtext <i class="arg">text</i></a></dt>
<dd><p>Specify the title of the (horizontal) x-axis, for those plots that have
a straight x-axis.</p>
<dl class="arguments">
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>The text of the x-axis label to be drawn.</p></dd>
</dl></dd>
<dt><a name="30"><b class="cmd">$anyplot</b> ytext <i class="arg">text</i></a></dt>
<dd><p>Specify the title of the (horizontal) y-axis, for those plots that have
a straight y-axis.</p>
<dl class="arguments">
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>The text of the y-axis label to be drawn.</p></dd>
</dl></dd>
<dt><a name="31"><b class="cmd">$anyplot</b> vtext <i class="arg">text</i></a></dt>
<dd><p>Draw a <em>vertical</em> label to the y-axis. Note: this requires Tk 8.6
or later, for older versions it does nothing.</p>
<dl class="arguments">
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>Text to drawn to the y-axis</p></dd>
</dl></dd>
<dt><a name="32"><b class="cmd">$anyplot</b> xsubtext <i class="arg">text</i></a></dt>
<dd><p>Specify the subtext of the (horizontal) x-axis, for those plots that have
a straight x-axis. This text is drawn below the primary text.</p>
<p>Since this involves positioning the primary text and setting margins, you need to
set the option &quot;usesubtext&quot; for the bottom axis via the plotstyle command. The relevant
options are: usesubtext, subtextcolor and subtextfont.</p>
<dl class="arguments">
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>The secondary text of the x-axis label to be drawn.</p></dd>
</dl></dd>
<dt><a name="33"><b class="cmd">$anyplot</b> ysubtext <i class="arg">text</i></a></dt>
<dd><p>Specify the subtext of the (vertical) y-axis, for those plots that have
a straight y-axis. This text is drawn below the primary text, for both
axes on the left and the right.</p>
<p>Since this involves positioning the primary text and setting margins, you need to
set the option &quot;usesubtext&quot; for the left or right axis via the plotstyle command. The relevant
options are: usesubtext, subtextcolor and subtextfont.</p>
<dl class="arguments">
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>The secondary text of the y-axis label to be drawn.</p></dd>
</dl></dd>
<dt><a name="34"><b class="cmd">$anyplot</b> vsubtext <i class="arg">text</i></a></dt>
<dd><p>Specify the subtext of the (vertical) y-axis, for those plots that have
a straight y-axis. This text is drawn to the <em>right</em> of the primary text, for both
axes on the left and the right.</p>
<p>Since this involves positioning the primary text and setting margins, you need to
set the option &quot;usesubtext&quot; for the left or right axis via the plotstyle command. The relevant
options are: usevsubtext, vsubtextcolor and vsubtextfont. (Note the &quot;v&quot; to distinguish this
option from the text at the top of a vertical axis that is drawn via <i class="term">$anyplot ytext</i> or
<i class="term">$anyplot ysubtext</i>.)</p>
<dl class="arguments">
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>The secondary (vertical) text of the y-axis label to be drawn.</p></dd>
</dl></dd>
<dt><a name="35"><b class="cmd">$anyplot</b> xconfig <b class="option">-option</b> <i class="arg">value</i> ...</a></dt>
<dd><p>Set one or more configuration parameters for the x-axis.
The following options are supported:</p>
<dl class="options">
<dt><b class="option">format</b> fmt</dt>
<dd><p>The format for the numbers along the axis.</p></dd>
<dt><b class="option">ticklength</b> length</dt>
<dd><p>The length of the tickmarks (in pixels).</p></dd>
<dt><b class="option">ticklines</b> boolean</dt>
<dd><p>Whether to draw ticklines (<b class="const">true</b>) or not (<b class="const">false</b>).</p></dd>
<dt><b class="option">scale</b> scale_data</dt>
<dd><p>New scale data for the axis, i.e. a 3-element list containing minimum,
maximum and stepsize for the axis, in this order.</p>
<p><em>Beware:</em> Setting this option will clear all data from the plot.</p></dd>
</dl></dd>
<dt><a name="36"><b class="cmd">$anyplot</b> yconfig <b class="option">-option</b> <i class="arg">value</i> ...</a></dt>
<dd><p>Set one or more configuration parameters for the y-axis. This method
accepts the same options and values as the method <b class="method">xconfig</b>.</p></dd>
<dt><a name="37"><b class="cmd">$anyplot</b> background <i class="arg">part</i> <i class="arg">colour_or_image</i> <i class="arg">dir</i> <span class="opt">?brightness?</span></a></dt>
<dd><p>Set the background of a part of the plot</p>
<dl class="arguments">
<dt>string <i class="arg">part</i></dt>
<dd><p>Which part of the plot: &quot;axes&quot; for the axes area and &quot;plot&quot; for the
inner part. The interpretation depends on the type of plot. Two further
possibilities are:</p>
<ul class="itemized">
<li><p><em>image</em>, in which case a predefined image is loaded
into the background of the plot.</p></li>
<li><p><em>gradient</em>, in which case the background is coloured in different
shades of the given colour. The &quot;dir&quot; argument specifies the direction
in which the colour gets whiter.</p></li>
</ul></dd>
<dt>string <i class="arg">colour_or_image</i></dt>
<dd><p>Colour for that part or the name of the image if &quot;part&quot; is &quot;image&quot;</p></dd>
<dt>string <i class="arg">dir</i></dt>
<dd><p>The direction of the gradient. One of: top-down, bottom-up, left-right
or right-left.</p></dd>
<dt>string <i class="arg">brightness</i></dt>
<dd><p>Indicates whether the colour should become brighter (bright) or darker (dark). Defaults to bright</p></dd>
</dl></dd>
<dt><a name="38"><b class="cmd">$anyplot</b> xticklines <i class="arg">colour</i> <span class="opt">?dash?</span></a></dt>
<dd><p>Draw vertical ticklines at each tick location</p>
<dl class="arguments">
<dt>string <i class="arg">colour</i></dt>
<dd><p>Colour of the lines. Specifying an empty colour (&quot;&quot;) removes them again.
Defaults to &quot;black&quot;</p></dd>
<dt>string <i class="arg">dash</i></dt>
<dd><p>Optional argument to specify the dash pattern for the lines. Defaults to &quot;lines&quot;
Possible values: lines, dots1, dots2, dots3, dots4, dots5.
The actual effect depends on the platform.</p></dd>
</dl></dd>
<dt><a name="39"><b class="cmd">$anyplot</b> yticklines <i class="arg">colour</i> <span class="opt">?dash?</span></a></dt>
<dd><p>Draw horizontal ticklines at each tick location</p>
<dl class="arguments">
<dt>string <i class="arg">colour</i></dt>
<dd><p>Colour of the lines. Specifying an empty colour (&quot;&quot;) removes them again
Defaults to &quot;black&quot;</p></dd>
<dt>string <i class="arg">dash</i></dt>
<dd><p>Optional argument to specify the dash pattern for the lines. Defaults to &quot;lines&quot;
Possible values: lines, dots1, dots2, dots3, dots4, dots5.
The actual effect depends on the platform.</p></dd>
</dl></dd>
<dt><a name="40"><b class="cmd">$anyplot</b> legend <i class="arg">series</i> <i class="arg">text</i> <span class="opt">?spacing?</span></a></dt>
<dd><p>Add an entry to the legend. The series determines which graphical
symbol is to be used. (As a side effect the legend is actually drawn.)</p>
<dl class="arguments">
<dt>string <i class="arg">series</i></dt>
<dd><p>Name of the data series. This determines the colour of the line and the
symbol (if any) that will be drawn.</p></dd>
<dt>string <i class="arg">text</i></dt>
<dd><p>Text to be drawn next to the line/symbol.</p></dd>
<dt>integer <i class="arg">spacing</i></dt>
<dd><p>Optional argument to specify the vertical spacing between the entries (in pixels).
(Note that this spacing will be reused later.)</p></dd>
</dl></dd>
<dt><a name="41"><b class="cmd">$anyplot</b> removefromlegend <i class="arg">series</i></a></dt>
<dd><p>Remove an entry for a series from the legend and redraw it.</p>
<dl class="arguments">
<dt>string <i class="arg">series</i></dt>
<dd><p>Name of the data series to be removed.</p></dd>
</dl></dd>
<dt><a name="42"><b class="cmd">$anyplot</b> legendconfig <b class="option">-option</b> <i class="arg">value</i> ...</a></dt>
<dd><p>Set one or more options for the legend. The legend is drawn as a
rectangle with text and graphics inside.</p>
<dl class="options">
<dt><b class="option">background</b> colour</dt>
<dd><p>Set the colour of the background (the default colour is white).
Set to the empty string for a transparant legend.</p></dd>
<dt><b class="option">border</b> colour</dt>
<dd><p>Set the colour of the border (the default colour is black). Set to the
empty string if you do not want a border.</p></dd>
<dt><b class="option">canvas</b> c</dt>
<dd><p>Draw the legend in a different canvas widget. This gives you the freedom
to position the legend outside the actual plot.</p></dd>
<dt><b class="option">font</b> font</dt>
<dd><p>Set the font used to draw the text next to the symbol.</p></dd>
<dt><b class="option">legendtype</b></dt>
<dd><p>Override the type of the legend, that is pre-defined for the current type of
plot. May be one of: rectangle or line.</p></dd>
<dt><b class="option">position</b> corner</dt>
<dd><p>Set the position of the legend. May be one of: top-left, top-right,
bottom-left or bottom-right. (Default value is top-right.)</p></dd>
</dl></dd>
<dt><a name="43"><b class="cmd">$anyplot</b> balloon <i class="arg">x</i> <i class="arg">y</i> <i class="arg">text</i> <i class="arg">dir</i></a></dt>
<dd><p>Add balloon text to the plot (except for 3D plots). The arrow will point
to the given x- and y-coordinates. For xy-graphs and such, the
coordinates are directly related to the axes; for vertical barcharts the
x-coordinate is measured as the number of bars minus 1 and similar for
horizontal barcharts.</p>
<dl class="arguments">
<dt>float <i class="arg">x</i></dt>
<dd><p>X-coordinate of the point that the arrow of the balloon will point to.</p></dd>
<dt>float <i class="arg">y</i></dt>
<dd><p>Y-coordinate of the point that the arrow of the balloon will point to.</p></dd>
<dt>string <i class="arg">text</i></dt>
<dd><p>Text to be drawn in the balloon.</p></dd>
<dt>string <i class="arg">dir</i></dt>
<dd><p>Direction of the arrow, one of: north, north-east, east, south-east,
south, south-west, west or north-west.</p></dd>
</dl></dd>
<dt><a name="44"><b class="cmd">$anyplot</b> balloonconfig <i class="arg">args</i></a></dt>
<dd><p>Configure the balloon text for the plot. The new settings will be used
for the next balloon text.</p>
<dl class="options">
<dt><b class="option">font</b> fontname</dt>
<dd><p>Font to be used for the text</p></dd>
<dt><b class="option">justify</b> left|center|right</dt>
<dd><p>Way to justify multiline text</p></dd>
<dt><b class="option">textcolour</b> colour</dt>
<dd><p>Colour for the text (synonym: textcolor)</p></dd>
<dt><b class="option">background</b> colour</dt>
<dd><p>Background colour for the balloon</p></dd>
<dt><b class="option">outline</b> colour</dt>
<dd><p>Colour of the outline of the balloon</p></dd>
<dt><b class="option">margin</b> value</dt>
<dd><p>Margin around the text (in pixels)</p></dd>
<dt><b class="option">rimwidth</b> value</dt>
<dd><p>Width of the outline of the balloon (in pixels)</p></dd>
<dt><b class="option">arrowsize</b> value</dt>
<dd><p>Length factor for the arrow (in pixels)</p></dd>
</dl></dd>
<dt><a name="45"><b class="cmd">$anyplot</b> plaintext <i class="arg">x</i> <i class="arg">y</i> <i class="arg">text</i> <i class="arg">dir</i></a></dt>
<dd><p>Add plain text to the plot (except for 3D plots). The text is positioned at
the given x- and y-coordinates. For xy-graphs and such, the
coordinates are directly related to the axes; for vertical barcharts the
x-coordinate is measured as the number of bars minus 1 and similar for
horizontal barcharts.</p>
<dl class="arguments">
<dt>float <i class="arg">x</i></dt>
<dd><p>X-coordinate of the text position</p></dd>
<dt>float <i class="arg">y</i></dt>
<dd><p>Y-coordinate of the text position</p></dd>
<dt>string <i class="arg">text</i></dt>
<dd><p>Text to be drawn.</p></dd>
<dt>string <i class="arg">dir</i></dt>
<dd><p>Anchor for the text, one of: north, north-east, east, south-east,
south, south-west, west or north-west.</p></dd>
</dl></dd>
<dt><a name="46"><b class="cmd">$anyplot</b> plaintextconfig <i class="arg">args</i></a></dt>
<dd><p>Configure the plain text annotation for the plot. The new settings will be used
for the next plain text.</p>
<dl class="options">
<dt><b class="option">font</b> fontname</dt>
<dd><p>Font to be used for the text</p></dd>
<dt><b class="option">justify</b> left|center|right</dt>
<dd><p>Way to justify multiline text</p></dd>
<dt><b class="option">textcolour</b> colour</dt>
<dd><p>Colour for the text (synonym: textcolor)</p></dd>
</dl></dd>
<dt><a name="47"><b class="cmd">$anyplot</b> object <i class="arg">itemtype</i> <i class="arg">series</i> <i class="arg">args</i></a></dt>
<dd><p>Draw a canvas item in the plot where the coordinates are scaled using the
coordinate system of the plot. In addition to the standard canvas types, it
also supports circles, dots and crosses.</p>
<p><em>Note:</em> Currently implemented for xy-plots, (vertical and horizontal)
barcharts, and piecharts.</p>
<p><em>Note:</em> To add an entry in the legend for the object, you can use the
<i class="term">dataconfig</i> subcommand with a type &quot;rectangle&quot;. This will cause a rectangle
to be shown.</p>
<dl class="arguments">
<dt>string <i class="arg">itemtype</i> (in)</dt>
<dd><p>Name of a standard canvas item or &quot;circle&quot;, &quot;dot&quot; or &quot;cross&quot;</p></dd>
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>The data series it belongs to, used for setting the default drawing options</p></dd>
<dt>list <i class="arg">args</i> (in)</dt>
<dd><p>List of coordinates and drawing options</p></dd>
</dl></dd>
<dt><a name="48"><b class="cmd">$anyplot</b> deletedata</a></dt>
<dd><p>Remove the lines, symbols and other graphical object associated with the
actual data from the plot.</p>
<p><em>Note:</em> Currently implemented for xy-plots only</p>
<p><em>Note:</em> The existing options for data series and the legend entry are
kept as they were.</p>
<p><em>Note:</em> Currently there are side effects if the canvas contains more than
one plot.</p></dd>
</dl>
<p><em>Note:</em> The commands <b class="method">xconfig</b> and <b class="method">yconfig</b> are
currently implemented only for XY-plots
and only the option <b class="option">-format</b> has any effect.</p>
<p>For <em>xy plots</em>, <em>stripcharts</em>, <em>histograms</em> and
<em>time-x-plots</em>:</p>
<dl class="definitions">
<dt><a name="49"><b class="cmd">$xyplot</b> plot <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ycrd</i></a></dt>
<dd><p>Add a data point to the plot.</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the data series the new point belongs to.</p></dd>
<dt>float <i class="arg">xcrd</i> (in)</dt>
<dd><p>X-coordinate of the new point. (For time-x plots this must be valid
date/time that can be read with the <em>clock scan</em> command).</p></dd>
<dt>float <i class="arg">ycrd</i> (in)</dt>
<dd><p>Y-coordinate of the new point.</p></dd>
</dl></dd>
</dl>
<p>For <em>xy plots</em> there is the additional command <em>plotlist</em>,
which is useful for plotting a large amount of data:</p>
<dl class="definitions">
<dt><a name="50"><b class="cmd">$xyplot</b> plotlist <i class="arg">series</i> <i class="arg">xlist</i> <i class="arg">ylist</i> <i class="arg">every</i></a></dt>
<dd><p>Draw a series of data as a whole. If symbols are asked for, draw them only
for every Nth data point.</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the data series the new point belongs to.</p></dd>
<dt>float <i class="arg">xlist</i> (in)</dt>
<dd><p>List of X-coordinates for the data series.</p></dd>
<dt>float <i class="arg">ycrd</i> (in)</dt>
<dd><p>List of Y-coordinates for the data series.</p></dd>
<dt>int <i class="arg">every</i> (in)</dt>
<dd><p>Optional argument stating how often a symbol (if any) should be drawn.
If left out, use a simple heuristic: N = sqrt(number of data points).</p></dd>
</dl></dd>
</dl>
<p><em>Note on histograms:</em></p>
<p>For histograms the x-coordinate that is given is interpreted to be
the x-coordinate of the <em>right</em> side of the bar (or line segment). The first
bar starts at the y-axis on the left. To completely fill the range
of the x-axis, you should draw a bar at the maximum x-coordinate.</p>
<p>For histograms you can also use the <b class="const">plotcumulative</b> command:</p>
<dl class="definitions">
<dt><a name="51"><b class="cmd">$histogram</b> plotcumulative <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ycrd</i></a></dt>
<dd></dd>
</dl>
<p>The arguments mean exactly the same as for the <b class="const">plot</b> command, but
the data are accumulated to the previous values.</p>
<p>For <em>xy plots</em>:</p>
<dl class="definitions">
<dt><a name="52"><b class="cmd">$xyplot</b> trend <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ycrd</i></a></dt>
<dd><p>Draw or update a trend line using the data given sofar.</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the data series the trend line belongs to.</p></dd>
<dt>float <i class="arg">xcrd</i> (in)</dt>
<dd><p>X-coordinate of the new data point</p></dd>
<dt>float <i class="arg">ycrd</i> (in)</dt>
<dd><p>Y-coordinate of the new data point</p></dd>
</dl></dd>
<dt><a name="53"><b class="cmd">$xyplot</b> rchart <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ycrd</i></a></dt>
<dd><p>Draw data in the same way as the plot method, but with two lines added
that indicate the expected range (+/- 3*standard deviation) of the data.</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the data series the data point belongs to.</p></dd>
<dt>float <i class="arg">xcrd</i> (in)</dt>
<dd><p>X-coordinate of the new data point</p></dd>
<dt>float <i class="arg">ycrd</i> (in)</dt>
<dd><p>Y-coordinate of the new data point</p></dd>
</dl></dd>
<dt><a name="54"><b class="cmd">$xyplot</b> interval <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ymin</i> <i class="arg">ymax</i> <span class="opt">?ycentr?</span></a></dt>
<dd><p>Add a vertical error interval to the plot. The interval is drawn from
ymin to ymax. If the ycentr argument is given, a symbol is drawn at that
position.</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the data series the interval belongs to.</p></dd>
<dt>float <i class="arg">xcrd</i> (in)</dt>
<dd><p>X-coordinate of the interval</p></dd>
<dt>float <i class="arg">ymin</i> (in)</dt>
<dd><p>Minimum y-coordinate of the interval.</p></dd>
<dt>float <i class="arg">ymax</i> (in)</dt>
<dd><p>Maximum y-coordinate of the interval.</p></dd>
<dt>float <i class="arg">ycentr</i> (in)</dt>
<dd><p>Y-coordinate to draw the symbol at (optional)</p></dd>
</dl></dd>
<dt><a name="55"><b class="cmd">$xyplot</b> box-and-whiskers <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ycrd</i></a></dt>
<dd><p>Draw a box and whiskers in the plot. If the argument <i class="term">xcrd</i> is a
list of
several values and the argument <i class="term">ycrd</i> is a single value, a
horizontal
box is drawn with the quartiles determined from the list of values
contained in <i class="term">xcrd</i>.</p>
<p>If, instead, the argument <i class="term">ycrd</i> contains a list of several values
and the argument <i class="term">xcrd</i> a single value, then a vertical box is
drawn and the quartiles are determined from <i class="term">ycrd</i>. (There must be
exactly one list of several values. Otherwise an error is reported.)</p>
<p>The option -boxwidth to the dataconfig command determines the width (or
height) of the box (default: 10 pixels).</p>
<p>The option -whiskers to the dataconfig command determines whether the
whiskers are drawn to the extreme values (value: extremes), to 1.5
times the interquartile range (value: IQR or iqr), or not at all (value: none).
If the value is 'IQR' (uppercase), then
also extreme values will be shown (from 1.5 to 3 times the IQR as dots,
above 3 times IQR as stars). If the value is 'iqr' (lowercase) no extreme
values will be shown (default value: IQR).</p>
<p>The option -whiskerwidth to the dataconfig command determines the thickness of the line
that draws the whiskers (default: 1 pixel).</p>
<p>The option -mediancolour to the dataconfig command determines the
colour of the line used to draw the median within the box (default: same as -colour).</p>
<p>The option -medianwidth to the dataconfig command determines the thickness of the line
that draws the median within the box (default: 1 pixel).</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the data series the box-and-whiskers belongs to.</p></dd>
<dt>float <i class="arg">xcrd</i> (in)</dt>
<dd><p>X-coordinate of the box or a list of values.</p></dd>
<dt>float <i class="arg">ymin</i> (in)</dt>
<dd><p>Y-coordinate of the box or a list of values.</p></dd>
</dl>
<p>The box ends at the 1st and 3rd quartile, while the whiskers by default
are plotted to span 1.5 IQR (interquartile range) from the 1st and 3rd quartile.</p></dd>
<dt><a name="56"><b class="cmd">$xyplot</b> vector <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ycrd</i> <i class="arg">ucmp</i> <i class="arg">vcmp</i></a></dt>
<dd><p>Draw a vector in the plot. The vector can be given as either cartesian
coordinates or as length/angle, where the angle is in degrees and is
interpreted according to the mathematical convention or the nautical.
(See the vectorconfig subcommand)</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the series the vector belongs to. Determines the appearance and
interpretation.</p></dd>
<dt>float <i class="arg">xcrd</i> (in)</dt>
<dd><p>X-coordinate of the point where the arrow appears</p></dd>
<dt>float <i class="arg">ycrd</i> (in)</dt>
<dd><p>Y-coordinate of the point where the arrow appears</p></dd>
<dt>float <i class="arg">ucmp</i> (in)</dt>
<dd><p>X-component or the length of the vector</p></dd>
<dt>float <i class="arg">ycentr</i> (in)</dt>
<dd><p>Y-component or the angle of the vector</p></dd>
</dl></dd>
<dt><a name="57"><b class="cmd">$xyplot</b> vectorconfig <i class="arg">series</i> <b class="option">-option</b> <i class="arg">value</i> ...</a></dt>
<dd><p>]
Set the vector drawing options for a particular series</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the series the vector belongs to.</p></dd>
</dl>
<p>The options can be one of the following:</p>
<dl class="options">
<dt><b class="option">colour</b></dt>
<dd><p>The colour of the arrow (default: black; synonym: color)</p></dd>
<dt><b class="option">scale</b> value</dt>
<dd><p>The scale factor used to convert the length of the
arrow into a number of pixels (default: 1.0)</p></dd>
<dt><b class="option">centred</b> onoff</dt>
<dd><p>Logical value indicating that the xy-coordinates
are to be used as the start of the arrow or as the centre (default: 0;
synonym: centered)</p></dd>
<dt><b class="option">type</b> keyword</dt>
<dd><p>Interpretation of the vector components. Can be &quot;cartesian&quot;
(default), in which case the x- and y-components are expected, &quot;polar&quot;
(the angle 0 coincides with the positive x-axis, 90 coincides with the
positive y-axis) or &quot;nautical&quot; (0 is &quot;north&quot; and 90 is &quot;east&quot;).</p></dd>
</dl></dd>
<dt><a name="58"><b class="cmd">$xyplot</b> dot <i class="arg">series</i> <i class="arg">xcrd</i> <i class="arg">ycrd</i> <i class="arg">value</i></a></dt>
<dd><p>Draw a dot in the plot. The size and colour is determined by the value
and by the options set for the series it belongs to.
(See the dotconfig subcommand)</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the series the dot belongs to. Determines size and colour</p></dd>
<dt>float <i class="arg">xcrd</i> (in)</dt>
<dd><p>X-coordinate of the point where the arrow appears</p></dd>
<dt>float <i class="arg">ycrd</i> (in)</dt>
<dd><p>Y-coordinate of the point where the arrow appears</p></dd>
<dt>float <i class="arg">value</i> (in)</dt>
<dd><p>Value determining size and colour</p></dd>
</dl></dd>
<dt><a name="59"><b class="cmd">$xyplot</b> dotconfig <i class="arg">series</i> <b class="option">-option</b> <i class="arg">value</i> ...</a></dt>
<dd><p>]
Set the dot drawing options for a particular series</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the series the dot belongs to.</p></dd>
</dl>
<p>The options can be one of the following:</p>
<dl class="options">
<dt><b class="option">colour</b></dt>
<dd><p>The colour of the dot if no scaling is used or the value exceeds the
last limit of the classes.</p></dd>
<dt><b class="option">scale</b> value</dt>
<dd><p>The scale factor used to convert the value into the radius of the dot
in pixels (default: 1.0)</p></dd>
<dt><b class="option">radius</b> value</dt>
<dd><p>The default radius of the dots, used if there is no scaling by value
(in pixels; default: 3)</p></dd>
<dt><b class="option">scalebyvalue</b> onoff</dt>
<dd><p>Determines whether the dots all have the same size or a size depending
on the given value (default: on).</p></dd>
<dt><b class="option">outline</b> onoff</dt>
<dd><p>Draw a black circle around the dot or not (default: on)</p></dd>
<dt><b class="option">classes</b> list</dt>
<dd><p>Set the limits and the corresponding colours. For instance:</p>
<pre class="example">
    $xyplot series1 -classes {0 blue 1 green} -colour red
</pre>
<p>will cause a blue dot to be drawn for values smaller than 0, a green dot
for values larger/equal 0 but lower than 1 and a red dot for values
larger/equal 1.</p></dd>
<dt><b class="option">3deffect</b> onoff</dt>
<dd><p>Show a highlight in the dots, to mimick a 3D effect (default: off)</p>
<p>If there is no list of classes for the particular series, the dots are
scaled by the value.</p>
<p>You can combine the colouring by value and the scaling by value by
setting a list of classes and setting the <em>scalebyvalue</em> option on.</p></dd>
</dl></dd>
<dt><a name="60"><b class="cmd">$xyplot</b> contourlines <i class="arg">xcrd</i> <i class="arg">ycrd</i> <i class="arg">values</i> <span class="opt">?classes?</span></a></dt>
<dd><p>Draw contour lines for the values given on the grid. The grid is defined
by the xcrd and ycrd arguments. The xcrd argument (resp. ycrd)
is expected to be a matrix, implemented as a list of lists which gives the
x-coordinates (resp. y-coordinates) of the grid cell corners.
The function values are given at these corners.
The number of rows in xvec (resp. yvec) is ny and each row contains nx values
so that the total number of values in xvec (resp. yvec) is nx * ny.
The classes determine which contour lines are drawn. If a value on one of
the corners is missing, the contour lines in that cell will not be
drawn.</p>
<p>Entries in the legend are drawn via the <em>legendisolines</em> subcommand.</p>
<dl class="arguments">
<dt>list <i class="arg">xcrd</i> (in)</dt>
<dd><p>List of lists, each value is an x-coordinate for a grid cell corner</p></dd>
<dt>list <i class="arg">ycrd</i> (in)</dt>
<dd><p>List of lists, each value is an y-coordinate for a grid cell corner</p></dd>
<dt>list <i class="arg">values</i> (in)</dt>
<dd><p>List of lists, each value is the value at a grid cell corner</p></dd>
<dt>list <i class="arg">classes</i> (in)</dt>
<dd><p>List of class values or a list of lists of two elements (each inner list
the class value and the colour to be used). If empty or missing, the
classes are determined automatically.</p>
<p><em>Note:</em> The class values must enclose the whole range of values.
<em>Note:</em> The xcrd argument is generally made of nypoints identical rows, while
each row of ycrd is made with one single value.</p></dd>
</dl></dd>
<dt><a name="61"><b class="cmd">$xyplot</b> contourlinesfunctionvalues <i class="arg">xvec</i> <i class="arg">yvec</i> <i class="arg">valuesmat</i> <span class="opt">?classes?</span></a></dt>
<dd><p>Draw contour lines for the values given on the grid. The grid is defined
by the xvec and yvec arguments. Here, xvec (resp. yvec) is a list of x-coordinates
(resp. y-coordinates). The number of values in xvec (resp. yvec) is the number of points in
the x-coordinate (resp. y-coordinate).
The function values are given at these corners. The
classes determine which contour lines are drawn. If a value on one of
the corners is missing, the contour lines in that cell will not be
drawn.</p>
<p>Entries in the legend are drawn via the <em>legendisolines</em> subcommand.</p>
<dl class="arguments">
<dt>list <i class="arg">xcrd</i> (in)</dt>
<dd><p>List of x-coordinates in increasing order.</p></dd>
<dt>list <i class="arg">ycrd</i> (in)</dt>
<dd><p>List y-coordinates in increasing order.</p></dd>
<dt>list <i class="arg">valuesmat</i> (in)</dt>
<dd><p>List of lists, each value is the value at a grid cell corner.
The total number of values is valuesmat is nx * ny.</p></dd>
<dt>list <i class="arg">classes</i> (in)</dt>
<dd><p>List of class values or a list of lists of two elements (each inner list
the class value and the colour to be used). If empty or missing, the
classes are determined automatically.</p>
<p><em>Note:</em> The class values must enclose the whole range of values.</p></dd>
</dl></dd>
<dt><a name="62"><b class="cmd">$xyplot</b> contourfill <i class="arg">xcrd</i> <i class="arg">ycrd</i> <i class="arg">values</i> <span class="opt">?classes?</span></a></dt>
<dd><p>Draw filled contours for the values given on the grid. (The use of this
method is identical to the &quot;contourlines&quot; method).</p>
<p>Entries in the legend are drawn via the <em>legendshades</em> subcommand.</p></dd>
<dt><a name="63"><b class="cmd">$xyplot</b> contourbox <i class="arg">xcrd</i> <i class="arg">ycrd</i> <i class="arg">values</i> <span class="opt">?classes?</span></a></dt>
<dd><p>Draw the cells as filled quadrangles. The colour is determined from
the average of the values on all four corners.</p>
<p>Entries in the legend are drawn via the <em>legendshades</em> subcommand.</p></dd>
<dt><a name="64"><b class="cmd">$xyplot</b> colorMap <i class="arg">colours</i></a></dt>
<dd><p>Set the colours to be used with the contour methods. The argument is
either a predefined colourmap (grey/gray, jet, hot or cool)
or a list of colours. When selecting the colours for actually drawing the
contours, the given colours will be interpolated (based on the HLS scheme).</p>
<dl class="arguments">
<dt>list <i class="arg">colours</i> (in)</dt>
<dd><p>List of colour names or colour values or one of the predefined maps:</p>
<ul class="itemized">
<li><p>grey or gray: gray colours from dark to light</p></li>
<li><p>jet: rainbow colours</p></li>
<li><p>hot: colours from yellow via red to darkred</p></li>
<li><p>cool: colours from cyan via blue to magenta</p></li>
</ul></dd>
</dl></dd>
<dt><a name="65"><b class="cmd">$xyplot</b> legendisolines <i class="arg">values</i> <i class="arg">classes</i></a></dt>
<dd><p>Add the contour classes to the legend as coloured lines. The text indicates the
values.</p>
<dl class="arguments">
<dt>list <i class="arg">values</i> (in)</dt>
<dd><p>The list of values as used for the actual drawing. This argument is used only
if the list of classes is empty.</p></dd>
<dt>list <i class="arg">values</i> (in)</dt>
<dd><p>The list of classes as used for the actual drawing.</p></dd>
</dl></dd>
<dt><a name="66"><b class="cmd">$xyplot</b> legendshades <i class="arg">values</i> <i class="arg">classes</i></a></dt>
<dd><p>Add the contour classes to the legend as coloured rectangles. The text indicates the
values.</p>
<dl class="arguments">
<dt>list <i class="arg">values</i> (in)</dt>
<dd><p>The list of values as used for the actual drawing. This argument is used only
if the list of classes is empty.</p></dd>
<dt>list <i class="arg">values</i> (in)</dt>
<dd><p>The list of classes as used for the actual drawing.</p></dd>
</dl></dd>
<dt><a name="67"><b class="cmd">$xyplot</b> grid <i class="arg">xcrd</i> <i class="arg">ycrd</i></a></dt>
<dd><p>Draw the grid cells as lines connecting the (valid) grid points.</p>
<dl class="arguments">
<dt>list <i class="arg">xcrd</i> (in)</dt>
<dd><p>List of lists, each value is an x-coordinate for a grid cell corner</p></dd>
<dt>list <i class="arg">ycrd</i> (in)</dt>
<dd><p>List of lists, each value is an y-coordinate for a grid cell corner</p></dd>
</dl></dd>
<dt><a name="68"><b class="cmd">$xyplot</b> xband <i class="arg">ymin</i> <i class="arg">ymax</i></a></dt>
<dd><p>Draw a light grey band in the plot, ranging over the full x-axis. This
can be used to indicate a &quot;typical&quot; range for the data.</p>
<dl class="arguments">
<dt>float <i class="arg">ymin</i> (in)</dt>
<dd><p>Lower bound for the band</p></dd>
<dt>float <i class="arg">ymax</i> (in)</dt>
<dd><p>Upper bound for the band</p></dd>
</dl></dd>
<dt><a name="69"><b class="cmd">$xyplot</b> yband <i class="arg">xmin</i> <i class="arg">xmax</i></a></dt>
<dd><p>Draw a light grey band in the plot, ranging over the full y-axis. This
can be used to indicate a &quot;typical&quot; range for the data.</p>
<dl class="arguments">
<dt>float <i class="arg">xmin</i> (in)</dt>
<dd><p>Lower bound for the band</p></dd>
<dt>float <i class="arg">xmax</i> (in)</dt>
<dd><p>Upper bound for the band</p></dd>
</dl></dd>
<dt><a name="70"><b class="cmd">$xyplot</b> labeldot <i class="arg">x</i> <i class="arg">y</i> <i class="arg">text</i> <i class="arg">orient</i></a></dt>
<dd><p>Draw a label and a symbol in the plot. The label will appear near the
symbol. The label will be drawn in grey, so as not to be too
conspicuous.</p>
<p>You can configure the appearance of the symbol by using the data series
name &quot;labeldot&quot;:
<i class="term">$w dataconfig labeldot -colour red -type symbol -symbol dot</i></p>
<dl class="arguments">
<dt>float <i class="arg">x</i> (in)</dt>
<dd><p>X-coordinate of the symbol to be drawn</p></dd>
<dt>float <i class="arg">y</i> (in)</dt>
<dd><p>Y-coordinate of the symbol to be drawn</p></dd>
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>Text for the label</p></dd>
<dt>string <i class="arg">orient</i> (in)</dt>
<dd><p>Optional orientation (one of w, e, n, s) defining the position of the
label with respect to the symbol. It defaults to w (so the label
appears left of the symbol).</p></dd>
</dl></dd>
</dl>
<p>For <em>polar plots</em>:</p>
<dl class="definitions">
<dt><a name="71"><b class="cmd">$polarplot</b> plot <i class="arg">series</i> <i class="arg">radius</i> <i class="arg">angle</i></a></dt>
<dd><p>Add a data point to the polar plot.</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the data series the new point belongs to.</p></dd>
<dt>float <i class="arg">radius</i> (in)</dt>
<dd><p>Radial coordinate of the new point.</p></dd>
<dt>float <i class="arg">angle</i> (in)</dt>
<dd><p>Angular coordinate of the new point (in degrees).</p></dd>
</dl></dd>
</dl>
<p>For <em>wind rose diagrams</em>:</p>
<dl class="definitions">
<dt><a name="72"><b class="cmd">$windrose</b> plot <i class="arg">data</i> <i class="arg">colour</i></a></dt>
<dd><p>Draw the data contained in the <i class="term">data</i> argument. The data are added to
the existing spokes towards the outer circle.</p>
<dl class="arguments">
<dt>list <i class="arg">data</i> (in)</dt>
<dd><p>List of data (the length should correspond to the number of sectors)</p></dd>
<dt>string <i class="arg">colour</i></dt>
<dd><p>Colour in which the new segments will be drawn</p></dd>
</dl></dd>
</dl>
<p>For <em>3D plots</em>:</p>
<dl class="definitions">
<dt><a name="73"><b class="cmd">$plot3d</b> plotfunc <i class="arg">function</i></a></dt>
<dd><p>Plot a function defined over two variables <b class="variable">x</b> and <b class="variable">y</b>.
The resolution is determined by the set grid sizes (see the method
<b class="method">gridsize</b> for more information).</p>
<dl class="arguments">
<dt>string <i class="arg">function</i> (in)</dt>
<dd><p>Name of the procedure that calculates the z-value for the given x and
y coordinates. The procedure has to accept two float arguments (x is
first argument, y is second) and return a floating-point value.</p></dd>
</dl></dd>
<dt><a name="74"><b class="cmd">$plot3d</b> plotfuncont <i class="arg">function</i> <i class="arg">contours</i></a></dt>
<dd><p>Plot a function defined over two variables <b class="variable">x</b> and <b class="variable">y</b> using
the contour levels in <b class="variable">contours</b> to colour the surface.
The resolution is determined by the set grid sizes (see the method
<b class="method">gridsize</b> for more information).</p>
<dl class="arguments">
<dt>string <i class="arg">function</i> (in)</dt>
<dd><p>Name of the procedure that calculates the z-value for the given x and
y coordinates. The procedure has to accept two float arguments (x is
first argument, y is second) and return a floating-point value.</p></dd>
<dt>list <i class="arg">contours</i> (in)</dt>
<dd><p>List of values in ascending order that represent the contour levels
(the boundaries between the colours in the contour map).</p></dd>
</dl></dd>
<dt><a name="75"><b class="cmd">$plot3d</b> gridsize <i class="arg">nxcells</i> <i class="arg">nycells</i></a></dt>
<dd><p>Set the grid size in the two directions. Together they determine how
many polygons will be drawn for a function plot.</p>
<dl class="arguments">
<dt>int <i class="arg">nxcells</i> (in)</dt>
<dd><p>Number of grid cells in x direction. Has to be an integer number
greater than zero.</p></dd>
<dt>int <i class="arg">nycells</i> (in)</dt>
<dd><p>Number of grid cells in y direction. Has to be an integer number
greater than zero.</p></dd>
</dl></dd>
<dt><a name="76"><b class="cmd">$plot3d</b> plotdata <i class="arg">data</i></a></dt>
<dd><p>Plot a matrix of data.</p>
<dl class="arguments">
<dt>list <i class="arg">data</i> (in)</dt>
<dd><p>The data to be plotted. The data has to be provided as a nested list
with 2 levels. The outer list contains rows, drawn in y-direction, and
each row is a list whose elements are drawn in x-direction, for the
columns. Example:</p>
<pre class="example">
    set data {
    {1.0 2.0 3.0}
    {4.0 5.0 6.0}
    }
</pre>
</dd>
</dl></dd>
<dt><a name="77"><b class="cmd">$plot3d</b> colours <i class="arg">fill</i> <i class="arg">border</i></a></dt>
<dd><p>Configure the colours to use for polygon borders and inner area.</p>
<dl class="arguments">
<dt>color <i class="arg">fill</i> (in)</dt>
<dd><p>The colour to use for filling the polygons.</p></dd>
<dt>color <i class="arg">border</i> (in)</dt>
<dd><p>The colour to use for the border of the polygons.</p></dd>
</dl></dd>
<dt><a name="78"><b class="cmd">$plot3d</b> ribbon <i class="arg">yzpairs</i></a></dt>
<dd><p>Plot a ribbon based on the pairs of yz-coordinates. The colours for
the ribbon itself and the edge are taken from the colours option.</p>
<dl class="arguments">
<dt>list <i class="arg">yzpairs</i> (in)</dt>
<dd><p>List of pairs of yz-coordinates</p></dd>
</dl></dd>
</dl>
<p>For 3D ribbon plots:</p>
<dl class="definitions">
<dt><a name="79"><b class="cmd">$plot3d</b> plot <i class="arg">yzpairs</i></a></dt>
<dd><p>Plot a ribbon based on the pairs of yz-coordinates. The colours for
the ribbon itself and the edge are taken from the colours option.</p>
<dl class="arguments">
<dt>list <i class="arg">yzpairs</i> (in)</dt>
<dd><p>List of pairs of yz-coordinates</p></dd>
</dl></dd>
</dl>
<p>For <em>xy plots</em>, <em>stripcharts</em>, <em>histograms</em> and <em>polar plots</em>:</p>
<dl class="definitions">
<dt><a name="80"><b class="cmd">$xyplot</b> dataconfig <i class="arg">series</i> <b class="option">-option</b> <i class="arg">value</i> ...</a></dt>
<dd><p>Set the value for one or more options regarding the drawing of data of
a specific series.</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the data series whose configuration we are changing.</p></dd>
</dl>
<p>The following options are allowed:</p>
<dl class="options">
<dt><b class="option">colour</b> c</dt>
<dd></dd>
<dt><b class="option">color</b> c</dt>
<dd><p>The colour to be used when drawing the data series.</p></dd>
<dt><b class="option">type</b> enum</dt>
<dd><p>The drawing mode chosen for the series.
This can be one of <b class="const">line</b>, <b class="const">symbol</b>, or <b class="const">both</b>.</p></dd>
<dt><b class="option">symbol</b> enum</dt>
<dd><p>What kind of symbol to draw. The value of this option is ignored when
the drawing mode <b class="const">line</b> was chosen. This can be one of
<b class="const">plus</b>, <b class="const">cross</b>, <b class="const">circle</b>, <b class="const">up</b> (triangle
pointing up), <b class="const">down</b> (triangle pointing down), <b class="const">dot</b>
(filled circle), <b class="const">upfilled</b> or <b class="const">downfilled</b> (filled
triangles).</p></dd>
<dt><b class="option">radius</b> integer</dt>
<dd><p>The size of the radius of the symbol. The total width of the symbol will be
2 times the radius size. The default radius is 4.</p></dd>
<dt><b class="option">width</b> integer</dt>
<dd><p>The width of the line (if drawn) or the width of the polygon outline (if -filled).</p></dd>
<dt><b class="option">filled</b> enum</dt>
<dd><p>Whether to fill the area above or below the data line or not. Can be one
of: <b class="const">no</b>, <b class="const">up</b> or <b class="const">down</b> (<span class="sectref"><a href="#section7">SPECIAL EFFECTS</a></span>)</p></dd>
<dt><b class="option">fillcolour</b> colour</dt>
<dd><p>Colour to use when filling the area associated with the data line.</p></dd>
<dt><b class="option">style</b> enum</dt>
<dd><p>The style to be used for histograms:</p>
<ul class="itemized">
<li><p><b class="const">filled</b>: Fill the area under the data points with bars (default)</p></li>
<li><p><b class="const">spike</b>: Draw vertical lines from the y-axis (lower boundary) to the data point</p></li>
<li><p><b class="const">symbol</b>: Draw a symbol at the data point</p></li>
<li><p><b class="const">plateau</b>: Draw a horizontal line at the height of the data point</p></li>
<li><p><b class="const">stair</b>: Draw a continuous stair-like line connecting the data points</p></li>
</ul></dd>
</dl></dd>
</dl>
<p>For <em>piecharts</em> and <em>spiral pies</em>:</p>
<dl class="definitions">
<dt><a name="81"><b class="cmd">$pie</b> plot <i class="arg">data</i></a></dt>
<dd><p>Fill a piechart.</p>
<dl class="arguments">
<dt>list <i class="arg">data</i> (in)</dt>
<dd><p>A list of pairs (labels and values). The values determine the relative
size of the circle segments. The labels are drawn beside the circle.</p></dd>
</dl></dd>
<dt><a name="82"><b class="cmd">$pie</b> colours <i class="arg">colour1</i> <i class="arg">colour2</i> ...</a></dt>
<dd><p>Set the colours to be used.</p>
<dl class="arguments">
<dt>color <i class="arg">colour1</i> (in)</dt>
<dd><p>The first colour.</p></dd>
<dt>color <i class="arg">colour2</i> (in)</dt>
<dd><p>The second colour, and so on.</p></dd>
</dl></dd>
<dt><a name="83"><b class="cmd">$pie</b> explode <i class="arg">segment</i></a></dt>
<dd><p>Explode a segment (that is: move one segment out of the circle). If the segment is
indicated as &quot;auto&quot;, then you can click on a segment. This will be exploded instead of
any previously exploded segment.</p>
<dl class="arguments">
<dt>int <i class="arg">segment</i></dt>
<dd><p>The segment to be exploded or &quot;auto&quot; if you want to do this interactively.</p></dd>
</dl></dd>
</dl>
<p>For <em>radial charts</em>:</p>
<dl class="definitions">
<dt><a name="84"><b class="cmd">$radial</b> plot <i class="arg">data</i> <i class="arg">colour</i> <i class="arg">thickness</i></a></dt>
<dd><p>Draw a new line in the radial chart</p>
<dl class="arguments">
<dt>list <i class="arg">data</i> (in)</dt>
<dd><p>A list of data (one for each spoke). The values determine the distance
from the centre of the line connecting the spokes.</p></dd>
<dt>color <i class="arg">colour</i> (in)</dt>
<dd><p>The colour for the line.</p></dd>
<dt>int <i class="arg">thickness</i> (in)</dt>
<dd><p>An optional argument for the thickness of the line.</p></dd>
</dl></dd>
<dt><a name="85"><b class="cmd">$pie</b> colours <i class="arg">colour1</i> <i class="arg">colour2</i> ...</a></dt>
<dd><p>Set the colours to be used.</p>
<dl class="arguments">
<dt>color <i class="arg">colour1</i> (in)</dt>
<dd><p>The first colour.</p></dd>
<dt>color <i class="arg">colour2</i> (in)</dt>
<dd><p>The second colour, and so on.</p></dd>
</dl></dd>
</dl>
<p>For <em>vertical barcharts</em>:</p>
<dl class="definitions">
<dt><a name="86"><b class="cmd">$barchart</b> plot <i class="arg">series</i> <i class="arg">ydata</i> <i class="arg">colour</i> <span class="opt">?dir?</span> <span class="opt">?brightness?</span></a></dt>
<dd><p>Add a data series to a barchart.</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the series the values belong to.</p></dd>
<dt>list <i class="arg">ydata</i> (in)</dt>
<dd><p>A list of values, one for each x-axis label.</p></dd>
<dt>color <i class="arg">colour</i> (in)</dt>
<dd><p>The colour of the bars.</p></dd>
<dt>string <i class="arg">dir</i> (in)</dt>
<dd><p>If given, &quot;top-down&quot; or &quot;bottom-up&quot;, to indicate the direction in which the colour changes.
(If not given, a uniform colour is used).</p></dd>
<dt>string <i class="arg">brightness</i> (in)</dt>
<dd><p>If given, &quot;bright&quot; or &quot;dark&quot; (defaulting to &quot;bright&quot;). The colour will change to respectively
white or black, depending on the direction.</p></dd>
</dl></dd>
<dt><a name="87"><b class="cmd">$barchart</b> config <b class="option">-option</b> <i class="arg">value</i> ...</a></dt>
<dd><p>Set options for drawing the bars.</p>
<dl class="options">
<dt><b class="option">showvalues</b> boolean</dt>
<dd><p>Whether to show the values or not (above the bars)</p></dd>
<dt><b class="option">valuefont</b> newfont</dt>
<dd><p>Name of the font to use for the values</p></dd>
<dt><b class="option">valuecolour</b> colour</dt>
<dd><p>Colour for the values</p></dd>
<dt><b class="option">valueformat</b> format</dt>
<dd><p>Format string to use for formatting the values</p></dd>
</dl></dd>
</dl>
<p>For <em>horizontal barcharts</em>:</p>
<dl class="definitions">
<dt><a name="88"><b class="cmd">$barchart</b> plot <i class="arg">series</i> <i class="arg">xdata</i> <i class="arg">colour</i> <span class="opt">?dir?</span> <span class="opt">?brightness?</span></a></dt>
<dd><p>Add a data series to a barchart.</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the series the values belong to.</p></dd>
<dt>list <i class="arg">xdata</i> (in)</dt>
<dd><p>A list of values, one for each y-axis label.</p></dd>
<dt>color <i class="arg">colour</i> (in)</dt>
<dd><p>The colour of the bars.</p></dd>
<dt>string <i class="arg">dir</i> (in)</dt>
<dd><p>If given, &quot;left-right&quot; or &quot;right-left&quot;, to indicate the direction in which the colour changes.
(If not given, a uniform colour is used).</p></dd>
<dt>string <i class="arg">brightness</i> (in)</dt>
<dd><p>If given, &quot;bright&quot; or &quot;dark&quot; (defaulting to &quot;bright&quot;). The colour will change to respectively
white or black, depending on the direction.</p></dd>
</dl></dd>
<dt><a name="89"><b class="cmd">$barchart</b> config <b class="option">-option</b> <i class="arg">value</i> ...</a></dt>
<dd><p>Set options for drawing the bars.</p>
<dl class="options">
<dt><b class="option">showvalues</b> boolean</dt>
<dd><p>Whether to show the values or not (to the right of the bars)</p></dd>
<dt><b class="option">valuefont</b> newfont</dt>
<dd><p>Name of the font to use for the values</p></dd>
<dt><b class="option">valuecolour</b> colour</dt>
<dd><p>Colour for the values</p></dd>
<dt><b class="option">valueformat</b> format</dt>
<dd><p>Format string to use for formatting the values</p></dd>
</dl></dd>
</dl>
<p>For <em>3D barcharts</em>:</p>
<dl class="definitions">
<dt><a name="90"><b class="cmd">$barchart</b> plot <i class="arg">label</i> <i class="arg">yvalue</i> <i class="arg">colour</i></a></dt>
<dd><p>Add the next bar to the barchart.</p>
<dl class="arguments">
<dt>string <i class="arg">label</i> (in)</dt>
<dd><p>The label to be shown below the column.</p></dd>
<dt>float <i class="arg">yvalue</i> (in)</dt>
<dd><p>The value that determines the height of the column</p></dd>
<dt>color <i class="arg">colour</i> (in)</dt>
<dd><p>The colour of the column.</p></dd>
</dl></dd>
<dt><a name="91"><b class="cmd">$barchart</b> config <b class="option">-option</b> <i class="arg">value</i> ...</a></dt>
<dd><p>Set one or more configuration parameters. The following options are
supported:</p>
<dl class="options">
<dt><b class="option">usebackground</b> boolean</dt>
<dd><p>Whether to draw walls to the left and to the back of the columns or not</p></dd>
<dt><b class="option">useticklines</b> boolean</dt>
<dd><p>Whether to draw ticklines on the walls or not</p></dd>
<dt><b class="option">showvalues</b> boolean</dt>
<dd><p>Whether to show the values or not</p></dd>
<dt><b class="option">labelfont</b> newfont</dt>
<dd><p>Name of the font to use for labels</p></dd>
<dt><b class="option">labelcolour</b> colour</dt>
<dd><p>Colour for the labels</p></dd>
<dt><b class="option">valuefont</b> newfont</dt>
<dd><p>Name of the font to use for the values</p></dd>
<dt><b class="option">valuecolour</b> colour</dt>
<dd><p>Colour for the values</p></dd>
</dl></dd>
</dl>
<p>For <em>3D ribbon charts</em>:</p>
<dl class="definitions">
<dt><a name="92"><b class="cmd">$ribbon</b> line <i class="arg">xypairs</i> <i class="arg">colour</i></a></dt>
<dd><p>Plot the given xy-pairs as a ribbon in the chart</p>
<dl class="arguments">
<dt>list <i class="arg">xypairs</i> (in)</dt>
<dd><p>The pairs of x/y values to be drawn (the series is drawn as a whole)</p></dd>
<dt>color <i class="arg">colour</i> (in)</dt>
<dd><p>The colour of the ribbon.</p></dd>
</dl></dd>
<dt><a name="93"><b class="cmd">$ribbon</b> area <i class="arg">xypairs</i> <i class="arg">colour</i></a></dt>
<dd><p>Plot the given xy-pairs as a ribbon with a filled area in front. The
effect is that of a box with the data as its upper surface.</p>
<dl class="arguments">
<dt>list <i class="arg">xypairs</i> (in)</dt>
<dd><p>The pairs of x/y values to be drawn (the series is drawn as a whole)</p></dd>
<dt>color <i class="arg">colour</i> (in)</dt>
<dd><p>The colour of the ribbon/area.</p></dd>
</dl></dd>
</dl>
<p>For <em>boxplots</em>:</p>
<dl class="definitions">
<dt><a name="94"><b class="cmd">$boxplot</b> plot <i class="arg">series</i> <i class="arg">label</i> <i class="arg">values</i></a></dt>
<dd><p>Add a box-and-whisker to the plot. The dataconfig command can be used to customize
the box-and-whisker (see the box-and-whiskers command for the xyplot for details).</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the data series the box belongs to</p></dd>
<dt>string <i class="arg">label</i> (in)</dt>
<dd><p>The label along the x- or y-axis to which the data belong</p></dd>
<dt>list <i class="arg">values</i> (in)</dt>
<dd><p>List of raw values, the extent of the box and the whiskers will be
determined from this list.</p></dd>
</dl></dd>
</dl>
<p>For <em>timecharts</em>:</p>
<dl class="definitions">
<dt><a name="95"><b class="cmd">$timechart</b> period <i class="arg">text</i> <i class="arg">time_begin</i> <i class="arg">time_end</i> <i class="arg">colour</i></a></dt>
<dd><p>Add a time period to the chart.</p>
<dl class="arguments">
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>The text describing the period.</p></dd>
<dt>string <i class="arg">time_begin</i> (in)</dt>
<dd><p>Start time of the period.</p></dd>
<dt>string <i class="arg">time_end</i> (in)</dt>
<dd><p>Stop time of the period.</p></dd>
<dt>color <i class="arg">colour</i> (in)</dt>
<dd><p>The colour of the bar (defaults to black).</p></dd>
</dl></dd>
<dt><a name="96"><b class="cmd">$timechart</b> milestone <i class="arg">text</i> <i class="arg">time</i> <i class="arg">colour</i></a></dt>
<dd><p>Add a <i class="term">milestone</i> (represented as an point-down triangle) to the
chart.</p>
<dl class="arguments">
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>The text describing the milestone.</p></dd>
<dt>string <i class="arg">time</i> (in)</dt>
<dd><p>Time at which the milestone must be positioned.</p></dd>
<dt>color <i class="arg">colour</i> (in)</dt>
<dd><p>The colour of the triangle (defaults to black).</p></dd>
</dl></dd>
<dt><a name="97"><b class="cmd">$timechart</b> vertline <i class="arg">text</i> <i class="arg">time</i></a></dt>
<dd><p>Add a vertical line (to indicate the start of the month for instance)
to the chart.</p>
<dl class="arguments">
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>The text appearing at the top (an abbreviation of the
date/time for instance).</p></dd>
<dt>string <i class="arg">time</i> (in)</dt>
<dd><p>Time at which the line must be positioned.</p></dd>
</dl></dd>
<dt><a name="98"><b class="cmd">$timechart</b> hscroll <i class="arg">scrollbar</i></a></dt>
<dd><p>Connect a horizontal scrollbar to the chart. See also the section on
scrolling.</p>
<dl class="arguments">
<dt>widget <i class="arg">scrollbar</i> (in)</dt>
<dd><p>The horizontal scrollbar that is to be connected to the chart</p></dd>
</dl></dd>
<dt><a name="99"><b class="cmd">$timechart</b> vscroll <i class="arg">scrollbar</i></a></dt>
<dd><p>Connect a vertical scrollbar to the chart. See also the section on
scrolling.</p>
<dl class="arguments">
<dt>widget <i class="arg">scrollbar</i> (in)</dt>
<dd><p>The vertical scrollbar that is to be connected to the chart</p></dd>
</dl></dd>
</dl>
<p>For <em>Gantt charts</em>:</p>
<dl class="definitions">
<dt><a name="100"><b class="cmd">$ganttchart</b> task <i class="arg">text</i> <i class="arg">time_begin</i> <i class="arg">time_end</i> <i class="arg">completed</i></a></dt>
<dd><p>Add a task with its period and level of completion to the chart. Returns
a list of canvas items that can be used for further manipulations, like
connecting two tasks.</p>
<dl class="arguments">
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>The text describing the task.</p></dd>
<dt>string <i class="arg">time_begin</i> (in)</dt>
<dd><p>Start time of the task.</p></dd>
<dt>string <i class="arg">time_end</i> (in)</dt>
<dd><p>Stop time of the task.</p></dd>
<dt>float <i class="arg">completed</i> (in)</dt>
<dd><p>The percentage of the task that is completed.</p></dd>
</dl></dd>
<dt><a name="101"><b class="cmd">$ganttchart</b> milestone <i class="arg">text</i> <i class="arg">time</i> <i class="arg">colour</i></a></dt>
<dd><p>Add a <i class="term">milestone</i> (represented as an point-down triangle) to the
chart.</p>
<dl class="arguments">
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>The text describing the milestone.</p></dd>
<dt>string <i class="arg">time</i> (in)</dt>
<dd><p>Time at which the milestone must be positioned.</p></dd>
<dt>color <i class="arg">colour</i> (in)</dt>
<dd><p>The colour of the triangle (defaults to black).</p></dd>
</dl></dd>
<dt><a name="102"><b class="cmd">$ganttchart</b> vertline <i class="arg">text</i> <i class="arg">time</i></a></dt>
<dd><p>Add a vertical line (to indicate the start of the month for instance)
to the chart.</p>
<dl class="arguments">
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>The text appearing at the top (an abbreviation of the
date/time for instance).</p></dd>
<dt>string <i class="arg">time</i> (in)</dt>
<dd><p>Time at which the line must be positioned.</p></dd>
</dl></dd>
<dt><a name="103"><b class="cmd">$ganttchart</b> connect <i class="arg">from</i> <i class="arg">to</i></a></dt>
<dd><p>Add an arrow that connects the <em>from</em> task with the <em>to</em> task.</p>
<dl class="arguments">
<dt>list <i class="arg">from</i> (in)</dt>
<dd><p>The list of items returned by the &quot;task&quot; command that represents the
task from which the arrow starts.</p></dd>
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>The text summarising the tasks</p></dd>
<dt>list <i class="arg">args</i> (in)</dt>
<dd><p>One or more tasks (the lists returned by the &quot;task&quot; command). They are
shifted down to make room for the summary.</p></dd>
<dt>list <i class="arg">to</i> (in)</dt>
<dd><p>The list of items returned by the &quot;task&quot; command that represents the
task at which the arrow ends.</p></dd>
</dl></dd>
<dt><a name="104"><b class="cmd">$ganttchart</b> summary <i class="arg">text</i> <i class="arg">args</i></a></dt>
<dd><p>Add a summary item that spans all the tasks listed. The graphical
representation is a thick bar running from the leftmost task to the
rightmost.</p>
<p>Use this command before connecting the tasks, as the arrow would not be
shifted down!</p>
<dl class="arguments">
<dt>string <i class="arg">text</i> (in)</dt>
<dd><p>The text summarising the tasks</p></dd>
<dt>list <i class="arg">args</i> (in)</dt>
<dd><p>One or more tasks (the lists returned by the &quot;task&quot; command). They are
shifted down to make room for the summary.</p></dd>
</dl></dd>
<dt><a name="105"><b class="cmd">$ganttchart</b> color <i class="arg">keyword</i> <i class="arg">newcolor</i></a></dt>
<dd><p>Set the colour of a part of the Gantt chart. These colours hold for all
items of that type.</p>
<dl class="arguments">
<dt>string <i class="arg">keyword</i> (in)</dt>
<dd><p>The keyword indicates which part of the Gantt chart to change:</p>
<ul class="itemized">
<li><p>description - the colour of the descriptive text</p></li>
<li><p>completed - the colour of the filled bar representing the completed part
of a task</p></li>
<li><p>left - the colour for the part that is not yet completed</p></li>
<li><p>odd - the background colour for the odd entries</p></li>
<li><p>even - the background colour for the even entries</p></li>
<li><p>summary - the colour for the summary text</p></li>
<li><p>summarybar - the colour for the bar for a summary</p></li>
</ul></dd>
<dt>string <i class="arg">newcolor</i> (in)</dt>
<dd><p>The new colour for the chosen items.</p></dd>
</dl></dd>
<dt><a name="106"><b class="cmd">$ganttchart</b> font <i class="arg">keyword</i> <i class="arg">newfont</i></a></dt>
<dd><p>Set the font of a part of the Gantt chart. These fonts hold for all
items of that type.</p>
<dl class="arguments">
<dt>string <i class="arg">keyword</i> (in)</dt>
<dd><p>The keyword indicates which part of the Gantt chart to change:</p>
<ul class="itemized">
<li><p>description - the font used for descriptive text</p></li>
<li><p>summary - the font used for summaries</p></li>
<li><p>scale - the font used for the time scale</p></li>
</ul></dd>
<dt>string <i class="arg">newfont</i> (in)</dt>
<dd><p>The new font for the chosen items.</p></dd>
</dl></dd>
<dt><a name="107"><b class="cmd">$ganttchart</b> hscroll <i class="arg">scrollbar</i></a></dt>
<dd><p>Connect a horizontal scrollbar to the chart. See also the section on
scrolling.</p>
<dl class="arguments">
<dt>widget <i class="arg">scrollbar</i> (in)</dt>
<dd><p>The horizontal scrollbar that is to be connected to the chart</p></dd>
</dl></dd>
<dt><a name="108"><b class="cmd">$ganttchart</b> vscroll <i class="arg">scrollbar</i></a></dt>
<dd><p>Connect a vertical scrollbar to the chart. See also the section on
scrolling.</p>
<dl class="arguments">
<dt>widget <i class="arg">scrollbar</i> (in)</dt>
<dd><p>The vertical scrollbar that is to be connected to the chart</p></dd>
</dl></dd>
</dl>
<p>For <em>isometric plots</em> (to be extended):</p>
<dl class="definitions">
<dt><a name="109"><b class="cmd">$isoplot</b> plot rectangle <i class="arg">x1</i> <i class="arg">y1</i> <i class="arg">x2</i> <i class="arg">y2</i> <i class="arg">colour</i></a></dt>
<dd><p>Plot the outlines of a rectangle.</p>
<dl class="arguments">
<dt>float <i class="arg">x1</i> (in)</dt>
<dd><p>Minimum x coordinate of the rectangle to be drawn.</p></dd>
<dt>float <i class="arg">y1</i> (in)</dt>
<dd><p>Minimum y coordinate of the rectangle.</p></dd>
<dt>float <i class="arg">x2</i> (in)</dt>
<dd><p>Maximum x coordinate of the rectangle to be drawn.</p></dd>
<dt>float <i class="arg">y2</i> (in)</dt>
<dd><p>Maximum y coordinate of the rectangle.</p></dd>
<dt>color <i class="arg">colour</i> (in)</dt>
<dd><p>The colour of the rectangle.</p></dd>
</dl></dd>
<dt><a name="110"><b class="cmd">$isoplot</b> plot filled-rectangle <i class="arg">x1</i> <i class="arg">y1</i> <i class="arg">x2</i> <i class="arg">y2</i> <i class="arg">colour</i></a></dt>
<dd><p>Plot a rectangle filled with the given colour.</p>
<dl class="arguments">
<dt>float <i class="arg">x1</i> (in)</dt>
<dd><p>Minimum x coordinate of the rectangle to be drawn.</p></dd>
<dt>float <i class="arg">y1</i> (in)</dt>
<dd><p>Minimum y coordinate of the rectangle.</p></dd>
<dt>float <i class="arg">x2</i> (in)</dt>
<dd><p>Maximum x coordinate of the rectangle to be drawn.</p></dd>
<dt>float <i class="arg">y2</i> (in)</dt>
<dd><p>Maximum y coordinate of the rectangle.</p></dd>
<dt>color <i class="arg">colour</i> (in)</dt>
<dd><p>The colour of the rectangle.</p></dd>
</dl></dd>
<dt><a name="111"><b class="cmd">$isoplot</b> plot circle <i class="arg">xc</i> <i class="arg">yc</i> <i class="arg">radius</i> <i class="arg">colour</i></a></dt>
<dd><p>Plot the outline of a circle.</p>
<dl class="arguments">
<dt>float <i class="arg">xc</i> (in)</dt>
<dd><p>X coordinate of the circle's centre.</p></dd>
<dt>float <i class="arg">yc</i> (in)</dt>
<dd><p>Y coordinate of the circle's centre.</p></dd>
<dt>color <i class="arg">colour</i> (in)</dt>
<dd><p>The colour of the circle.</p></dd>
</dl></dd>
<dt><a name="112"><b class="cmd">$isoplot</b> plot filled-circle <i class="arg">xc</i> <i class="arg">yc</i> <i class="arg">radius</i> <i class="arg">colour</i></a></dt>
<dd><p>Plot a circle filled with the given colour.</p>
<dl class="arguments">
<dt>float <i class="arg">xc</i> (in)</dt>
<dd><p>X coordinate of the circle's centre.</p></dd>
<dt>float <i class="arg">yc</i> (in)</dt>
<dd><p>Y coordinate of the circle's centre.</p></dd>
<dt>color <i class="arg">colour</i> (in)</dt>
<dd><p>The colour of the circle.</p></dd>
</dl></dd>
</dl>
<p>For <em>tables</em> you can use the following subcommands:</p>
<dl class="definitions">
<dt><a name="113"><b class="cmd">$table</b> row <i class="arg">items</i></a></dt>
<dd><p>Draw a single row of items. The appearance of the items can be
controlled explicitly via the format command.</p>
<dl class="arguments">
<dt>list <i class="arg">items</i> (in)</dt>
<dd><p>List of text items to be drawn, one per column</p></dd>
</dl></dd>
<dt><a name="114"><b class="cmd">$table</b> separator</a></dt>
<dd><p>Draw a horizontal line to separate two rows</p></dd>
<dt><a name="115"><b class="cmd">$table</b> formatcommand <i class="arg">procname</i></a></dt>
<dd><p>Set the procedure that controls the formatting of items. By default
items are simply drawn as centered text.</p>
<dl class="arguments">
<dt>string <i class="arg">procname</i> (in)</dt>
<dd><p>Name of the procedure to be used. Its signature is:</p>
<pre class="example">
proc procname {table widget row column value} {...}
</pre>
<p>Use the cellconfigure subcommand to set the attributes per cell.</p></dd>
</dl></dd>
<dt><a name="116"><b class="cmd">$table</b> cellconfigure <i class="arg">args</i></a></dt>
<dd><p>Set the attributes for the next cell(s) to be drawn.</p>
<dl class="arguments">
<dt>list <i class="arg">args</i> (in)</dt>
<dd><p>Key-value pairs: -background sets the background colour of the cells,
-cell sets the foreground colour, -font sets the text font, -anchor sets
the position of the text within the cell and -justify controls the
layout of multiline text.</p></dd>
</dl></dd>
</dl>
<p>There are a number of public procedures that may be useful in specific
situations: <em>Pro memorie</em>.</p>
</div>
<div id="section4" class="section"><h2><a name="section4">COORDINATE TRANSFORMATIONS</a></h2>
<p>Besides the commands that deal with the plots and charts directly,
there are a number of commands that can be used to convert world
coordinates to pixels and vice versa.
These include:</p>
<dl class="definitions">
<dt><a name="117"><b class="cmd">::Plotchart::viewPort</b> <i class="arg">w</i> <i class="arg">pxmin</i> <i class="arg">pymin</i> <i class="arg">pxmax</i> <i class="arg">pymax</i></a></dt>
<dd><p>Set the viewport for window <i class="arg">w</i>. Should be used in cooperation
with <b class="cmd">::Plotchart::worldCoordinates</b>.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the window (canvas widget) in question.</p></dd>
<dt>float <i class="arg">pxmin</i> (in)</dt>
<dd><p>Left-most pixel coordinate.</p></dd>
<dt>float <i class="arg">pymin</i> (in)</dt>
<dd><p>Top-most pixel coordinate (remember: the vertical pixel coordinate
starts with 0 at the top!).</p></dd>
<dt>float <i class="arg">pxmax</i> (in)</dt>
<dd><p>Right-most pixel coordinate.</p></dd>
<dt>float <i class="arg">pymax</i> (in)</dt>
<dd><p>Bottom-most pixel coordinate.</p></dd>
</dl></dd>
<dt><a name="118"><b class="cmd">::Plotchart::worldCoordinates</b> <i class="arg">w</i> <i class="arg">xmin</i> <i class="arg">ymin</i> <i class="arg">xmax</i> <i class="arg">ymax</i></a></dt>
<dd><p>Set the extreme world coordinates for window <i class="arg">w</i>. The world
coordinates need not be in ascending order (i.e. xmin can be larger
than xmax, so that a reversal of the x-axis is achieved).</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the window (canvas widget) in question.</p></dd>
<dt>float <i class="arg">xmin</i> (in)</dt>
<dd><p>X-coordinate to be mapped to left side of viewport.</p></dd>
<dt>float <i class="arg">ymin</i> (in)</dt>
<dd><p>Y-coordinate to be mapped to bottom of viewport.</p></dd>
<dt>float <i class="arg">xmax</i> (in)</dt>
<dd><p>X-coordinate to be mapped to right side of viewport.</p></dd>
<dt>float <i class="arg">ymax</i> (in)</dt>
<dd><p>Y-coordinate to be mapped to top side of viewport.</p></dd>
</dl></dd>
<dt><a name="119"><b class="cmd">::Plotchart::world3DCoordinates</b> <i class="arg">w</i> <i class="arg">xmin</i> <i class="arg">ymin</i> <i class="arg">zmin</i> <i class="arg">xmax</i> <i class="arg">ymax</i> <i class="arg">zmax</i></a></dt>
<dd><p>Set the extreme three-dimensional world coordinates for window
<i class="arg">w</i>. The world coordinates need not be in ascending order (i.e. xmin
can be larger than xmax, so that a reversal of the x-axis is
achieved).</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the window (canvas widget) in question.</p></dd>
<dt>float <i class="arg">xmin</i> (in)</dt>
<dd><p>X-coordinate to be mapped to front side of the 3D viewport.</p></dd>
<dt>float <i class="arg">ymin</i> (in)</dt>
<dd><p>Y-coordinate to be mapped to left side of the viewport.</p></dd>
<dt>float <i class="arg">zmin</i> (in)</dt>
<dd><p>Z-coordinate to be mapped to bottom of viewport.</p></dd>
<dt>float <i class="arg">xmax</i> (in)</dt>
<dd><p>X-coordinate to be mapped to back side of viewport.</p></dd>
<dt>float <i class="arg">ymax</i> (in)</dt>
<dd><p>Y-coordinate to be mapped to right side of viewport.</p></dd>
<dt>float <i class="arg">zmax</i> (in)</dt>
<dd><p>Z-coordinate to be mapped to top side of viewport.</p></dd>
</dl></dd>
<dt><a name="120"><b class="cmd">::Plotchart::coordsToPixel</b> <i class="arg">w</i> <i class="arg">x</i> <i class="arg">y</i></a></dt>
<dd><p>Return a list of pixel coordinates valid for the given window.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the canvas alias (as returned by [\$anyplot canvas]) in question.</p></dd>
<dt>float <i class="arg">x</i> (in)</dt>
<dd><p>X-coordinate to be mapped.</p></dd>
<dt>float <i class="arg">y</i> (in)</dt>
<dd><p>Y-coordinate to be mapped.</p></dd>
</dl></dd>
<dt><a name="121"><b class="cmd">::Plotchart::coords3DToPixel</b> <i class="arg">w</i> <i class="arg">x</i> <i class="arg">y</i> <i class="arg">z</i></a></dt>
<dd><p>Return a list of pixel coordinates valid for the given window.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the canvas alias (as returned by [\$anyplot canvas]) in question.</p></dd>
<dt>float <i class="arg">x</i> (in)</dt>
<dd><p>X-coordinate to be mapped.</p></dd>
<dt>float <i class="arg">y</i> (in)</dt>
<dd><p>Y-coordinate to be mapped.</p></dd>
<dt>float <i class="arg">y</i> (in)</dt>
<dd><p>Z-coordinate to be mapped.</p></dd>
</dl></dd>
<dt><a name="122"><b class="cmd">::Plotchart::polarCoordinates</b> <i class="arg">w</i> <i class="arg">radmax</i></a></dt>
<dd><p>Set the extreme polar coordinates for window <i class="arg">w</i>. The angle always
runs from 0 to 360 degrees and the radius starts at 0. Hence you only
need to give the maximum radius.
<em>Note:</em> If the viewport is not square, this procedure will not
adjust the extremes, so that would result in an elliptical plot. The
creation routine for a polar plot always determines a square viewport.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the canvas alias (as returned by [\$anyplot canvas]) in question.</p></dd>
<dt>float <i class="arg">radmax</i> (in)</dt>
<dd><p>Maximum radius.</p></dd>
</dl></dd>
<dt><a name="123"><b class="cmd">::Plotchart::polarToPixel</b> <i class="arg">w</i> <i class="arg">rad</i> <i class="arg">phi</i></a></dt>
<dd><p>Wrapper for a call to <b class="cmd">::Plotchart::coordsToPixel</b>, which assumes
the world coordinates and viewport are set appropriately. Converts
polar coordinates to pixel coordinates.
<em>Note:</em> To be useful it should be accompanied by a matching
<b class="cmd">::Plotchart::worldCoordinates</b> procedure. This is automatically
taken care of in the creation routine for polar plots.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the canvas alias (as returned by [\$anyplot canvas]) in question.</p></dd>
<dt>float <i class="arg">rad</i> (in)</dt>
<dd><p>Radius of the point.</p></dd>
<dt>float <i class="arg">phi</i> (in)</dt>
<dd><p>Angle to the positive x-axis.</p></dd>
</dl></dd>
<dt><a name="124"><b class="cmd">::Plotchart::pixelToCoords</b> <i class="arg">w</i> <i class="arg">x</i> <i class="arg">y</i></a></dt>
<dd><p>Return a list of world coordinates valid for the given window.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the canvas alias (as returned by [\$anyplot canvas]) in question.</p></dd>
<dt>float <i class="arg">x</i> (in)</dt>
<dd><p>X-pixel to be mapped.</p></dd>
<dt>float <i class="arg">y</i> (in)</dt>
<dd><p>Y-pixel to be mapped.</p></dd>
</dl></dd>
<dt><a name="125"><b class="cmd">::Plotchart::pixelToIndex</b> <i class="arg">w</i> <i class="arg">x</i> <i class="arg">y</i></a></dt>
<dd><p>Return the index of the pie segment containing the pixel coordinates
(x,y)</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the canvas alias (as returned by [\$anyplot canvas]) in question,
holding a piechart.</p></dd>
<dt>float <i class="arg">x</i> (in)</dt>
<dd><p>X-pixel to be mapped.</p></dd>
<dt>float <i class="arg">y</i> (in)</dt>
<dd><p>Y-pixel to be mapped.</p></dd>
</dl></dd>
</dl>
<p>Furthermore there is a routine to determine &quot;pretty&quot; numbers for use
with an axis:</p>
<dl class="definitions">
<dt><a name="126"><b class="cmd">::Plotchart::determineScale</b> <i class="arg">xmin</i> <i class="arg">xmax</i> <i class="arg">inverted</i></a></dt>
<dd><p>Determine &quot;pretty&quot; numbers from the given range and return a list
containing the minimum, maximum and stepsize that can be used for a
(linear) axis.</p>
<dl class="arguments">
<dt>float <i class="arg">xmin</i> (in)</dt>
<dd><p>Rough minimum value for the scaling</p></dd>
<dt>float <i class="arg">xmax</i> (in)</dt>
<dd><p>Rough maximum value for the scaling.</p></dd>
<dt>boolean <i class="arg">inverted</i> (in)</dt>
<dd><p>Optional argument: if 1, then the returned list produces an
inverted axis. Defaults to 0 (the axis will be from minimum to maximum)</p></dd>
</dl></dd>
<dt><a name="127"><b class="cmd">::Plotchart::determineScaleFromList</b> <i class="arg">values</i> <i class="arg">inverted</i></a></dt>
<dd><p>Determine &quot;pretty&quot; numbers from the given list of values and return a list
containing the minimum, maximum and stepsize that can be used for a
(linear) axis.</p>
<dl class="arguments">
<dt>float <i class="arg">values</i> (in)</dt>
<dd><p>List of values that will be examined. May contain missing values (empty strings)</p></dd>
<dt>boolean <i class="arg">inverted</i> (in)</dt>
<dd><p>Optional argument: if 1, then the returned list produces an
inverted axis. Defaults to 0 (the axis will be from minimum to maximum)</p></dd>
</dl></dd>
</dl>
</div>
<div id="section5" class="section"><h2><a name="section5">MISSING VALUES</a></h2>
<p>Often data that need to be plotted contain gaps - in a series of
measurement data, they can occur because the equipment failed, a sample
was not collected correctly or for many other reasons. The
<em>Plotchart</em> handles these gaps by assuming that one or both
coordinates of such data points are an empty string:</p>
<pre class="example">
    #
    # Create the plot with its x- and y-axes
    #
    set s [::Plotchart::createXYPlot .c {0.0 100.0 10.0} {0.0 100.0 20.0}]
    foreach {x y} {0.0 32.0 10.0 {} 25.0 60.0 78.0 11.0 } {
        $s plot series1 $x $y
    }
</pre>
<p>The effect varies according to the type of plot:</p>
<ul class="itemized">
<li><p>For xy-plots, radial plots and strip charts the missing data point
causes a gap in the line through the points.</p></li>
<li><p>For barchats, missing values are treated as if a value of zero was
given.</p></li>
<li><p>For time charts and Gantt charts missing values cause errors - there is
no use for them there.</p></li>
</ul>
</div>
<div id="section6" class="section"><h2><a name="section6">OTHER OUTPUT FORMATS</a></h2>
<p>Besides output to the canvas on screen, the module is capable, via
<b class="cmd">canvas postscript</b>, of producing PostScript files. One may wonder
whether it is possible to extend this set of output formats and the
answer is &quot;yes&quot;. This section tries to sum up the aspects of using this
module for another sort of output.</p>
<p>One way you can create output files in a different format, is by
examining the contents of the canvas after everything has been drawn and
render that contents in the right form. This is probably the easiest
way, as it involves nothing more than the re-creation of all the
elements in the plot that are already there.</p>
<p>The drawback of that method is that you need to have a display, which is
not always the case if you run a CGI server or something like that.</p>
<p>An alternative is to emulate the canvas command. For this to work, you
need to know which canvas subcommands are used and what for. Obviously,
the <em>create</em> subcommand is used to create the lines, texts and
other items. But also the <em>raise</em> and <em>lower</em> subcommands are
used, because with these the module can influence the drawing order -
important to simulate a clipping rectangle around the axes. (The routine
DrawMask is responsible for this - if the output format supports proper
clipping areas, then a redefinition of this routine might just solve
this).</p>
<p>Furthermore, the module uses the <em>cget</em> subcommand to find out the
sizes of the canvas. A more mundane aspect of this is that the module
currently assumes that the text is 14 pixels high and that 80 pixels in
width suffice for the axis' labels. No &quot;hook&quot; is provided to customise
this.</p>
<p>In summary:</p>
<ul class="itemized">
<li><p>Emulate the <em>create</em> subcommand to create all the items in the
correct format</p></li>
<li><p>Emulate the <em>cget</em> subcommand for the options -width and -height to
allow the correct calculation of the rectangle's position and size</p></li>
<li><p>Solve the problem of <em>raising</em> and <em>lowering</em> the items so
that they are properly clipped, for instance by redefining the
routine DrawMask.</p></li>
<li><p>Take care of the currently fixed text size properties</p></li>
</ul>
</div>
<div id="section7" class="section"><h2><a name="section7">SPECIAL EFFECTS</a></h2>
<p>As an example of some special effects you can achieve, here is the
code for a plot where the area below the data line varies in colour:</p>
<pre class="example">
canvas .c  -background white -width 400 -height 200
pack .c -fill both
set s [::Plotchart::createXYPlot .c {0.0 100.0 10.0} {0.0 100.0 20.0}]
$s background gradient green top-down
$s dataconfig series1 -filled up -fillcolour white
$s plot series1  0.0 20.0
$s plot series1 10.0 20.0
$s plot series1 30.0 50.0
$s plot series1 35.0 45.0
$s plot series1 45.0 25.0
$s plot series1 75.0 55.0
$s plot series1 100.0 55.0
$s plaintext 30.0 60.0 &quot;Peak&quot; south
</pre>
<p>The trick is to fill the background with a colour that changes from
green at the top to white at the bottom. Then the area above the data
line is filled with a white polygon. Thus the green shading varies with
the height of the line.</p>
</div>
<div id="section8" class="section"><h2><a name="section8">ROOM FOR IMPROVEMENT</a></h2>
<p>In this version there are a lot of things that still need to
be implemented:</p>
<ul class="itemized">
<li><p>More robust handling of incorrect calls (right now the procedures may
fail when called incorrectly):</p>
<ul class="itemized">
<li><p>The axis drawing routines can not handle inverse axes right now.</p></li>
<li><p>If the user provides an invalid date/time string, the routines simply
throw an error.</p></li>
</ul>
</li>
</ul>
</div>
<div id="section9" class="section"><h2><a name="section9">RESIZING</a></h2>
<p><b class="package">Plotchart</b> has not been designed to create plots and charts
that keep track of the data that are put in. This means that if an
application needs to allow the user to resize the window holding the
plot or chart, it must take care to redraw the complete plot.</p>
<p>The code below is a simple example of how to do that:</p>
<pre class="example">
package require Plotchart
grid [canvas .c -background white] -sticky news
grid columnconfigure . 0 -weight 1
grid rowconfigure . 0 -weight 1
bind .c &lt;Configure&gt; {doResize}
proc doPlot {} {
    #
    # Clean up the contents (see also the note below!)
    #
    .c delete all
    #
    # (Re)draw the bar chart
    #
    set p [::Plotchart::createBarchart .c {x y z} {0 100 10} 3]
    $p plot R {10 30 40} red
    $p plot G {30 40 60} green
}
proc doResize {} {
    global redo
    #
    # To avoid redrawing the plot many times during resizing,
    # cancel the callback, until the last one is left.
    #
    if { [info exists redo] } {
        after cancel $redo
    }
    set redo [after 50 doPlot]
}</pre>
<p><em>Please note:</em>
The code above will work fine for barcharts and many other types of
plots, but as <b class="package">Plotchart</b> keeps some private information for
xy plots, more is needed in these cases. This actually requires a
command &quot;destroyPlot&quot; to take care of such details. A next version
of <b class="package">Plotchart</b> may have that.</p>
<p>Alternatively, you can use the <b class="package">xyplot</b> package which is built
on top of Plotchart. This package supports zooming in and zooming out,
as well as resizing the plot as a whole. Here is a small demonstration
program:</p>
<pre class="example">
# xyplot_demo.tcl --
#     Demonstration of the xyplot package
#
package require xyplot
set xydata1 {}
set xydata2 {}
set xydata3 {}
set xydata4 {}
for { set i 0 } { $i &lt; 1024 } { incr i } {
    lappend xydata1 [expr {$i-1000}] [expr {$i * sin($i/4096.0*3.1415*2) * (sin($i/256.0*3.1415*2))}]
    lappend xydata2 [expr {$i-1000}] [expr {$i * sin($i/4096.0*3.1415*2) * (sin($i/256.0*3.1415*2) + 0.25 * sin($i/256.0*3.1415*6))}]
    lappend xydata3 [expr {$i-1000}] [expr {$i * sin($i/4096.0*3.1415*2) * (sin($i/256.0*3.1415*2) + 0.25 * sin($i/256.0*3.1415*6) + 0.0625 * sin($i/256.0*3.1415*10))}]
    lappend xydata4 [expr {$i-1000}] [expr {$i * sin($i/4096.0*3.1415*2) * (sin($i/256.0*3.1415*2) + 0.25 * sin($i/256.0*3.1415*6) + 0.0625 * sin($i/256.0*3.1415*10) + 0.015625 * sin($i/256.0*3.1415*14))}]
}
set xyp [xyplot .xyp -xformat &quot;%5.0f&quot; -yformat &quot;%5.0f&quot; -title &quot;XY plot testing&quot; -background gray90]
pack $xyp -fill both -expand true
set s1 [$xyp add_data sf1 $xydata1 -legend &quot;Serie 1 data&quot; -color red]
set s2 [$xyp add_data sf2 $xydata2 -legend &quot;Serie 2 data&quot; -color green]
set s3 [$xyp add_data sf3 $xydata3 -legend &quot;Serie 3 data&quot; -color blue]
set s4 [$xyp add_data sf4 $xydata4 -legend &quot;Serie 4 data&quot; -color orange]
set xyp2 [xyplot .xyp2 -xticks 8 -yticks 4 -yformat %.2f -xformat %.0f]
pack $xyp2 -fill both -expand true
set s1 [$xyp2 add_data sf1 $xydata1]
set s2 [$xyp2 add_data sf2 $xydata2]
set s3 [$xyp2 add_data sf3 $xydata3]
set s4 [$xyp2 add_data sf4 $xydata4]
</pre>
<p>Zooming in is done by selecting a rectangle with the left mouse button
pressed. Zooming out is done by pressing the right mouse button. If you
resize the window, the canvases inside are resized too. If you zoom in,
you can scroll the plot via the scrollbars that are automatically
attached.</p>
</div>
<div id="section10" class="section"><h2><a name="section10">ZOOMING IN</a></h2>
<p>As the Plotchart package does not keep track of the data itself,
rescaling an existing plot - for instance when zooming in - would have
to be done by redefining the plot and redrawing the data. However, the
canvas widget offers a way out by scaling and moving items, so that
zooming in becomes a bit simpler.</p>
<p>Whether zooming is indeed useful, depends on the type of plot. Currently
it is defined for XY-plots only. The method is called &quot;rescale&quot; and
simply redraws the axes and scales and moves the data items so that they
conform to the new axes. The drawback is that any symbols are scaled by
the same amount. The rescale method works best for plots that only have
lines, not symbols.</p>
<p>The method works very simply:</p>
<pre class="example">
   $p rescale {newxmin newxmax newxstep} {newymin newymax newystep}
</pre>
</div>
<div id="section11" class="section"><h2><a name="section11">CONFIGURATION OPTIONS</a></h2>
<p>The commands <b class="cmd">plotconfig</b> and <b class="cmd">plotstyle</b> can be used to set all
manner of options. The syntax is:</p>
<dl class="definitions">
<dt><a name="128"><b class="cmd">::Plotchart::plotconfig</b> <i class="arg">charttype</i> <i class="arg">component</i> <i class="arg">property</i> <i class="arg">value</i></a></dt>
<dd><p>Set a new value for the property of a component in a particular chart or
plot type or query its current value. Changed properties only have effect for
the consecutive plots, not for the ones already created. Each argument is optional.</p>
<p><em>Note:</em> The <b class="cmd">plotstyle</b> command offers a more
flexible way to control the configuration options.</p>
<dl class="arguments">
<dt>string <i class="arg">charttype</i> (in)</dt>
<dd><p>The type of chart or plot (see the configuration type that is mentioned
for each create command). If not given or empty, a list of chart types
is returned. If it is given, the properties for that particular type are
used.</p></dd>
<dt>string <i class="arg">component</i> (in)</dt>
<dd><p>The component of the plot/chart: leftaxis, rightaxis, background, margin
and so on. If not given or empty, a list of components is returned. If
it is given, the properties for that particular component will be set
for that particular type of chart.</p></dd>
<dt>string <i class="arg">property</i> (in)</dt>
<dd><p>The property of the component of the plot/chart: textcolor, thickness of
the axis line, etc. If not given or empty, a list of properties is returned. If
it is given, that particular property for that particular component
will be set for that particular type of chart.</p></dd>
<dt>string <i class="arg">value</i> (in)</dt>
<dd><p>The new value for the property. If empty, the current value is returned.
If the value is &quot;default&quot;, the default value will be restored.</p>
<p>Note, that in some cases an empty value is useful. Use &quot;none&quot; in this
case - it can be useful for colours and for formats.</p></dd>
</dl></dd>
<dt><a name="129"><b class="cmd">::Plotchart::plotstyle</b> <i class="arg">subcmd</i> <i class="arg">style</i> <i class="arg">args</i></a></dt>
<dd><p>Manipulate the <em>style</em> in which subsequent plots will be drawn. The
default style is &quot;default&quot;, but you can define and load any number of
other styles.</p>
<dl class="arguments">
<dt>string <i class="arg">subcmd</i> (in)</dt>
<dd><p>The subcommand to be executed:</p>
<ul class="itemized">
<li><p><em>configure</em> - this subcommand allows you to set the options per chart type.
It takes the same options as the <b class="cmd">plotconfig</b> command.</p></li>
<li><p><em>current</em> - return the current style</p></li>
<li><p><em>load</em> - make the given style the active style for subsequent plots and charts</p></li>
<li><p><em>names</em> - return the list of currently defined styles</p></li>
</ul></dd>
<dt>string <i class="arg">style</i> (in)</dt>
<dd><p>The name of the plot style to manipulate</p></dd>
<dt>list <i class="arg">args</i> (in)</dt>
<dd><p>The new options for the style - see the <b class="cmd">plotconfig</b> command for details</p></dd>
</dl></dd>
</dl>
<p>Below is a detailed list of the components and properties:</p>
<ul class="itemized">
<li><p>Axes come in a wide variety:</p>
<ul class="itemized">
<li><p>leftaxis, rightaxis, topaxis, bottomaxis for the plots with a
rectangular shape.</p></li>
<li><p>xaxis, yaxis and zaxis are used for the 3D plots</p></li>
<li><p>axis, this represents the radial and tangential axes of a polar plot</p></li>
</ul>
<p>All axes have the following properties:</p>
<ul class="itemized">
<li><p>color - the colour of the line and the tickmarks</p></li>
<li><p>thickness - the width of the line of the axis itself, not the tickmarks</p></li>
<li><p>ticklength - the length of the tickmarks in pixels. A positive value is
outward, a negative value is inward.</p></li>
<li><p>font - the font for the labels and the text at the axis</p></li>
<li><p>format - the format for rendering the (numerical) labels. For the time
axis it is the format for a date and time.</p></li>
<li><p>textcolor - the colour for the labels and the text.</p></li>
<li><p>labeloffset - space (in pixels) between the tickmark and the actual label</p></li>
<li><p>minorticks - number of minor tickmarks between the major tickmarks</p></li>
<li><p>shownumbers - show the numbers/labels or not.</p></li>
<li><p>showaxle - show the axis line or not.</p></li>
</ul>
</li>
<li><p>The <em>margin</em> is important for the layout. Currently only the
rectangular plots allow the margins to be set: left, right, top and bottom.
The values are in pixels.</p></li>
<li><p>The <em>text</em> component is meant for any text appearing via the
plaintext subcommand. The properties are: textcolor, font and anchor
(positioning of the text relative to the given coordinates).</p></li>
<li><p>The <em>background</em> has two properties: outercolor, the colour outside
of the actual plot, and innercolor, the colour inside the plot. (Note:
only &quot;outercolor&quot; has now been implemented).</p></li>
<li><p>The <em>mask</em> has one property only: draw. If set to 1, the default, white rectangles
are drawn to mimick the effects of clipping - excess data are made invisible this way.
Otherwise these rectangles are not drawn. This is useful to control
the layout more tightly, for instance with multiple plots in one canvas.</p></li>
<li><p>The <em>title</em> component has the same properties as the <em>text</em> component
(but it is independent of that component). It also has a <em>background</em> property:
If not set (or set to the empty string) this is the same as the outercolor property
of the <em>background</em> component, otherwise it is a separate colour.</p></li>
<li><p>The <em>legend</em> has three properties: background, border and position.
See the legend subcommand for the meaning.</p></li>
<li><p>The <em>bar</em> components is used for all barchart-like plots and has
three properties: <em>barwidth</em> (relative width of the bars in
relation to the items along the axis), <em>innermargin</em> (the
relative width of the gaps between bars or groups of bars) and
the <em>outline</em> colour.</p></li>
<li><p>The <em>labels</em> component is used to describe the appearance of the
labels of piecharts and &quot;spiral&quot; piecharts. The properties are:</p>
<ul class="itemized">
<li><p>textcolor - colour of the label text</p></li>
<li><p>font - font to be used for the label text</p></li>
<li><p>placement - <em>out</em> of the circle or <em>in</em> the circle</p></li>
<li><p>sorted - the data are sorted in ascending order first</p></li>
<li><p>shownumbers - the labels are combined with the numbers according to the
format</p></li>
<li><p>format - the format to be used (defaults to: &quot;%s (%g)&quot;)
if the numbers are to shown. The format command gets the label first,
then the number)</p></li>
<li><p>formatright - if given, the format to be used for labels and numbers
appearing to the right of the pie. The format command gets the
number first, then the label. (Defaults to &quot;&quot;)</p></li>
</ul>
</li>
<li><p>The <em>slice</em> component has properties to control the appearance of
the sections in the pie diagram:</p>
<ul class="itemized">
<li><p>outline - the colour of the line around the slices (default: black)</p></li>
<li><p>outlinewidth - width of the line around the slices (default: 1 pixel)</p></li>
<li><p>startangle - the angle w.r.t. positive x-axis where the first slice
starts</p></li>
<li><p>direction - the direction in which to draw the slices (default: +, that
is clockwise)</p></li>
</ul>
</li>
<li><p>The table charts use the general components <em>title</em> and <em>margin</em>
and further more the specific components <em>header</em>, <em>oddrow</em>,
<em>evenrow</em>, <em>cell</em> and <em>frame</em>:</p>
<ul class="itemized">
<li><p><em>header</em>, <em>oddrow</em> and <em>evenrow</em> have the properties:
<em>background</em>, <em>font</em>, <em>color</em>, <em>height</em> and
<em>anchor</em> with obvious meanings.</p></li>
<li><p>The <em>cell</em> component defines in addition <em>leftspace</em>,
<em>rightspace</em> and <em>topspace</em> for fine-grained control of the spacing
inside the cell. These are not set via the <i class="term">cellconfigure</i>
subcommand however.</p></li>
<li><p>Finally the <em>frame</em> component uses <em>color</em>, <em>outerwidth</em>
(for the width of the line surrounding the whole table) and
<em>innerwidth</em> (for the width of lines separating columns and rows).</p></li>
</ul>
</li>
</ul>
<p>See the examples in plotdemos7.tcl for its use.</p>
</div>
<div id="section12" class="section"><h2><a name="section12">SCROLLING FOR TIMECHARTS AND GANTT CHARTS</a></h2>
<p>For two types of plots automatic scrolling management has been
implemented: timecharts and Gantt charts. The subcommands <i class="term">hscroll</i>
and <i class="term">vscroll</i> associate (existing) scrollbars to the plot, in much
the same way as for text and canvas widgets.</p>
<p>Once the association is made, the scrollbars are automatically
updated if:</p>
<ul class="itemized">
<li><p>You add an item with a period wider than the current one.</p></li>
<li><p>You add a vertical line for a time beyond the current bounds.</p></li>
<li><p>You add an extra item beyond the number that was used to create the
chart.</p></li>
</ul>
<p>For instance:</p>
<pre class="example">
package require Plotchart
canvas .c -width 400 -height 200
scrollbar .y -orient vertical
scrollbar .x -orient horizontal
grid .c .y -sticky news
grid .x    -sticky news
source plotchart.tcl
set s [::Plotchart::createTimechart .c &quot;1 january 2004&quot;  &quot;31 december 2004&quot; 4]
$s period &quot;Spring&quot; &quot;1 march 2004&quot; &quot;1 june 2004&quot; green
$s period &quot;Summer&quot; &quot;1 june 2004&quot; &quot;1 september 2004&quot; yellow
$s vertline &quot;1 jan&quot; &quot;1 january 2004&quot;
$s vertline &quot;1 apr&quot; &quot;1 april 2004&quot;
$s vertline &quot;1 jul&quot; &quot;1 july 2004&quot;
$s vertline &quot;1 oct&quot; &quot;1 october 2004&quot;
$s vertline &quot;1 jan&quot; &quot;1 january 2005&quot;
$s vertline &quot;1 apr&quot; &quot;1 april 2005&quot;
$s vertline &quot;1 jul&quot; &quot;1 july 2005&quot;
$s milestone &quot;Longest day&quot; &quot;21 july 2004&quot;
$s milestone &quot;Longest day 2&quot; &quot;21 july 2004&quot;
$s milestone &quot;Longest day 3&quot; &quot;21 july 2004&quot;
$s milestone &quot;Longest day 4&quot; &quot;21 july 2004&quot;
$s milestone &quot;Longest day 5&quot; &quot;21 july 2004&quot;
$s milestone &quot;Longest day 6&quot; &quot;21 july 2004&quot;
$s title &quot;Seasons (northern hemisphere)&quot;
$s vscroll .y
$s hscroll .x
</pre>
<p>The original extent of the chart is from 1 january 2004 to 31 december
2004. But because of the addition of vertical lines in 2005 and
more items than was specified at the creation of the chart, both the
horizontal and the vertical scrollbar will be enabled.</p>
</div>
<div id="section13" class="section"><h2><a name="section13">SPECIALISED PLOTS</a></h2>
<p>Most of the plot and chart types described above have a fairly general use
and you simply prepares the data to be plotted yourself. This section describes
several plot types that are more specialised, in the sense that they have specific
purposes and you pass raw data that are then processed in the plotting routines.</p>
<p>Currently there are the following types:</p>
<ul class="itemized">
<li><p>Target diagrams are used to assess the capacity of numerical models to reproduce measurement
data. They are described in detail in:</p>
<pre class="example">
Jason K. Joliff et al.
    Summary diagrams for coupled hydrodynamic-ecosystem model skill assessment
    Journal of Marine Systems 76 (2009) 64-82
    DOI: 10.1016/j.jmarsys.2008.05.014
</pre>
</li>
<li><p>Performance profiles are used for comparing the performance of numerical methods or
implementations thereof with each other. For more information:</p>
<pre class="example">
Desmond Higham and Nicholas Higham
    Matlab Guide
    SIAM, 2005, Philadephia
</pre>
</li>
</ul>
<p>Most of the general methods for XY-plots work for these plots as well, but their
creation and the methods to plot the data are very specific.</p>
<dl class="definitions">
<dt><a name="130"><b class="cmd">::Plotchart::createTargetDiagram</b> <i class="arg">w</i> <i class="arg">limits</i> <i class="arg">scale</i></a></dt>
<dd><p>Create a new target diagram with circles indicating specific limits. The x-axis represents the
unbiased &quot;root-mean-square difference&quot; (typically varying between -1 and 1) and the y-axis
represents the normalised bias.</p>
<p>Data points closer to the origin represent better results than data points further away.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>list <i class="arg">limits</i> (in)</dt>
<dd><p>List of radii for the circles that represent the limits (for instance: 0.5 and 0.7)</p></dd>
<dt>double <i class="arg">scale</i> (in)</dt>
<dd><p>Scale for the axes - defaults to 1, but if the model results are a poor fit, then
that may be too small a value. Both axes are scaled in the same way.</p></dd>
</dl></dd>
<dt><a name="131"><b class="cmd">$target</b> plot <i class="arg">series</i> <i class="arg">xvalues</i> <i class="arg">yvalues</i></a></dt>
<dd><p>The plot method takes two series of data of the same length, the first one
representing the model results, the second one represent the measurements
or, more general, the data that need to be reproduced.</p>
<dl class="arguments">
<dt>string <i class="arg">series</i> (in)</dt>
<dd><p>Name of the series (it will be plotted as a symbol that is configured via the
<em>$target dataconfig</em> command (see the XY-plot equivalent for an explanation)</p></dd>
<dt>list <i class="arg">xvalues</i> (in)</dt>
<dd><p>List of model results (missing values are represented as empty strings)</p></dd>
<dt>list <i class="arg">yvalues</i> (in)</dt>
<dd><p>List of measured values (missing values are represented as empty strings; only if
both the x and the y values are given, is the pair used in the computations)</p></dd>
</dl></dd>
<dt><a name="132"><b class="cmd">::Plotchart::createPerformanceProfile</b> <i class="arg">w</i> <i class="arg">max</i></a></dt>
<dd><p>Create a diagram to show the performance of various numerical methods (or solvers). The idea is
to first run these methods on a set of problems and measure their performance. The smaller the
number the better. Then these methods are compared via a so-called performance profile:
the data are scaled and ordered, such that the best method ends up highest.</p>
<p>Because of the nature of the plot all data must be given at once.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>Name of the <em>existing</em> canvas widget to hold the plot.</p></dd>
<dt>float <i class="arg">max</i> (in)</dt>
<dd><p>Maximum value for the x-axis (the x-axis is the scaled performance of the series).</p></dd>
</dl></dd>
<dt><a name="133"><b class="cmd">$performance</b> plot <i class="arg">series_and_data_pairs</i></a></dt>
<dd><p>Plot the data for each given method. The data are identified by the series name and the
appearance is controlled via prior dataconfig subcommand.</p>
<dl class="arguments">
<dt>list <i class="arg">series_and_data_pairs</i> (in)</dt>
<dd><p>List of series names and data. All data must be given at once.</p></dd>
</dl></dd>
</dl>
<p>The command <i class="term">plotmethod</i> can be used to add new methods for a particular
plot or chart type. It is intended to help you develop specialised graphical displays.</p>
<dl class="definitions">
<dt><a name="134"><b class="cmd">::Plotchart::plotmethod</b> <i class="arg">charttype</i> <i class="arg">methodname</i> <i class="arg">plotproc</i></a></dt>
<dd><p>Adds a new method for the given plot or chart type. The method is implemented by the
command or procedure given in the plotproc argument. The procedure will be called with
two extra arguments, the name of the created plot and the canvas widget that contains
(see the example below).</p>
<dl class="arguments">
<dt>string <i class="arg">charttype</i> (in)</dt>
<dd><p>The type of plot or chart that the new method should be added to.</p></dd>
<dt>string <i class="arg">methodname</i> (in)</dt>
<dd><p>Name of the method to be used.</p></dd>
<dt>string <i class="arg">plotproc</i> (in)</dt>
<dd><p>Name of the command or procedure that implements the method.</p></dd>
</dl></dd>
</dl>
<p>Here is a trivial example of how to use this:</p>
<pre class="example">
#
# The custom method &quot;doodle&quot; always adds the text &quot;DOODLE&quot;
# to the plot
#
proc doodle {p w x y} {
    $p plaintext $x $y &quot;DOODLE&quot;
}
::Plotchart::plotmethod xyplot doodle doodle
#
# Use it
pack [canvas .c]
set p [::Plotchart::createXYPlot .c {0 100 10} {0 20 5}]
$p doodle 40 10
</pre>
</div>
<div id="section14" class="section"><h2><a name="section14">TABLE CHARTS</a></h2>
<p>To show what you can do with table charts, here is a simple example that
plots a number of random data. The colours depend on the range that the
data belong to. For this the procedure <i class="term">setColor</i> is used.</p>
<pre class="example">
package require Plotchart
pack [canvas .c -bg white -height 300] -fill both -expand yes
::Plotchart::plotconfig table frame outerwidth 3
::Plotchart::plotconfig table frame color red
set t [::Plotchart::createTableChart .c {&quot;Column 1&quot; &quot;Column 2&quot; &quot;Column 3&quot;} 80]
proc setColor {table widget row col value} {
    $table cellconfigure -background white -color black
    if { $value &lt; 2.0 } {
        $table cellconfigure -background red -color white
    }
    if { $value &gt; 6.0 } {
        $table cellconfigure -background green
    }
    return [format &quot;%6.3f&quot; $value]
}
# Command must already exist ...
$t formatcommand setColor
$t title &quot;Demonstration of table charts&quot;
$t separator
for {set i 0} {$i &lt; 9} {incr i} {
    set row {}
    for {set j 0} {$j &lt; 3} {incr j} {
        lappend row [expr {10.0 * rand()}]
    }
    if { $i == 3 } {
        $t separator
    }
    $t row $row
}</pre>
</div>
<div id="section15" class="section"><h2><a name="section15">CONTROL DISPLAYS</a></h2>
<p>TODO</p>
</div>
<div id="section16" class="section"><h2><a name="section16">ARRANGING MULTIPLE PLOTS IN A CANVAS</a></h2>
<p>The command <i class="term">plotpack</i> allows you to copy the contents of a plot
into another canvas widget. This canvas widget does not act as a
composite plot, but it can be saved as a PostScript file for instance:
Note: the command simply takes a snapshot of the plots/charts as they
are at that moment.</p>
<dl class="definitions">
<dt><a name="135"><b class="cmd">::Plotchart::plotpack</b> <i class="arg">w</i> <i class="arg">dir</i> <i class="arg">args</i></a></dt>
<dd><p>Copy the contents of the plots/charts into another widget, in a manner
similar to the <i class="term">pack</i> geometry manager.</p>
<dl class="arguments">
<dt>widget <i class="arg">w</i> (in)</dt>
<dd><p>The name of the canvas widget to copy the plots/charts into</p></dd>
<dt>string <i class="arg">dir</i> (in)</dt>
<dd><p>The direction of the arrangement - top, left, bottom or right</p></dd>
<dt>list <i class="arg">args</i> (in)</dt>
<dd><p>List of plots/charts to be copied.</p></dd>
</dl></dd>
</dl>
<p>For example:</p>
<pre class="example">
    set p1 [createXYPlot ...]
    set p2 [createBarchart ...]
    ... fill the plots ...
    toplevel .t
    pack [canvas .t.c2 -width ...]
    #
    # Copy the two plots above each other in the new canvas
    #
    plotpack .t.c2 top $p1 $p2
</pre>
<p>A different method is to use the <em>-box</em> and <em>-axesbox</em> options
when creating the plot. These control the area in the canvas where the
plot or chart will be drawn.</p>
<p>The <em>-box</em> option takes as its value a list of four numbers:</p>
<ul class="itemized">
<li><p>X-coordinate of the upper-left corner of the area that will contain the
plot or chart (simply a canvas coordinate)</p></li>
<li><p>Y-coordinate of the upper-left corner</p></li>
<li><p>Width of the area</p></li>
<li><p>Height of the area</p></li>
</ul>
<p>Specifying the width and height makes it easier to reposition the area
with respect to other plots.</p>
<p>The <em>-axesbox</em> option is meant to make aligning the axes of a
plot with those of other plots easier. The option takes a list of
six arguments:</p>
<ul class="itemized">
<li><p>Identification of the plot with respect to which it should be
positioned (the command returned by the creation command).</p></li>
<li><p>The anchor position that should be used (n, nw, ...)</p></li>
<li><p>X-coordinate of the upper-left corner of the area that will contain the
plot or chart. This coordinates is taken relative to the
<em>anchor position</em></p></li>
<li><p>Y-coordinate of the upper-left corner</p></li>
<li><p>Width of the axis area</p></li>
<li><p>Height of the axis area</p></li>
</ul>
<p>With this option the area the axes occupy is first determined and the
complete area is derived from the margins.</p>
<p>For example:</p>
<pre class="example">
    set p2 [::Plotchart::createXYPlot .c {0 10 1} {-5 5 2.5} -axesbox [list $p1 ne 0 0 200 200]]
</pre>
<p>will create a second plot whose left axis coincides with the right axis
of plot &quot;\$p1&quot; and the top of the axis is at the same heigt as well -
because the axes are positioned at a point 0 pixels to the left and 0
pixels below the north-east corner.</p>
</div>
<div id="section17" class="section"><h2><a name="section17">INTERACTIVE USE</a></h2>
<p><em>Plotchart</em> has several features for interactive use (cf. <span class="sectref"><a href="#section18">NOTES ON TAGS</a></span>):</p>
<ul class="itemized">
<li><p>The legend can be moved around by pressing mouse button 1 in the legend's box and
keeping it down.</p></li>
<li><p>You can use the <em>bindplot</em> and <em>bindlast</em> commands to
define actions that are to be taken when the user clicks on an element of the plot or chart.
(see below, see also the sample code in plotdemos12.tcl)</p></li>
<li><p><em>Piecharts</em> can show an &quot;exploded&quot; segment that you can select with mouse button 1.</p></li>
</ul>
<p>If you require different forms of interaction, not covered by <em>Plotchart</em> itself,
you can use the tags on the various canvas elements to define other bindings.</p>
<p>The <em>bindplot</em> and <em>bindlast</em> are defined as follows:</p>
<dl class="definitions">
<dt><a name="136"><b class="cmd">$anyplot</b> bindplot <i class="arg">event</i> <i class="arg">command</i> <i class="arg">args</i></a></dt>
<dd><p>Register a command that will be run whenever the given event occurs in the plot.</p>
<dl class="arguments">
<dt>string <i class="arg">event</i></dt>
<dd><p>The event that you want to bind the command to</p></dd>
<dt>string <i class="arg">command</i></dt>
<dd><p>Name of the command/procedure that you want to run. The following arguments
are prefixed: the x- and y-coordinates of the point in the plot (the world coordinates!),
so that the procedure has the signature:</p>
<pre class="example">
    cmd $xworld $yworld $string1 $string2 $string3
</pre>
<p>assuming the argument &quot;command&quot; is: {cmd A B C}</p></dd>
</dl></dd>
<dt><a name="137"><b class="cmd">$anyplot</b> bindlast <i class="arg">series</i> <i class="arg">event</i> <i class="arg">command</i></a></dt>
<dd><p>Register a command that will be run when the event occurs within the neighbourhood of
the last point added to the given series. (You can use directly after inserting
a data point. All such commands will remain active).</p>
<dl class="arguments">
<dt>string <i class="arg">event</i></dt>
<dd><p>The event that you want to bind the command to</p></dd>
<dt>list <i class="arg">command</i></dt>
<dd><p>Name of the command/procedure that you want to run. The following arguments
are prefixed: the x- and y-coordinates of the point in the plot (the world coordinates!),
so that the procedure has the signature:</p>
<pre class="example">
    cmd $xworld $yworld $string1 $string2 $string3
</pre>
<p>assuming the argument &quot;command&quot; is: {cmd A B C}</p></dd>
</dl></dd>
</dl>
<p>Here is an example - show the values of the data points in an annotation
(from the sample code in plotdemos12.tcl):</p>
<pre class="example">
#
# Procedure for showing an annotation
#
proc showAnnotation {xcoord ycoord plot w} {
    $plot balloon $xcoord $ycoord &quot;Data point: [format &quot;%.3f, %.3f&quot; $xcoord $ycoord]&quot; north
    after 2000 [list removeAnnotation $w]
}
#
# Procedure for erase an annotation
#
proc removeAnnotation {w} {
    # Use the tags to remove all annotations
    $w delete BalloonText
    $w delete BalloonFrame
}
#
# Create a simple plot and a label
#
pack [canvas .c -bg white] [label .l -textvariable coords]
set p [::Plotchart::createXYPlot .c {0 1000 200} {0 10 1}]
$p dataconfig series1 -type both -symbol cross
foreach x {1 2 5 10 20 50 100 200 500 1000} {
    $p plot series1 $x [expr {log($x)}]
    #
    # Show the annotation for each data point
    #
    $p bindlast series1 &lt;Enter&gt; [list showAnnotation $p %W]
}
</pre>
</div>
<div id="section18" class="section"><h2><a name="section18">NOTES ON TAGS</a></h2>
<p>The implementation of <em>Plotchart</em> relies heavily on the canvas's
ability to identify graphical objects by tags and to change the drawing order of
the objects. This section documents the tags that are used.</p>
<p>(<em>Note:</em> the tags are not always used consistently - see the notes appearing with
the various tags. This section describes the current state.)</p>
<p><em>General graphical objects:</em></p>
<ul class="itemized">
<li><p><em>mask</em> - Used to manipulate the opaque rectangles that ensure data outside
the viewport are not shown.</p></li>
<li><p><em>topmask, horizmask, vertmask</em> - specialised tags, used for scrollable plots.</p></li>
<li><p><em>title</em> - Used for title strings.</p></li>
<li><p><em>BalloonText, BalloonFrame</em> - Used to manipulate balloon text.</p></li>
<li><p><em>PlainText</em> - Used to manipulate ordinary text without any decoration.</p></li>
<li><p><em>background</em> - Tag used for gradient and image backgrounds (and for gradient-filled bars).</p></li>
<li><p><em>xaxis, yaxis</em> - Tags used for all objects related to horizontal or vertical axes.
(also: both for numerical axes and axes with labels as in barcharts).
Note, however, that the <em>text</em> along the axes has no particular tag.</p></li>
<li><p><em>raxis</em> - Tag used for all objects related to a <em>right</em> axis.</p></li>
<li><p><em>taxis</em> - Tag used for all objects related to a <em>time</em> axis.</p></li>
<li><p><em>axis3d</em> - Tag used for 3D axes</p></li>
<li><p><em>xtickline, ytickline</em> - Tags used for ticklines.</p></li>
<li><p><em>legend, legengb, legendobj</em> - Tags used for the legend. The latter is used to manipulate
the legend as a whole.</p></li>
<li><p><em>legend_series</em> - Tag used to control the appearance of the legend entry (&quot;series&quot; should
be replaced by the series name).</p></li>
<li><p><em>object</em> - used as standard tag for all objects drawn with the <b class="cmd">::Plotchart::drawobject</b>
procedure. Tags given at object creation time are added to this tag.</p></li>
</ul>
<p><em>XY-plots (all types of axes):</em></p>
<ul class="itemized">
<li><p><em>data</em> - The general tag to identify graphical objects associated with data.
<em>data_seriesname</em> - The tag specific to a data series (&quot;seriesname&quot; should be replaced).
<em>band</em> - The horizontal or vertical band drawn with the xband otr yband subcommands have this tag
by the actual name).
<em>xtext</em> - The text labelling the xaxis.
<em>ytext</em> - The text labelling hte yaxis horizontically.
<em>vtext</em> - The text labelling the yaxis vertically.</p></li>
</ul>
<p>Items such as labelled dots only have the &quot;data&quot; tag.</p>
<p><em>Piecharts and spiral pies:</em></p>
<ul class="itemized">
<li><p><em>segment_segmentnumber</em> - The tag identifying the segment, the string &quot;segmentnumber&quot; should
be replaced by the actual number. This tag is used to explode the segments.</p></li>
</ul>
<p><em>Barcharts:</em></p>
<p>Barcharts use the same tags as xy-plots (but for gradient-filled bars the data_seriesname is not used).</p>
<p><em>Histograms and isometric plots:</em></p>
<p>Currently the only tag used is &quot;data&quot;.</p>
<p><em>Time-charts:</em></p>
<p>As these plots are scrollable, several tags are used specific to the scrolling:
vertscroll, horizscroll, below, lowest, above, timeline, tline.
Each item also has a tag of the form &quot;item_number&quot;,
where &quot;number&quot; is to be replaced by the actual sequence number of the item.</p>
<p><em>Gantt charts:</em></p>
<p>In addition to the tags described for the time-charts, the following tags are used:
description, completed, summary and summarybar.</p>
<p><em>Radial charts and polar plots:</em></p>
<p>Currently the radial lines indicating the grid have no tags. The graphical objects associated with
data only have the &quot;data&quot; tag.</p>
<p><em>Windroses:</em></p>
<p>Only the tag <em>data_number</em> is currently used (&quot;number&quot; should be replaced by the
sequence number of the data, starting at 0.</p>
<p><em>Contour and isoline plots:</em></p>
<p>No tags are used.</p>
<p><em>3D plots and 3D ribbon plots:</em></p>
<p>No tags are used for the data objects, only for the axes.</p>
<p><em>Charts decorated with 3D effects:</em></p>
<p>The following tags are used to identify various types of graphical objects: platform, background, d, u,
ticklines.</p>
<p>The text associated with the bars has no tags. The ribbon lines and areas have no tags either.</p>
<p><em>Tables:</em></p>
<p>Tags used are: frame, cellbg and celltext
<em>In addition:</em>
To implement multiple plots and charts in a single canvas, all items
also get as a tag the plot/chart they belong to. This enables Plotchart
to manipulate only those items.</p>
</div>
<div id="section19" class="section"><h2><a name="section19">TODO - SOME PRIVATE NOTES</a></h2>
<p>I have the following wishlist:</p>
<ul class="itemized">
<li><p>Isometric plots - allow new items to be implemented easily.</p></li>
<li><p>A general 3D viewer - emphasis on geometry, not a ray-tracer.</p></li>
<li><p>Several improvements for boxplots:</p>
<ul class="itemized">
<li><p>Height of the box scales with the logarithm of the number of points</p></li>
<li><p>Marker line to indicate a &quot;current&quot; value</p></li>
<li><p>Box drawn from quantiles</p></li>
</ul>
</li>
</ul>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key57">3D bars</a>, <a href="../../../../index.html#key55">3D surfaces</a>, <a href="../../../../index.html#key52">bar charts</a>, <a href="../../../../index.html#key47">charts</a>, <a href="../../../../index.html#key44">coordinate transformations</a>, <a href="../../../../index.html#key53">coordinates</a>, <a href="../../../../index.html#key48">graphical presentation</a>, <a href="../../../../index.html#key51">isometric plots</a>, <a href="../../../../index.html#key54">pie charts</a>, <a href="../../../../index.html#key50">plotting</a>, <a href="../../../../index.html#key43">polar plots</a>, <a href="../../../../index.html#key56">strip charts</a>, <a href="../../../../index.html#key45">tables</a>, <a href="../../../../index.html#key46">time charts</a>, <a href="../../../../index.html#key49">xy-plots</a></p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; 2011 Arjen Markus &lt;arjenmarkus@users.sourceforge.net&gt;</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/swaplist/swaplist.html.



















































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185

<html><head>
<title>swaplist - A dialog which allows a user to move options between two lists</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/swaplist/swaplist.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ swaplist.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">swaplist(n) 0.1 tklib &quot;A dialog which allows a user to move options between two lists&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>swaplist - A dialog which allows a user to move options between two lists</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">EXAMPLE</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#category">Category</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.4</b></li>
<li>package require <b class="pkgname">Tk 8.4</b></li>
<li>package require <b class="pkgname">swaplist <span class="opt">?0.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::swaplist::swaplist</b> <i class="arg">pathName</i> <i class="arg">variable</i> <i class="arg">completeList</i> <i class="arg">selectedList</i> <span class="opt">?options?</span></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a dialog which consists of 2 listboxes, along with buttons to move items
between them and reorder the right list.</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::swaplist::swaplist</b> <i class="arg">pathName</i> <i class="arg">variable</i> <i class="arg">completeList</i> <i class="arg">selectedList</i> <span class="opt">?options?</span></a></dt>
<dd><p>Creates a dialog which presents the user with a pair of listboxes. Items are selected by using the buttons to move
them to the right list. The contents of the right list are put in the <i class="arg">variable</i> upon closure of the dialog.
The command returns a boolean indicating if the user pressed OK or not. If -geometry is not specified, the
dialog is centered in its parent toplevel unless its parent is . in which case the dialog is centered in the screen.</p>
<p>Options:</p>
<dl class="options">
<dt><b class="option">-embed</b></dt>
<dd><p>if this flag is supplied, the procedure will create a swaplist widget named <i class="arg">pathName</i>, with the <i class="arg">variable</i> set as the
listvariable for the right side listbox. This flag will also cause the -title and -geometry flags to be ignored.</p></dd>
<dt><b class="option">-reorder</b></dt>
<dd><p>boolean specifying if buttons allowing the user to change the order of the right listbox should appear or not. defaults to true</p></dd>
<dt><b class="option">-title</b></dt>
<dd><p>sets the title of the dialog window. defaults to &quot;Configuration&quot;</p></dd>
<dt><b class="option">-llabel</b></dt>
<dd><p>sets the heading above the left list. defaults to &quot;Available:&quot;</p></dd>
<dt><b class="option">-rlabel</b></dt>
<dd><p>sets the heading above the right list. defaults to &quot;Selected:&quot;</p></dd>
<dt><b class="option">-lbuttontext</b></dt>
<dd><p>sets the text on the &quot;move left&quot; button. defaults to &quot;&lt;&lt;&quot;</p></dd>
<dt><b class="option">-rbuttontext</b></dt>
<dd><p>sets the text on the &quot;move right&quot; button. defaults to &quot;&gt;&gt;&quot;</p></dd>
<dt><b class="option">-ubuttontext</b></dt>
<dd><p>sets the text on the &quot;move up&quot; button. defaults to &quot;Move Up&quot;</p></dd>
<dt><b class="option">-dbuttontext</b></dt>
<dd><p>sets the text on the &quot;move down&quot; button. defaults to &quot;Move Down&quot;</p></dd>
<dt><b class="option">-geometry</b></dt>
<dd><p>sets the geometry of the dialog window.</p></dd>
</dl></dd>
</dl>
</div>
<div id="section2" class="section"><h2><a name="section2">EXAMPLE</a></h2>
<pre class="example">
package require swaplist
namespace import swaplist::*
if {[swaplist .slist opts &quot;1 2 3 4 5 6 7 8 9&quot; &quot;1 3 5&quot;]} {
    puts &quot;user chose numbers: $ops&quot;
}
</pre>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key17">dialog</a>, <a href="../../../../index.html#key147">disjointlistbox</a>, <a href="../../../../index.html#key146">listbox</a></p>
</div>
<div id="category" class="section"><h2><a name="category">Category</a></h2>
<p>Widget</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/tkpiechart/canvaslabel.html.







































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211

<html><head>
<title>canvasLabel - canvasLabel class</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/tkpiechart/canvaslabel.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; 1995-2004 Jean-Luc Fontaine &lt;jfontain@free.fr&gt;
   -->
<! -- CVS: $Id$ canvasLabel.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">canvasLabel(n) 6.6 tklib &quot;canvasLabel class&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>canvasLabel - tkpiechart canvas label class</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">OPTIONS</a></li>
<li class="section"><a href="#section3">TAGS</a></li>
<li class="section"><a href="#see-also">See Also</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">stooop 4.1</b></li>
<li>package require <b class="pkgname">switched 2.2</b></li>
<li>package require <b class="pkgname">tkpiechart 6.6</b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">stooop::new</b> <b class="class">canvasLabel</b> <i class="arg">canvas</i> <span class="opt">?options?</span></a></li>
<li><a href="#2"><b class="cmd">switched::configure</b> <i class="arg">canvasLabelObject</i> <span class="opt">?options?</span></a></li>
<li><a href="#3"><b class="cmd">switched::cget</b> <i class="arg">canvasLabelObject</i> <i class="arg">option</i></a></li>
<li><a href="#4"><b class="cmd">stooop::delete</b> <i class="arg">canvasLabelObject</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>The canvasLabel class brings some Tk label widget functionality to the canvas text item, such as a background and a border.</p>
<p>The canvasLabel is built with a bullet rectangle on the left side of the text. The relief changes according to the select state, with a traditionally sunken relief when selected.</p>
<p>The label has a specific tag, which can be used to retrieve the coordinates of the object or move it, thanks to the canvas facilities.</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">stooop::new</b> <b class="class">canvasLabel</b> <i class="arg">canvas</i> <span class="opt">?options?</span></a></dt>
<dd><p>Creates a canvasLabel object in the specified Tk canvas. The canvasLabel object identifier is returned (referred to as <em>canvasLabelObject</em> in this document).</p></dd>
<dt><a name="2"><b class="cmd">switched::configure</b> <i class="arg">canvasLabelObject</i> <span class="opt">?options?</span></a></dt>
<dd><p>Configures a canvasLabel object or returns all the options with their current values if no options are passed as parameters.</p></dd>
<dt><a name="3"><b class="cmd">switched::cget</b> <i class="arg">canvasLabelObject</i> <i class="arg">option</i></a></dt>
<dd><p>Returns an option value for the specified canvasLabel object.</p></dd>
<dt><a name="4"><b class="cmd">stooop::delete</b> <i class="arg">canvasLabelObject</i></a></dt>
<dd><p>Deletes the specified canvasLabel object.</p></dd>
</dl>
</div>
<div id="section2" class="section"><h2><a name="section2">OPTIONS</a></h2>
<dl class="options">
<dt><b class="option">-anchor</b> value</dt>
<dd><p>Specifies the anchor position of the rectangle and the text, relative to the positioning point. The behavior is similar to the <b class="option">-anchor</b> option of the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>text</em> item, except that the rectangle is taken into account. The default is <em>center</em>.</p></dd>
<dt><b class="option">-background</b> color</dt>
<dd><p>Specifies the background color of the bullet rectangle, as in the <b class="option">-fill</b> option of the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>rectangle</em> item. The default is transparent (empty string).</p></dd>
<dt><b class="option">-bordercolor</b> color</dt>
<dd><p>Specifies the border color of the rectangle, as in the <b class="option">-outline</b> option of the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>rectangle</em> item. The default is black.</p></dd>
<dt><b class="option">-borderwidth</b> value</dt>
<dd><p>Specifies the border width of the rectangle, as in the <b class="option">-width</b> option of the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>rectangle</em> item. By default, the width is 1 pixel, which is the minimum width.</p></dd>
<dt><b class="option">-bulletwidth</b> value</dt>
<dd><p>Specifies the width of the rectangle placed to the left of the text. Defaults to <em>10</em>.</p></dd>
<dt><b class="option">-font</b> value</dt>
<dd><p>Specifies the font of the text, as in the <b class="option">-font</b> option of the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>text</em> item. The default is system dependent.</p></dd>
<dt><b class="option">-foreground</b> color</dt>
<dd><p>Specifies the color of the text, as in the <b class="option">-fill</b> option of the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>text</em> item. The default is black.</p></dd>
<dt><b class="option">-justify</b> value</dt>
<dd><p>Specifies how to justify the text, as in the <b class="option">-justify</b> option of the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>text</em> item. The default is <em>left</em>.</p></dd>
<dt><b class="option">-minimumwidth</b> value</dt>
<dd><p>The total label width will not go below the specified value, but may be larger if the label text requires it.</p></dd>
<dt><b class="option">-padding</b> value</dt>
<dd><p>Specifies how much space to leave between the text and the closest rectangle edge. Units are identical to those specified in the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>COORDINATES</em> manual section.</p></dd>
<dt><b class="option">-scale</b> list</dt>
<dd><p>List of 2 floating point numbers used to set the scaling factor in the x and y axis. Scaling is applied immediately and defaults to 1.</p></dd>
<dt><b class="option">-select</b> boolean</dt>
<dd><p>Sets the label state.</p></dd>
<dt><b class="option">-selectrelief</b> value</dt>
<dd><p>Either <em>flat</em>, <em>raised</em> or <em>sunken</em>. Specifies the 3D effect desired for the text area when the label is selected.</p></dd>
<dt><b class="option">-stipple</b> bitmap</dt>
<dd><p>Specifies the stipple pattern filling the rectangle, as in the <b class="option">-stipple</b> option of the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>rectangle</em> item. There is no bitmap by default.</p></dd>
<dt><b class="option">-text</b> text</dt>
<dd><p>Specifies the string to be displayed in the text area, as in the <b class="option">-text</b> option of the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>text</em> item. The default is an empty string.</p></dd>
<dt><b class="option">-textbackground</b> color</dt>
<dd><p>Specifies the color of the text area background.</p></dd>
<dt><b class="option">-width</b> value</dt>
<dd><p>Specifies a maximum line length for the text, as in the <b class="option">-width</b> option of the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>text</em> item. The default is <em>0</em>.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">TAGS</a></h2>
<p>The labeler has the following specific tag (see the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> manual page <em>ITEM IDS AND TAGS</em> section for more information):</p>
<ul class="itemized">
  
<li><p>canvasLabel(canvasLabelObject)</p></li>
</ul>
</div>
<div id="see-also" class="section"><h2><a name="see-also">See Also</a></h2>
<p><a href="pie.html">pie</a>, <a href="pieboxlabeler.html">pieBoxLabeler</a>, <a href="pieperipherallabeler.html">piePeripheralLabeler</a></p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key63">labeler</a>, <a href="../../../../index.html#key62">pie</a>, <a href="../../../../index.html#key61">slice</a></p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; 1995-2004 Jean-Luc Fontaine &lt;jfontain@free.fr&gt;</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/tkpiechart/pie.html.























































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235

<html><head>
<title>pie - tkpiechart pie class</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/tkpiechart/pie.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; 1995-2004 Jean-Luc Fontaine &lt;jfontain@free.fr&gt;
   -->
<! -- CVS: $Id$ pie.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">pie(n) 6.6 tklib &quot;tkpiechart pie class&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>pie - 2D or 3D pie chart object in a canvas</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">OVERVIEW</a></li>
<li class="section"><a href="#section3">OPTIONS</a></li>
<li class="section"><a href="#section4">MEMBER PROCEDURES</a></li>
<li class="section"><a href="#section5">TAGS</a></li>
<li class="section"><a href="#section6">SIZES</a></li>
<li class="section"><a href="#section7">LIMITATIONS</a></li>
<li class="section"><a href="#see-also">See Also</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">stooop 4.1</b></li>
<li>package require <b class="pkgname">switched 2.2</b></li>
<li>package require <b class="pkgname">tkpiechart 6.6</b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">stooop::new</b> <b class="class">pie</b> <i class="arg">canvas</i> <i class="arg">x</i> <i class="arg">y</i> <span class="opt">?options?</span></a></li>
<li><a href="#2"><b class="cmd">switched::configure</b> <i class="arg">pieObject</i> <span class="opt">?options?</span></a></li>
<li><a href="#3"><b class="cmd">switched::cget</b> <i class="arg">pieObject</i> <i class="arg">option</i></a></li>
<li><a href="#4"><b class="cmd">stooop::delete</b> <i class="arg">pieObject</i></a></li>
<li><a href="#5">pie::newSlice <i class="arg">pieObject</i> <span class="opt">?labelText?</span></a></li>
<li><a href="#6">pie::deleteSlice <i class="arg">pieObject</i> <i class="arg">sliceObject</i></a></li>
<li><a href="#7">pie::sizeSlice <i class="arg">pieObject</i> <i class="arg">sliceObject</i> <i class="arg">unitShare</i> <span class="opt">?displayedValue?</span></a></li>
<li><a href="#8">pie::labelSlice <i class="arg">pieObject</i> <i class="arg">sliceObject</i> <i class="arg">string</i></a></li>
<li><a href="#9">pie::selectedSlices <i class="arg">pieObject</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>A pie object is used to visualize a set of values, usually as shares of a total. Each value is represented by a colored slice, which may have a 2 dimensional or 3 dimensional look. Each slice is associated with a label displaying the data name, and a numerical field showing the percentage taken by the slice. The labels are placed by the chosen labeler object (<b class="option">-labeler</b> option). Each label color matches its related slice.</p>
<p>A pie chart is made of Tk canvas items, found in <b class="class">pieBoxLabeler</b>, <b class="class">piePeripheralLabeler</b> and <b class="class">canvasLabel</b> objects, that compose the pie object. The pie constructor creates the pie itself and its background slice within the parent canvas. Once the pie object exists, slices can be created and resized. At the time the pie is created, the parent Tk <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> widget must exist.</p>
<p>Slice colors are automatically generated, using a default color list for all pies, unless another list is used (using the <b class="option">-colors</b> option). When a 3D look is used, the slice edge is darker than its top while using the same color tone.</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">stooop::new</b> <b class="class">pie</b> <i class="arg">canvas</i> <i class="arg">x</i> <i class="arg">y</i> <span class="opt">?options?</span></a></dt>
<dd><p>Creates a pie object in the specified Tk canvas. The upper left corner of the pie is placed at the specified coordinates in the canvas. The pie object identifier is returned (referred to as <em>pieObject</em> in this document).</p></dd>
<dt><a name="2"><b class="cmd">switched::configure</b> <i class="arg">pieObject</i> <span class="opt">?options?</span></a></dt>
<dd><p>Configures a pie object or returns all the options with their current values if no options are passed as parameters.</p></dd>
<dt><a name="3"><b class="cmd">switched::cget</b> <i class="arg">pieObject</i> <i class="arg">option</i></a></dt>
<dd><p>Returns an option value for the specified pie object.</p></dd>
<dt><a name="4"><b class="cmd">stooop::delete</b> <i class="arg">pieObject</i></a></dt>
<dd><p>Deletes the specified pie object.</p></dd>
</dl>
</div>
<div id="section2" class="section"><h2><a name="section2">OVERVIEW</a></h2>
<p>The pie class is part of the tkpiechart extension that allows the programmer to create and dynamically update 2D or 3D pie charts in a Tcl/Tk application. The tkpiechart package is written in Tcl only, using object oriented techniques thanks to the stooop package, included in tcllib.</p>
</div>
<div id="section3" class="section"><h2><a name="section3">OPTIONS</a></h2>
<dl class="options">
<dt><b class="option">-autoupdate</b> boolean</dt>
<dd><p>Boolean value specifying whether all the slices and their labels are redrawn when a slice size is changed. On by default. Turn it off and invoke <b class="method">pie::update</b> if you change many slices at once and want to improve performance.</p></dd>
<dt><b class="option">-background</b> color</dt>
<dd><p>Slices may or may not fill up the 100% of the pie. The unoccupied part of the pie is a slice that takes 100% of the pie. It is by default transparent with a black border. The color of this background slice may be set by the user using color names as in the <b class="option">-background</b> standard option (see the Tk <b class="syscmd">options</b> manual page for more details). When the pie has a 3D look, the background of a slice edge is darker than the top and uses the same color tone.</p></dd>
<dt><b class="option">-colors</b> list</dt>
<dd><p>Specifies a list of colors for slices. In this case, the slice colors will successively be drawn from the list in the list order, cycling through if there are more slices than colors in the list. Colors are specified in the same format as the <b class="option">-background</b> option.</p></dd>
<dt><b class="option">-height</b> value</dt>
<dd><p>Specifies the total height for the pie, including the room taken by the labeler labels. The pie slices are resized when labels are added or deleted (when adding or deleting slices) so that the total height remains constant. This value may be specified in any of the forms described in the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>COORDINATES</em> manual section.</p></dd>
<dt><b class="option">-labeler</b> object</dt>
<dd><p>Specifies a placer object for the slice labels, so that, for example, slice values may be placed next to them. If not specified, the <em>pieBoxLabeler</em> (see corresponding manual) is used, the other option being the <em>piePeripheralLabeler</em> class. Each labeler has a specific behavior which may be set via its options. The labeler object is automatically deleted when the pie object is itself deleted. The labeler cannot be changed once the pie is created.</p></dd>
<dt><b class="option">-selectable</b> boolean</dt>
<dd><p>Boolean value specifying whether slices are selectable or not. Acceptable values are those defined by the Tcl language itself for boolean values. If selectable, slices can be selected with the first mouse button, by clicking on either the slice or its label. Selection can be extended by using the classical <em>control</em> or <em>shift</em> clicks. The list of currently selected slices can be retrieved at any time using the <b class="method">selectedSlices</b> pie class member procedure.</p></dd>
<dt><b class="option">-title</b> text</dt>
<dd><p>Title text to be placed above the pie.</p></dd>
<dt><b class="option">-titlefont</b> value</dt>
<dd><p>Font for the title text.</p></dd>
<dt><b class="option">-titleoffset</b> value</dt>
<dd><p>Distance between the bottom of the title text and the top of the pie slices. This value may be specified in any of the forms described in the sizes section below.</p></dd>
<dt><b class="option">-thickness</b> value</dt>
<dd><p>The thickness is set to 0 by default, giving the pie a simple 2D shape, much faster to display. A positive thickness value will give the pie a 3D look with matched darker colors for the slices edges. These values may be specified in any of the forms described in the <em>SIZES</em> section below.</p></dd>
<dt><b class="option">-width</b> value</dt>
<dd><p>Specifies the total width for the pie, including the room taken by the labeler labels. The pie slices are resized when labels are added or deleted (when adding or deleting slices) so that the total width remains constant. This value may be specified in any of the forms described in the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>COORDINATES</em> manual section.</p></dd>
</dl>
</div>
<div id="section4" class="section"><h2><a name="section4">MEMBER PROCEDURES</a></h2>
<dl class="definitions">
<dt><a name="5">pie::newSlice <i class="arg">pieObject</i> <span class="opt">?labelText?</span></a></dt>
<dd><p>Creates a slice. A unique object identifier is returned (referred to as <em>sliceObject</em> in this document). The slice color is automatically allocated and the slice label placed using the specified labeler (using the <b class="option">-labeler</b> option). The slice itself is placed after (clockwise) the existing slices. The slice object identifier will be used for sizing and resizing the slice.</p>
<p>If the label text is not specified, it will be set to <em>&quot;slice n&quot;</em>, <em>n</em> being the number of the slice in the order of creation (first slice is number 1).</p></dd>
<dt><a name="6">pie::deleteSlice <i class="arg">pieObject</i> <i class="arg">sliceObject</i></a></dt>
<dd><p>Deletes a slice. The following slices (clockwise) if any are then moved to compensate for the empty space left by the deleted slice.</p></dd>
<dt><a name="7">pie::sizeSlice <i class="arg">pieObject</i> <i class="arg">sliceObject</i> <i class="arg">unitShare</i> <span class="opt">?displayedValue?</span></a></dt>
<dd><p>Sizes or resizes a slice. The slice is then automatically recalculated so it occupies the proper share of the whole pie. The <i class="arg">unitShare</i> parameter is a floating point number expressed in share (between 0 and 1) of the whole pie. The following slices (clockwise) are moved to accommodate the new slice size. The slice size value next to the slice label is also updated with the new share value or <i class="arg">displayedValue</i> if specified.</p></dd>
<dt><a name="8">pie::labelSlice <i class="arg">pieObject</i> <i class="arg">sliceObject</i> <i class="arg">string</i></a></dt>
<dd><p>Updates a slice label. Can be invoked at any time.</p></dd>
<dt><a name="9">pie::selectedSlices <i class="arg">pieObject</i></a></dt>
<dd><p>Returns a list of currently selected slice objects.</p></dd>
</dl>
</div>
<div id="section5" class="section"><h2><a name="section5">TAGS</a></h2>
<p>The whole pie, the pie graphics (all slices), and each slice have the following specific tags:</p>
<ul class="itemized">
  
<li><p><b class="variable">pie(pieObject)</b></p></li>
<li><p><b class="variable">pieSlices(pieObject)</b></p></li>
<li><p><b class="variable">slice(sliceObject)</b></p></li>
</ul>
<p>For example, the whole pie can be moved using the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <b class="cmd"><a href="../../../../index.html#key89">move</a></b> command on the pie tag, or bindings on slices can be set using the slice tags (see the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> manual page <em>ITEM IDS AND TAGS</em> section for more information).</p>
</div>
<div id="section6" class="section"><h2><a name="section6">SIZES</a></h2>
<p>All sizes related to pies are stored as floating point numbers. The coordinates and sizes are specified in screen units, which are floating point numbers optionally followed by one of several letters as specified in the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>COORDINATES</em> manual section.</p>
</div>
<div id="section7" class="section"><h2><a name="section7">LIMITATIONS</a></h2>
<p>If the number of slices is too big, identical colors will be used for some of the slices. You may set your own colors in this case.</p>
</div>
<div id="see-also" class="section"><h2><a name="see-also">See Also</a></h2>
<p><a href="canvaslabel.html">canvasLabel</a>, <a href="pieboxlabeler.html">pieBoxLabeler</a>, <a href="pieperipherallabeler.html">piePeripheralLabeler</a></p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key63">labeler</a>, <a href="../../../../index.html#key62">pie</a>, <a href="../../../../index.html#key61">slice</a></p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; 1995-2004 Jean-Luc Fontaine &lt;jfontain@free.fr&gt;</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/tkpiechart/pieboxlabeler.html.































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175

<html><head>
<title>pieBoxLabeler - pieBoxLabeler class</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/tkpiechart/pieboxlabeler.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; 1995-2004 Jean-Luc Fontaine &lt;jfontain@free.fr&gt;
   -->
<! -- CVS: $Id$ pieBoxLabeler.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">pieBoxLabeler(n) 6.6 tklib &quot;pieBoxLabeler class&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>pieBoxLabeler - tkpiechart pie box style labeler class</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">OPTIONS</a></li>
<li class="section"><a href="#section3">TAGS</a></li>
<li class="section"><a href="#see-also">See Also</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="syntax">
<li><a href="#1"><b class="cmd">stooop::new</b> <b class="class">pieBoxLabeler</b> <i class="arg">canvas</i> <span class="opt">?options?</span></a></li>
<li><a href="#2"><b class="cmd">switched::configure</b> <i class="arg">pieBoxLabelerObject</i> <span class="opt">?options?</span></a></li>
<li><a href="#3"><b class="cmd">switched::cget</b> <i class="arg">pieBoxLabelerObject</i> <i class="arg">option</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>The pie box style labeler object is used as a slice label placer for a <b class="class">pie</b> object and is passed to the pie constructor via its <b class="option">-labeler</b> option (see the <b class="class">pie</b> class manual).</p>
<p>The labels are arranged in 2 columns below the pie graphics. Each label text is placed to the right of a rectangle, the background color of which matches its corresponding slice. The slice share value is placed to the right of the label text, separated by a semicolon. Each label is actually a canvasLabel object (see the <b class="class">canvasLabel</b> class manual for further information).</p>
<p>There is no need to delete a <b class="class">pieBoxLabeler</b> object as it is automatically handled by the pie class.</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">stooop::new</b> <b class="class">pieBoxLabeler</b> <i class="arg">canvas</i> <span class="opt">?options?</span></a></dt>
<dd><p>Creates a pieBoxLabeler object in the specified Tk canvas. The pieBoxLabeler object identifier is returned (referred to as <em>pieBoxLabelerObject</em> in this document).</p></dd>
<dt><a name="2"><b class="cmd">switched::configure</b> <i class="arg">pieBoxLabelerObject</i> <span class="opt">?options?</span></a></dt>
<dd><p>Configures a pieBoxLabeler object or returns all the options with their current values if no options are passed as parameters.</p></dd>
<dt><a name="3"><b class="cmd">switched::cget</b> <i class="arg">pieBoxLabelerObject</i> <i class="arg">option</i></a></dt>
<dd><p>Returns an option value for the specified pieBoxLabeler object.</p></dd>
</dl>
</div>
<div id="section2" class="section"><h2><a name="section2">OPTIONS</a></h2>
<dl class="options">
<dt><b class="option">-font</b> value</dt>
<dd><p>Specifies a font for the slice labels. If not specified, the default font is system dependent.</p></dd>
<dt><b class="option">-justify</b> value</dt>
<dd><p>Specifies how to justify labels within their own column. Must be one of <em>left</em>, <em>center</em> or <em>right</em>. Defaults to <em>left</em>. For example, if justification is <em>right</em>, all column labels right edges are aligned.</p></dd>
<dt><b class="option">-offset</b> value</dt>
<dd><p>Specifies the distance between the pie graphics and the closest slice label. This value may be specified in any of the forms described in the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>COORDINATES</em> manual section.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">TAGS</a></h2>
<p>The labeler has the following specific tag (see the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> manual page <em>ITEM IDS AND TAGS</em> section for more information):</p>
<ul class="itemized">
  
<li><p>pieBoxLabeler(pieBoxLabelerObject)</p></li>
</ul>
</div>
<div id="see-also" class="section"><h2><a name="see-also">See Also</a></h2>
<p><a href="canvaslabel.html">canvasLabel</a>, <a href="pie.html">pie</a>, <a href="pieperipherallabeler.html">piePeripheralLabeler</a></p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key63">labeler</a>, <a href="../../../../index.html#key62">pie</a>, <a href="../../../../index.html#key61">slice</a></p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; 1995-2004 Jean-Luc Fontaine &lt;jfontain@free.fr&gt;</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/tkpiechart/pieperipherallabeler.html.







































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179

<html><head>
<title>piePeripheralLabeler - piePeripheralLabeler class</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/tkpiechart/pieperipherallabeler.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; 1995-2004 Jean-Luc Fontaine &lt;jfontain@free.fr&gt;
   -->
<! -- CVS: $Id$ piePeripheralLabeler.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">piePeripheralLabeler(n) 6.6 tklib &quot;piePeripheralLabeler class&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>piePeripheralLabeler - tkpiechart pie peripheral style labeler class</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">OPTIONS</a></li>
<li class="section"><a href="#section3">TAGS</a></li>
<li class="section"><a href="#see-also">See Also</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="syntax">
<li><a href="#1"><b class="cmd">stooop::new</b> <b class="class">piePeripheralLabeler</b> <i class="arg">canvas</i> <span class="opt">?options?</span></a></li>
<li><a href="#2"><b class="cmd">switched::configure</b> <i class="arg">piePeripheralLabelerObject</i> <span class="opt">?options?</span></a></li>
<li><a href="#3"><b class="cmd">switched::cget</b> <i class="arg">piePeripheralLabelerObject</i> <i class="arg">option</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>The pie peripheral style labeler object is used as a slice label placer for a <b class="class">pie</b> object and is passed to the pie constructor via its <b class="option">-labeler</b> option (see the <b class="class">pie</b> class manual).</p>
<p>The slice description text labels are arranged in 2 columns below the pie graphics, whereas the slice values are placed next to the slice and actually follow the slice as the pie is updated. Each description label text is placed to the right of a rectangle, the background color of which matches its corresponding slice. Each description label is actually a canvasLabel object.</p>
<p>There is no need to delete a <b class="class">piePeripheralLabeler</b> object as it is automatically handled by the pie class.</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">stooop::new</b> <b class="class">piePeripheralLabeler</b> <i class="arg">canvas</i> <span class="opt">?options?</span></a></dt>
<dd><p>Creates a piePeripheralLabeler object in the specified Tk canvas. The piePeripheralLabeler object identifier is returned (refered to as <em>piePeripheralLabelerObject</em> in this document).</p></dd>
<dt><a name="2"><b class="cmd">switched::configure</b> <i class="arg">piePeripheralLabelerObject</i> <span class="opt">?options?</span></a></dt>
<dd><p>Configures a piePeripheralLabeler object or returns all the options with their current values if no options are passed as parameters.</p></dd>
<dt><a name="3"><b class="cmd">switched::cget</b> <i class="arg">piePeripheralLabelerObject</i> <i class="arg">option</i></a></dt>
<dd><p>Returns an option value for the specified piePeripheralLabeler object.</p></dd>
</dl>
</div>
<div id="section2" class="section"><h2><a name="section2">OPTIONS</a></h2>
<dl class="options">
<dt><b class="option">-font</b> value</dt>
<dd><p>Specifies a font for the slice labels. If not specified, the default font is system dependent.</p></dd>
<dt><b class="option">-justify</b> value</dt>
<dd><p>Specifies how to justify labels within their own column. Must be one of <em>left</em>, <em>center</em> or <em>right</em>. Defaults to <em>left</em>. For example, if justification is <em>right</em>, all column labels right edges are aligned.</p></dd>
<dt><b class="option">-offset</b> value</dt>
<dd><p>Specifies the distance between the pie graphics and the closest slice label. This value may be specified in any of the forms described in the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> <em>COORDINATES</em> manual section.</p></dd>
<dt><b class="option">-smallfont</b></dt>
<dd><p>Specifies a font for the slice values. It is usually a small font in order to avoid values overlapping when 2 slices are very close to each other. If not specified, the description label font (<b class="option">-font</b> option) is used.</p></dd>
<dt><b class="option">-widestvaluetext</b></dt>
<dd><p>Specifies a string of maximum width for slice values (placed around the pie next to the slices), so that enough room is allocated for these value labels when the pie width and height are set. It defaults to 00.0. For example, it could be set to &quot;00.00 %&quot;.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">TAGS</a></h2>
<p>The labeler has the following specific tag (see the <b class="syscmd"><a href="../../../../index.html#key10">canvas</a></b> manual page <em>ITEM IDS AND TAGS</em> section for more information):</p>
<ul class="itemized">
  
<li><p>piePeripheralLabeler(piePeripheralLabelerObject)</p></li>
</ul>
</div>
<div id="see-also" class="section"><h2><a name="see-also">See Also</a></h2>
<p><a href="canvaslabel.html">canvasLabel</a>, <a href="pie.html">pie</a>, <a href="pieboxlabeler.html">pieBoxLabeler</a></p>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key10">canvas</a>, <a href="../../../../index.html#key63">labeler</a>, <a href="../../../../index.html#key62">pie</a>, <a href="../../../../index.html#key61">slice</a></p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; 1995-2004 Jean-Luc Fontaine &lt;jfontain@free.fr&gt;</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/tooltip/tooltip.html.



































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241

<html><head>
<title>tooltip - Tooltip management</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/tooltip/tooltip.html' by tcllib/doctools with format 'html'
   -->
<! -- Copyright &copy; 1996-2008, Jeffrey Hobbs
   -->
<! -- CVS: $Id$ tooltip.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">tooltip(n) 1.4.4 tklib &quot;Tooltip management&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>tooltip - Tooltip management</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">COMMANDS</a></li>
<li class="section"><a href="#section3">EXAMPLE</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.4</b></li>
<li>package require <b class="pkgname">msgcat 1.3</b></li>
<li>package require <b class="pkgname">tooltip <span class="opt">?1.4.4?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">::tooltip::tooltip</b> <i class="arg">command</i> <span class="opt">?<i class="arg">options</i>?</span></a></li>
<li><a href="#2"><b class="cmd">::tooltip::tooltip</b> <i class="arg">pathName</i> <span class="opt">?<i class="arg">option arg</i>?</span> <i class="arg">message</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides tooltips, small text messages that can be displayed
when the mouse hovers over a widget, menu item, canvas item, listbox item
or text widget tag.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">COMMANDS</a></h2>
<dl class="definitions">
<dt><a name="1"><b class="cmd">::tooltip::tooltip</b> <i class="arg">command</i> <span class="opt">?<i class="arg">options</i>?</span></a></dt>
<dd><p>Manage the tooltip package using the following subcommands.</p>
<dl class="options">
<dt><b class="option">clear</b> <i class="arg">index</i></dt>
<dd><p>Prevents the specified widgets from showing tooltips. <i class="arg">pattern</i> 
is a glob pattern and defaults to matching all widgets.</p></dd>
<dt><b class="option">delay</b> <span class="opt">?<i class="arg">millisecs</i>?</span></dt>
<dd><p>Query or set the hover delay. This is the interval that the pointer must remain
over the widget before the tooltip is displayed. The delay is specified in 
milliseconds and must be greater than 50ms.
With no argument the current delay is returned.</p></dd>
<dt><b class="option">fade</b> <span class="opt">?<i class="arg">boolean</i>?</span></dt>
<dd><p>Enable or disable fading of the tooltip.  The is enabled by default on Win32
and Aqua.  The tooltip will fade away on Leave events instead disappearing.</p></dd>
<dt><b class="option">disable</b></dt>
<dd></dd>
<dt><b class="option">off</b></dt>
<dd><p>Disable all tooltips</p></dd>
<dt><b class="option">enable</b></dt>
<dd></dd>
<dt><b class="option">on</b></dt>
<dd><p>Enables tooltips for defined widgets.</p></dd>
</dl></dd>
<dt><a name="2"><b class="cmd">::tooltip::tooltip</b> <i class="arg">pathName</i> <span class="opt">?<i class="arg">option arg</i>?</span> <i class="arg">message</i></a></dt>
<dd><p>This command arranges for widget <i class="arg">pathName</i> to display a tooltip with
message <i class="arg">message</i>.  The tooltip uses a late-binding msgcat call on the
passed in message to allow for on-the-fly language changes in an application.
If the widget specified is a menu, canvas or text widget then additional options
are used to tie the tooltip to specific menu entries, canvas items or text
tags.</p>
<dl class="options">
<dt><b class="option">-index</b> <i class="arg">index</i></dt>
<dd><p>This option is used to set a tooltip on a menu item. The index may be
either the entry index or the entry label. The widget must be a menu
widget but the entries do not have to exists when the tooltip is set.</p></dd>
<dt><b class="option">-items</b> <i class="arg">name</i></dt>
<dd><p>This option is used to set a tooltip for canvas widget or listbox items.
For the canvas widget, the item must already be present in the canvas
widget and will be found with a <b class="cmd">find withtag</b> lookup.
For listbox widgets the item(s) may be created later but the programmer
is responsible for managing the link between the listbox item index and the
corresponding tooltip. If the listbox items are re-ordered, the tooltips
will need amending.</p>
<p>If the widget is not a canvas or listbox then an error is raised.</p></dd>
<dt><b class="option">-tag</b> <i class="arg">name</i></dt>
<dd><p>The <b class="option">-tag</b> option can be used to set a tooltip for a text widget
tag. The tag should already be present when this command is called or
an error will be returned. The widget must also be a text widget.</p></dd>
</dl></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">EXAMPLE</a></h2>
<pre class="example">
# Demonstrate widget tooltip
package require tooltip
pack [label .l -text &quot;label&quot;]
tooltip::tooltip .l &quot;This is a label widget&quot;
</pre>
<pre class="example">
# Demonstrate menu tooltip
package require tooltip
. configure -menu [menu .menu]
.menu add cascade -label Test -menu [menu .menu.test -tearoff 0]
.menu.test add command -label Tooltip
tooltip::tooltip .menu.test -index 0 &quot;This is a menu tooltip&quot;
</pre>
<pre class="example">
# Demonstrate canvas item tooltip
package require tooltip
pack [canvas .c]
set item [.c create rectangle 10 10 80 80]
tooltip::tooltip .c -item $item &quot;Canvas item tooltip&quot;
</pre>
<pre class="example">
# Demonstrate listbox item tooltip
package require tooltip
pack [listbox .lb]
.lb insert 0 &quot;item one&quot;
tooltip::tooltip .lb -item 0 &quot;Listbox item tooltip&quot;
</pre>
<pre class="example">
# Demonstrate text tag tooltip
package require tooltip
pack [text .txt]
.txt tag configure TIP-1 -underline 1
tooltip::tooltip .txt -tag TIP-1 &quot;tooltip one text&quot;
.txt insert end &quot;An example of a &quot; {} &quot;tooltip&quot; TIP-1 &quot; tag.\n&quot; {}
</pre>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key99">balloon</a>, <a href="../../../../index.html#key98">help</a>, <a href="../../../../index.html#key97">hover</a>, <a href="../../../../index.html#key100">tooltip</a></p>
</div>
<div id="copyright" class="section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; 1996-2008, Jeffrey Hobbs</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/widget/widget.html.





































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194

<html><head>
<title>widget - Various megawidgets</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/widget/widget.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ widget.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">widget(n) 3.0 tklib &quot;Various megawidgets&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>widget - Megawidget bundle</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">WIDGETS</a></li>
<li class="section"><a href="#section3">EXAMPLE</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#category">Category</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.4</b></li>
<li>package require <b class="pkgname">Tk 8.4</b></li>
<li>package require <b class="pkgname">widget <span class="opt">?3.0?</span></b></li>
<li>package require <b class="pkgname">snit</b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">widget::validate</b> <i class="arg">as</i> <span class="opt">?options?</span></a></li>
<li><a href="#2"><b class="cmd">widget::calendar</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
<li><a href="#3"><b class="cmd">widget::dateentry</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
<li><a href="#4"><b class="cmd">widget::dialog</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
<li><a href="#5"><b class="cmd">widget::menuentry</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
<li><a href="#6"><b class="cmd">widget::panelframe</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
<li><a href="#7"><b class="cmd">widget::ruler</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
<li><a href="#8"><b class="cmd">widget::screenruler</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
<li><a href="#9"><b class="cmd">widget::scrolledwindow</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
<li><a href="#10"><b class="cmd">widget::statusbar</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
<li><a href="#11"><b class="cmd">widget::superframe</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
<li><a href="#12"><b class="cmd">widget::toolbar</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides megawidgets based on the snit oo system (snidgets).
It makes use of the Tile/Ttk themed widget set.</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">widget::validate</b> <i class="arg">as</i> <span class="opt">?options?</span></a></dt>
<dd><p>commands:</p></dd>
</dl>
</div>
<div id="section2" class="section"><h2><a name="section2">WIDGETS</a></h2>
<dl class="definitions">
<dt><a name="2"><b class="cmd">widget::calendar</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd><p>options:</p></dd>
<dt><a name="3"><b class="cmd">widget::dateentry</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd><p>options:</p></dd>
<dt><a name="4"><b class="cmd">widget::dialog</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd><p>options:</p></dd>
<dt><a name="5"><b class="cmd">widget::menuentry</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd><p>options:</p></dd>
<dt><a name="6"><b class="cmd">widget::panelframe</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd><p>options:</p></dd>
<dt><a name="7"><b class="cmd">widget::ruler</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd><p>options:</p></dd>
<dt><a name="8"><b class="cmd">widget::screenruler</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd><p>options:</p></dd>
<dt><a name="9"><b class="cmd">widget::scrolledwindow</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd><p>options:</p></dd>
<dt><a name="10"><b class="cmd">widget::statusbar</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd><p>options:</p></dd>
<dt><a name="11"><b class="cmd">widget::superframe</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd><p>options:</p></dd>
<dt><a name="12"><b class="cmd">widget::toolbar</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd><p>options:</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">EXAMPLE</a></h2>
<pre class="example">
package require widget::superframe ; # or widget::all
pack [widget::superframe .f -type separator -text &quot;SuperFrame:&quot;]
</pre>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key23">bundle</a>, <a href="../../../../index.html#key24">calendar</a>, <a href="../../../../index.html#key0">dateentry</a>, <a href="../../../../index.html#key17">dialog</a>, <a href="../../../../index.html#key4">megawidget</a>, <a href="../../../../index.html#key26">menu</a>, <a href="../../../../index.html#key19">panelframe</a>, <a href="../../../../index.html#key25">ruler</a>, <a href="../../../../index.html#key21">screenruler</a>, <a href="../../../../index.html#key16">scrolledwindow</a>, <a href="../../../../index.html#key3">snit</a>, <a href="../../../../index.html#key20">statusbar</a>, <a href="../../../../index.html#key22">superframe</a>, <a href="../../../../index.html#key18">toolbar</a>, <a href="../../../../index.html#key1">widget</a></p>
</div>
<div id="category" class="section"><h2><a name="category">Category</a></h2>
<p>Widget</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/widget/widget_calendar.html.







































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211

<html><head>
<title>widget_calendar - Various megawidgets</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/widget/widget_calendar.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ widget_calendar.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">widget_calendar(n) 1.0.1 tklib &quot;Various megawidgets&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>widget_calendar - Calendar Megawidget</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">WIDGET OPTIONS</a></li>
<li class="section"><a href="#section3">WIDGET COMMAND</a></li>
<li class="section"><a href="#section4">DEFAULT BINDINGS</a></li>
<li class="section"><a href="#section5">EXAMPLE</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#category">Category</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.4</b></li>
<li>package require <b class="pkgname">Tk 8.4</b></li>
<li>package require <b class="pkgname">widget <span class="opt">?3.0?</span></b></li>
<li>package require <b class="pkgname">widget::calendar <span class="opt">?1.0.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">widget::calendar</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a calendar megawidget (snidget).</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">widget::calendar</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd></dd>
</dl>
</div>
<div id="section2" class="section"><h2><a name="section2">WIDGET OPTIONS</a></h2>
<dl class="options">
<dt><b class="option">-command</b></dt>
<dd><p>A script to evaluate when a date was selected.</p></dd>
<dt><b class="option">-dateformat</b></dt>
<dd><p>The format of the date that is returned. Default: %m/%d/%Y.</p></dd>
<dt><b class="option">-firstday</b></dt>
<dd><p>Set first day the week, Either sunday or monday. It defaults to monday.</p></dd>
<dt><b class="option">-font</b></dt>
<dd><p>Select the font used in the widget. It defaults to Helvetica 9.</p></dd>
<dt><b class="option">-highlightcolor</b></dt>
<dd><p>Selects the background color for the day that has been selected. Default: #FFCC00</p></dd>
<dt><b class="option">-language</b></dt>
<dd><p>Specify language of the calendar contents. The language is specified
by abbreviations of the languge, for example: en - english, de - german ...
It defaults to en.</p>
<p>Supported languages: de en es fr gr he it ja sv pl pt zh fi tr nl ru crk crx-nak crx-lhe</p></dd>
<dt><b class="option">-shadecolor</b></dt>
<dd><p>Selects the color of the parts that have a shaded background. Default: #888888</p></dd>
<dt><b class="option">-showpast</b></dt>
<dd><p>Specify if the past shall be shown. It is a boolean value and defaults
to 1.</p></dd>
<dt><b class="option">-textvariable</b></dt>
<dd><p>Specifies the name of a variable whose value is linked to the entry widget's contents.
Whenever the variable changes value, the widget's contents are updated, and
vice versa.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">WIDGET COMMAND</a></h2>
<p><i class="arg">pathname</i> <b class="cmd">get</b> <span class="opt">?<i class="arg">what</i>?</span></p>
<p>Returns a part of the selected date or 'all'. The argument <i class="arg">what</i> selects
the part. Valid values for <i class="arg">what</i> are: day, month, year and all.
'all' is the default and returns the complete date in the format given
with -dateformat.</p>
</div>
<div id="section4" class="section"><h2><a name="section4">DEFAULT BINDINGS</a></h2>
<p>On creation of the calendar widget the following bindings are installed.
When pressing a key the command is invoked and the textvariable is
updated.
updated.</p>
<ul class="itemized">
<li><p>Home - Move to the current date</p></li>
<li><p>Up - Move to week before current date</p></li>
<li><p>Down - Move to week after current date</p></li>
<li><p>Left - Move to day before current date</p></li>
<li><p>Right - Move to day after current date</p></li>
<li><p>Control-Left - Move to month before current date</p></li>
<li><p>Control-Right - Move to month after current date</p></li>
<li><p>Control-Up - Move to year before current date</p></li>
<li><p>Control-Down - Move to year after current date</p></li>
</ul>
</div>
<div id="section5" class="section"><h2><a name="section5">EXAMPLE</a></h2>
<pre class="example">
    package require widget::calendar ; # or widget::all
    set t [widget::calendar .t]
    pack $t -fill x -expand 1
</pre>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key24">calendar</a>, <a href="../../../../index.html#key2">date</a>, <a href="../../../../index.html#key4">megawidget</a>, <a href="../../../../index.html#key3">snit</a>, <a href="../../../../index.html#key1">widget</a></p>
</div>
<div id="category" class="section"><h2><a name="category">Category</a></h2>
<p>Widget</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/widget/widget_dateentry.html.















































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199

<html><head>
<title>widget_dateentry - Various megawidgets</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/widget/widget_dateentry.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ widget_dateentry.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">widget_dateentry(n) 0.96 tklib &quot;Various megawidgets&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>widget_dateentry - Date Entry Megawidget</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">WIDGET OPTIONS</a></li>
<li class="section"><a href="#section3">WIDGET COMMAND</a></li>
<li class="section"><a href="#section4">DEFAULT BINDINGS</a></li>
<li class="section"><a href="#section5">EXAMPLE</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#category">Category</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.4</b></li>
<li>package require <b class="pkgname">Tk 8.4</b></li>
<li>package require <b class="pkgname">widget <span class="opt">?3.0?</span></b></li>
<li>package require <b class="pkgname">widget::dateentry <span class="opt">?0.96?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">widget::dateentry</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a dateentry megawidget (snidget).
It is based on an ttk::entry. All widget commands of the ttk::entry
are available for the dateentry.</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">widget::dateentry</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd></dd>
</dl>
</div>
<div id="section2" class="section"><h2><a name="section2">WIDGET OPTIONS</a></h2>
<dl class="options">
<dt><b class="option">-command</b></dt>
<dd><p>A script to evaluate when a date was selected.</p></dd>
<dt><b class="option">-dateformat</b></dt>
<dd><p>The format of the date that is returned. Default: %m/%d/%Y.</p></dd>
<dt><b class="option">-firstday</b></dt>
<dd><p>See the calendar man page.</p></dd>
<dt><b class="option">-font</b></dt>
<dd><p>Select the font used in the widget. It defaults to Helvetica 9.</p></dd>
<dt><b class="option">-highlightcolor</b></dt>
<dd><p>See the calendar man page.</p></dd>
<dt><b class="option">-language</b></dt>
<dd><p>See the calendar man page.</p></dd>
<dt><b class="option">-shadecolor</b></dt>
<dd><p>See the calendar man page.</p></dd>
<dt><b class="option">-showpast</b></dt>
<dd><p>See the calendar man page.</p></dd>
<dt><b class="option">-textvariable</b></dt>
<dd><p>Specifies the name of a variable whose value is linked to the entry widget's contents.
Whenever the variable changes value, the widget's contents are updated, and
vice versa.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">WIDGET COMMAND</a></h2>
<p><i class="arg">pathname</i> <b class="cmd">get</b>
Returns the selected date.</p>
</div>
<div id="section4" class="section"><h2><a name="section4">DEFAULT BINDINGS</a></h2>
<p>On creation of the dateentry widget the following bindings are installed.
For navigation within the calendar, see its manpage.</p>
<ul class="itemized">
<li><p>Button-1 - Accept and select the date and close the calendar window.</p></li>
<li><p>Return, space - Accept the selected date and close the calendar window</p></li>
<li><p>Escape - Close calendar window</p></li>
<li><p>Control-space - Show calendar window</p></li>
</ul>
</div>
<div id="section5" class="section"><h2><a name="section5">EXAMPLE</a></h2>
<pre class="example">
    package require widget::dateentry; # or widget::all
    set t [widget::dateentry .de]
    pack $t -fill x -expand 1
</pre>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key2">date</a>, <a href="../../../../index.html#key0">dateentry</a>, <a href="../../../../index.html#key4">megawidget</a>, <a href="../../../../index.html#key3">snit</a>, <a href="../../../../index.html#key1">widget</a></p>
</div>
<div id="category" class="section"><h2><a name="category">Category</a></h2>
<p>Widget</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/widget/widget_toolbar.html.



























































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205

<html><head>
<title>widget_toolbar - Various megawidgets</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/widget/widget_toolbar.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ widget_toolbar.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">widget_toolbar(n) 3.0 tklib &quot;Various megawidgets&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>widget_toolbar - Toolbar Megawidget</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">WIDGET OPTIONS</a></li>
<li class="section"><a href="#section3">ITEM OPTIONS</a></li>
<li class="section"><a href="#section4">EXAMPLE</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
<li class="section"><a href="#category">Category</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.4</b></li>
<li>package require <b class="pkgname">Tk 8.4</b></li>
<li>package require <b class="pkgname">widget <span class="opt">?3.0?</span></b></li>
<li>package require <b class="pkgname">widget::toolbar <span class="opt">?1.0?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">widget::toolbar</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
<li><a href="#2">getframe</a></li>
<li><a href="#3">add <span class="opt">?item?</span> <span class="opt">?args?</span></a></li>
<li><a href="#4">delete item1 <span class="opt">?item2?</span> <span class="opt">?...?</span></a></li>
<li><a href="#5">itemcget symbol option</a></li>
<li><a href="#6">itemconfigure symbol <span class="opt">?args?</span></a></li>
<li><a href="#7">items <span class="opt">?pattern?</span></a></li>
<li><a href="#8">remove <span class="opt">?-destroy?</span> item1 <span class="opt">?item2?</span> <span class="opt">?...?</span></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a toolbar megawidget (snidget).
It makes use of the Tile/Ttk themed widget set.</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">widget::toolbar</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd></dd>
<dt><a name="2">getframe</a></dt>
<dd></dd>
<dt><a name="3">add <span class="opt">?item?</span> <span class="opt">?args?</span></a></dt>
<dd></dd>
<dt><a name="4">delete item1 <span class="opt">?item2?</span> <span class="opt">?...?</span></a></dt>
<dd></dd>
<dt><a name="5">itemcget symbol option</a></dt>
<dd></dd>
<dt><a name="6">itemconfigure symbol <span class="opt">?args?</span></a></dt>
<dd></dd>
<dt><a name="7">items <span class="opt">?pattern?</span></a></dt>
<dd></dd>
<dt><a name="8">remove <span class="opt">?-destroy?</span> item1 <span class="opt">?item2?</span> <span class="opt">?...?</span></a></dt>
<dd></dd>
</dl>
</div>
<div id="section2" class="section"><h2><a name="section2">WIDGET OPTIONS</a></h2>
<dl class="options">
<dt><b class="option">-ipad</b></dt>
<dd></dd>
<dt><b class="option">-pad</b></dt>
<dd></dd>
<dt><b class="option">-separator</b></dt>
<dd></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">ITEM OPTIONS</a></h2>
<dl class="options">
<dt><b class="option">-pad</b></dt>
<dd></dd>
<dt><b class="option">-separator</b></dt>
<dd></dd>
<dt><b class="option">-sticky</b></dt>
<dd></dd>
<dt><b class="option">-weight</b></dt>
<dd></dd>
</dl>
</div>
<div id="section4" class="section"><h2><a name="section4">EXAMPLE</a></h2>
<pre class="example">
package require widget::toolbar ; # or widget::all
set t [widget::toolbar .t]
pack $t -fill x -expand 1
$t add button [button .b -text foo]
$t add separator -pad {2 4}
$t add button [button .c -text bar]
</pre>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key4">megawidget</a>, <a href="../../../../index.html#key3">snit</a>, <a href="../../../../index.html#key18">toolbar</a>, <a href="../../../../index.html#key1">widget</a></p>
</div>
<div id="category" class="section"><h2><a name="category">Category</a></h2>
<p>Widget</p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/widgetl/widget_listentry.html.

























































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380

<html><head>
<title>widget_listentry - widget::listentry widget</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/widgetl/widget_listentry.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ widget_listentry.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">widget_listentry(n) 0.1 tklib &quot;widget::listentry widget&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>widget_listentry - widget::listentry widget</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">Class API</a></li>
<li class="section"><a href="#section3">Instance API</a></li>
<li class="section"><a href="#section4">Widget Options</a>
<ul>
<li class="subsection"><a href="#subsection1">Widget Construction-Time Only Options</a></li>
<li class="subsection"><a href="#subsection2">Widget General Options</a></li>
</ul>
</li>
<li class="section"><a href="#section5">Example</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">widget::listentry <span class="opt">?0.1?</span></b></li>
<li>package require <b class="pkgname">widget::validator <span class="opt">?0.1?</span></b></li>
<li>package require <b class="pkgname">widget::scrolledwindow</b></li>
<li>package require <b class="pkgname">snit</b></li>
<li>package require <b class="pkgname">tooltip</b></li>
<li>package require <b class="pkgname">img::png</b></li>
<li>package require <b class="pkgname">msgcat</b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">widget::listentry</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
<li><a href="#2"><b class="cmd">widgetCmd</b> <b class="method">destroy</b></a></li>
<li><a href="#3"><b class="cmd">widgetCmd</b> <b class="method">configure</b></a></li>
<li><a href="#4"><b class="cmd">widgetCmd</b> <b class="method">configure</b> <i class="arg">option</i> <i class="arg">value</i> ...</a></li>
<li><a href="#5"><b class="cmd">widgetCmd</b> <b class="method">configure</b> <i class="arg">option</i></a></li>
<li><a href="#6"><b class="cmd">widgetCmd</b> <b class="method">cget</b> <i class="arg">option</i></a></li>
<li><a href="#7"><i class="arg">{*}cmdprefix</i> <b class="method">get</b></a></li>
<li><a href="#8"><i class="arg">{*}cmdprefix</i> <b class="method">set</b> <i class="arg">values</i></a></li>
<li><a href="#9"><i class="arg">{*}cmdprefix</i> <i class="arg">text</i> <i class="arg">errvar</i></a></li>
<li><a href="#10"><i class="arg">{*}cmdprefix</i> <i class="arg">text</i></a></li>
<li><a href="#11"><i class="arg">{*}cmdprefix</i> <i class="arg">cookievar</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a megawidget for the interactive entry of
ordered and unordered lists.
For a simpler and more restricted megawidget please see the
package <b class="package">widget::listsimple</b>.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">Class API</a></h2>
<p>The widget class supports a single command, for the creation of widgets.</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">widget::listentry</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd><p>This command creates and configures new instances of the widget.</p>
<p>For details on the available options please see section
<span class="sectref"><a href="#section4">Widget Options</a></span>.</p>
<p>The result of the command is the pathname of the new widget.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">Instance API</a></h2>
<p>All widget instances supported the following methods.</p>
<dl class="definitions">
<dt><a name="2"><b class="cmd">widgetCmd</b> <b class="method">destroy</b></a></dt>
<dd><p>This method destroys the widget.
Any further access to the widget will generate errors.</p>
<p>The result of the command is the empty string.</p></dd>
<dt><a name="3"><b class="cmd">widgetCmd</b> <b class="method">configure</b></a></dt>
<dd><p>This method comes in three variants. This variant here returns a list
containing the current configuration of the widget, i.e. the values
for all options.</p>
<p>For details on the available options please see section
<span class="sectref"><a href="#section4">Widget Options</a></span>.</p></dd>
<dt><a name="4"><b class="cmd">widgetCmd</b> <b class="method">configure</b> <i class="arg">option</i> <i class="arg">value</i> ...</a></dt>
<dd><p>This method comes in three variants. This variant here reconfigures
the widget, setting the specified options to the given values.</p>
<p><em>Note</em> that it is not possible to change the
construction-time only options.</p>
<p>For details on the available options please see section
<span class="sectref"><a href="#subsection2">Widget General Options</a></span>.</p>
<p>The result of the command is the empty string.</p></dd>
<dt><a name="5"><b class="cmd">widgetCmd</b> <b class="method">configure</b> <i class="arg">option</i></a></dt>
<dd><p>This method comes in three variants. This variant here is an alias
for the method <b class="method">cget</b> below and identical to it.</p></dd>
<dt><a name="6"><b class="cmd">widgetCmd</b> <b class="method">cget</b> <i class="arg">option</i></a></dt>
<dd><p>This method returns the current value of the specified <i class="arg">option</i>.</p>
<p>For details on the available options please see section
<span class="sectref"><a href="#section4">Widget Options</a></span>.</p></dd>
</dl>
</div>
<div id="section4" class="section"><h2><a name="section4">Widget Options</a></h2>
<p>This section explains all the options available to instances of
<b class="class">widget::listentry</b>. Please note that a few of the options
can be set only at instance construction time. The majority of the
options can however be set both during construction- and runtime.</p>
<div id="subsection1" class="subsection"><h3><a name="subsection1">Widget Construction-Time Only Options</a></h3>
<dl class="options">
<dt><b class="option">-ordered</b> boolean</dt>
<dd><p>This options tells the new widget instance whether the list it manages
is ordered or not. If it is ordered the widget will show buttons with
which the selected entries can be moved around, editing the order.</p>
<p>The default is <b class="const">false</b>, indicating an unordered list.</p></dd>
<dt><b class="option">-allow-duplicates</b> boolean</dt>
<dd><p>This options tells the new widget instance whether we are allowed to
add a string to the list multiple times, or not.</p>
<p>The default is <b class="const">false</b>, indicating that duplicates are not
allowed.</p></dd>
<dt><b class="option">-values</b> cmdprefix</dt>
<dd><p>This option specifies a callback for the management of a predefined
list of strings a user may enter.</p>
<p>If specified the widget will use a combobox instead of a plain
entry field and fill its list during widget construction using the data
delivered by this callback.
The callback will be further invoked whenever a new value is entered
into the main list, to save the extended list of predefined values.</p>
<p>The signature of this callback is</p>
<dl class="definitions">
<dt><a name="7"><i class="arg">{*}cmdprefix</i> <b class="method">get</b></a></dt>
<dd><p>In this form the callback is expected to return a list of strings.
The strings are loaded into the list of the internal combobox for
quick access by the user.</p>
<p>It will be invoked once, during widget construction, to load the
list of predefined strings a user may enter.</p></dd>
<dt><a name="8"><i class="arg">{*}cmdprefix</i> <b class="method">set</b> <i class="arg">values</i></a></dt>
<dd><p>In this form the callback is given a list of new strings and
expected to save them somewhere for future use.</p>
<p>The return value of the callback is ignored.</p>
<p>This form is invoked whenever the user entered a new string
into the main list. The order of strings in <i class="arg">values</i> represents
the order used to show them in the combobox's list.</p></dd>
</dl></dd>
<dt><b class="option">-validate</b> cmdprefix</dt>
<dd><p>This option specifies a callback which is invoked after every change of
the contents of the internal entry field. The signature of this callback is</p>
<dl class="definitions">
<dt><a name="9"><i class="arg">{*}cmdprefix</i> <i class="arg">text</i> <i class="arg">errvar</i></a></dt>
<dd><p>where <i class="arg">text</i> is the string to validate, and <i class="arg">errvar</i> the name of
a variable the callback can store an error message into when it detects
invalid data.</p>
<p>The widget expects that the callback returns a boolean value, where
<b class="const">true</b> indicates that <i class="arg">text</i> is valid.</p></dd>
</dl>
<p>The default validation, when no callback was specified, will treat the
empty string as invalid, and everything else as valid.</p>
<p><em>Please note</em> that the widget will prevent the entry of
duplicate values into the main list, regardless of the validity of the
input otherwise. This is in keeping with that this widget is meant for
the entry of unordered lists, essentially a set of strings.</p></dd>
<dt><b class="option">-transform</b> cmdprefix</dt>
<dd><p>This option specifies a callback which is invoked whenever a newly
entered element is moved from the entry field to the main list, or the
entry field is validated, as part of a check for duplicates, if such are
not allowed. The callback is given the text in the entry field and has
to return the text which is actually added to, or checked against the list.</p>
<p>The use case for this callback is essentially
<i class="term">input normalization</i>. The most simple case of such would be, for
example the use of</p>
<pre class="example">string tolower</pre>
<p>to impose a standard letter
case on the data. More complex example can be thought of, like rewriting
of multiple syntaxes of input to a canonical form.
The signature of this callback is</p>
<dl class="definitions">
<dt><a name="10"><i class="arg">{*}cmdprefix</i> <i class="arg">text</i></a></dt>
<dd><p>where <i class="arg">text</i> is the string to transform.</p>
<p>The widget expects that the callback returns the transformed string.</p></dd>
</dl>
<p>The default is to not transform the entered strings.</p></dd>
<dt><b class="option">-browse</b> cmdprefix</dt>
<dd><p>If this option is specified the widget will display a &quot;Search&quot; button
and invoke the callback provided by the option whenever the user clicks
on that button.
The signature of the callback is</p>
<dl class="definitions">
<dt><a name="11"><i class="arg">{*}cmdprefix</i> <i class="arg">cookievar</i></a></dt>
<dd><p>where the cookie variable provides access to context information the
callback may wish to preserve between invokations. The initial value
stored in the variable is the empty string. After that it is whatever
the callback wishes to store.</p>
<p>The widget expects that the callback returns a list of strings,
which are then added to the list, modulo validity and duplicate checks.</p></dd>
</dl>
<p>By default there is no browse callback and no button shown.</p></dd>
</dl>
</div>
<div id="subsection2" class="subsection"><h3><a name="subsection2">Widget General Options</a></h3>
<dl class="options">
<dt><b class="option">-listvariable</b> varname</dt>
<dd><p>This option specifies the variable holding the list to be manipulated by
the widget. Any changes to the list outside of the widget are automatically
imported into the widget. Similarly, all changes made to the list by the
widget are automatically exported to this variable.</p></dd>
<dt><b class="option">-state</b> normal|disabled</dt>
<dd><p>This option specifies the status of the widget, <b class="const">normal</b> (= active),
or <b class="const">disabled</b>. A disabled widget can not be edited.</p>
<p>The default is <b class="const">normal</b>.</p></dd>
<dt><b class="option">-height</b> integer</dt>
<dd><p>This option specifies the height of the internal listbox, in lines.</p>
<p>The default is <b class="const">20</b>.</p></dd>
<dt><b class="option">-skin-add</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-remove</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-up</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-down</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-browse</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-add</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-remove</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-up</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-down</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-browse</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-main</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-entry</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-list</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-empty</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-duplicate</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-add-none</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-remove-none</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-img-add</b> image</dt>
<dd></dd>
<dt><b class="option">-skin-img-remove</b> image</dt>
<dd></dd>
<dt><b class="option">-skin-img-up</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-img-down</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-img-browse</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-invalid-color</b> color</dt>
<dd><p>These options all modify the appearance of the widget, i.e. its skin.</p>
<p>All options taking a string argument influence the various labels
shown, with the <b class="option">-skin-tip-*</b> options influencing the tooltips
shown on hovering the over various parts in particular.</p>
<p>All the strings are run through <b class="package">msgcat</b> first, enabling
text localization through message catalogs. The default values are keys
into the message catalogs which are part of the package itself.</p>
<p>The options taking images modify the images shown on the buttons
for adding and removing elements of the list. They default to the PNG
images distributed with the package itself.</p>
<p>The single option taking a color value modifies the color used to
highlight invalid data entered into the internal entry field of the
widget. This option defaults to <b class="const">yellow</b>.</p></dd>
</dl>
</div>
</div>
<div id="section5" class="section"><h2><a name="section5">Example</a></h2>
<pre class="example"></pre>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key120">data entry lists</a>, <a href="../../../../index.html#key116">data entry ordered list</a>, <a href="../../../../index.html#key119">data entry set of strings</a>, <a href="../../../../index.html#key115">data entry unordered list</a>, <a href="../../../../index.html#key118">list entry panel</a>, <a href="../../../../index.html#key117">set entry panel</a>, <a href="../../../../index.html#key1">widget</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/widgetl/widget_listsimple.html.







































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307

<html><head>
<title>widget_listsimple - widget::listsimple widget</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/widgetl/widget_listsimple.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ widget_listsimple.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">widget_listsimple(n) 0.1 tklib &quot;widget::listsimple widget&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>widget_listsimple - widget::listsimple widget</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">Class API</a></li>
<li class="section"><a href="#section3">Instance API</a></li>
<li class="section"><a href="#section4">Widget Options</a>
<ul>
<li class="subsection"><a href="#subsection1">Widget Construction-Time Only Options</a></li>
<li class="subsection"><a href="#subsection2">Widget General Options</a></li>
</ul>
</li>
<li class="section"><a href="#section5">Example</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">widget::listsimple <span class="opt">?0.1?</span></b></li>
<li>package require <b class="pkgname">widget::validator <span class="opt">?0.1?</span></b></li>
<li>package require <b class="pkgname">widget::scrolledwindow</b></li>
<li>package require <b class="pkgname">snit</b></li>
<li>package require <b class="pkgname">tooltip</b></li>
<li>package require <b class="pkgname">img::png</b></li>
<li>package require <b class="pkgname">msgcat</b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">widget::listsimple</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></li>
<li><a href="#2"><b class="cmd">widgetCmd</b> <b class="method">destroy</b></a></li>
<li><a href="#3"><b class="cmd">widgetCmd</b> <b class="method">configure</b></a></li>
<li><a href="#4"><b class="cmd">widgetCmd</b> <b class="method">configure</b> <i class="arg">option</i> <i class="arg">value</i> ...</a></li>
<li><a href="#5"><b class="cmd">widgetCmd</b> <b class="method">configure</b> <i class="arg">option</i></a></li>
<li><a href="#6"><b class="cmd">widgetCmd</b> <b class="method">cget</b> <i class="arg">option</i></a></li>
<li><a href="#7"><i class="arg">{*}cmdprefix</i> <b class="method">get</b></a></li>
<li><a href="#8"><i class="arg">{*}cmdprefix</i> <b class="method">set</b> <i class="arg">values</i></a></li>
<li><a href="#9"><i class="arg">{*}cmdprefix</i> <i class="arg">text</i> <i class="arg">errvar</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a megawidget for the interactive entry of unordered lists.
For a megawidget allowing the entry of ordered lists, and more, please see the
package <b class="package">widget::listentry</b>.</p>
</div>
<div id="section2" class="section"><h2><a name="section2">Class API</a></h2>
<p>The widget class supports a single command, for the creation of widgets.</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">widget::listsimple</b> <i class="arg">pathname</i> <span class="opt">?options?</span></a></dt>
<dd><p>This command creates and configures new instances of the widget.</p>
<p>For details on the available options please see section
<span class="sectref"><a href="#section4">Widget Options</a></span>.</p>
<p>The result of the command is the pathname of the new widget.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">Instance API</a></h2>
<p>All widget instances supported the following methods.</p>
<dl class="definitions">
<dt><a name="2"><b class="cmd">widgetCmd</b> <b class="method">destroy</b></a></dt>
<dd><p>This method destroys the widget.
Any further access to the widget will generate errors.</p>
<p>The result of the command is the empty string.</p></dd>
<dt><a name="3"><b class="cmd">widgetCmd</b> <b class="method">configure</b></a></dt>
<dd><p>This method comes in three variants. This variant here returns a list
containing the current configuration of the widget, i.e. the values
for all options.</p>
<p>For details on the available options please see section
<span class="sectref"><a href="#section4">Widget Options</a></span>.</p></dd>
<dt><a name="4"><b class="cmd">widgetCmd</b> <b class="method">configure</b> <i class="arg">option</i> <i class="arg">value</i> ...</a></dt>
<dd><p>This method comes in three variants. This variant here reconfigures
the widget, setting the specified options to the given values.</p>
<p><em>Note</em> that it is not possible to change the
construction-time only options.</p>
<p>For details on the available options please see section
<span class="sectref"><a href="#subsection2">Widget General Options</a></span>.</p>
<p>The result of the command is the empty string.</p></dd>
<dt><a name="5"><b class="cmd">widgetCmd</b> <b class="method">configure</b> <i class="arg">option</i></a></dt>
<dd><p>This method comes in three variants. This variant here is an alias
for the method <b class="method">cget</b> below and identical to it.</p></dd>
<dt><a name="6"><b class="cmd">widgetCmd</b> <b class="method">cget</b> <i class="arg">option</i></a></dt>
<dd><p>This method returns the current value of the specified <i class="arg">option</i>.</p>
<p>For details on the available options please see section
<span class="sectref"><a href="#section4">Widget Options</a></span>.</p></dd>
</dl>
</div>
<div id="section4" class="section"><h2><a name="section4">Widget Options</a></h2>
<p>This section explains all the options available to instances of
<b class="class">widget::listsimple</b>. Please note that a few of the options
can be set only at instance construction time. The majority of the
options can however be set both during construction- and runtime.</p>
<div id="subsection1" class="subsection"><h3><a name="subsection1">Widget Construction-Time Only Options</a></h3>
<dl class="options">
<dt><b class="option">-values</b> cmdprefix</dt>
<dd><p>This option specifies a callback for the management of a predefined
list of strings a user may enter.</p>
<p>If specified the widget will use a combobox instead of a plain
entry field and fill its list during widget construction using the data
delivered by this callback.
The callback will be further invoked whenever a new value is entered
into the main list, to save the extended list of predefined values.</p>
<p>The signature of this callback is</p>
<dl class="definitions">
<dt><a name="7"><i class="arg">{*}cmdprefix</i> <b class="method">get</b></a></dt>
<dd><p>In this form the callback is expected to return a list of strings.
The strings are loaded into the list of the internal combobox for
quick access by the user.</p>
<p>It will be invoked once, during widget construction, to load the
list of predefined strings a user may enter.</p></dd>
<dt><a name="8"><i class="arg">{*}cmdprefix</i> <b class="method">set</b> <i class="arg">values</i></a></dt>
<dd><p>In this form the callback is given a list of new strings and
expected to save them somewhere for future use.</p>
<p>The return value of the callback is ignored.</p>
<p>This form is invoked whenever the user entered a new string
into the main list. The order of strings in <i class="arg">values</i> represents
the order used to show them in the combobox's list.</p></dd>
</dl></dd>
<dt><b class="option">-validate</b> cmdprefix</dt>
<dd><p>This option specifies a callback which is invoked after every change of
the contents of the internal entry field. The signature of this callback is</p>
<dl class="definitions">
<dt><a name="9"><i class="arg">{*}cmdprefix</i> <i class="arg">text</i> <i class="arg">errvar</i></a></dt>
<dd><p>where <i class="arg">text</i> is the string to validate, and <i class="arg">errvar</i> the name of
a variable the callback can store an error message into when it detects
invalid data.</p>
<p>The system expects that the callback returns a boolean value, where
<b class="const">true</b> indicates that <i class="arg">text</i> is valid.</p></dd>
</dl>
<p>The default validation, when no callback was specified, will treat the
empty string as invalid, and everything else as valid.</p>
<p><em>Please note</em> that the widget will prevent the entry of
duplicate values into the main list, regardless of the validity of the
input otherwise. This is in keeping with that this widget is meant for
the entry of unordered lists, essentially a set of strings.</p></dd>
</dl>
</div>
<div id="subsection2" class="subsection"><h3><a name="subsection2">Widget General Options</a></h3>
<dl class="options">
<dt><b class="option">-listvariable</b> varname</dt>
<dd><p>This option specifies the variable holding the list to be manipulated by
the widget. Any changes to the list outside of the widget are automatically
imported into the widget. Similarly, all changes made to the list by the
widget are automatically exported to this variable.</p></dd>
<dt><b class="option">-skin-add</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-remove</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-add</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-remove</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-main</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-entry</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-list</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-empty</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-duplicate</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-add-none</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-tip-remove-none</b> string</dt>
<dd></dd>
<dt><b class="option">-skin-img-add</b> image</dt>
<dd></dd>
<dt><b class="option">-skin-img-remove</b> image</dt>
<dd></dd>
<dt><b class="option">-skin-invalid-color</b> color</dt>
<dd><p>These options all modify the appearance of the widget, i.e. its skin.</p>
<p>All options taking a string argument influence the various labels
shown, with the <b class="option">-skin-tip-*</b> options influencing the tooltips
shown on hovering the over various parts in particular.</p>
<p>All the strings are run through <b class="package">msgcat</b> first, enabling
text localization through message catalogs. The default values are keys
into the message catalogs which are part of the package itself.</p>
<p>The options taking images modify the images shown on the buttons
for adding and removing elements of the list. They default to the PNG
images distributed with the package itself.</p>
<p>The single option taking a color value modifies the color used to
highlight invalid data entered into the internal entry field of the
widget. This option defaults to <b class="const">yellow</b>.</p></dd>
</dl>
</div>
</div>
<div id="section5" class="section"><h2><a name="section5">Example</a></h2>
<pre class="example"></pre>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key120">data entry lists</a>, <a href="../../../../index.html#key119">data entry set of strings</a>, <a href="../../../../index.html#key115">data entry unordered list</a>, <a href="../../../../index.html#key118">list entry panel</a>, <a href="../../../../index.html#key117">set entry panel</a>, <a href="../../../../index.html#key1">widget</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/files/modules/widgetv/widget_validator.html.





































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226

<html><head>
<title>widget_validator - widget::validator behaviour</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.toc,UL.toc UL, UL.toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.section, LI.subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.requirements LI, UL.syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<! -- Generated from file '/home/aku/Projects/Tcllib/tklib/embedded/www/tklib/files/modules/widgetv/widget_validator.html' by tcllib/doctools with format 'html'
   -->
<! -- CVS: $Id$ widget_validator.n
   -->
<body><div class="doctools">
<hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
| <a href="../../../../toc.html">Main Table Of Contents</a>
| <a href="../../../toc.html">Table Of Contents</a>
| <a href="../../../../index.html">Keyword Index</a>
| <a href="../../../../toc0.html">Categories</a>
| <a href="../../../../toc1.html">Modules</a>
| <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<h1 class="title">widget_validator(n) 0.1 tklib &quot;widget::validator behaviour&quot;</h1>
<div id="name" class="section"><h2><a name="name">Name</a></h2>
<p>widget_validator - widget::validator behaviour</p>
</div>
<div id="toc" class="section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="toc">
<li class="section"><a href="#toc">Table Of Contents</a></li>
<li class="section"><a href="#synopsis">Synopsis</a></li>
<li class="section"><a href="#section1">Description</a></li>
<li class="section"><a href="#section2">Validation</a></li>
<li class="section"><a href="#section3">Example</a></li>
<li class="section"><a href="#keywords">Keywords</a></li>
</ul>
</div>
<div id="synopsis" class="section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="synopsis">
<ul class="requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
<li>package require <b class="pkgname">Tk 8.5</b></li>
<li>package require <b class="pkgname">widget::validator <span class="opt">?0.1?</span></b></li>
</ul>
<ul class="syntax">
<li><a href="#1"><b class="cmd">widget::validator</b> <b class="method">attach</b> <i class="arg">w</i> <i class="arg">color</i> <i class="arg">cmdprefix</i></a></li>
<li><a href="#2"><b class="cmd">widget::validator</b> <b class="method">detach</b> <i class="arg">w</i></a></li>
<li><a href="#3"><b class="cmd">widget::validator</b> <b class="method">validate</b> <i class="arg">w</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="section"><h2><a name="section1">Description</a></h2>
<p>This package provides a unified validation API
for <b class="package">ttk</b>'s entry and combobox widgets.</p>
<p>Please note that the validation behaviour
defined in this package will not reject invalid
edits. It will only highlight the entry containing
invalid data and set the proper state flag.</p>
<p>It is the responsibility of the using package
or application to decide how and when to actually
reject such invalid content.</p>
<dl class="definitions">
<dt><a name="1"><b class="cmd">widget::validator</b> <b class="method">attach</b> <i class="arg">w</i> <i class="arg">color</i> <i class="arg">cmdprefix</i></a></dt>
<dd><p>This method adds a validating behaviour to the widget <i class="arg">w</i>.</p>
<p>Whenever the content of the widget's entry field changes
the specified <i class="arg">cmdprefix</i> is invoked and has to return a
boolean value, where <b class="const">true</b> means that content is ok, and
<b class="const">false</b> that the content is invalid. For more information
on the command prefix see section <span class="sectref"><a href="#section2">Validation</a></span>.
In case of the latter the background color of the entry field
is changed to <i class="arg">color</i> to indicate the invalidity.</p>
<p>The system does not support nesting of validators on a
widget, nor the attachment of multiple validators. To change
validating conditions <b class="method">detach</b> the current validator first
before attaching the new.</p>
<p>An error is thrown if the widget has already
validating behaviour attached to it.</p>
<p>The result of the method is the empty string.</p>
<p>To achieve its aims the package overrides various
configuration options of the widget the behaviour is
attached to. These options are restored to their previous
values on <b class="method">detach</b>.</p>
<p>If other behaviours are attached the validator
may be rendered temporarily (partially) non-functional.
Similarly, if the validator is detached while a different
behaviour is also attached its restoration of configuration
settings may render the other non-functional</p></dd>
<dt><a name="2"><b class="cmd">widget::validator</b> <b class="method">detach</b> <i class="arg">w</i></a></dt>
<dd><p>This method removes the validating behaviour from
the widget <i class="arg">w</i> and restores it to its original
state.</p>
<p>An error is thrown if the widget has no
validating behaviour attached to it.</p>
<p>The result of the method is the empty string.</p></dd>
<dt><a name="3"><b class="cmd">widget::validator</b> <b class="method">validate</b> <i class="arg">w</i></a></dt>
<dd><p>Invoking this method forces a validation of the
widget <i class="arg">w</i>, assuming that it has a validator
behaviour attached to it.</p>
<p>The result of the method is the empty string.</p></dd>
</dl>
</div>
<div id="section2" class="section"><h2><a name="section2">Validation</a></h2>
<p>The command prefix for used for validation has to
have the following signature:</p>
<dl class="definitions">
<dt>{*}<i class="arg">cmdprefix</i> <i class="arg">text</i></dt>
<dd><p>The argument is the text to validate.</p>
<p>The result of the callback has to be a boolean value
where <b class="const">true</b> means that <i class="arg">text</i> is ok, and
<b class="const">false</b> that <i class="arg">text</i> is invalid.</p></dd>
</dl>
</div>
<div id="section3" class="section"><h2><a name="section3">Example</a></h2>
<pre class="example">
package require Tk 8.5
package require widget::validator
set TE {}
set TC {}
ttk::entry    .e -textvariable TE
ttk::combobox .c -textvariable TC -values {fruit vegetable corn}
ttk::combobox .n -values {fruit vegetable corn}
ttk::button   .x -command ::exit -text Exit
pack .e -expand 1 -fill both -side top
pack .c -expand 1 -fill both -side top
pack .n -expand 1 -fill both -side top
pack .x -expand 1 -fill both -side top
widget::validator attach .e lightblue {apply {text {
    expr {$text ne {}}
}}}
widget::validator attach .c yellow {apply {text {
    expr {$text ni {{} hello world}}
}}}
widget::validator attach .n pink {apply {text {
    expr {$text ni {{} blub}}
}}}
</pre>
</div>
<div id="keywords" class="section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#key67">invalid</a>, <a href="../../../../index.html#key66">state management</a>, <a href="../../../../index.html#key64">ttk::combobox</a>, <a href="../../../../index.html#key65">ttk::entry</a>, <a href="../../../../index.html#key69">validation</a>, <a href="../../../../index.html#key68">widget validation</a></p>
</div>
</div></body></html>

Added embedded/www/tklib/toc.html.

















































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
<html><head>
<title> Table Of Contents </title>
</head>
<! -- Generated by tcllib/doctools/toc with format 'html'
   -->
<! -- CVS: $Id$ Table Of Contents
   -->
<body>
<hr> [
   <a href="../../../../../home">Tcllib Home</a>
| <a href="../index.html">Keyword Index</a>
| <a href="../toc0.html">Categories</a>
| <a href="../toc1.html">Modules</a>
| <a href="../toc2.html">Applications</a>
 ] <hr>
<h3> Table Of Contents </h3>
<hr><dl><dt><h2> tklib </h2><dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/autoscroll/autoscroll.html">autoscroll</a></td>
<td class="#tocright">Provides for a scrollbar to automatically mapped and unmapped as needed</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/apps/bitmap-editor.html">bitmap-editor</a></td>
<td class="#tocright">Editor for XBM images</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/canvas/canvas_drag.html">canvas::drag</a></td>
<td class="#tocright">Manage the dragging of canvas items or item groups</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/canvas/canvas_epoints.html">canvas::edit::points</a></td>
<td class="#tocright">Editing a cloud of points on a canvas</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/canvas/canvas_epolyline.html">canvas::edit::polyline</a></td>
<td class="#tocright">Editing a polyline on a canvas</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/canvas/canvas_equad.html">canvas::edit::quadrilateral</a></td>
<td class="#tocright">Editing a quadrilateral on a canvas</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/canvas/canvas_highlight.html">canvas::highlight</a></td>
<td class="#tocright">Manage the highlighting of canvas items or item groups</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/canvas/canvas_mvg.html">canvas::mvg</a></td>
<td class="#tocright">Canvas to ImageMagick MVG vector format</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/canvas/canvas_snap.html">canvas::snap</a></td>
<td class="#tocright">Canvas snapshot to Tk photo image</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/canvas/canvas_sqmap.html">canvas::sqmap</a></td>
<td class="#tocright">Canvas with map background based on square tiles</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/canvas/canvas_tags.html">canvas::tag</a></td>
<td class="#tocright">Easier management of the tags on canvas items or item groups</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/canvas/canvas_trlines.html">canvas::track::lines</a></td>
<td class="#tocright">Manage a group of rubber band lines</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/canvas/canvas_zoom.html">canvas::zoom</a></td>
<td class="#tocright">Zoom control for canvas::sqmap</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/tkpiechart/canvaslabel.html">canvasLabel</a></td>
<td class="#tocright">tkpiechart canvas label class</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/chatwidget/chatwidget.html">chatwidget</a></td>
<td class="#tocright">Provides a multi-paned view suitable for display of chat room or irc channel information</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/controlwidget/controlwidget.html">controlwidget</a></td>
<td class="#tocright">Collection of widgets for displaying and controlling numerical values</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/crosshair/crosshair.html">crosshair</a></td>
<td class="#tocright">Crosshairs for Tk canvas</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/ctext/ctext.html">ctext</a></td>
<td class="#tocright">Ctext a text widget with highlighting support</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/cursor/cursor.html">cursor</a></td>
<td class="#tocright">Procedures to handle CURSOR data</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/datefield/datefield.html">datefield</a></td>
<td class="#tocright">Tk datefield widget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/apps/dia.html">dia</a></td>
<td class="#tocright">Lightweight Diagram Processor</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/diagrams/diagram.html">diagram</a></td>
<td class="#tocright">Diagram drawing</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/getstring/tk_getString.html">getstring</a></td>
<td class="#tocright">A string dialog</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/history/tklib_history.html">history</a></td>
<td class="#tocright">Provides a history for Entry widgets</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/ico/ico.html">ico</a></td>
<td class="#tocright">Reading and writing windows icons</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/ipentry/ipentry.html">ipentry</a></td>
<td class="#tocright">An IP address entry widget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/khim/khim.html">khim</a></td>
<td class="#tocright">Provides key bindings for entering international characters on a keyboard that does not support them</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/menubar/menubar.html">menubar</a></td>
<td class="#tocright">Creates an instance of the  Class.</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/ntext/ntext.html">ntext</a></td>
<td class="#tocright">Alternative Bindings for the Text Widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/ntext/ntextBindings.html">ntextBindings</a></td>
<td class="#tocright">Alternative Bindings for the Text Widget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/ntext/ntextIndent.html">ntextIndent</a></td>
<td class="#tocright">ntext Indentation for the Text Widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/ntext/ntextWordBreak.html">ntextWordBreak</a></td>
<td class="#tocright">ntext Word Boundary Detection for the Text Widget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/tkpiechart/pie.html">pie</a></td>
<td class="#tocright">2D or 3D pie chart object in a canvas</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/tkpiechart/pieboxlabeler.html">pieBoxLabeler</a></td>
<td class="#tocright">tkpiechart pie box style labeler class</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/tkpiechart/pieperipherallabeler.html">piePeripheralLabeler</a></td>
<td class="#tocright">tkpiechart pie peripheral style labeler class</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/plotchart/plotchart.html">Plotchart</a></td>
<td class="#tocright">Simple plotting and charting package</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/swaplist/swaplist.html">swaplist</a></td>
<td class="#tocright">A dialog which allows a user to move options between two lists</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/tooltip/tooltip.html">tooltip</a></td>
<td class="#tocright">Tooltip management</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/widget/widget.html">widget</a></td>
<td class="#tocright">Megawidget bundle</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/widget/widget_calendar.html">widget_calendar</a></td>
<td class="#tocright">Calendar Megawidget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/widget/widget_dateentry.html">widget_dateentry</a></td>
<td class="#tocright">Date Entry Megawidget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/widgetl/widget_listentry.html">widget_listentry</a></td>
<td class="#tocright">widget::listentry widget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/widgetl/widget_listsimple.html">widget_listsimple</a></td>
<td class="#tocright">widget::listsimple widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="files/modules/widget/widget_toolbar.html">widget_toolbar</a></td>
<td class="#tocright">Toolbar Megawidget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="files/modules/widgetv/widget_validator.html">widget_validator</a></td>
<td class="#tocright">widget::validator behaviour</td>
</tr>
</table>
</dl><hr></body></html>

Added embedded/www/toc.html.



































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
<html><head>
<title> Table Of Contents </title>
</head>
<! -- Generated by tcllib/doctools/toc with format 'html'
   -->
<! -- CVS: $Id$ Table Of Contents
   -->
<body>
<hr> [
   <a href="../../../../home">Tcllib Home</a>
| <a href="index.html">Keyword Index</a>
| <a href="toc0.html">Categories</a>
| <a href="toc1.html">Modules</a>
| <a href="toc2.html">Applications</a>
 ] <hr>
<h3> Table Of Contents </h3>
<hr><dl><dt><h2>  </h2><dd>
<dl><dt>By Categories<dd>
<dl><dt>Documentation tools<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/apps/dia.html">dia</a></td>
<td class="#tocright">Lightweight Diagram Processor</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/diagrams/diagram.html">diagram</a></td>
<td class="#tocright">Diagram drawing</td>
</tr>
</table></dl>
<dl><dt>Image processing<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/apps/bitmap-editor.html">bitmap-editor</a></td>
<td class="#tocright">Editor for XBM images</td>
</tr>
</table></dl>
<dl><dt>Unfiled<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/autoscroll/autoscroll.html">autoscroll</a></td>
<td class="#tocright">Provides for a scrollbar to automatically mapped and unmapped as needed</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_drag.html">canvas::drag</a></td>
<td class="#tocright">Manage the dragging of canvas items or item groups</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_epoints.html">canvas::edit::points</a></td>
<td class="#tocright">Editing a cloud of points on a canvas</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_epolyline.html">canvas::edit::polyline</a></td>
<td class="#tocright">Editing a polyline on a canvas</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_equad.html">canvas::edit::quadrilateral</a></td>
<td class="#tocright">Editing a quadrilateral on a canvas</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_highlight.html">canvas::highlight</a></td>
<td class="#tocright">Manage the highlighting of canvas items or item groups</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_mvg.html">canvas::mvg</a></td>
<td class="#tocright">Canvas to ImageMagick MVG vector format</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_snap.html">canvas::snap</a></td>
<td class="#tocright">Canvas snapshot to Tk photo image</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_sqmap.html">canvas::sqmap</a></td>
<td class="#tocright">Canvas with map background based on square tiles</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_tags.html">canvas::tag</a></td>
<td class="#tocright">Easier management of the tags on canvas items or item groups</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_trlines.html">canvas::track::lines</a></td>
<td class="#tocright">Manage a group of rubber band lines</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_zoom.html">canvas::zoom</a></td>
<td class="#tocright">Zoom control for canvas::sqmap</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/canvaslabel.html">canvasLabel</a></td>
<td class="#tocright">tkpiechart canvas label class</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/chatwidget/chatwidget.html">chatwidget</a></td>
<td class="#tocright">Provides a multi-paned view suitable for display of chat room or irc channel information</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/controlwidget/controlwidget.html">controlwidget</a></td>
<td class="#tocright">Collection of widgets for displaying and controlling numerical values</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/crosshair/crosshair.html">crosshair</a></td>
<td class="#tocright">Crosshairs for Tk canvas</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ctext/ctext.html">ctext</a></td>
<td class="#tocright">Ctext a text widget with highlighting support</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/cursor/cursor.html">cursor</a></td>
<td class="#tocright">Procedures to handle CURSOR data</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/getstring/tk_getString.html">getstring</a></td>
<td class="#tocright">A string dialog</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/history/tklib_history.html">history</a></td>
<td class="#tocright">Provides a history for Entry widgets</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ico/ico.html">ico</a></td>
<td class="#tocright">Reading and writing windows icons</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/khim/khim.html">khim</a></td>
<td class="#tocright">Provides key bindings for entering international characters on a keyboard that does not support them</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/menubar/menubar.html">menubar</a></td>
<td class="#tocright">Creates an instance of the  Class.</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntext.html">ntext</a></td>
<td class="#tocright">Alternative Bindings for the Text Widget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntextBindings.html">ntextBindings</a></td>
<td class="#tocright">Alternative Bindings for the Text Widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntextIndent.html">ntextIndent</a></td>
<td class="#tocright">ntext Indentation for the Text Widget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntextWordBreak.html">ntextWordBreak</a></td>
<td class="#tocright">ntext Word Boundary Detection for the Text Widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/pie.html">pie</a></td>
<td class="#tocright">2D or 3D pie chart object in a canvas</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/pieboxlabeler.html">pieBoxLabeler</a></td>
<td class="#tocright">tkpiechart pie box style labeler class</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/pieperipherallabeler.html">piePeripheralLabeler</a></td>
<td class="#tocright">tkpiechart pie peripheral style labeler class</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/plotchart/plotchart.html">Plotchart</a></td>
<td class="#tocright">Simple plotting and charting package</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/tooltip/tooltip.html">tooltip</a></td>
<td class="#tocright">Tooltip management</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widgetl/widget_listentry.html">widget_listentry</a></td>
<td class="#tocright">widget::listentry widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/widgetl/widget_listsimple.html">widget_listsimple</a></td>
<td class="#tocright">widget::listsimple widget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widgetv/widget_validator.html">widget_validator</a></td>
<td class="#tocright">widget::validator behaviour</td>
</tr>
</table></dl>
<dl><dt>Widget<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/datefield/datefield.html">datefield</a></td>
<td class="#tocright">Tk datefield widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/ipentry/ipentry.html">ipentry</a></td>
<td class="#tocright">An IP address entry widget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/swaplist/swaplist.html">swaplist</a></td>
<td class="#tocright">A dialog which allows a user to move options between two lists</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget.html">widget</a></td>
<td class="#tocright">Megawidget bundle</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget_calendar.html">widget_calendar</a></td>
<td class="#tocright">Calendar Megawidget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget_dateentry.html">widget_dateentry</a></td>
<td class="#tocright">Date Entry Megawidget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget_toolbar.html">widget_toolbar</a></td>
<td class="#tocright">Toolbar Megawidget</td>
</tr>
</table></dl></table></dl>
<dl><dt>By Type<dd>
<dl><dt>Applications<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/apps/bitmap-editor.html">bitmap-editor</a></td>
<td class="#tocright">Editor for XBM images</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/apps/dia.html">dia</a></td>
<td class="#tocright">Lightweight Diagram Processor</td>
</tr>
</table></dl>
<dl><dt>Modules<dd>
<dl><dt>autoscroll<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/autoscroll/autoscroll.html">autoscroll</a></td>
<td class="#tocright">Provides for a scrollbar to automatically mapped and unmapped as needed</td>
</tr>
</table></dl>
<dl><dt>canvas<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_drag.html">canvas::drag</a></td>
<td class="#tocright">Manage the dragging of canvas items or item groups</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_epoints.html">canvas::edit::points</a></td>
<td class="#tocright">Editing a cloud of points on a canvas</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_epolyline.html">canvas::edit::polyline</a></td>
<td class="#tocright">Editing a polyline on a canvas</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_equad.html">canvas::edit::quadrilateral</a></td>
<td class="#tocright">Editing a quadrilateral on a canvas</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_highlight.html">canvas::highlight</a></td>
<td class="#tocright">Manage the highlighting of canvas items or item groups</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_mvg.html">canvas::mvg</a></td>
<td class="#tocright">Canvas to ImageMagick MVG vector format</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_snap.html">canvas::snap</a></td>
<td class="#tocright">Canvas snapshot to Tk photo image</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_sqmap.html">canvas::sqmap</a></td>
<td class="#tocright">Canvas with map background based on square tiles</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_tags.html">canvas::tag</a></td>
<td class="#tocright">Easier management of the tags on canvas items or item groups</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_trlines.html">canvas::track::lines</a></td>
<td class="#tocright">Manage a group of rubber band lines</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_zoom.html">canvas::zoom</a></td>
<td class="#tocright">Zoom control for canvas::sqmap</td>
</tr>
</table></dl>
<dl><dt>chatwidget<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/chatwidget/chatwidget.html">chatwidget</a></td>
<td class="#tocright">Provides a multi-paned view suitable for display of chat room or irc channel information</td>
</tr>
</table></dl>
<dl><dt>controlwidget<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/controlwidget/controlwidget.html">controlwidget</a></td>
<td class="#tocright">Collection of widgets for displaying and controlling numerical values</td>
</tr>
</table></dl>
<dl><dt>crosshair<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/crosshair/crosshair.html">crosshair</a></td>
<td class="#tocright">Crosshairs for Tk canvas</td>
</tr>
</table></dl>
<dl><dt>ctext<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ctext/ctext.html">ctext</a></td>
<td class="#tocright">Ctext a text widget with highlighting support</td>
</tr>
</table></dl>
<dl><dt>cursor<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/cursor/cursor.html">cursor</a></td>
<td class="#tocright">Procedures to handle CURSOR data</td>
</tr>
</table></dl>
<dl><dt>datefield<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/datefield/datefield.html">datefield</a></td>
<td class="#tocright">Tk datefield widget</td>
</tr>
</table></dl>
<dl><dt>diagrams<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/diagrams/diagram.html">diagram</a></td>
<td class="#tocright">Diagram drawing</td>
</tr>
</table></dl>
<dl><dt>getstring<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/getstring/tk_getString.html">getstring</a></td>
<td class="#tocright">A string dialog</td>
</tr>
</table></dl>
<dl><dt>history<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/history/tklib_history.html">history</a></td>
<td class="#tocright">Provides a history for Entry widgets</td>
</tr>
</table></dl>
<dl><dt>ico<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ico/ico.html">ico</a></td>
<td class="#tocright">Reading and writing windows icons</td>
</tr>
</table></dl>
<dl><dt>ipentry<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ipentry/ipentry.html">ipentry</a></td>
<td class="#tocright">An IP address entry widget</td>
</tr>
</table></dl>
<dl><dt>khim<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/khim/khim.html">khim</a></td>
<td class="#tocright">Provides key bindings for entering international characters on a keyboard that does not support them</td>
</tr>
</table></dl>
<dl><dt>menubar<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/menubar/menubar.html">menubar</a></td>
<td class="#tocright">Creates an instance of the  Class.</td>
</tr>
</table></dl>
<dl><dt>ntext<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntext.html">ntext</a></td>
<td class="#tocright">Alternative Bindings for the Text Widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntextBindings.html">ntextBindings</a></td>
<td class="#tocright">Alternative Bindings for the Text Widget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntextIndent.html">ntextIndent</a></td>
<td class="#tocright">ntext Indentation for the Text Widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntextWordBreak.html">ntextWordBreak</a></td>
<td class="#tocright">ntext Word Boundary Detection for the Text Widget</td>
</tr>
</table></dl>
<dl><dt>plotchart<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/plotchart/plotchart.html">Plotchart</a></td>
<td class="#tocright">Simple plotting and charting package</td>
</tr>
</table></dl>
<dl><dt>swaplist<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/swaplist/swaplist.html">swaplist</a></td>
<td class="#tocright">A dialog which allows a user to move options between two lists</td>
</tr>
</table></dl>
<dl><dt>tkpiechart<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/canvaslabel.html">canvasLabel</a></td>
<td class="#tocright">tkpiechart canvas label class</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/pie.html">pie</a></td>
<td class="#tocright">2D or 3D pie chart object in a canvas</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/pieboxlabeler.html">pieBoxLabeler</a></td>
<td class="#tocright">tkpiechart pie box style labeler class</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/pieperipherallabeler.html">piePeripheralLabeler</a></td>
<td class="#tocright">tkpiechart pie peripheral style labeler class</td>
</tr>
</table></dl>
<dl><dt>tooltip<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/tooltip/tooltip.html">tooltip</a></td>
<td class="#tocright">Tooltip management</td>
</tr>
</table></dl>
<dl><dt>widget<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget.html">widget</a></td>
<td class="#tocright">Megawidget bundle</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget_calendar.html">widget_calendar</a></td>
<td class="#tocright">Calendar Megawidget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget_dateentry.html">widget_dateentry</a></td>
<td class="#tocright">Date Entry Megawidget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget_toolbar.html">widget_toolbar</a></td>
<td class="#tocright">Toolbar Megawidget</td>
</tr>
</table></dl>
<dl><dt>widgetl<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widgetl/widget_listentry.html">widget_listentry</a></td>
<td class="#tocright">widget::listentry widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/widgetl/widget_listsimple.html">widget_listsimple</a></td>
<td class="#tocright">widget::listsimple widget</td>
</tr>
</table></dl>
<dl><dt>widgetv<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widgetv/widget_validator.html">widget_validator</a></td>
<td class="#tocright">widget::validator behaviour</td>
</tr>
</table></dl></table></dl></table></dl>
</dl><hr></body></html>

Added embedded/www/toc0.html.







































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
<html><head>
<title> Table Of Contents </title>
</head>
<! -- Generated by tcllib/doctools/toc with format 'html'
   -->
<! -- CVS: $Id$ Table Of Contents
   -->
<body>
<hr> [
   <a href="../../../../home">Tcllib Home</a>
| <a href="index.html">Keyword Index</a>
| <a href="toc0.html">Categories</a>
| <a href="toc1.html">Modules</a>
| <a href="toc2.html">Applications</a>
 ] <hr>
<h3> Table Of Contents </h3>
<hr><dl><dt><h2>  </h2><dd>
<dl><dt>By Categories<dd>
<dl><dt>Documentation tools<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/apps/dia.html">dia</a></td>
<td class="#tocright">Lightweight Diagram Processor</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/diagrams/diagram.html">diagram</a></td>
<td class="#tocright">Diagram drawing</td>
</tr>
</table></dl>
<dl><dt>Image processing<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/apps/bitmap-editor.html">bitmap-editor</a></td>
<td class="#tocright">Editor for XBM images</td>
</tr>
</table></dl>
<dl><dt>Unfiled<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/autoscroll/autoscroll.html">autoscroll</a></td>
<td class="#tocright">Provides for a scrollbar to automatically mapped and unmapped as needed</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_drag.html">canvas::drag</a></td>
<td class="#tocright">Manage the dragging of canvas items or item groups</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_epoints.html">canvas::edit::points</a></td>
<td class="#tocright">Editing a cloud of points on a canvas</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_epolyline.html">canvas::edit::polyline</a></td>
<td class="#tocright">Editing a polyline on a canvas</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_equad.html">canvas::edit::quadrilateral</a></td>
<td class="#tocright">Editing a quadrilateral on a canvas</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_highlight.html">canvas::highlight</a></td>
<td class="#tocright">Manage the highlighting of canvas items or item groups</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_mvg.html">canvas::mvg</a></td>
<td class="#tocright">Canvas to ImageMagick MVG vector format</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_snap.html">canvas::snap</a></td>
<td class="#tocright">Canvas snapshot to Tk photo image</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_sqmap.html">canvas::sqmap</a></td>
<td class="#tocright">Canvas with map background based on square tiles</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_tags.html">canvas::tag</a></td>
<td class="#tocright">Easier management of the tags on canvas items or item groups</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_trlines.html">canvas::track::lines</a></td>
<td class="#tocright">Manage a group of rubber band lines</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_zoom.html">canvas::zoom</a></td>
<td class="#tocright">Zoom control for canvas::sqmap</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/canvaslabel.html">canvasLabel</a></td>
<td class="#tocright">tkpiechart canvas label class</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/chatwidget/chatwidget.html">chatwidget</a></td>
<td class="#tocright">Provides a multi-paned view suitable for display of chat room or irc channel information</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/controlwidget/controlwidget.html">controlwidget</a></td>
<td class="#tocright">Collection of widgets for displaying and controlling numerical values</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/crosshair/crosshair.html">crosshair</a></td>
<td class="#tocright">Crosshairs for Tk canvas</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ctext/ctext.html">ctext</a></td>
<td class="#tocright">Ctext a text widget with highlighting support</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/cursor/cursor.html">cursor</a></td>
<td class="#tocright">Procedures to handle CURSOR data</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/getstring/tk_getString.html">getstring</a></td>
<td class="#tocright">A string dialog</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/history/tklib_history.html">history</a></td>
<td class="#tocright">Provides a history for Entry widgets</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ico/ico.html">ico</a></td>
<td class="#tocright">Reading and writing windows icons</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/khim/khim.html">khim</a></td>
<td class="#tocright">Provides key bindings for entering international characters on a keyboard that does not support them</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/menubar/menubar.html">menubar</a></td>
<td class="#tocright">Creates an instance of the  Class.</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntext.html">ntext</a></td>
<td class="#tocright">Alternative Bindings for the Text Widget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntextBindings.html">ntextBindings</a></td>
<td class="#tocright">Alternative Bindings for the Text Widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntextIndent.html">ntextIndent</a></td>
<td class="#tocright">ntext Indentation for the Text Widget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntextWordBreak.html">ntextWordBreak</a></td>
<td class="#tocright">ntext Word Boundary Detection for the Text Widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/pie.html">pie</a></td>
<td class="#tocright">2D or 3D pie chart object in a canvas</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/pieboxlabeler.html">pieBoxLabeler</a></td>
<td class="#tocright">tkpiechart pie box style labeler class</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/pieperipherallabeler.html">piePeripheralLabeler</a></td>
<td class="#tocright">tkpiechart pie peripheral style labeler class</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/plotchart/plotchart.html">Plotchart</a></td>
<td class="#tocright">Simple plotting and charting package</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/tooltip/tooltip.html">tooltip</a></td>
<td class="#tocright">Tooltip management</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widgetl/widget_listentry.html">widget_listentry</a></td>
<td class="#tocright">widget::listentry widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/widgetl/widget_listsimple.html">widget_listsimple</a></td>
<td class="#tocright">widget::listsimple widget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widgetv/widget_validator.html">widget_validator</a></td>
<td class="#tocright">widget::validator behaviour</td>
</tr>
</table></dl>
<dl><dt>Widget<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/datefield/datefield.html">datefield</a></td>
<td class="#tocright">Tk datefield widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/ipentry/ipentry.html">ipentry</a></td>
<td class="#tocright">An IP address entry widget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/swaplist/swaplist.html">swaplist</a></td>
<td class="#tocright">A dialog which allows a user to move options between two lists</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget.html">widget</a></td>
<td class="#tocright">Megawidget bundle</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget_calendar.html">widget_calendar</a></td>
<td class="#tocright">Calendar Megawidget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget_dateentry.html">widget_dateentry</a></td>
<td class="#tocright">Date Entry Megawidget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget_toolbar.html">widget_toolbar</a></td>
<td class="#tocright">Toolbar Megawidget</td>
</tr>
</table></dl></table></dl>
</dl><hr></body></html>

Added embedded/www/toc1.html.









































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
<html><head>
<title> Table Of Contents </title>
</head>
<! -- Generated by tcllib/doctools/toc with format 'html'
   -->
<! -- CVS: $Id$ Table Of Contents
   -->
<body>
<hr> [
   <a href="../../../../home">Tcllib Home</a>
| <a href="index.html">Keyword Index</a>
| <a href="toc0.html">Categories</a>
| <a href="toc1.html">Modules</a>
| <a href="toc2.html">Applications</a>
 ] <hr>
<h3> Table Of Contents </h3>
<hr><dl><dt><h2>  </h2><dd>
<dl><dt>Modules<dd>
<dl><dt>autoscroll<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/autoscroll/autoscroll.html">autoscroll</a></td>
<td class="#tocright">Provides for a scrollbar to automatically mapped and unmapped as needed</td>
</tr>
</table></dl>
<dl><dt>canvas<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_drag.html">canvas::drag</a></td>
<td class="#tocright">Manage the dragging of canvas items or item groups</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_epoints.html">canvas::edit::points</a></td>
<td class="#tocright">Editing a cloud of points on a canvas</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_epolyline.html">canvas::edit::polyline</a></td>
<td class="#tocright">Editing a polyline on a canvas</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_equad.html">canvas::edit::quadrilateral</a></td>
<td class="#tocright">Editing a quadrilateral on a canvas</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_highlight.html">canvas::highlight</a></td>
<td class="#tocright">Manage the highlighting of canvas items or item groups</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_mvg.html">canvas::mvg</a></td>
<td class="#tocright">Canvas to ImageMagick MVG vector format</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_snap.html">canvas::snap</a></td>
<td class="#tocright">Canvas snapshot to Tk photo image</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_sqmap.html">canvas::sqmap</a></td>
<td class="#tocright">Canvas with map background based on square tiles</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_tags.html">canvas::tag</a></td>
<td class="#tocright">Easier management of the tags on canvas items or item groups</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_trlines.html">canvas::track::lines</a></td>
<td class="#tocright">Manage a group of rubber band lines</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/canvas/canvas_zoom.html">canvas::zoom</a></td>
<td class="#tocright">Zoom control for canvas::sqmap</td>
</tr>
</table></dl>
<dl><dt>chatwidget<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/chatwidget/chatwidget.html">chatwidget</a></td>
<td class="#tocright">Provides a multi-paned view suitable for display of chat room or irc channel information</td>
</tr>
</table></dl>
<dl><dt>controlwidget<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/controlwidget/controlwidget.html">controlwidget</a></td>
<td class="#tocright">Collection of widgets for displaying and controlling numerical values</td>
</tr>
</table></dl>
<dl><dt>crosshair<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/crosshair/crosshair.html">crosshair</a></td>
<td class="#tocright">Crosshairs for Tk canvas</td>
</tr>
</table></dl>
<dl><dt>ctext<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ctext/ctext.html">ctext</a></td>
<td class="#tocright">Ctext a text widget with highlighting support</td>
</tr>
</table></dl>
<dl><dt>cursor<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/cursor/cursor.html">cursor</a></td>
<td class="#tocright">Procedures to handle CURSOR data</td>
</tr>
</table></dl>
<dl><dt>datefield<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/datefield/datefield.html">datefield</a></td>
<td class="#tocright">Tk datefield widget</td>
</tr>
</table></dl>
<dl><dt>diagrams<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/diagrams/diagram.html">diagram</a></td>
<td class="#tocright">Diagram drawing</td>
</tr>
</table></dl>
<dl><dt>getstring<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/getstring/tk_getString.html">getstring</a></td>
<td class="#tocright">A string dialog</td>
</tr>
</table></dl>
<dl><dt>history<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/history/tklib_history.html">history</a></td>
<td class="#tocright">Provides a history for Entry widgets</td>
</tr>
</table></dl>
<dl><dt>ico<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ico/ico.html">ico</a></td>
<td class="#tocright">Reading and writing windows icons</td>
</tr>
</table></dl>
<dl><dt>ipentry<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ipentry/ipentry.html">ipentry</a></td>
<td class="#tocright">An IP address entry widget</td>
</tr>
</table></dl>
<dl><dt>khim<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/khim/khim.html">khim</a></td>
<td class="#tocright">Provides key bindings for entering international characters on a keyboard that does not support them</td>
</tr>
</table></dl>
<dl><dt>menubar<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/menubar/menubar.html">menubar</a></td>
<td class="#tocright">Creates an instance of the  Class.</td>
</tr>
</table></dl>
<dl><dt>ntext<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntext.html">ntext</a></td>
<td class="#tocright">Alternative Bindings for the Text Widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntextBindings.html">ntextBindings</a></td>
<td class="#tocright">Alternative Bindings for the Text Widget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntextIndent.html">ntextIndent</a></td>
<td class="#tocright">ntext Indentation for the Text Widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/ntext/ntextWordBreak.html">ntextWordBreak</a></td>
<td class="#tocright">ntext Word Boundary Detection for the Text Widget</td>
</tr>
</table></dl>
<dl><dt>plotchart<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/plotchart/plotchart.html">Plotchart</a></td>
<td class="#tocright">Simple plotting and charting package</td>
</tr>
</table></dl>
<dl><dt>swaplist<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/swaplist/swaplist.html">swaplist</a></td>
<td class="#tocright">A dialog which allows a user to move options between two lists</td>
</tr>
</table></dl>
<dl><dt>tkpiechart<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/canvaslabel.html">canvasLabel</a></td>
<td class="#tocright">tkpiechart canvas label class</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/pie.html">pie</a></td>
<td class="#tocright">2D or 3D pie chart object in a canvas</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/pieboxlabeler.html">pieBoxLabeler</a></td>
<td class="#tocright">tkpiechart pie box style labeler class</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/tkpiechart/pieperipherallabeler.html">piePeripheralLabeler</a></td>
<td class="#tocright">tkpiechart pie peripheral style labeler class</td>
</tr>
</table></dl>
<dl><dt>tooltip<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/tooltip/tooltip.html">tooltip</a></td>
<td class="#tocright">Tooltip management</td>
</tr>
</table></dl>
<dl><dt>widget<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget.html">widget</a></td>
<td class="#tocright">Megawidget bundle</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget_calendar.html">widget_calendar</a></td>
<td class="#tocright">Calendar Megawidget</td>
</tr>
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget_dateentry.html">widget_dateentry</a></td>
<td class="#tocright">Date Entry Megawidget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/widget/widget_toolbar.html">widget_toolbar</a></td>
<td class="#tocright">Toolbar Megawidget</td>
</tr>
</table></dl>
<dl><dt>widgetl<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widgetl/widget_listentry.html">widget_listentry</a></td>
<td class="#tocright">widget::listentry widget</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/modules/widgetl/widget_listsimple.html">widget_listsimple</a></td>
<td class="#tocright">widget::listsimple widget</td>
</tr>
</table></dl>
<dl><dt>widgetv<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/modules/widgetv/widget_validator.html">widget_validator</a></td>
<td class="#tocright">widget::validator behaviour</td>
</tr>
</table></dl></table></dl>
</dl><hr></body></html>

Added embedded/www/toc2.html.



























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<html><head>
<title> Table Of Contents </title>
</head>
<! -- Generated by tcllib/doctools/toc with format 'html'
   -->
<! -- CVS: $Id$ Table Of Contents
   -->
<body>
<hr> [
   <a href="../../../../home">Tcllib Home</a>
| <a href="index.html">Keyword Index</a>
| <a href="toc0.html">Categories</a>
| <a href="toc1.html">Modules</a>
| <a href="toc2.html">Applications</a>
 ] <hr>
<h3> Table Of Contents </h3>
<hr><dl><dt><h2>  </h2><dd>
<dl><dt>Applications<dd>
<table class="#toc">
<tr class="#toceven" >
<td class="#tocleft" ><a href="tcllib/files/apps/bitmap-editor.html">bitmap-editor</a></td>
<td class="#tocright">Editor for XBM images</td>
</tr>
<tr class="#tocodd"  >
<td class="#tocleft" ><a href="tcllib/files/apps/dia.html">dia</a></td>
<td class="#tocright">Lightweight Diagram Processor</td>
</tr>
</table></dl>
</dl><hr></body></html>

Changes to examples/canvas/city.tcl.

7
8
9
10
11
12
13

14
15
16
17
18
19
20
..
22
23
24
25
26
27
28


29
30
31
32
33
34
35
..
45
46
47
48
49
50
51




52
53
54
55
56
57
58
##       (*) Random + restrictions about what tiles can be neighbours.
##           This part in citygrid.tcl

# ### ### ### ######### ######### #########
## For data files found relative to the example's location.

set selfdir  [file dirname [file normalize [info script]]]


source $selfdir/citygrid.tcl

# ### ### ### ######### ######### #########
## Other requirements for this example.

package require Tk
................................................................................
package require canvas::sqmap
package require crosshair

package require struct::set      ; # citygrid.tcl
package require snit             ; # canvas::sqmap dependency
package require uevent::onidle   ; # ditto
package require cache::async 0.2 ; # ditto



# ### ### ### ######### ######### #########

set location {}

proc GUI {} {
    widget::scrolledwindow .sw
................................................................................
    bind .map <ButtonPress-2> {%W scan mark   %x %y}
    bind .map <B2-Motion>     {%W scan dragto %x %y}

    # Cross hairs ...
    .map configure -cursor tcross
    crosshair::crosshair .map -width 0 -fill \#999999 -dash {.}
    crosshair::track on  .map TRACK





    set tile [city::tile]
    set city [expr {$tile * 64}]

    #.map configure -grid-show-borders 1 ;# This leaks items = memory
    if 0 {
	# This routes the requests and results through GOT/GET logging







>







 







>
>







 







>
>
>
>







7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
..
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
..
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
##       (*) Random + restrictions about what tiles can be neighbours.
##           This part in citygrid.tcl

# ### ### ### ######### ######### #########
## For data files found relative to the example's location.

set selfdir  [file dirname [file normalize [info script]]]
#lappend auto_path $selfdir/../../modules

source $selfdir/citygrid.tcl

# ### ### ### ######### ######### #########
## Other requirements for this example.

package require Tk
................................................................................
package require canvas::sqmap
package require crosshair

package require struct::set      ; # citygrid.tcl
package require snit             ; # canvas::sqmap dependency
package require uevent::onidle   ; # ditto
package require cache::async 0.2 ; # ditto

#puts [package ifneeded crosshair [package present crosshair]]

# ### ### ### ######### ######### #########

set location {}

proc GUI {} {
    widget::scrolledwindow .sw
................................................................................
    bind .map <ButtonPress-2> {%W scan mark   %x %y}
    bind .map <B2-Motion>     {%W scan dragto %x %y}

    # Cross hairs ...
    .map configure -cursor tcross
    crosshair::crosshair .map -width 0 -fill \#999999 -dash {.}
    crosshair::track on  .map TRACK

    puts [crosshair::bbox_add .map {100 100 300 300}]
    puts [crosshair::bbox_add .map {50 50 150 150}]


    set tile [city::tile]
    set city [expr {$tile * 64}]

    #.map configure -grid-show-borders 1 ;# This leaks items = memory
    if 0 {
	# This routes the requests and results through GOT/GET logging

Added examples/canvas/crosshairs_for_axes.tcl.











































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# test_axis.tcl --
#     Test the drawing of the axis: nice rounded values?
#     And vertical text to right axis?
#
#     NOTE:
#     Negative values require floor() instead of ceil()!
#
#     NOTE:
#     Problem with right axis!
#
#     TODO:
#     Floor and Ceil and less stringent check for bounds!
#

set base [file dirname [file dirname [file dirname [file normalize [info script]]]]]

source "$base/modules/plotchart/plotchart.tcl"
source "$base/modules/crosshair/crosshair.tcl"

package require Plotchart

grid [canvas .c1] [canvas .c2]
grid [canvas .c3] [canvas .c4]

#
# Create the plots
#

set plot_axes [list { 0.12  10.4  1.0} {-0.12  10.4  2.5} \
		    {10.12 -10.4 -2.0} {-5.1   -4.5  0.1} \
	            {-0.12  10.4  2.5} { 0.12  10.4  1.0} \
		    {-5.1   -4.5  0.1} {10.12 -10.4 -2.0}]
set i 1
foreach {x y} $plot_axes {
    set p($i) [::Plotchart::createXYPlot .c${i} $x $y ]
    incr i
}


set p(5) [::Plotchart::createRightAxis $p(2) {-5.99 -4.5 0.1}]

$p(2) plot data  10.0 -5.0
$p(2) plot data -10.0 -5.0
$p(5) dataconfig data -colour green
$p(5) plot data  10.0 -4.7
$p(5) plot data -10.0 -4.7
$p(2) vtext "my_changes"
$p(5) vtext "Data"

# Adding crosshairs to the plots
set i 1
array set color {1 blue 2 red 3 green 4 black}
foreach {x y} $plot_axes {
    .c${i} configure -cursor tcross
    crosshair::crosshair .c$i -dash {.} -fill $color($i)
    crosshair::track on  .c$i put_coords
    set bbox_ll [::Plotchart::coordsToPixel [$p($i) canvas] [lindex $x 0] [lindex $y 0]]
    set bbox_ur [::Plotchart::coordsToPixel [$p($i) canvas] [lindex $x 1] [lindex $y 1]]

    #--- testing coordinate mixed up
    if {$i==0} {
	set bbox [concat $bbox_ll $bbox_ur]
    } elseif {$i==1} {
	set bbox [list [lindex $bbox_ur 0] [lindex $bbox_ll 1] [lindex $bbox_ll 0] [lindex $bbox_ur 1]]
    } elseif {$i==2} {
	set bbox [list [lindex $bbox_ll 0] [lindex $bbox_ur 1] [lindex $bbox_ur 0] [lindex $bbox_ll 1]]
    } else {
	set bbox [concat $bbox_ur $bbox_ll]
    }
    crosshair::bbox_add .c$i "$bbox"

    puts "plot $i ==> bbox== $bbox  color = $color($i)"

    incr i
}


proc put_coords {a b c d e f g} {
    set pcoords [::Plotchart::pixelToCoords $a $b $c]
    set pcoord_x [lindex $pcoords 0]
    set pcoord_y [lindex $pcoords 1]
    puts "Canvas=$a Canvas_Coords=($b $c)  PlotChart_plot_coords=([format "%.2f %.2f" $pcoord_x $pcoord_y])"
}

catch { console show }

Added examples/canvas/crosshairs_for_multixyplot.tcl.













































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# test_txplot.tcl --
#     Test the -box options for time-x-plots

set base [file dirname [file dirname [file dirname [file normalize [info script]]]]]

source "$base/modules/plotchart/plotchart.tcl"
source "$base/modules/crosshair/crosshair.tcl"

package require Plotchart

pack [canvas .c -width 600 -height 410 -bg white]

::Plotchart::plotstyle configure default xyplot bottomaxis subtextcolor blue
::Plotchart::plotstyle configure default xyplot bottomaxis font         "Helvetica 14"
::Plotchart::plotstyle configure default xyplot bottomaxis subtextfont  "Helvetica 12 bold"
::Plotchart::plotstyle configure default xyplot leftaxis   font         "Helvetica 14"
::Plotchart::plotstyle configure default xyplot leftaxis   subtextfont  "Helvetica 12 bold"
::Plotchart::plotstyle configure default xyplot leftaxis   subtextcolor red
::Plotchart::plotstyle configure default xyplot leftaxis   usesubtext   1

set p1 [::Plotchart::createXYPlot .c {0 100 30} {0 20 5} -box {0 0 400 200}]
set p2 [::Plotchart::createXYPlot .c {0 100 30} {0 20 5} -box {100 210 400 200}]

#.c create rectangle 0 210 400 410

$p1 plot data 0 10
$p1 plot data 100 15

$p1 xtext    Aha
#$p1 xsubtext "1, 2, 3"
$p1 ytext    "Same spot?"

$p2 plot data 0 10
$p2 plot data 100 15
$p2 ytext    "Higher up"
#$p2 ysubtext "Lower down"
$p2 vtext    "To the left"
#$p2 vsubtext "To the right"


.c configure -cursor tcross
crosshair::crosshair .c -dash {.} -fill blue
#crosshair::track on  .c put_coords

set bbox_ll [::Plotchart::coordsToPixel [$p1 canvas] 0 0 ]
set bbox_ur [::Plotchart::coordsToPixel [$p1 canvas] 100 20]
set bbox_p1 [concat $bbox_ll $bbox_ur]
crosshair::bbox_add .c "$bbox_p1"
set bbox_ll [::Plotchart::coordsToPixel [$p2 canvas] 0 0 ]
set bbox_ur [::Plotchart::coordsToPixel [$p2 canvas] 100 20]
set bbox_p2 [concat $bbox_ll $bbox_ur]
crosshair::bbox_add .c "$bbox_p2"

catch { console show }

Changes to installer.tcl.

211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
...
242
243
244
245
246
247
248

249

250
251


252
253
254

255
256
257
258
259
260
261
...
587
588
589
590
591
592
593

594



595
596

	log "\nGenerating $adst"
	if {!$config(dry)} {
	    file mkdir [file dirname  $adst]
	    catch {file delete -force $adst}
	    file copy -force $aexe    $adst
	}

	if {[file exists $aexe.man]} {
	    if {$config(doc,nroff)} {
		_manfile $aexe.man nroff n $config(doc,nroff,path)
	    }
	    if {$config(doc,html)} {
		_manfile $aexe.man html html $config(doc,html,path)
	    }
	}
    }
    return
}

proc doinstall {} {
    global config package_version distribution package_name modules excluded

................................................................................
    if {$config(doc,nroff)} {
	set config(man.macros) [string trim [get_input \
		[file join $distribution support installation man.macros]]]
    }
    if {$config(pkg)}       {
	xinstall   pkg $config(pkg,path)
	gen_main_index $config(pkg,path) $package_name $package_version

	if {$config(doc,nroff)} {

	    xinstall doc nroff n    $config(doc,nroff,path)
	}


	if {$config(doc,html)}  {
	    xinstall doc html  html $config(doc,html,path)
	}

    }
    if {$config(exa)}       {xinstall exa $config(exa,path)}
    if {$config(app)}       {ainstall}
    log ""
    return
}

................................................................................
	handlegui
    }
    doinstall
    return
}

# --------------------------------------------------------------

main



exit 0
# --------------------------------------------------------------







<
<
<
<
<
<
<
<
<







 







>
|
>
|

>
>
|
|
<
>







 







>
|
>
>
>


211
212
213
214
215
216
217









218
219
220
221
222
223
224
...
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248

249
250
251
252
253
254
255
256
...
582
583
584
585
586
587
588
589
590
591
592
593
594
595

	log "\nGenerating $adst"
	if {!$config(dry)} {
	    file mkdir [file dirname  $adst]
	    catch {file delete -force $adst}
	    file copy -force $aexe    $adst
	}









    }
    return
}

proc doinstall {} {
    global config package_version distribution package_name modules excluded

................................................................................
    if {$config(doc,nroff)} {
	set config(man.macros) [string trim [get_input \
		[file join $distribution support installation man.macros]]]
    }
    if {$config(pkg)}       {
	xinstall   pkg $config(pkg,path)
	gen_main_index $config(pkg,path) $package_name $package_version
    }
    if {$config(doc,nroff)} {
	foreach dir [glob -directory $distribution/embedded/man/files/modules *] {
	    xcopy $dir $config(doc,nroff,path) 1
	}
	xcopy $distribution/embedded/man/files/apps $config(doc,nroff,path) 1
    }
    if {$config(doc,html)}  {
	#xinstall doc html  html $config(doc,html,path)

	xcopy $distribution/embedded/www $config(doc,html,path) 1
    }
    if {$config(exa)}       {xinstall exa $config(exa,path)}
    if {$config(app)}       {ainstall}
    log ""
    return
}

................................................................................
	handlegui
    }
    doinstall
    return
}

# --------------------------------------------------------------
if {[catch {
    main
}]} {
    puts $errorInfo
}
exit 0
# --------------------------------------------------------------

Changes to modules/autoscroll/ChangeLog.







1
2
3
4
5
6
7






2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2005-11-10  Andreas Kupries  <andreas_kupries@users.sourceforge.net>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2005-11-10  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

Changes to modules/canvas/ChangeLog.







1
2
3
4
5
6
7






2012-05-11  Andreas Kupries  <andreask@activestate.com>

	* ../../examples/canvas/osm.tcl: Integrated code/patch contributed
	  by <tomasz@tuxteam.de> to use the new map::geocode::nominatim
	  package for the resolution of geographical names. Integrated
	  patch contributed by same to use the new zoom fitting
	  functionality of map::slippy (v 0.5).
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2012-05-11  Andreas Kupries  <andreask@activestate.com>

	* ../../examples/canvas/osm.tcl: Integrated code/patch contributed
	  by <tomasz@tuxteam.de> to use the new map::geocode::nominatim
	  package for the resolution of geographical names. Integrated
	  patch contributed by same to use the new zoom fitting
	  functionality of map::slippy (v 0.5).

Changes to modules/chatwidget/ChangeLog.







1
2
3
4
5
6
7






2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2008-06-20  Pat Thoyts  <patthoyts@users.sourceforge.net>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2008-06-20  Pat Thoyts  <patthoyts@users.sourceforge.net>

Changes to modules/controlwidget/ChangeLog.







1
2
3
4
5
6
7






2010-09-10  Andreas Kupries  <andreask@activestate.com>

	* controlwidget.tcl: Fixed the mess with controlwidget sourcing
	* tachometer.tcl: files which were their own packages. Added
	* voltmeter.tcl: package provide declarations to volt- and
	* pkgIndex.tcl: tachometer widgets. Registered all the packages
	  in the index.
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2010-09-10  Andreas Kupries  <andreask@activestate.com>

	* controlwidget.tcl: Fixed the mess with controlwidget sourcing
	* tachometer.tcl: files which were their own packages. Added
	* voltmeter.tcl: package provide declarations to volt- and
	* pkgIndex.tcl: tachometer widgets. Registered all the packages
	  in the index.

Changes to modules/crosshair/ChangeLog.



















1
2
3
4
5
6
7
8
9
10
11
12
..
23
24
25
26
27
28
29
30


















2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2008-11-27  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	* crosshair.tcl: Split the two crosshair lines into four, one per
	* crosshair.man: direction, and changed the locations so that the
	* pkgIndex.tcl: canvas will not pick the crosshairs as the
	'current' object under the cursor. Bumped version to 1.0.2
................................................................................
	* crosshair.man: Fixed doc bugs found by Larry Virden
	  [Bug 2255255]. These were my bad, not Kevin's.

2008-11-04  Andreas Kupries  <andreask@activestate.com>

	* crosshair.man: New module and package, crosshairs for
	* crosshair.tcl: Tk canvas. By Kevin Kenny.
	* pkgIndex.tcl: 
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>




|







 







|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
..
41
42
43
44
45
46
47
48
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2013-02-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	* crosshair.tcl: [Bug 3603562]: Tweaks and fixes for robustness.
	* ../../examples/canvas/crosshair_for_axes.tcl: Examples of bounded
	* ../../examples/canvas/crosshair_for_multixyplot.tcl: crosshairs.

2013-02-13  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	* crosshair.tcl: [Bug 3603562]: Allow the confinement of the
	* crosshair.man: crosshairs to one or more rectangular bounding
	* pkgIndex.tcl: boxes. Bumped version to 1.1.

2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	*

2008-11-27  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	* crosshair.tcl: Split the two crosshair lines into four, one per
	* crosshair.man: direction, and changed the locations so that the
	* pkgIndex.tcl: canvas will not pick the crosshairs as the
	'current' object under the cursor. Bumped version to 1.0.2
................................................................................
	* crosshair.man: Fixed doc bugs found by Larry Virden
	  [Bug 2255255]. These were my bad, not Kevin's.

2008-11-04  Andreas Kupries  <andreask@activestate.com>

	* crosshair.man: New module and package, crosshairs for
	* crosshair.tcl: Tk canvas. By Kevin Kenny.
	* pkgIndex.tcl:

Changes to modules/crosshair/crosshair.man.

1
2
3
4

5
6
7
8
9
10
11
12
13
14
15
16
..
88
89
90
91
92
93
94
95
96

97























98
99
100
101
102
103
104
105
106
107
108
109
110
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin crosshair n 1.0.2]
[copyright {2003 Kevin Kenny}]
[copyright {2008 (docs) Andreas Kupries <andreas_kupries@users.sourceforge.net>}]

[moddesc   Crosshairs]
[titledesc {Crosshairs for Tk canvas}]
[require Tcl [opt 8.4]]
[require Tk  [opt 8.4]]
[require crosshair [opt 1.0.2]]
[keywords canvas cross-hairs tracking viewport location]

[description]

The [package crosshair] package provides commands to (de)activate and
track crosshairs on canvas widgets.

................................................................................
[call [cmd crosshair::track] [method off] [arg w]]

This command disables the reporting of the location of the cross-hairs
in the canvas widget [arg w]. It is an error to use this command for a
canvas which has no cross-hairs. The result of the command is the
empty string.

[list_end]



























[section {BUGS, IDEAS, FEEDBACK}]

This document, and the package it describes, will undoubtedly contain
bugs and other problems.

Please report such in the category [emph {tklib :: crosshair}] of the
[uri {http://sourceforge.net/tracker/?group_id=12883} {Tcllib SF Trackers}].

Please also report any ideas for enhancements you may have for either
package and/or documentation.

[manpage_end]

|


>




|







 







<

>

>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>













1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
..
89
90
91
92
93
94
95

96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin crosshair n 1.1]
[copyright {2003 Kevin Kenny}]
[copyright {2008 (docs) Andreas Kupries <andreas_kupries@users.sourceforge.net>}]
[copyright {2013 Frank Gover, Andreas Kupries}]
[moddesc   Crosshairs]
[titledesc {Crosshairs for Tk canvas}]
[require Tcl [opt 8.4]]
[require Tk  [opt 8.4]]
[require crosshair [opt 1.1]]
[keywords canvas cross-hairs tracking viewport location]

[description]

The [package crosshair] package provides commands to (de)activate and
track crosshairs on canvas widgets.

................................................................................
[call [cmd crosshair::track] [method off] [arg w]]

This command disables the reporting of the location of the cross-hairs
in the canvas widget [arg w]. It is an error to use this command for a
canvas which has no cross-hairs. The result of the command is the
empty string.



[call [cmd crosshair::bbox_add] [arg w] [arg bbox]]

This command adds a bounding box to the crosshairs for canvas [arg w].
The crosshairs will only be active within that area.

[para] The result of the command is a token with which the bounding
box can be removed again, see [cmd crosshair::bbox_remove] below.

[para] The bounding box [arg bbox] is specified thorugh a list of 4
values, the lower left and upper right corners of the box. The order
of values in the list is:

[example {llx lly urx ury}]

[para] Note that this command can be used multiple times, each call
adding one more bounding box. In such a case the visible area is the
[emph union] of all the specified bounding boxes.

[call [cmd crosshair::bbox_remove] [arg token]]

This command removes the bounding box specified by the [arg token] (a
result of [cmd crosshair::bbox_add]) from the crosshairs for its
canvas widget.

[list_end]

[section {BUGS, IDEAS, FEEDBACK}]

This document, and the package it describes, will undoubtedly contain
bugs and other problems.

Please report such in the category [emph {tklib :: crosshair}] of the
[uri {http://sourceforge.net/tracker/?group_id=12883} {Tcllib SF Trackers}].

Please also report any ideas for enhancements you may have for either
package and/or documentation.

[manpage_end]

Changes to modules/crosshair/crosshair.tcl.

1
2
3
4
5
6
7
8
9
10
11
12
13




14
15
16
17
18
19
20
..
44
45
46
47
48
49
50

51
52
53
54
55
56
57
...
109
110
111
112
113
114
115


116
117
118
119
120
121
122
123
124
125


































































































126
127
128
129
130
131
132
...
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
...
243
244
245
246
247
248
249
250

251
252
253
254
255

256
257
258
259





















































































260
261
262
263
264
265
266
...
281
282
283
284
285
286
287

288
289
290
291
292
293




















294












295
296
297
298















299
300
301
302

303
304
305
306



307
308











309
310
311









312
313
314
315
316
317
318
319
320
...
329
330
331
332
333
334
335
336
# crosshair.tcl -
#
# Kevin's mouse-tracking crosshair in Tk's canvas widget.
#
# This package displays a mouse-tracking crosshair in the canvas widget.
#
# Copyright (c) 2003 by Kevin B. Kenny. All rights reserved.
# Redistribution permitted under the terms in
#  http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/tcl/tcl/license.terms?rev=1.3&content-type=text/plain
#
# Copyright (c) 2008 Andreas Kupries. Added ability to provide the tracking
#               information to external users.
#





# ### ### ### ######### ######### #########
## Requisites

package require Tcl 8.4
package require Tk  8.4

................................................................................
#       crosshairs will be displayed on pointing device motion.
#
#----------------------------------------------------------------------

proc ::crosshair::crosshair { w args } {
    variable config
    set opts(args) $args

    bindtags $w [linsert [bindtags $w] 1 Crosshair]
    set config($w) [array get opts]
    return
}

#----------------------------------------------------------------------
#
................................................................................
	return -code error "no crosshairs in $w"
    }
    array set opts $config($w)
    if { [llength $args] > 0 } {
	array set flags $opts(args)
	array set flags $args
	set opts(args) [array get flags]


	if { [info exists opts(hhairl)] } {
	    eval [list $w itemconfig $opts(hhairl)] $args
	    eval [list $w itemconfig $opts(hhairr)] $args
	    eval [list $w itemconfig $opts(vhaird)] $args
	    eval [list $w itemconfig $opts(vhairu)] $args
	}
	set config($w) [array get opts]
    }
    return $opts(args)
}



































































































#----------------------------------------------------------------------
#
# ::crosshair::track --
#
#       (De)activates reporting of the cross-hair coordinates through
#       a user-specified callback.
................................................................................
#
#----------------------------------------------------------------------

proc ::crosshair::Hide { w } {
    variable config
    if { ![info exists config($w)] } return
    array set opts $config($w)
    if { ![info exists opts(hhairl)] } return
    $w delete $opts(hhairl)
    $w delete $opts(hhairr)
    $w delete $opts(vhaird)
    $w delete $opts(vhairu)
    unset opts(hhairl)
    unset opts(hhairr)
    unset opts(vhairu)
    unset opts(vhaird)
    set config($w) [array get opts]
    return
}

#----------------------------------------------------------------------
#
# ::crosshair::Unhide --
................................................................................
#
#----------------------------------------------------------------------

proc ::crosshair::Unhide { w x y } {
    variable config
    if { ![info exists config($w)] } return
    array set opts $config($w)
    if { ![info exists opts(hhairl)] } {

	set opts(hhairl) [eval [list $w create line 0 0 0 0] $opts(args)]
	set opts(hhairr) [eval [list $w create line 0 0 0 0] $opts(args)]
	set opts(vhaird) [eval [list $w create line 0 0 0 0] $opts(args)]
	set opts(vhairu) [eval [list $w create line 0 0 0 0] $opts(args)]
    }

    set config($w) [array get opts]
    Move $w $x $y
    return
}






















































































#----------------------------------------------------------------------
#
# ::crosshair::Move --
#
#       Moves the crosshairs in a camvas
#
................................................................................
# with crosshairs.
#
#----------------------------------------------------------------------

proc ::crosshair::Move { w x y } {
    variable config
    array set opts $config($w)

    set opts(x) [$w canvasx $x]
    set opts(y) [$w canvasy $y]
    set opts(x0) [$w canvasx 0]
    set opts(x1) [$w canvasx [winfo width $w]]
    set opts(y0) [$w canvasy 0]
    set opts(y1) [$w canvasy [winfo height $w]]




















    if { [info exists opts(hhairl)] } {












	# +/-4 is the minimal possible distance which still prevents
	# the canvas from choosing the crosshairs as 'current' object
	# under the cursor.
	set n 4















	$w coords $opts(hhairl) $opts(x0) $opts(y) [expr {$opts(x)-$n}] $opts(y)
	$w coords $opts(hhairr) [expr {$opts(x)+$n}] $opts(y) $opts(x1) $opts(y)
	$w coords $opts(vhairu) $opts(x) $opts(y0) $opts(x) [expr {$opts(y)-$n}]
	$w coords $opts(vhaird) $opts(x) [expr {$opts(y)+$n}] $opts(x) $opts(y1)

	$w raise $opts(hhairl)
	$w raise $opts(hhairr)
	$w raise $opts(vhaird)
	$w raise $opts(vhairu)



    }
    set config($w) [array get opts]











    if {[info exists opts(track)]} {
	uplevel \#0 [linsert $opts(track) end $w $opts(x) $opts(y) $opts(x0) $opts(y0) $opts(x1) $opts(y1)]
    }









    return
}

# ### ### ### ######### ######### #########
## State

namespace eval ::crosshair {
    
    # Array holding information describing crosshairs in canvases
................................................................................
    bind Crosshair <Leave>   "[namespace code Hide] %W"
    bind Crosshair <Motion>  "[namespace code Move] %W %x %y"
}

# ### ### ### ######### ######### #########
## Ready

package provide crosshair 1.0.2







|
<




>
>
>
>







 







>







 







>
>










>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







|
|
|
|
|
|
|
|
<







 







<
>
|
|
|
<
|
>
|



>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>
|
|
|
<
|
<
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
|
|
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
|
|
|
>




>
>
>
|
<
>
>
>
>
>
>
>
>
>
>
>
|
<
|
>
>
>
>
>
>
>
>
>









 







|
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
..
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
...
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
...
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320

321
322
323
324
325
326
327
...
346
347
348
349
350
351
352

353
354
355
356

357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
...
469
470
471
472
473
474
475
476
477
478
479

480

481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545

546
547
548
549
550
551
552
553
554
555
556
557

558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
...
585
586
587
588
589
590
591
592
# crosshair.tcl -
#
# Kevin's mouse-tracking crosshair in Tk's canvas widget.
#
# This package displays a mouse-tracking crosshair in the canvas widget.
#
# Copyright (c) 2003 by Kevin B. Kenny. All rights reserved.
# Redistribution permitted under the terms of the Tcl License.

#
# Copyright (c) 2008 Andreas Kupries. Added ability to provide the tracking
#               information to external users.
#
# Copyright (c) 2013 Frank Gover, Andreas Kupries. Added ability to
#               bound the crosshairs to an area of the canvas. Useful
#               for plots.
#	(Actual code inspired by Frank's, but modified and extended (multiple bboxes)).

# ### ### ### ######### ######### #########
## Requisites

package require Tcl 8.4
package require Tk  8.4

................................................................................
#       crosshairs will be displayed on pointing device motion.
#
#----------------------------------------------------------------------

proc ::crosshair::crosshair { w args } {
    variable config
    set opts(args) $args
    set opts(hidden) 0
    bindtags $w [linsert [bindtags $w] 1 Crosshair]
    set config($w) [array get opts]
    return
}

#----------------------------------------------------------------------
#
................................................................................
	return -code error "no crosshairs in $w"
    }
    array set opts $config($w)
    if { [llength $args] > 0 } {
	array set flags $opts(args)
	array set flags $args
	set opts(args) [array get flags]

	# Immediately apply to a visible crosshair
	if { [info exists opts(hhairl)] } {
	    eval [list $w itemconfig $opts(hhairl)] $args
	    eval [list $w itemconfig $opts(hhairr)] $args
	    eval [list $w itemconfig $opts(vhaird)] $args
	    eval [list $w itemconfig $opts(vhairu)] $args
	}
	set config($w) [array get opts]
    }
    return $opts(args)
}

#----------------------------------------------------------------------
#
# ::crosshair::bbox_add --
#
#       Confines the crosshairs to a rectangular area in the canvas widget.
#	Multiple calls add areas, each allowing the crosshairs.
#
#	NOTE: Bounding boxes can overlap to the point of being identical.
#
# Parameters:
#       w - Path name of the widget
#       bbox - Area in the canvas. A list of 4 numbers in the form
#		{bbox_llx bbox_lly bbox_urx bbox_ury}
#            where:
#                 bbox-llx = Lower left  X coordinate of the area
#                 bbox-lly = Lower left  Y coordinate of the area
#                 bbox-urx = Upper right X coordinate of the area
#                 bbox-ury = Upper right Y coordinate of the area
#
# Result:
#	A token identifying the bounding box, for future removal.
#
#----------------------------------------------------------------------

proc ::crosshair::bbox_add { w bbox } {
    variable config
    if { ![info exists config($w)] } {
	return -code error "no crosshairs in $w"
    }
    array set opts $config($w)

    # Sort the coordinates and make sure the bbox is in format
    # "lower-left upper-right". The larger Y is on the lower left and
    # the larger X is on the upper right.

    set x_coords [lsort -real -increasing [list [lindex $bbox 0] [lindex $bbox 2]]]
    set y_coords [lsort -real -decreasing [list [lindex $bbox 1] [lindex $bbox 3]]]

    set bbox [list \
		  [lindex $x_coords 0] [lindex $y_coords 0] \
		  [lindex $x_coords 1] [lindex $y_coords 1]]

    lappend opts(bbox) $bbox
    set config($w) [array get opts]

    set token bbox$w/[llength $opts(bbox)]
    return $token
}

#----------------------------------------------------------------------
#
# ::crosshair::bbox_remove --
#
#       Remove a bounding box for the crosshairs, identified by token.
#	The crosshairs are confined to the remaining boxes, or not at
#	all if no boxes remain.
#
#	NOTE: Bounding boxes can overlap to the point of being identical.
#
# Parameters:
#       token - The bbox token, identifying both canvas and bbox in it.
#
# Result:
#	Nothing.
#
#----------------------------------------------------------------------

proc ::crosshair::bbox_remove { token } {
    variable config
    if {![regexp {^bbox([^/]+)/(\d+)$} -> w index]} {
	return -code error "Expected a bbox token, got \"$token\""
    }
    if { ![info exists config($w)] } {
	return -code error "no crosshairs in $w"
    }
    array set opts $config($w)

    # Replace chosen box with nothing.
    incr index -1
    set newboxes [lreplace $opts(bbox) $index $index {}]

    # Remove empty boxes from the end of the list.
    while {[llength $newboxes] && ![llength [lindex $newboxes end]]} {
	set newboxes [lreplace $newboxes end end]
    }

    if {![llength $newboxes]} {
	# Nothing left, disable entirely
	unset opts(bbox)
    } else {
	# Keep remainder.
	set opts(bbox) $newboxes
    }

    set config($w) [array get opts]
    return
}

#----------------------------------------------------------------------
#
# ::crosshair::track --
#
#       (De)activates reporting of the cross-hair coordinates through
#       a user-specified callback.
................................................................................
#
#----------------------------------------------------------------------

proc ::crosshair::Hide { w } {
    variable config
    if { ![info exists config($w)] } return
    array set opts $config($w)

    # Already hidden, do nothing
    if { $opts(hidden) } return
    set opts(hidden) 1

    # Destroy the parts of a visible cross-hair
    Kill $w opts


    set config($w) [array get opts]
    return
}

#----------------------------------------------------------------------
#
# ::crosshair::Unhide --
................................................................................
#
#----------------------------------------------------------------------

proc ::crosshair::Unhide { w x y } {
    variable config
    if { ![info exists config($w)] } return
    array set opts $config($w)


    # Already unhidden, do nothing
    if { !$opts(hidden) } return
    set opts(hidden) 0


    # Recreate cross-hair. This takes the bounding boxes, if any, into
    # account, i.e. if we are out of bounds nothing will appear.
    Move $w $x $y
    return
}

proc ::crosshair::GetBoundaries { w x y llxv llyv urxv uryv } {
    upvar 1 $llxv llx $llyv lly $urxv urx $uryv ury
    variable config
    array set opts $config($w)

    # Defaults
    set llx [$w canvasx 0]
    set lly [$w canvasy 0]
    set urx [$w canvasx [winfo width  $w]]
    set ury [$w canvasy [winfo height $w]]

    # (x) No boxes confining the crosshair.
    if {![info exists opts(bbox)]} {
	#puts ANY($x,$y)
	return 1
    }

    # Determine active boundaries based on the boxes we are in (or not).

    # NOTE: This is linear in the number of active boundaries on the
    # canvas. If this is a really large number this will become
    # slow. If that happens consider creation and maintenance of some
    # fast data structure (R-tree, or similar) which can take
    # advantage of overlap and nesting to quickly rule out large
    # areas. Note that such a structure has its own price in time,
    # memory, and code complexity.

    set first 1
    foreach box $opts(bbox) {
	# Ignore removed boxes, not yet cleaned up. Note that we have
	# at least one active box here to touch by the loop. If we had
	# none the bbox_remove command ensured that (x) above
	# triggered.
	if {![llength $box]} continue

	# Ignore all boxes we are outside of. They do not go into the
	# boundary calculation.
	if {[Outside $box $x $y]} continue

	# Unfold the box data and check if its boundaries are better
	# (less restrictive) than we currently have, or if this is the
	# first restriction.
	set nllx [lindex $box 0]
	set nlly [lindex $box 1]
	set nurx [lindex $box 2]
	set nury [lindex $box 3]

	if {$first || ($nllx < $llx)} { set llx $nllx }
	if {$first || ($nlly > $lly)} { set lly $nlly }
	if {$first || ($nurx > $urx)} { set urx $nurx }
	if {$first || ($nury < $ury)} { set ury $nury }

	set first 0
    }

    if {$first} {
	# We have boxes limiting us (See both (x)), and we are outside
	# of all of them. Time to hide the crosshairs.
	#puts OUT($x,$y)
	return 0
    }

    # We are inside of some box and have the proper boundaries of
    # visibility.
    #puts LIMIT($x,$y):$llx,$lly,$urx,$ury
    return 1
}

proc ::crosshair::Outside { box x y } {
    # Unfold box
    set llx [lindex $box 0]
    set lly [lindex $box 1]
    set urx [lindex $box 2]
    set ury [lindex $box 3]

    #puts \tTEST($x,$y):$llx,$lly,$urx,$ury:[expr {($x < $llx) || ($x > $urx) || ($y < $lly) || ($y > $ury)}]

    # Test each edge. Note that the border lines are considered as "outside".

    expr {($x <= $llx) ||
	  ($x >= $urx) ||
	  ($y >= $lly) ||
	  ($y <= $ury)}
}

#----------------------------------------------------------------------
#
# ::crosshair::Move --
#
#       Moves the crosshairs in a camvas
#
................................................................................
# with crosshairs.
#
#----------------------------------------------------------------------

proc ::crosshair::Move { w x y } {
    variable config
    array set opts $config($w)

    set x [$w canvasx $x]
    set y [$w canvasy $y]
    set opts(x) $x

    set opts(y) $y


    if {![GetBoundaries $w $x $y opts(x0) opts(y0) opts(x1) opts(y1)]} {
	# We are out of bounds. Kill the crosshair, store changes, and
	# return. This last disables the use of the tracking
	# callback. The crosshairs track only inside the allowed
	# boxes.
	Kill $w opts

	# Store changes back.
	set config($w) [array get opts]
	return
    }

    # Inside the boundaries, create or move.
    Place $w opts

    # Store changes back.
    set config($w) [array get opts]

    # And run the tracking callback, if active.
    if {![info exists opts(track)]} return
    uplevel \#0 [linsert $opts(track) end \
		     $w $opts(x) $opts(y) \
		     $opts(x0) $opts(y0) $opts(x1) $opts(y1)]
    return
}

# ### ### ### ######### ######### #########
## Create, destroy, or modify the parts of a crosshair.

proc ::crosshair::Place {w ov} {
    upvar 1 $ov opts

    # +/-4 is the minimal possible distance which still prevents the
    # canvas from choosing the crosshairs as 'current' object under
    # the cursor.
    set n 4

    set x  $opts(x)
    set y  $opts(y)
    set x0 $opts(x0)
    set y0 $opts(y0)
    set x1 $opts(x1)
    set y1 $opts(y1)
    set ax [expr {$x-$n}]
    set bx [expr {$x+$n}]
    set ay [expr {$y-$n}]
    set by [expr {$y+$n}]

    if { [info exists opts(hhairl)] } {
	# Modify a visible crosshair.

	$w coords $opts(hhairl) $x0 $y $ax $y
	$w coords $opts(hhairr) $bx $y $x1 $y
	$w coords $opts(vhairu) $x $y0 $x $ay
	$w coords $opts(vhaird) $x $by $x $y1

	$w raise $opts(hhairl)
	$w raise $opts(hhairr)
	$w raise $opts(vhaird)
	$w raise $opts(vhairu)
    } else {
	# Create a newly visible crosshair. After unhide and/or
	# entering into one of the active bboxes, if any.


	set opts(hhairl) [eval [list $w create line $x0 $y $ax $y] $opts(args)]
	set opts(hhairr) [eval [list $w create line $bx $y $x1 $y] $opts(args)]
	set opts(vhaird) [eval [list $w create line $x $y0 $x $ay] $opts(args)]
	set opts(vhairu) [eval [list $w create line $x $by $x $y1] $opts(args)]
    }
    return
}

proc ::crosshair::Kill {w ov} {
    upvar 1 $ov opts

    if { ![info exists opts(hhairl)] } return


    $w delete $opts(hhairl)
    $w delete $opts(hhairr)
    $w delete $opts(vhaird)
    $w delete $opts(vhairu)

    unset opts(hhairl)
    unset opts(hhairr)
    unset opts(vhairu)
    unset opts(vhaird)
    return
}

# ### ### ### ######### ######### #########
## State

namespace eval ::crosshair {
    
    # Array holding information describing crosshairs in canvases
................................................................................
    bind Crosshair <Leave>   "[namespace code Hide] %W"
    bind Crosshair <Motion>  "[namespace code Move] %W %x %y"
}

# ### ### ### ######### ######### #########
## Ready

package provide crosshair 1.1

Changes to modules/crosshair/pkgIndex.tcl.

1
2
if {![package vsatisfies [package provide Tcl] 8.4]} {return}
package ifneeded crosshair 1.0.2 [list source [file join $dir crosshair.tcl]]

|
1
2
if {![package vsatisfies [package provide Tcl] 8.4]} {return}
package ifneeded crosshair 1.1 [list source [file join $dir crosshair.tcl]]

Changes to modules/ctext/ChangeLog.







1
2
3
4
5
6
7






2011-04-18  Andreas Kupries  <andreask@activestate.com>

	* ctext.tcl (ctext::linemapUpdateOffset): [Bug 3285751]: Applied
	* ctext.man: patch by Wojciech Kocjan <zoro2@users.sourceforge.net>
	* pkgIndex.tcl: enabling smooth scrolling for Tk 8.5 and
	  higher. Bumped version to 3.3 (new, api-compatible feature).

>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2011-04-18  Andreas Kupries  <andreask@activestate.com>

	* ctext.tcl (ctext::linemapUpdateOffset): [Bug 3285751]: Applied
	* ctext.man: patch by Wojciech Kocjan <zoro2@users.sourceforge.net>
	* pkgIndex.tcl: enabling smooth scrolling for Tk 8.5 and
	  higher. Bumped version to 3.3 (new, api-compatible feature).

Changes to modules/cursor/ChangeLog.







1
2
3
4
5
6
7






2011-01-18  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	* cursor.tcl [Bug 3160150]: Fixed usage of shorthand 'config' for
	* cursor.man: 'configure'. Bumped version to 0.3.1.
	* pkgIndex.tcl:

2009-04-24  Jeff Hobbs  <jeffh@ActiveState.com>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2011-01-18  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	* cursor.tcl [Bug 3160150]: Fixed usage of shorthand 'config' for
	* cursor.man: 'configure'. Bumped version to 0.3.1.
	* pkgIndex.tcl:

2009-04-24  Jeff Hobbs  <jeffh@ActiveState.com>

Changes to modules/datefield/ChangeLog.







1
2
3
4
5
6
7






2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2007-10-10  Andreas Kupries  <andreask@activestate.com>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2007-10-10  Andreas Kupries  <andreask@activestate.com>

Changes to modules/datefield/datefield.man.

1
2
3
4
5



6
7
8
9
10
11
12
..
49
50
51
52
53
54
55
56
57
58
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin datefield n 0.2]
[copyright {Keith Vetter <keith@ebook.gemstar.com>}]
[moddesc {Tk datefield widget}]
[titledesc {Tk datefield widget}]



[require Tk]
[require datefield [opt 0.2]]
[description]

The [package datefield] package provides the datefield widget which
is an enhanced text entry widget for the purpose of date entry. Only
valid dates of the form MM/DD/YYYY can be entered.
................................................................................
 label .l3 -textvariable myDate2 -relief sunken -width 12
 
 grid .l1 .df -sticky ew
 grid .l2 .l3 -sticky ew
 focus .df
}]

[see_also entry(n) clock(n)]
[keywords entry widget clock]
[manpage_end]





>
>
>







 







<
<

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
..
52
53
54
55
56
57
58


59
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin datefield n 0.2]
[copyright {Keith Vetter <keith@ebook.gemstar.com>}]
[moddesc {Tk datefield widget}]
[titledesc {Tk datefield widget}]
[category Widget]
[see_also entry(n) clock(n)]
[keywords entry widget clock dateentry date]
[require Tk]
[require datefield [opt 0.2]]
[description]

The [package datefield] package provides the datefield widget which
is an enhanced text entry widget for the purpose of date entry. Only
valid dates of the form MM/DD/YYYY can be entered.
................................................................................
 label .l3 -textvariable myDate2 -relief sunken -width 12
 
 grid .l1 .df -sticky ew
 grid .l2 .l3 -sticky ew
 focus .df
}]



[manpage_end]

Changes to modules/diagrams/ChangeLog.







1
2
3
4
5
6
7






2012-10-05  Andreas Kupries <andreask@activestate.com>

	* basic.tcl: Modified minimum line-width to 0 (zero).
	* pkgIndex.tcl: This enables things like hidden boxes.
	  Version bumped to 1.0.1 (Considered a bugfix).

2010-09-30  Andreas Kupries  <andreas_kupries@users.sourceforge.net>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2012-10-05  Andreas Kupries <andreask@activestate.com>

	* basic.tcl: Modified minimum line-width to 0 (zero).
	* pkgIndex.tcl: This enables things like hidden boxes.
	  Version bumped to 1.0.1 (Considered a bugfix).

2010-09-30  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

Changes to modules/getstring/ChangeLog.







1
2
3
4
5
6
7






2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2005-11-10  Andreas Kupries  <andreas_kupries@users.sourceforge.net>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2005-11-10  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

Changes to modules/history/ChangeLog.







1
2
3
4
5
6
7






2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2005-11-10  Andreas Kupries  <andreas_kupries@users.sourceforge.net>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2005-11-10  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

Changes to modules/ico/ChangeLog.







1
2
3
4
5
6
7






2011-10-04  Jeff Hobbs  <jeffh@ActiveState.com>

	* ico.tcl: add ico::Show example.
	* ico0.tcl: improve default type retrieval
	* pkgIndex.tcl: bump versions to 1.1 and 0.3.2

2010-07-07  Andreas Kupries  <andreask@activestate.com>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2011-10-04  Jeff Hobbs  <jeffh@ActiveState.com>

	* ico.tcl: add ico::Show example.
	* ico0.tcl: improve default type retrieval
	* pkgIndex.tcl: bump versions to 1.1 and 0.3.2

2010-07-07  Andreas Kupries  <andreask@activestate.com>

Changes to modules/ipentry/ChangeLog.







1
2
3
4
5
6
7






2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2008-11-29 Aaron Faupell <afaupell@users.sourceforge.net>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2008-11-29 Aaron Faupell <afaupell@users.sourceforge.net>

Changes to modules/ipentry/ipentry.man.

1
2
3
4


5
6
7
8
9
10
11
...
106
107
108
109
110
111
112
113
114
115
116
117
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin ipentry n 0.3]
[moddesc   {An IP address entry widget}]
[titledesc {An IP address entry widget}]


[require Tcl 8.4]
[require Tk 8.4]
[require ipentry [opt 0.3]]
[description]

This package provides a widget for the entering of a IP address. 

................................................................................
[tkoption_def -readonlybackground  readonlyBackground ReadonlyBackground]
[tkoption_def -insertbackground    insertBackground Background]

Standard widget options. See [cmd options] for a description of their
meanings and values.

[list_end]


[keywords entry {ip address}]
[manpage_end]





>
>







 







<
<
<


1
2
3
4
5
6
7
8
9
10
11
12
13
...
108
109
110
111
112
113
114



115
116
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin ipentry n 0.3]
[moddesc   {An IP address entry widget}]
[titledesc {An IP address entry widget}]
[category Widget]
[keywords entry {ip address} network]
[require Tcl 8.4]
[require Tk 8.4]
[require ipentry [opt 0.3]]
[description]

This package provides a widget for the entering of a IP address. 

................................................................................
[tkoption_def -readonlybackground  readonlyBackground ReadonlyBackground]
[tkoption_def -insertbackground    insertBackground Background]

Standard widget options. See [cmd options] for a description of their
meanings and values.

[list_end]



[manpage_end]

Changes to modules/khim/ChangeLog.







1
2
3
4
5
6
7






2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2008-05-29  Kevin B. Kenny  <kennykb@acm.org>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2008-05-29  Kevin B. Kenny  <kennykb@acm.org>

Changes to modules/mentry/ChangeLog.







1
2
3
4
5
6
7






2012-03-10  Csaba Nemethi <csaba.nemethi@t-online.de>

	* *.tcl:         Bumped the version number to 3.6; updated the
	* COPYRIGHT.txt: copyright information.
	* README.txt:

	* scripts/*.tcl: Improved the impleementation of the "-background"
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2012-03-10  Csaba Nemethi <csaba.nemethi@t-online.de>

	* *.tcl:         Bumped the version number to 3.6; updated the
	* COPYRIGHT.txt: copyright information.
	* README.txt:

	* scripts/*.tcl: Improved the impleementation of the "-background"

Changes to modules/mentry/README.txt.

58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
for Windows.  These files contain the same information, except for the
additional carriage return character preceding the linefeed at the end
of each line in the text files for Windows.

Mentry is also hosted on SourceForge, as part of tklib, which in turn is
contained in the tcllib project, having the address

    http://sourceforge.net/projects/tcllib

How to install it?
------------------

Install the package as a subdirectory of one of the directories given
by the "auto_path" variable.  For example, you can install it as a
directory at the same level as the Tcl and Tk script libraries.  The







|







58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
for Windows.  These files contain the same information, except for the
additional carriage return character preceding the linefeed at the end
of each line in the text files for Windows.

Mentry is also hosted on SourceForge, as part of tklib, which in turn is
contained in the tcllib project, having the address

    http://core.tcl.tk/tklib

How to install it?
------------------

Install the package as a subdirectory of one of the directories given
by the "auto_path" variable.  For example, you can install it as a
directory at the same level as the Tcl and Tk script libraries.  The

Changes to modules/mentry/doc/mentry.html.

159
160
161
162
163
164
165
166
167
168
169
170
171
172
173

  <p>Mentry is also hosted on SourceForge, as part of tklib, which in turn is
  contained in the tcllib project, having the address</p>

  <blockquote>
    <address>
      <a href=
      "http://sourceforge.net/projects/tcllib">http://sourceforge.net/projects/tcllib</a>
    </address>
  </blockquote>

  <h3><a name="ov_install"></a>How to install it?</h3>

  <p>Install the package as a subdirectory of one of the directories given by
  the <code>auto_path</code> variable.&nbsp; For example, you can install it as







|







159
160
161
162
163
164
165
166
167
168
169
170
171
172
173

  <p>Mentry is also hosted on SourceForge, as part of tklib, which in turn is
  contained in the tcllib project, having the address</p>

  <blockquote>
    <address>
      <a href=
      "http://core.tcl.tk/tklib">http://core.tcl.tk/tklib</a>
    </address>
  </blockquote>

  <h3><a name="ov_install"></a>How to install it?</h3>

  <p>Install the package as a subdirectory of one of the directories given by
  the <code>auto_path</code> variable.&nbsp; For example, you can install it as

Changes to modules/menubar/ChangeLog.







1
2
3
4
5
6
7






# ------------------------------------------------------------
# Mon Jan  4 16:30:50 USMST 2010 (tomk)

This checkin includes several major changes to the menubar class.

- The -sync option and functionality were removed.
- The separator type was enhanced to include an optional label.
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

# ------------------------------------------------------------
# Mon Jan  4 16:30:50 USMST 2010 (tomk)

This checkin includes several major changes to the menubar class.

- The -sync option and functionality were removed.
- The separator type was enhanced to include an optional label.

Changes to modules/ntext/ChangeLog.







1
2
3
4
5
6
7






2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2007-06-21  Jeff Hobbs  <jeffh@ActiveState.com>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2007-06-21  Jeff Hobbs  <jeffh@ActiveState.com>

Changes to modules/plotchart/ChangeLog.







1
2
3
4
5
6
7






2013-03-10  Arjen Markus  <arjenmarkus@users,sourceforge.net>
	* plotchart.tcl: Basic support for subtexts with axes, accurate factor "torad", pixelToCoords extended
	* plotchart.test: Extended tests for coordinate transformations
	* plotaxis.tcl: Support for subtexts
	* plotconfig.tcl: Support for subtexts
	* plotspecial.tcl: Removed debug output
	* pkgIndex.tcl: Bumped version to 2.1
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2013-03-10  Arjen Markus  <arjenmarkus@users,sourceforge.net>
	* plotchart.tcl: Basic support for subtexts with axes, accurate factor "torad", pixelToCoords extended
	* plotchart.test: Extended tests for coordinate transformations
	* plotaxis.tcl: Support for subtexts
	* plotconfig.tcl: Support for subtexts
	* plotspecial.tcl: Removed debug output
	* pkgIndex.tcl: Bumped version to 2.1

Changes to modules/plotchart/plotchart.man.

680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
...
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
...
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
...
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888

Create a plot command that will use a right axis instead of the left
axis (configuration type: inherited from the existing plot). The canvas widget
must already contain an ordinary plot, as the
horizontal axis and other properties are reused. Preferably use the
plot command, as with multiple plots in a canvas (also when redefining an existing
plot!), the wrong geometry might be used.
[nl]
To plot data using the
right axis, use this new command, to plot data using the [emph left]
axis, use the original plot command.

[list_begin arguments]
[arg_def widget w_or_plot in]
Name of the [emph existing] canvas widget to hold the plot or preferably the
................................................................................
[para]


[call [cmd \$anyplot] xsubtext [arg text]]

Specify the subtext of the (horizontal) x-axis, for those plots that have
a straight x-axis. This text is drawn below the primary text.
[nl]
Since this involves positioning the primary text and setting margins, you need to
set the option "usesubtext" for the bottom axis via the plotstyle command. The relevant
options are: usesubtext, subtextcolor and subtextfont.

[list_begin arguments]
[arg_def string text in]
The secondary text of the x-axis label to be drawn.
................................................................................


[call [cmd \$anyplot] ysubtext [arg text]]

Specify the subtext of the (vertical) y-axis, for those plots that have
a straight y-axis. This text is drawn below the primary text, for both
axes on the left and the right.
[nl]
Since this involves positioning the primary text and setting margins, you need to
set the option "usesubtext" for the left or right axis via the plotstyle command. The relevant
options are: usesubtext, subtextcolor and subtextfont.

[list_begin arguments]
[arg_def string text in]
The secondary text of the y-axis label to be drawn.
................................................................................


[call [cmd \$anyplot] vsubtext [arg text]]

Specify the subtext of the (vertical) y-axis, for those plots that have
a straight y-axis. This text is drawn to the [emph right] of the primary text, for both
axes on the left and the right.
[nl]
Since this involves positioning the primary text and setting margins, you need to
set the option "usesubtext" for the left or right axis via the plotstyle command. The relevant
options are: usevsubtext, vsubtextcolor and vsubtextfont. (Note the "v" to distinguish this
option from the text at the top of a vertical axis that is drawn via [term "\$anyplot ytext"] or
[term "\$anyplot ysubtext"].)

[list_begin arguments]







|







 







|







 







|







 







|







680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
...
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
...
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
...
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888

Create a plot command that will use a right axis instead of the left
axis (configuration type: inherited from the existing plot). The canvas widget
must already contain an ordinary plot, as the
horizontal axis and other properties are reused. Preferably use the
plot command, as with multiple plots in a canvas (also when redefining an existing
plot!), the wrong geometry might be used.
[para]
To plot data using the
right axis, use this new command, to plot data using the [emph left]
axis, use the original plot command.

[list_begin arguments]
[arg_def widget w_or_plot in]
Name of the [emph existing] canvas widget to hold the plot or preferably the
................................................................................
[para]


[call [cmd \$anyplot] xsubtext [arg text]]

Specify the subtext of the (horizontal) x-axis, for those plots that have
a straight x-axis. This text is drawn below the primary text.
[para]
Since this involves positioning the primary text and setting margins, you need to
set the option "usesubtext" for the bottom axis via the plotstyle command. The relevant
options are: usesubtext, subtextcolor and subtextfont.

[list_begin arguments]
[arg_def string text in]
The secondary text of the x-axis label to be drawn.
................................................................................


[call [cmd \$anyplot] ysubtext [arg text]]

Specify the subtext of the (vertical) y-axis, for those plots that have
a straight y-axis. This text is drawn below the primary text, for both
axes on the left and the right.
[para]
Since this involves positioning the primary text and setting margins, you need to
set the option "usesubtext" for the left or right axis via the plotstyle command. The relevant
options are: usesubtext, subtextcolor and subtextfont.

[list_begin arguments]
[arg_def string text in]
The secondary text of the y-axis label to be drawn.
................................................................................


[call [cmd \$anyplot] vsubtext [arg text]]

Specify the subtext of the (vertical) y-axis, for those plots that have
a straight y-axis. This text is drawn to the [emph right] of the primary text, for both
axes on the left and the right.
[para]
Since this involves positioning the primary text and setting margins, you need to
set the option "usesubtext" for the left or right axis via the plotstyle command. The relevant
options are: usevsubtext, vsubtextcolor and vsubtextfont. (Note the "v" to distinguish this
option from the text at the top of a vertical axis that is drawn via [term "\$anyplot ytext"] or
[term "\$anyplot ysubtext"].)

[list_begin arguments]

Changes to modules/plotchart/plotcontour.test.

303
304
305
306
307
308
309
310
  set res 1
} 1



# -------------------------------------------------------------------------
::tcltest::cleanupTests








<
303
304
305
306
307
308
309

  set res 1
} 1



# -------------------------------------------------------------------------
::tcltest::cleanupTests

Changes to modules/style/ChangeLog.







1
2
3
4
5
6
7






2011-05-02  Jeff Hobbs  <jeffh@ActiveState.com>

	* as.tcl (style::as::init_fonts), pkgIndex.tcl: update to v1.4.1.
	Only add *Menu.font for x11, as Cocoa Tk responds to menu font
	requests now, and it looks funny.

2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2011-05-02  Jeff Hobbs  <jeffh@ActiveState.com>

	* as.tcl (style::as::init_fonts), pkgIndex.tcl: update to v1.4.1.
	Only add *Menu.font for x11, as Cocoa Tk responds to menu font
	requests now, and it looks funny.

2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

Changes to modules/swaplist/ChangeLog.







1
2
3
4
5
6
7






2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2008-02-06 Aaron Faupell <afaupell@users.sourceforge.net>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2008-02-06 Aaron Faupell <afaupell@users.sourceforge.net>

Changes to modules/swaplist/swaplist.man.

1
2
3
4


5
6
7
8
9
10
11
..
62
63
64
65
66
67
68
69
70
71
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin swaplist n 0.1]
[moddesc   {A dialog which allows a user to move options between two lists}]
[titledesc {A dialog which allows a user to move options between two lists}]


[require Tcl 8.4]
[require Tk 8.4]
[require swaplist [opt 0.1]]
[description]

This package provides a dialog which consists of 2 listboxes, along with buttons to move items
between them and reorder the right list.
................................................................................

if {[swaplist .slist opts "1 2 3 4 5 6 7 8 9" "1 3 5"]} {
    puts "user chose numbers: $ops"
}

}]

[keywords dialog disjointlistbox listbox]
[manpage_end]





>
>







 







<

<
1
2
3
4
5
6
7
8
9
10
11
12
13
..
64
65
66
67
68
69
70

71

[comment {-*- tcl -*- doctools manpage}]
[manpage_begin swaplist n 0.1]
[moddesc   {A dialog which allows a user to move options between two lists}]
[titledesc {A dialog which allows a user to move options between two lists}]
[category Widget]
[keywords dialog disjointlistbox listbox]
[require Tcl 8.4]
[require Tk 8.4]
[require swaplist [opt 0.1]]
[description]

This package provides a dialog which consists of 2 listboxes, along with buttons to move items
between them and reorder the right list.
................................................................................

if {[swaplist .slist opts "1 2 3 4 5 6 7 8 9" "1 3 5"]} {
    puts "user chose numbers: $ops"
}

}]


[manpage_end]

Changes to modules/tablelist/ChangeLog.







1
2
3
4
5
6
7







2012-10-23  Csaba Nemethi <csaba.nemethi@t-online.de>

	* *.tcl:         Bumped the version number to 5.7.
	* COPYRIGHT.txt:
	* README.txt:

>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 


2012-10-23  Csaba Nemethi <csaba.nemethi@t-online.de>

	* *.tcl:         Bumped the version number to 5.7.
	* COPYRIGHT.txt:
	* README.txt:

Changes to modules/tablelist/README.txt.

93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
information, except for the additional carriage return character
preceding the linefeed at the end of each line in the text files for
Windows.

Tablelist is also hosted on SourceForge, as part of tklib, which in
turn is contained in the tcllib project, having the address

    http://sourceforge.net/projects/tcllib

How to install it?
------------------

Install the package as a subdirectory of one of the directories given
by the "auto_path" variable.  For example, you can install it as a
directory at the same level as the Tcl and Tk script libraries.  The







|







93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
information, except for the additional carriage return character
preceding the linefeed at the end of each line in the text files for
Windows.

Tablelist is also hosted on SourceForge, as part of tklib, which in
turn is contained in the tcllib project, having the address

    http://core.tcl.tk/tklib

How to install it?
------------------

Install the package as a subdirectory of one of the directories given
by the "auto_path" variable.  For example, you can install it as a
directory at the same level as the Tcl and Tk script libraries.  The

Changes to modules/tablelist/doc/tablelist.html.

184
185
186
187
188
189
190
191
192
193
194
195
196
197
198

  <p>Tablelist is also hosted on SourceForge, as part of tklib, which in turn
  is contained in the tcllib project, having the address</p>

  <blockquote>
    <address>
      <a href=
      "http://sourceforge.net/projects/tcllib">http://sourceforge.net/projects/tcllib</a>
    </address>
  </blockquote>

  <h3><a name="ov_install"></a>How to install it?</h3>

  <p>Install the package as a subdirectory of one of the directories given by
  the <code>auto_path</code> variable.&nbsp; For example, you can install it as







|







184
185
186
187
188
189
190
191
192
193
194
195
196
197
198

  <p>Tablelist is also hosted on SourceForge, as part of tklib, which in turn
  is contained in the tcllib project, having the address</p>

  <blockquote>
    <address>
      <a href=
      "http://core.tcl.tk/tklib">http://core.tcl.tk/tklib</a>
    </address>
  </blockquote>

  <h3><a name="ov_install"></a>How to install it?</h3>

  <p>Install the package as a subdirectory of one of the directories given by
  the <code>auto_path</code> variable.&nbsp; For example, you can install it as

Changes to modules/tablelist/doc/tablelistBWidget.html.

47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  <h2><a name="overview"></a>Overview</h2>

  <p>The BWidget package is a library extension for Tcl/Tk versions 8.1.1 or
  higher, written in pure Tcl/Tk code.&nbsp; Its download location is</p>

  <blockquote>
    <address>
      <a href="http://tcllib.sourceforge.net">http://tcllib.sourceforge.net</a>
    </address>
  </blockquote>

  <p>Tablelist supports interactive cell editing with the aid of the Entry,
  SpinBox, and ComboBox widgets from the BWidget package.&nbsp; The steps
  needed for using one of these widgets for editing the cells of a given column
  are as follows:</p>







|







47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  <h2><a name="overview"></a>Overview</h2>

  <p>The BWidget package is a library extension for Tcl/Tk versions 8.1.1 or
  higher, written in pure Tcl/Tk code.&nbsp; Its download location is</p>

  <blockquote>
    <address>
      <a href="http://core.tcl.tk/bwidget">http://core.tcl.tk/bwidget</a>
    </address>
  </blockquote>

  <p>Tablelist supports interactive cell editing with the aid of the Entry,
  SpinBox, and ComboBox widgets from the BWidget package.&nbsp; The steps
  needed for using one of these widgets for editing the cells of a given column
  are as follows:</p>

Changes to modules/tkpiechart/ChangeLog.







1
2
3
4
5
6
7






2009-02-06  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	* tkpiechart.tcl: Added explicit provide command to satisfy 'sak
	  validate'.

2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2009-02-06  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	* tkpiechart.tcl: Added explicit provide command to satisfy 'sak
	  validate'.

2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

Changes to modules/tooltip/ChangeLog.







1
2
3
4
5
6
7






2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2008-12-01  Jeff Hobbs  <jeffh@ActiveState.com>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2009-01-21  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.5 ========================
	* 

2008-12-01  Jeff Hobbs  <jeffh@ActiveState.com>

Changes to modules/wcb/ChangeLog.







1
2
3
4
5
6
7
8
9
10
11






2011-03-13  Csaba Nemethi <csaba.nemethi@t-online.de>

	* *.tcl: Minor changes related to the package mechanism, for better
	  teacup support; bumped the version number to 3.4.

	* *.txt:        Bumped the version number to 3.4.
	* doc/wcb.html:

2010-12-07  Csaba Nemethi <csaba.nemethi@t-online.de>

	* Added wcb to tklib.
>
>
>
>
>
>











1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2011-03-13  Csaba Nemethi <csaba.nemethi@t-online.de>

	* *.tcl: Minor changes related to the package mechanism, for better
	  teacup support; bumped the version number to 3.4.

	* *.txt:        Bumped the version number to 3.4.
	* doc/wcb.html:

2010-12-07  Csaba Nemethi <csaba.nemethi@t-online.de>

	* Added wcb to tklib.

Changes to modules/wcb/README.txt.

75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
Windows.  These files contain the same information, except for the
additional carriage return character preceding the linefeed at the end
of each line in the text files for Windows.

Wcb is also hosted on SourceForge, as part of tklib, which in turn is
contained in the tcllib project, having the address

    http://sourceforge.net/projects/tcllib

How to install it?
------------------

Install the package as a subdirectory of one of the directories given
by the "auto_path" variable.  For example, you can install it as a
directory at the same level as the Tcl and Tk script libraries.  The







|







75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
Windows.  These files contain the same information, except for the
additional carriage return character preceding the linefeed at the end
of each line in the text files for Windows.

Wcb is also hosted on SourceForge, as part of tklib, which in turn is
contained in the tcllib project, having the address

    http://core.tcl.tk/tklib

How to install it?
------------------

Install the package as a subdirectory of one of the directories given
by the "auto_path" variable.  For example, you can install it as a
directory at the same level as the Tcl and Tk script libraries.  The

Changes to modules/wcb/doc/wcb.html.

170
171
172
173
174
175
176
177
178
179
180
181
182
183
184

  <p>Wcb is also hosted on SourceForge, as part of tklib, which in turn is
  contained in the tcllib project, having the address</p>

  <blockquote>
    <address>
      <a href=
      "http://sourceforge.net/projects/tcllib">http://sourceforge.net/projects/tcllib</a>
    </address>
  </blockquote>

  <h3><a name="ov_install"></a>How to install it?</h3>

  <p>Install the package as a subdirectory of one of the directories given by
  the <code>auto_path</code> variable.&nbsp; For example, you can install it as







|







170
171
172
173
174
175
176
177
178
179
180
181
182
183
184

  <p>Wcb is also hosted on SourceForge, as part of tklib, which in turn is
  contained in the tcllib project, having the address</p>

  <blockquote>
    <address>
      <a href=
      "http://core.tcl.tk/tklib">http://core.tcl.tk/tklib</a>
    </address>
  </blockquote>

  <h3><a name="ov_install"></a>How to install it?</h3>

  <p>Install the package as a subdirectory of one of the directories given by
  the <code>auto_path</code> variable.&nbsp; For example, you can install it as

Changes to modules/widget/ChangeLog.













1
2
3
4
5
6
7












2011-12-13  Ruediger Haertel <r_haertel@gmx.de>

	* pkgIndex.tcl: Bumped package version to 0.95.
	* widget_dateentry.tcl: 
	* dateentry.tcl: - Bugfix:3458158, Adopt to changes of calendar v1.00
			 - Provide a man page

>
>
>
>
>
>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2013-03-13  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	* calendar.tcl: [Bug 3458158, 3607261]: Fixed broken bindings of
	* dateentry.tcl: "widget::calendar" which in turn broke "widget::dateentry".
	* pkgIndex.tcl: Bumped calendar to 1.0.1, dateentry to 0.96.

2011-12-13  Ruediger Haertel <r_haertel@gmx.de>

	* pkgIndex.tcl: Bumped package version to 0.95.
	* widget_dateentry.tcl: 
	* dateentry.tcl: - Bugfix:3458158, Adopt to changes of calendar v1.00
			 - Provide a man page

Changes to modules/widget/calendar.tcl.

18
19
20
21
22
23
24

25
26
27
28
29
30
31
..
58
59
60
61
62
63
64

65
66
67
68
69
70
71
...
100
101
102
103
104
105
106



107
108
109
110
111
112
113
...
269
270
271
272
273
274
275

276
277
278
279
280
281
282
...
288
289
290
291
292
293
294


295
296
297
298
299
300
301
302
303
304
305


306
307
308
309
310
311
312
...
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
...
684
685
686
687
688
689
690
691

# -textvariable   -default {}
# -firstday       -default "monday"
# -highlightcolor -default "#FFCC00"
# -shadecolor     -default "#888888"
# -language       -default en   Supported languages: de, en, es, fr, gr,
#                                he, it, ja, sv, pt, zh, fi ,tr, nl, ru,
#                                crk, crx-nak, crx-lhe

#
#  All other options to canvas
#
# Methods
#  $path get <part>   => selected date, part can be
#                              day,month,year, all
#                         default is all
................................................................................
    option -dateformat     -default "%m/%d/%Y"    -configuremethod C-refresh
    option -font           -default {Helvetica 9} -configuremethod C-font
    option -highlightcolor -default "#FFCC00"     -configuremethod C-refresh
    option -shadecolor     -default "#888888"     -configuremethod C-refresh
    option -language       -default en            -configuremethod C-language
    option -showpast       -default 1             -configuremethod C-refresh \
						  -type {snit::boolean}



    variable fullrefresh 1
    variable pending "" ; # pending after id for refresh
    variable data -array {
	day 01 month 01 year 2007
	linespace 0 cellspace 0
................................................................................
	bind $win <Control-Left>    [mymethod adjust  0 -1  0]
	bind $win <Control-Right>   [mymethod adjust  0  1  0]
	# move years
	bind $win <Control-Up>      [mymethod adjust  0  0 -1]
	bind $win <Control-Down>    [mymethod adjust  0  0  1]

	bind $win <Home>            [mymethod adjust today]




	$self configurelist $args

	$self reconfigure
	$self refresh
    }

................................................................................
    #     dyear   - Difference in years
    #   b) when used with mouse button
    #     ""      - empty
    #
    ##
    method adjust { args } {


        switch [llength $args] {
            0 {
                # mouse button select

                catch {focus -force $win} msg

                set item      [$hull find withtag current]
................................................................................
                switch [lindex $args 0] {
                    "today" {
                        set Now [clock seconds]
                        set data(day)   [clock format $Now -format %d]
                        set data(month) [clock format $Now -format %m]
                        set data(year)  [clock format $Now -format %Y]
                    }


                }
            }
            
            3 {
                # keyboard navigation

                # favor foreach approach over lassign to be
                # compatible with Tcl 8.4
                foreach {dday dmonth dyear} $args {break}
                incr data(year)  $dyear
                incr data(month) $dmonth



                set maxday [$self numberofdays $data(month) $data(year)]

                if { ($data(day) + $dday) < 1}  {
                    incr data(month) -1

                    set maxday [$self numberofdays $data(month) $data(year)]
................................................................................
        set data(selday)   $data(day)
        set data(selmonth) $data(month)
        set data(selyear)  $data(year)

        set date    [clock scan   $data(month)/$data(day)/$data(year)]
        set fmtdate [clock format $date -format $options(-dateformat)]

	if {$options(-textvariable) ne {}} {
		set $options(-textvariable) $fmtdate
	}

	if {$options(-command) ne {}} {
		# pass single arg of formatted date chosen
		uplevel \#0 $options(-command) [list $fmtdate]
	}

	$self refresh
    }

    method cbutton {x y w command} {
	# Draw simple arrowbutton using Tk's line arrows
	set wd [expr {abs($w)}]
	set wd2 [expr {$wd/2. - ((abs($w) < 10) ? 1 : 2)}]
	set poly [$hull create line $x $y [expr {$x+$w}] $y -arrow last \
................................................................................
            sierpie\u0144 wrzesie\u0144 pa\u017adziernik listopad grudzie\u0144
        }
        weekdays,pl {Ni Po Wt \u015ar Cz Pi So}
        today,pl {Dzisiaj jest}
    }
}

package provide widget::calendar 1








>







 







>







 







>
>
>







 







>







 







>
>











>
>







 







|
|
|

|
|
|
|

|







 







|
>
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
..
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
...
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
...
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
...
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
...
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
...
694
695
696
697
698
699
700
701
702
# -textvariable   -default {}
# -firstday       -default "monday"
# -highlightcolor -default "#FFCC00"
# -shadecolor     -default "#888888"
# -language       -default en   Supported languages: de, en, es, fr, gr,
#                                he, it, ja, sv, pt, zh, fi ,tr, nl, ru,
#                                crk, crx-nak, crx-lhe
# -enablecmdonkey -default 1
#
#  All other options to canvas
#
# Methods
#  $path get <part>   => selected date, part can be
#                              day,month,year, all
#                         default is all
................................................................................
    option -dateformat     -default "%m/%d/%Y"    -configuremethod C-refresh
    option -font           -default {Helvetica 9} -configuremethod C-font
    option -highlightcolor -default "#FFCC00"     -configuremethod C-refresh
    option -shadecolor     -default "#888888"     -configuremethod C-refresh
    option -language       -default en            -configuremethod C-language
    option -showpast       -default 1             -configuremethod C-refresh \
						  -type {snit::boolean}
    option -enablecmdonkey -default 1


    variable fullrefresh 1
    variable pending "" ; # pending after id for refresh
    variable data -array {
	day 01 month 01 year 2007
	linespace 0 cellspace 0
................................................................................
	bind $win <Control-Left>    [mymethod adjust  0 -1  0]
	bind $win <Control-Right>   [mymethod adjust  0  1  0]
	# move years
	bind $win <Control-Up>      [mymethod adjust  0  0 -1]
	bind $win <Control-Down>    [mymethod adjust  0  0  1]

	bind $win <Home>            [mymethod adjust today]
	bind $win <space>           [mymethod adjust Return]
	bind $win <Return>          [mymethod adjust Return]
	bind $win <KP_Enter>        [mymethod adjust Return]

	$self configurelist $args

	$self reconfigure
	$self refresh
    }

................................................................................
    #     dyear   - Difference in years
    #   b) when used with mouse button
    #     ""      - empty
    #
    ##
    method adjust { args } {

        set CallCmd 1
        switch [llength $args] {
            0 {
                # mouse button select

                catch {focus -force $win} msg

                set item      [$hull find withtag current]
................................................................................
                switch [lindex $args 0] {
                    "today" {
                        set Now [clock seconds]
                        set data(day)   [clock format $Now -format %d]
                        set data(month) [clock format $Now -format %m]
                        set data(year)  [clock format $Now -format %Y]
                    }
                    "Return" {
                    }
                }
            }
            
            3 {
                # keyboard navigation

                # favor foreach approach over lassign to be
                # compatible with Tcl 8.4
                foreach {dday dmonth dyear} $args {break}
                incr data(year)  $dyear
                incr data(month) $dmonth

                set CallCmd $options(-enablecmdonkey)

                set maxday [$self numberofdays $data(month) $data(year)]

                if { ($data(day) + $dday) < 1}  {
                    incr data(month) -1

                    set maxday [$self numberofdays $data(month) $data(year)]
................................................................................
        set data(selday)   $data(day)
        set data(selmonth) $data(month)
        set data(selyear)  $data(year)

        set date    [clock scan   $data(month)/$data(day)/$data(year)]
        set fmtdate [clock format $date -format $options(-dateformat)]

        if { $CallCmd && $options(-textvariable) ne {}} {
            set $options(-textvariable) $fmtdate
        }

        if { $CallCmd && $options(-command) ne {}} {
            # pass single arg of formatted date chosen
            uplevel \#0 $options(-command) [list $fmtdate]
        }

        $self refresh
    }

    method cbutton {x y w command} {
	# Draw simple arrowbutton using Tk's line arrows
	set wd [expr {abs($w)}]
	set wd2 [expr {$wd/2. - ((abs($w) < 10) ? 1 : 2)}]
	set poly [$hull create line $x $y [expr {$x+$w}] $y -arrow last \
................................................................................
            sierpie\u0144 wrzesie\u0144 pa\u017adziernik listopad grudzie\u0144
        }
        weekdays,pl {Ni Po Wt \u015ar Cz Pi So}
        today,pl {Dzisiaj jest}
    }
}

package provide widget::calendar 1.0.1

Changes to modules/widget/dateentry.tcl.

177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202

203
204
205
206
207
208
209
...
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
...
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
	    tk::unsupported::MacWindowStyle style $dropbox \
		help {noActivates hideOnSuspend}
	}
	wm resizable $dropbox 0 0

	# Unpost on Escape or whenever user clicks outside the dropdown
	bind $dropbox <Escape> [list $win unpost]
	bind $dropbox <Return> [list $win DateAccepted]
	bind $dropbox <space>  [list $win DateAccepted]
	bind $dropbox <ButtonPress> [subst -nocommands {
	    if {[string first "$dropbox" [winfo containing %X %Y]] != 0} {
		$win unpost
	    } else {
                $win DateAccepted
            }
	}]
	bindtags $dropbox [linsert [bindtags $dropbox] 1 TDateEntryPopdown]

	set calendar $dropbox.calendar
	widget::calendar $calendar \
	    -textvariable [myvar formattedDate] \
	    -dateformat $options(-dateformat) \
	    -font $options(-font) \
	    -language $options(-language)\
	    -borderwidth 1 -relief solid 
            


	bind $calendar <Map> [list focus -force $calendar]

	pack $calendar -expand 1 -fill both

	return $dropbox
    }
................................................................................
	    right { if {$x <= $sw} { incr x  $bw } { incr x -$mw } }
	}

	return [list $x $y]
    }

    #
    #  DateAccepted --
    #
    #  Called when either Return or space was pressed, or when a date
    #  was selected on mouse click.
    #
    #  Formats the date calls the -command if specified and then
    #  updates the entry.
    #
    ##
    method DateAccepted { args } {
	upvar 0 $options(-textvariable) date

        set waitVar 1
	set date $formattedDate
	set rawDate [clock scan $formattedDate -format $options(-dateformat)]
	if { $options(-command) ne "" } {
	    uplevel \#0 $options(-command) $formattedDate $rawDate
................................................................................
        $self unpost

	$hull configure -state normal
	$hull delete 0 end
	$hull insert end $formattedDate
	$hull configure -state readonly
    }

}

# Bindings for menu portion.
#
# This is a variant of the ttk menubutton.tcl bindings.
# See menubutton.tcl for detailed behavior info.
#

bind TDateEntry <Enter>     { %W state active }
bind TDateEntry <Leave>     { %W state !active }
bind TDateEntry <<Invoke>>  { %W post }
bind TDateEntry <Control-space> { %W post }
bind TDateEntry <Escape>        { %W unpost }
bind TDateEntry <Return>        { %W DateAccepted }
bind TDateEntry <space>         { %W DateAccepted }

bind TDateEntry <ButtonPress-1> { %W state pressed ; %W post }
bind TDateEntry <ButtonRelease-1> { %W state !pressed }

# These are to get around issues on aqua (see ttk::combobox bindings)
bind TDateEntryPopdown <Map> { ttk::globalGrab %W }
bind TDateEntryPopdown <Unmap> { ttk::releaseGrab %W }

package provide widget::dateentry 0.95

##############
# TEST CODE ##
##############

if { [info script] eq $argv0 } {
    set auto_path [linsert $auto_path 0 [file dirname [info script]]]







<
<



<
<










|
<
>







 







|

|
<

|
|


|







 







<













<
<








|







177
178
179
180
181
182
183


184
185
186


187
188
189
190
191
192
193
194
195
196
197

198
199
200
201
202
203
204
205
...
259
260
261
262
263
264
265
266
267
268

269
270
271
272
273
274
275
276
277
278
279
280
281
...
283
284
285
286
287
288
289

290
291
292
293
294
295
296
297
298
299
300
301
302


303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
	    tk::unsupported::MacWindowStyle style $dropbox \
		help {noActivates hideOnSuspend}
	}
	wm resizable $dropbox 0 0

	# Unpost on Escape or whenever user clicks outside the dropdown
	bind $dropbox <Escape> [list $win unpost]


	bind $dropbox <ButtonPress> [subst -nocommands {
	    if {[string first "$dropbox" [winfo containing %X %Y]] != 0} {
		$win unpost


            }
	}]
	bindtags $dropbox [linsert [bindtags $dropbox] 1 TDateEntryPopdown]

	set calendar $dropbox.calendar
	widget::calendar $calendar \
	    -textvariable [myvar formattedDate] \
	    -dateformat $options(-dateformat) \
	    -font $options(-font) \
	    -language $options(-language)\
	    -borderwidth 1 -relief solid \

            -enablecmdonkey 0 -command [mymethod DateChosen]

	bind $calendar <Map> [list focus -force $calendar]

	pack $calendar -expand 1 -fill both

	return $dropbox
    }
................................................................................
	    right { if {$x <= $sw} { incr x  $bw } { incr x -$mw } }
	}

	return [list $x $y]
    }

    #
    #  DateChosen --
    #
    #  Called from the calendar when a date was selected.

    #
    #  Formats the date, calls the callback -command if specified and
    #  then updates the entry.
    #
    ##
    method DateChosen { args } {
	upvar 0 $options(-textvariable) date

        set waitVar 1
	set date $formattedDate
	set rawDate [clock scan $formattedDate -format $options(-dateformat)]
	if { $options(-command) ne "" } {
	    uplevel \#0 $options(-command) $formattedDate $rawDate
................................................................................
        $self unpost

	$hull configure -state normal
	$hull delete 0 end
	$hull insert end $formattedDate
	$hull configure -state readonly
    }

}

# Bindings for menu portion.
#
# This is a variant of the ttk menubutton.tcl bindings.
# See menubutton.tcl for detailed behavior info.
#

bind TDateEntry <Enter>     { %W state active }
bind TDateEntry <Leave>     { %W state !active }
bind TDateEntry <<Invoke>>  { %W post }
bind TDateEntry <Control-space> { %W post }
bind TDateEntry <Escape>        { %W unpost }



bind TDateEntry <ButtonPress-1> { %W state pressed ; %W post }
bind TDateEntry <ButtonRelease-1> { %W state !pressed }

# These are to get around issues on aqua (see ttk::combobox bindings)
bind TDateEntryPopdown <Map> { ttk::globalGrab %W }
bind TDateEntryPopdown <Unmap> { ttk::releaseGrab %W }

package provide widget::dateentry 0.96

##############
# TEST CODE ##
##############

if { [info script] eq $argv0 } {
    set auto_path [linsert $auto_path 0 [file dirname [info script]]]

Changes to modules/widget/pkgIndex.tcl.

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
	    lappend allpkgs [list package provide $bundle $bundlev]
	    package ifneeded $bundle $bundlev [join $allpkgs \n]
	}
	return
    }
}
if {![package vsatisfies [package provide Tcl] 8.4]} {return}
::tcl::pkgindex $dir widget::all 1.2.3 {
    widget			3.1	widget.tcl
    widget::arrowbutton	        1.0	arrowb.tcl
    widget::calendar		1.00	calendar.tcl
    widget::dateentry		0.95	dateentry.tcl
    widget::dialog		1.3.1	dialog.tcl
    widget::menuentry		1.0.1	mentry.tcl
    widget::panelframe		1.1	panelframe.tcl
    widget::ruler		1.1	ruler.tcl
    widget::screenruler		1.2	ruler.tcl
    widget::scrolledtext	1.0	stext.tcl
    widget::scrolledwindow	1.2.1	scrollw.tcl
    widget::statusbar		1.2.1	statusbar.tcl
    widget::superframe		1.0.1	superframe.tcl
    widget::toolbar		1.2.1	toolbar.tcl
}







|


|
|











10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
	    lappend allpkgs [list package provide $bundle $bundlev]
	    package ifneeded $bundle $bundlev [join $allpkgs \n]
	}
	return
    }
}
if {![package vsatisfies [package provide Tcl] 8.4]} {return}
::tcl::pkgindex $dir widget::all 1.2.4 {
    widget			3.1	widget.tcl
    widget::arrowbutton	        1.0	arrowb.tcl
    widget::calendar		1.0.1	calendar.tcl
    widget::dateentry		0.96	dateentry.tcl
    widget::dialog		1.3.1	dialog.tcl
    widget::menuentry		1.0.1	mentry.tcl
    widget::panelframe		1.1	panelframe.tcl
    widget::ruler		1.1	ruler.tcl
    widget::screenruler		1.2	ruler.tcl
    widget::scrolledtext	1.0	stext.tcl
    widget::scrolledwindow	1.2.1	scrollw.tcl
    widget::statusbar		1.2.1	statusbar.tcl
    widget::superframe		1.0.1	superframe.tcl
    widget::toolbar		1.2.1	toolbar.tcl
}

Changes to modules/widget/widget.man.

1
2
3
4





5
6
7
8
9
10
11
..
64
65
66
67
68
69
70
71
72
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin widget n 3.0]
[moddesc   {Megawidget package}]
[titledesc {Megawidget package}]





[require Tcl 8.4]
[require Tk 8.4]
[require widget [opt 3.0]] [require snit]
[description]

This package provides megawidgets based on the snit oo system (snidgets).
It makes use of the Tile/Ttk themed widget set.
................................................................................
[section EXAMPLE]

[example {
package require widget::superframe ; # or widget::all
pack [widget::superframe .f -type separator -text "SuperFrame:"]
}]

[keywords megawidget snit widget]
[manpage_end]


|
|
>
>
>
>
>







 







<

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
..
69
70
71
72
73
74
75

76
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin widget n 3.0]
[moddesc   {Various megawidgets}]
[titledesc {Megawidget bundle}]
[category Widget]
[keywords megawidget snit widget bundle]
[keywords toolbar calendar dialog menu]
[keywords panelframe ruler statusbar dateentry]
[keywords superframe screenruler scrolledwindow]
[require Tcl 8.4]
[require Tk 8.4]
[require widget [opt 3.0]] [require snit]
[description]

This package provides megawidgets based on the snit oo system (snidgets).
It makes use of the Tile/Ttk themed widget set.
................................................................................
[section EXAMPLE]

[example {
package require widget::superframe ; # or widget::all
pack [widget::superframe .f -type separator -text "SuperFrame:"]
}]


[manpage_end]

Changes to modules/widget/widget_calendar.man.

1
2
3
4


5
6
7
8
9
10
11
12
13
14
15
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin widget_calendar n 1.00]
[moddesc   {widget::calendar Megawidget}]
[titledesc {widget::calendar Megawidget}]


[require Tcl 8.4]
[require Tk 8.4]
[require widget [opt 3.0]]
[require widget::calendar [opt 1.00]]
[description]

This package provides a calendar megawidget (snidget).

[para]

[list_begin definitions]

|
|
|
>
>



|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin widget_calendar n 1.0.1]
[moddesc   {Various megawidgets}]
[titledesc {Calendar Megawidget}]
[category Widget]
[keywords megawidget snit widget calendar date]
[require Tcl 8.4]
[require Tk 8.4]
[require widget [opt 3.0]]
[require widget::calendar [opt 1.0.1]]
[description]

This package provides a calendar megawidget (snidget).

[para]

[list_begin definitions]

Changes to modules/widget/widget_dateentry.man.

1
2
3
4


5
6
7
8
9
10
11
12
13
14
15
..
91
92
93
94
95
96
97
98
99
100
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin widget_dateentry n 0.95]
[moddesc   {widget::dateentry Megawidget}]
[titledesc {widget::dateentry Megawidget}]


[require Tcl 8.4]
[require Tk 8.4]
[require widget [opt 3.0]]
[require widget::dateentry [opt 0.95]]
[description]

This package provides a dateentry megawidget (snidget).
It is based on an ttk::entry. All widget commands of the ttk::entry
are available for the dateentry.

[para]
................................................................................

[example {
    package require widget::dateentry; # or widget::all
    set t [widget::dateentry .de]
    pack $t -fill x -expand 1
}]


[keywords megawidget snit widget calendar]
[manpage_end]

|
|
|
>
>



|







 







<
<

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
..
93
94
95
96
97
98
99


100
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin widget_dateentry n 0.96]
[moddesc   {Various megawidgets}]
[titledesc {Date Entry Megawidget}]
[category Widget]
[keywords megawidget snit widget dateentry date]
[require Tcl 8.4]
[require Tk 8.4]
[require widget [opt 3.0]]
[require widget::dateentry [opt 0.96]]
[description]

This package provides a dateentry megawidget (snidget).
It is based on an ttk::entry. All widget commands of the ttk::entry
are available for the dateentry.

[para]
................................................................................

[example {
    package require widget::dateentry; # or widget::all
    set t [widget::dateentry .de]
    pack $t -fill x -expand 1
}]



[manpage_end]

Changes to modules/widget/widget_toolbar.man.

1
2
3
4


5
6
7
8
9
10
11
..
55
56
57
58
59
60
61
62
63
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin widget_toolbar n 3.0]
[moddesc   {widget::toolbar Megawidget}]
[titledesc {widget::toolbar Megawidget}]


[require Tcl 8.4]
[require Tk 8.4]
[require widget [opt 3.0]]
[require widget::toolbar [opt 1.0]]
[description]

This package provides a toolbar megawidget (snidget).
................................................................................
set t [widget::toolbar .t]
pack $t -fill x -expand 1
$t add button [button .b -text foo]
$t add separator -pad {2 4}
$t add button [button .c -text bar]
}]

[keywords megawidget snit widget]
[manpage_end]


|
|
>
>







 







<

1
2
3
4
5
6
7
8
9
10
11
12
13
..
57
58
59
60
61
62
63

64
[comment {-*- tcl -*- doctools manpage}]
[manpage_begin widget_toolbar n 3.0]
[moddesc   {Various megawidgets}]
[titledesc {Toolbar Megawidget}]
[category Widget]
[keywords megawidget snit widget toolbar]
[require Tcl 8.4]
[require Tk 8.4]
[require widget [opt 3.0]]
[require widget::toolbar [opt 1.0]]
[description]

This package provides a toolbar megawidget (snidget).
................................................................................
set t [widget::toolbar .t]
pack $t -fill x -expand 1
$t add button [button .b -text foo]
$t add separator -pad {2 4}
$t add button [button .c -text bar]
}]


[manpage_end]

Changes to modules/widgetl/ChangeLog.







1
2
3
4
5
6
7
8
9
10






2012-08-31  Andreas Kupries  <andreask@activestate.com>

	* widget_listentry.man: New, widget documentation.
	* widget_listsimple.man: New, widget documentation.
	* listentry.tcl: Small bugfix. Revalidate entry field
	* listsimple.tcl: when -list-variable changes.

2012-08-27  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	* initial release v0.1
>
>
>
>
>
>










1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2012-08-31  Andreas Kupries  <andreask@activestate.com>

	* widget_listentry.man: New, widget documentation.
	* widget_listsimple.man: New, widget documentation.
	* listentry.tcl: Small bugfix. Revalidate entry field
	* listsimple.tcl: when -list-variable changes.

2012-08-27  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	* initial release v0.1

Changes to modules/widgetv/ChangeLog.







1
2
3
4
5
6
7
8






2012-08-28  Andreas Kupries  <andreask@activestate.com>

	* widget_validator.man: New file, documentation.
	* validator.tcl: Added argument check to method validate.

2012-08-27  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	* initial release v0.1
>
>
>
>
>
>








1
2
3
4
5
6
7
8
9
10
11
12
13
14
2013-03-25  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	*
	* Released and tagged Tklib 0.6 ========================
	* 

2012-08-28  Andreas Kupries  <andreask@activestate.com>

	* widget_validator.man: New file, documentation.
	* validator.tcl: Added argument check to method validate.

2012-08-27  Andreas Kupries  <andreas_kupries@users.sourceforge.net>

	* initial release v0.1

Changes to sak.tcl.

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
175
176
177
178
179
180
181

182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
...
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
...
477
478
479
480
481
482
483

484
485
486
487
488
489
490
491
492
493
494
495








496



497



498
499
500
501
502
503
504
...
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
....
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
....
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
....
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
....
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
....
1720
1721
1722
1723
1724
1725
1726

1727


1728




1729
1730
1731
1732
1733
1734
1735
....
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
....
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
....
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
....
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
....
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
....
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
exec tclsh "$0" ${1+"$@"}

# --------------------------------------------------------------
# Perform various checks and operations on the distribution.
# SAK = Swiss Army Knife.

set distribution   [file dirname [info script]]
lappend auto_path  [file join $distribution modules]
lappend auto_path  [file join $distribution/../tcllib modules]

set critcldefault {}
set critclnotes   {}
set dist_excluded {}

proc package_name    {text} {global package_name    ; set package_name    $text}
................................................................................
	foreach line [split [read $f] \n] {
	    if { [regexp {#}        $line]} {continue}
	    if {![regexp {ifneeded} $line]} {continue}
	    regsub {^.*ifneeded } $line {} line
	    regsub {([0-9]) \[.*$}  $line {\1} line

	    foreach {n v} $line break


	    if {![info exists p($n)]} {
		set p($n) [list $v $m]
	    } else {
		# We have multiple versions of the same package. We
		# remember all versions.

		foreach {vlist m} $p($n) break
		lappend vlist $v
		set p($n) [list [lsort -uniq -dict $vlist] $m]
	    }
	}
	close $f
    }
    return [array get p]
}

................................................................................
	array unset pf $n,*
    }

    set   pp [array get p]
    unset p

    set ppcache($args) $pp
    return $pp
}

proc xNULL    {args} {}
proc xPackage {cmd args} {
    if {[string equal $cmd provide]} {
	global p pf currentfile
	foreach {n v} $args break
................................................................................
    # dest can be dir or file
    global  mfiles
    lappend mfiles $src
    return
}

proc xcopy {src dest recurse {pattern *}} {

    foreach file [glob [file join $src $pattern]] {
        set base [file tail $file]
	set sub  [file join $dest $base]
	if {0 == [string compare CVS $base]} {continue}
        if {[file isdirectory $file]} then {
	    if {$recurse} {
		xcopy $file $sub $recurse $pattern
	    }
        } else {
            xcopyfile $file $sub
        }
    }








}








proc xxcopy {src dest recurse {pattern *}} {
    global package_name

    file mkdir $dest
    foreach file [glob -nocomplain [file join $src $pattern]] {
        set base [file tail $file]
................................................................................
}

proc getpdesc  {} {
    global argv ; if {![checkmod]} return

    package require sak::doc
    sak::doc::Gen desc l $argv

    array set _ {}
    foreach file [glob -nocomplain doc/desc/*.l] {
        set f [open $file r]
	foreach l [split [read $f] \n] {
	    foreach {p sd d} $l break
	    set _($p) [list $sd $d]
	}
................................................................................
	if {![file exists $cl]} {
	    lappend modified [list $m no-changelog]
	    continue
	}
	# Look for 'Released and tagged' within
	# the first four lines of the file. If
	# not present assume that the line is
	# deeper down, indicatating that the module
	# has been modified since the last release.

	set f [open $cl r]
	set n 0
	set mod 1
	while {$n < 5} {
	    gets $f line
................................................................................
	    }
	}
	if {$mod} {
	    lappend modified $m
	}
	close $f
    }

    return $modified
}

# --------------------------------------------------------------
# Handle modules using docstrip

proc docstripUser {m} {
................................................................................

	if {[string equal \
		 docstrip/docstrip.tcl \
		 [file join [file tail [pwd]] $o]]} {

	    # We are writing over code required by ourselves.
	    # For easy recovery in case of problems we save
	    # the original

	    puts "    *Saving original of code important to docstrip/regen itself*"
	    write_out $o.bak [get_input $o]
	}

	write_out $o $outputs($o)
    }
................................................................................
    nparray packages
    return
}

proc __provided {} {
    array set packages [ppackages]
    nparray packages
    return
}


proc __vcompare {} {
    global argv
    set oldplist [lindex $argv 0]
    pkg-compare $oldplist
    return
}

proc __rstatus {} {
    global distribution approved

    catch {
	set f [file join $distribution .APPROVE]
	set f [open $f r]
	while {![eof $f]} {
	    if {[gets $f line] < 0} continue
	    set line [string trim $line]
	    if {$line == {}} continue
	    set approved($line) .
	}
	close $f
    }
    pkg-compare [location_PACKAGES]
    return
}

proc pkg-compare {oldplist} {
    global approved ; array set approved {}

    getpackage struct::set struct/sets.tcl

    array set curpkg [ipackages]
    array set oldpkg [loadpkglist $oldplist]
    array set mod {}
    array set changed {}
    foreach m [modified-modules] {
	set mod($m) .
    }

    foreach p [array names curpkg] {
	set __($p) .
	foreach {vlist module} $curpkg($p) break
	set curpkg($p) $vlist
	set changed($p) [info exists mod($module)]
    }
    foreach p [array names oldpkg] {set __($p) .}
    set unified [lsort [array names __]]
    unset __

    set maxl 0
    foreach name $unified {
        if {[string length $name] > $maxl} {
            set maxl [string length $name]
        }
    }

    set maxm 0
    foreach m [modules] {
        if {[string length $m] > $maxm} {
            set maxm [string length $m]
        }
    }

    set lastm ""
    foreach m [lsort -dict [modules]] {
	set packages {}
	foreach {p ___} [ppackages $m] {
	    lappend packages $p
	}
	foreach name [lsort -dict $packages] {
	    set skip 0
	    set suffix ""
	    set prefix "   "
	    if {![info exists curpkg($name)]} {set curpkg($name) {}}
	    if {![info exists oldpkg($name)]} {
		set oldpkg($name) {}
		set suffix " NEW"
		set prefix "Nn "
		set skip 1
	    }
	    if {!$skip} {
		# Draw attention to changed packages where version is
		# unchanged.

		set vequal [struct::set equal $oldpkg($name) $curpkg($name)]

		if {$changed($name)} {
		    if {$vequal} {
			# Changed according to ChangeLog, Version is not. ALERT.
			set prefix "!! "
			set suffix "\t<<< MISMATCH. Version ==, ChangeLog ++"
		    } else {
			# Both changelog and version number indicate a change.
			# Small alert, have to classify the order of changes.
			set prefix "cv "
			set suffix "\t=== Classify changes."
		    }
		} else {
		    if {$vequal} {
			# Versions are unchanged, changelog also indicates no change.
			# No particular attention here.
		    } else {
			# Versions changed, but according to changelog nothing in code. ALERT.
			set prefix "!! "
			set suffix "\t<<< MISMATCH. ChangeLog ==, Version ++"
		    }
		}
		if {[info exists approved($name)]} {
		    set prefix "   "
		    set suffix ""
		}
	    }

	    # To handle multiple versions we match the found versions up
	    # by major version. We assume that we have only one version
	    # per major version. This allows us to detect changes within
	    # each major version, new major versions, etc.

	    array set om {} ; foreach v $oldpkg($name) {set om([lindex [split $v .] 0]) $v}
	    array set cm {} ; foreach v $curpkg($name) {set cm([lindex [split $v .] 0]) $v}

	    set all [lsort -dict [struct::set union [array names om] [array names cm]]]

	    sakdebug {
		puts @@@@@@@@@@@@@@@@
		parray om
		parray cm
		puts all\ $all
		puts @@@@@@@@@@@@@@@@
	    }

	    foreach v $all {
		if {![string equal $m $lastm]} {
		    set mdis $m
		} else {
		    set mdis ""
		}
		set lastm $m

		if {[info exists om($v)]} {set ov $om($v)} else {set ov "--"}
		if {[info exists cm($v)]} {set cv $cm($v)} else {set cv "--"}

		puts stdout ${prefix}[format "%-*s %-*s %-*s %-*s" \
					  $maxm $mdis $maxl $name 8 $ov 8 $cv]$suffix
	    }

	    unset om cm
	}
    }
    return
}

proc checkmod {} {
    global argv
    package require sak::util
    return [sak::util::checkModules argv]
................................................................................
    }

    set flags ""
    while {[string match -* [set option [lindex $argv 0]]]} {
        # -debug and -clean only work with critcl >= v04
        switch -exact -- $option {
            -keep  { append flags " -keep" }

            -debug { append flags " -debug" }


            -clean { append flags " -clean" }




            -- { set argv [lreplace $argv 0 0]; break }
            default { break }
        }
        set argv [lreplace $argv 0 0]
    }

    if {$critcl != {}} {
................................................................................
        foreach f $critclmodules($pkg) {
            lappend files [file join $distribution modules $f]
        }
    }
    set target [file join $distribution modules]
    catch {
        puts "$critcl $extra -force -libdir [list $target] -pkg [list $pkg] $files"
        eval exec $critcl $extra -force -libdir [list $target] -pkg [list $pkg] $files
    } r
    puts $r
    return
}

# -------------------------------------------------------------------------

................................................................................

    if {$frink == {}} {puts "  Tool 'frink'    not found, no check"}
    if {($procheck == {}) || ($tclchecker == {})} {
	puts "  Tools 'procheck'/'tclchecker' not found, no check"
    }
    if {$nagelfar == {}} {puts "  Tool 'nagelfar' not found, no check"}

    if {($frink == {}) || ($procheck == {}) || ($tclchecker == {})
        || ($nagelfar == {})} {
	puts "------------------------------------------------------"
    }
    if {($frink == {}) && ($procheck == {}) && ($tclchecker == {})
        && ($nagelfar == {})} {
	return
    }
................................................................................
	run-tclchecker
	puts "------------------------------------------------------"
    } elseif {$procheck != {}} {
	run-procheck
	puts "------------------------------------------------------"
    }
    if {$nagelfar    !={}} {
    	run-nagelfar
	puts "------------------------------------------------------"
    }
    puts ""
    return
}

proc _validate_module {m} {
................................................................................
    puts "[incr i]: Static syntax check ..."
    puts "------------------------------------------------------"

    set frink    [auto_execok frink]
    set procheck [auto_execok procheck]
    set nagelfar [auto_execok nagelfar]
    set tclchecker [auto_execok tclchecker]

    if {$frink    == {}} {puts "  Tool 'frink'    not found, no check"}
    if {($procheck == {}) || ($tclchecker == {})} {
	puts "  Tools 'procheck'/'tclchecker' not found, no check"
    }
    if {$nagelfar == {}} {puts "  Tool 'nagelfar' not found, no check"}

    if {($frink == {}) || ($procheck == {}) || ($tclchecker == {}) ||
    	($nagelfar == {})} {
	puts "------------------------------------------------------"
    }
    if {($frink == {}) && ($procheck == {}) && ($nagelfar == {})
        && ($tclchecker == {})} {
	return
................................................................................
    set email "<${sfuser}@users.sourceforge.net>"
    set pname [textutil::cap $package_name]

    set notice "[clock format [clock seconds] -format "%Y-%m-%d"]  $name  $email

	*
	* Released and tagged $pname $package_version ========================
	*

"

    set logs [list [file join $distribution ChangeLog]]
    foreach m [modules] {
	set m [file join $distribution modules $m ChangeLog]
	if {![file exists $m]} continue
................................................................................
	set fh [open $f w] ; puts -nonewline $fh $notice$data ; close $fh
    }

    gd-gen-packages
    return
}

proc __approve {} {
    global argv distribution

    # Record the package as approved. This will suppress any alerts
    # for that package by rstatus. Required for packages which have
    # been classified, and for packages where a MISMATCH is bogus (due
    # to several packages sharing a ChangeLog)

    set f [open [file join $distribution .APPROVE] a]
    foreach package $argv {
	puts $f $package
    }
    close $f
    return
}

# --------------------------------------------------------------
# Documentation

proc __desc  {} {
    global argv ; if {![checkmod]} return
    array set pd [getpdesc]








|







 







>







|
|
|







 







|







 







>
|
|
|
|
|
|
|
|
|
|
|
|
>
>
>
>
>
>
>
>
|
>
>
>
|
>
>
>







 







|







 







|







 







<







 







|







 







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







 







>
|
>
>
|
>
>
>
>







 







|







 







|







 







|







 







|





|







 







|







 







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
...
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
...
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
...
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
....
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
....
1207
1208
1209
1210
1211
1212
1213

1214
1215
1216
1217
1218
1219
1220
....
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
....
1511
1512
1513
1514
1515
1516
1517
























































































































































1518
1519
1520
1521
1522
1523
1524
....
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
....
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
....
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
....
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
....
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
....
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
....
2251
2252
2253
2254
2255
2256
2257
















2258
2259
2260
2261
2262
2263
2264
exec tclsh "$0" ${1+"$@"}

# --------------------------------------------------------------
# Perform various checks and operations on the distribution.
# SAK = Swiss Army Knife.

set distribution   [file dirname [info script]]
set auto_path      [linsert $auto_path 0 [file join $distribution modules]]
lappend auto_path  [file join $distribution/../tcllib modules]

set critcldefault {}
set critclnotes   {}
set dist_excluded {}

proc package_name    {text} {global package_name    ; set package_name    $text}
................................................................................
	foreach line [split [read $f] \n] {
	    if { [regexp {#}        $line]} {continue}
	    if {![regexp {ifneeded} $line]} {continue}
	    regsub {^.*ifneeded } $line {} line
	    regsub {([0-9]) \[.*$}  $line {\1} line

	    foreach {n v} $line break
	    set v [string trimright $v \\]

	    if {![info exists p($n)]} {
		set p($n) [list $v $m]
	    } else {
		# We have multiple versions of the same package. We
		# remember all versions.

		foreach {vlist mx} $p($n) break
		lappend vlist $v
		set p($n) [list [lsort -uniq -dict $vlist] $mx]
	    }
	}
	close $f
    }
    return [array get p]
}

................................................................................
	array unset pf $n,*
    }

    set   pp [array get p]
    unset p

    set ppcache($args) $pp
    return $pp 
}

proc xNULL    {args} {}
proc xPackage {cmd args} {
    if {[string equal $cmd provide]} {
	global p pf currentfile
	foreach {n v} $args break
................................................................................
    # dest can be dir or file
    global  mfiles
    lappend mfiles $src
    return
}

proc xcopy {src dest recurse {pattern *}} {
    if {[string equal $pattern *] || !$recurse} {
	foreach file [glob [file join $src $pattern]] {
	    set base [file tail $file]
	    set sub  [file join $dest $base]
	    if {0 == [string compare CVS $base]} {continue}
	    if {[file isdirectory $file]} then {
		if {$recurse} {
		    xcopy $file $sub $recurse $pattern
		}
	    } else {
		xcopyfile $file $sub
	    }
	}
    } else {
	foreach file [glob [file join $src *]] {
	    set base [file tail $file]
	    set sub  [file join $dest $base]
	    if {[string equal CVS $base]} {continue}
	    if {[file isdirectory $file]} then {
		if {$recurse} {
		    xcopy $file $sub $recurse $pattern
		}
	    } else {
		if {![string match $pattern $base]} {continue}
		xcopyfile $file $sub
	    }
	}
    }
}

proc xxcopy {src dest recurse {pattern *}} {
    global package_name

    file mkdir $dest
    foreach file [glob -nocomplain [file join $src $pattern]] {
        set base [file tail $file]
................................................................................
}

proc getpdesc  {} {
    global argv ; if {![checkmod]} return

    package require sak::doc
    sak::doc::Gen desc l $argv
    
    array set _ {}
    foreach file [glob -nocomplain doc/desc/*.l] {
        set f [open $file r]
	foreach l [split [read $f] \n] {
	    foreach {p sd d} $l break
	    set _($p) [list $sd $d]
	}
................................................................................
	if {![file exists $cl]} {
	    lappend modified [list $m no-changelog]
	    continue
	}
	# Look for 'Released and tagged' within
	# the first four lines of the file. If
	# not present assume that the line is
	# deeper down, indicating that the module
	# has been modified since the last release.

	set f [open $cl r]
	set n 0
	set mod 1
	while {$n < 5} {
	    gets $f line
................................................................................
	    }
	}
	if {$mod} {
	    lappend modified $m
	}
	close $f
    }

    return $modified
}

# --------------------------------------------------------------
# Handle modules using docstrip

proc docstripUser {m} {
................................................................................

	if {[string equal \
		 docstrip/docstrip.tcl \
		 [file join [file tail [pwd]] $o]]} {

	    # We are writing over code required by ourselves.
	    # For easy recovery in case of problems we save
	    # the original 

	    puts "    *Saving original of code important to docstrip/regen itself*"
	    write_out $o.bak [get_input $o]
	}

	write_out $o $outputs($o)
    }
................................................................................
    nparray packages
    return
}

proc __provided {} {
    array set packages [ppackages]
    nparray packages
























































































































































    return
}

proc checkmod {} {
    global argv
    package require sak::util
    return [sak::util::checkModules argv]
................................................................................
    }

    set flags ""
    while {[string match -* [set option [lindex $argv 0]]]} {
        # -debug and -clean only work with critcl >= v04
        switch -exact -- $option {
            -keep  { append flags " -keep" }
            -debug {
		append flags " -debug [lindex $argv 1]"
		set argv [lreplace $argv 0 0]
	    }
            -clean { append flags " -clean" }
            -target {
		append flags " -target [lindex $argv 1]"
		set argv [lreplace $argv 0 0]
	    }
            -- { set argv [lreplace $argv 0 0]; break }
            default { break }
        }
        set argv [lreplace $argv 0 0]
    }

    if {$critcl != {}} {
................................................................................
        foreach f $critclmodules($pkg) {
            lappend files [file join $distribution modules $f]
        }
    }
    set target [file join $distribution modules]
    catch {
        puts "$critcl $extra -force -libdir [list $target] -pkg [list $pkg] $files"
        eval exec $critcl $extra -force -libdir [list $target] -pkg [list $pkg] $files 
    } r
    puts $r
    return
}

# -------------------------------------------------------------------------

................................................................................

    if {$frink == {}} {puts "  Tool 'frink'    not found, no check"}
    if {($procheck == {}) || ($tclchecker == {})} {
	puts "  Tools 'procheck'/'tclchecker' not found, no check"
    }
    if {$nagelfar == {}} {puts "  Tool 'nagelfar' not found, no check"}

    if {($frink == {}) || ($procheck == {}) || ($tclchecker == {}) 
        || ($nagelfar == {})} {
	puts "------------------------------------------------------"
    }
    if {($frink == {}) && ($procheck == {}) && ($tclchecker == {})
        && ($nagelfar == {})} {
	return
    }
................................................................................
	run-tclchecker
	puts "------------------------------------------------------"
    } elseif {$procheck != {}} {
	run-procheck
	puts "------------------------------------------------------"
    }
    if {$nagelfar    !={}} {
    	run-nagelfar 
	puts "------------------------------------------------------"
    }
    puts ""
    return
}

proc _validate_module {m} {
................................................................................
    puts "[incr i]: Static syntax check ..."
    puts "------------------------------------------------------"

    set frink    [auto_execok frink]
    set procheck [auto_execok procheck]
    set nagelfar [auto_execok nagelfar]
    set tclchecker [auto_execok tclchecker]
    
    if {$frink    == {}} {puts "  Tool 'frink'    not found, no check"}
    if {($procheck == {}) || ($tclchecker == {})} {
	puts "  Tools 'procheck'/'tclchecker' not found, no check"
    }
    if {$nagelfar == {}} {puts "  Tool 'nagelfar' not found, no check"}
    
    if {($frink == {}) || ($procheck == {}) || ($tclchecker == {}) ||
    	($nagelfar == {})} {
	puts "------------------------------------------------------"
    }
    if {($frink == {}) && ($procheck == {}) && ($nagelfar == {})
        && ($tclchecker == {})} {
	return
................................................................................
    set email "<${sfuser}@users.sourceforge.net>"
    set pname [textutil::cap $package_name]

    set notice "[clock format [clock seconds] -format "%Y-%m-%d"]  $name  $email

	*
	* Released and tagged $pname $package_version ========================
	* 

"

    set logs [list [file join $distribution ChangeLog]]
    foreach m [modules] {
	set m [file join $distribution modules $m ChangeLog]
	if {![file exists $m]} continue
................................................................................
	set fh [open $f w] ; puts -nonewline $fh $notice$data ; close $fh
    }

    gd-gen-packages
    return
}

















# --------------------------------------------------------------
# Documentation

proc __desc  {} {
    global argv ; if {![checkmod]} return
    array set pd [getpdesc]

Changes to support/devel/sak/doc/doc.tcl.

20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
..
68
69
70
71
72
73
74
75
76



77
78
79
80

81
82
83
84
85
86
87
88
89
    auto::saveManpages $manpages

    # Then scan the found pages and extract the information needed for
    # keyword index and table of contents.
    array set meta [auto::scanManpages $manpages]

    # Sort through the extracted data.
    array set kwic  {}
    array set title {}
    array set cat   {}
    array set name  {}
    set       apps  {}
    array set mods  {}

    foreach page [array names meta] {
	unset -nocomplain m
	array set m $meta($page)

	# Collect keywords and file mapping for index.
	foreach kw $m(keywords) {
................................................................................
    #parray kwic
    #parray title
    #parray name
    #parray cat
    #puts "apps = $apps"
    #parray mods

    auto::saveKeywordIndex    kwic  name
    auto::saveTableOfContents title name cat apps mods



    return
}

proc ::sak::doc::imake {modules} {

    # The argument (= set of modules) is irrelevant to this command.
    auto::saveManpages [auto::findManpages]
    return
}

proc ::sak::doc::ishow {modules} {
    if {[catch {
	set manpages [auto::loadManpages]
    } msg]} {







|
|
|
|
|
|







 







|
|
>
>
>




>

|







20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
..
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
    auto::saveManpages $manpages

    # Then scan the found pages and extract the information needed for
    # keyword index and table of contents.
    array set meta [auto::scanManpages $manpages]

    # Sort through the extracted data.
    array set kwic  {} ; # map: keyword  -> list (file...)
    array set title {} ; # map: file     -> description
    array set cat   {} ; # map: category -> list (file...)
    array set name  {} ; # map: file     -> label
    set       apps  {} ; # list (file...) 
    array set mods  {} ; # map: module   -> list(file...)

    foreach page [array names meta] {
	unset -nocomplain m
	array set m $meta($page)

	# Collect keywords and file mapping for index.
	foreach kw $m(keywords) {
................................................................................
    #parray kwic
    #parray title
    #parray name
    #parray cat
    #puts "apps = $apps"
    #parray mods

    auto::saveKeywordIndex           kwic  name
    auto::saveTableOfContents        title name cat apps mods
    auto::saveSimpleTableOfContents1 title name apps toc_apps.txt
    auto::saveSimpleTableOfContents2 title name mods toc_mods.txt
    auto::saveSimpleTableOfContents3 title name cat  toc_cats.txt
    return
}

proc ::sak::doc::imake {modules} {
    global base
    # The argument (= set of modules) is irrelevant to this command.
    auto::saveManpages [auto::findManpages $base]
    return
}

proc ::sak::doc::ishow {modules} {
    if {[catch {
	set manpages [auto::loadManpages]
    } msg]} {

Changes to support/devel/sak/doc/doc_auto.tcl.

21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
..
56
57
58
59
60
61
62

63
64
65
66
67
68
69
...
157
158
159
160
161
162
163
























































































164
165
166
167
168
169
170
}

proc ::sak::doc::auto::kwic {} {
    variable here
    return [file join $here kwic.txt]
}

proc ::sak::doc::auto::toc {} {
    variable here
    return [file join $here toc.txt]
}

## ### ### ### ######### ######### #########

proc ::sak::doc::auto::findManpages {base} {
    set top [file normalize $base]
    set manpages {}
................................................................................

proc ::sak::doc::auto::scanManpages {manpages} {
    ::doctools::new dt -format list
    set data {}
    puts Scanning...
    foreach page $manpages {
	puts ...$page

	lappend data $page [lindex [dt format [fileutil::cat $page]] 1]
    }

    dt destroy
    return $data
}

................................................................................
    Tag+ division_end
    Tag+ division_end
    Tag+ toc_end

    fileutil::writeFile [toc] [join $lines \n]
    return
}

























































































proc ::sak::doc::auto::Sortable {files nv mfv mnv} {
    upvar 1 $nv name $mfv maxf $mnv maxn
    # Generate a list of files sortable by name, and also find the
    # max length of all relevant names.
    set maxf 0
    set maxn 0







|

|







 







>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
..
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
...
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
}

proc ::sak::doc::auto::kwic {} {
    variable here
    return [file join $here kwic.txt]
}

proc ::sak::doc::auto::toc {{name toc.txt}} {
    variable here
    return [file join $here $name]
}

## ### ### ### ######### ######### #########

proc ::sak::doc::auto::findManpages {base} {
    set top [file normalize $base]
    set manpages {}
................................................................................

proc ::sak::doc::auto::scanManpages {manpages} {
    ::doctools::new dt -format list
    set data {}
    puts Scanning...
    foreach page $manpages {
	puts ...$page
	dt configure -ibase $page
	lappend data $page [lindex [dt format [fileutil::cat $page]] 1]
    }

    dt destroy
    return $data
}

................................................................................
    Tag+ division_end
    Tag+ division_end
    Tag+ toc_end

    fileutil::writeFile [toc] [join $lines \n]
    return
}

proc ::sak::doc::auto::saveSimpleTableOfContents1 {tv nv dv fname} {
    upvar 1 $tv title $nv name $dv data
    # title: file     -> description
    # name:  file     -> label
    # data:  list(file...)

    TagsBegin
    Tag+ toc_begin [list {Table Of Contents} {}]

    # The man pages are sorted in several ways for the toc.
    # Subsections are the modules or apps, whatever is in data.

    # Not handled: 'no applications'
    Tag+ division_start [list {Applications}]
    foreach item [lsort -dict -index 0 [Sortable $data name maxf maxl]] {
	foreach {label file} $item break
	Tag+ item \
	    [FmtR maxf $file] \
	    [FmtR maxl $label] \
	    [list $title($file)]
    }
    Tag+ division_end
    Tag+ toc_end

    fileutil::writeFile [toc $fname] [join $lines \n]
    return
}

proc ::sak::doc::auto::saveSimpleTableOfContents2 {tv nv dv fname} {
    upvar 1 $tv title $nv name $dv data
    # title: file     -> description
    # name:  file     -> label
    # data:  module -> list (file...)

    TagsBegin
    Tag+ toc_begin [list {Table Of Contents} {}]

    # The man pages are sorted in several ways for the toc.
    # Subsections are the modules or apps, whatever is in data.

    # Not handled: 'no modules'
    Tag+ division_start [list {Modules}]
    foreach m [lsort -dict [array names data]] {
	Tag+ division_start [list $m]
	foreach item [lsort -dict -index 0 [Sortable $data($m) name maxf maxl]] {
	    foreach {label file} $item break
	    Tag+ item \
		[FmtR maxf $file] \
		[FmtR maxl $label] \
		[list $title($file)]
	}
	Tag+ division_end
    }
    Tag+ division_end
    Tag+ toc_end

    fileutil::writeFile [toc $fname] [join $lines \n]
    return
}

proc ::sak::doc::auto::saveSimpleTableOfContents3 {tv nv cv fname} {
    upvar 1 $tv title $nv name $cv cat
    # title: file     -> description
    # name:  file     -> label
    # cat:   category -> list (file...)

    TagsBegin
    Tag+ toc_begin [list {Table Of Contents} {}]

    Tag+ division_start [list {By Categories}]
    foreach c [lsort -dict [array names cat]] {
	Tag+ division_start [list $c]
	foreach item [lsort -dict -index 0 [Sortable $cat($c) name maxf maxl]] {
	    foreach {label file} $item break
	    Tag+ item \
		[FmtR maxf $file] \
		[FmtR maxl $label] \
		[list $title($file)]
	}
	Tag+ division_end
    }
    Tag+ division_end
    Tag+ toc_end

    fileutil::writeFile [toc $fname] [join $lines \n]
    return
}

proc ::sak::doc::auto::Sortable {files nv mfv mnv} {
    upvar 1 $nv name $mfv maxf $mnv maxn
    # Generate a list of files sortable by name, and also find the
    # max length of all relevant names.
    set maxf 0
    set maxn 0

Changes to support/devel/sak/doc/kwic.txt.

1


2
3
4
5






6
7
8
9
10
11
12
13
14









15







16


17
18


19
20
21
22
23
24
25
26
27
28
29
30
31


32
33
34
35








36
37
38
39
40
41


42
43



















44

45
46
47
48



49
50


51
52


53
54












55
56
57
58
59
60
61
62
63
64


65
66
67
68


69
70
71
72
73
74
75
76
77
78
79


80



81
82


83
84






85
86
87
88
89
90
91
92
93
94
95







96
97
98
99


100
101
102
103
104
105
106
107
108


109
110
















111
112
113
114
115
116
117




118

119






120
121









122
123
124
125
126
127
128
129










130
131
132
133







134
135
136
137
138


139
140
141
142
143


144
145




146
147
148
149


150
151




152
153

154
155
156
157
158
159
160
161



162
163
164

165











166
167
168
169
170
171
172
173
174


175




176
177
178
179
180
[index_begin {Keyword Index} {}]


[key {3D bars}]
[manpage modules/plotchart/plotchart.man Plotchart]
[key {3D surfaces}]
[manpage modules/plotchart/plotchart.man Plotchart]






[key balloon]
[manpage modules/tooltip/tooltip.man tooltip]
[key {bar charts}]
[manpage modules/plotchart/plotchart.man Plotchart]
[key bindtags]
[manpage modules/ntext/ntext.man          ntext]
[manpage modules/ntext/ntextBindings.man  ntextBindings]
[manpage modules/ntext/ntextIndent.man    ntextIndent]
[manpage modules/ntext/ntextWordBreak.man ntextWordBreak]









[key canvas]







[manpage modules/canvas/canvas_sqmap.man             canvas::sqmap]


[manpage modules/tkpiechart/canvaslabel.man          canvasLabel]
[manpage modules/crosshair/crosshair.man             crosshair]


[manpage modules/tkpiechart/pie.man                  pie]
[manpage modules/tkpiechart/pieboxlabeler.man        pieBoxLabeler]
[manpage modules/tkpiechart/pieperipherallabeler.man piePeripheralLabeler]
[key cell]
[manpage modules/canvas/canvas_sqmap.man canvas::sqmap]
[key character]
[manpage modules/khim/khim.man khim]
[key charts]
[manpage modules/plotchart/plotchart.man Plotchart]
[key chat]
[manpage modules/chatwidget/chatwidget.man chatwidget]
[key chatwidget]
[manpage modules/chatwidget/chatwidget.man chatwidget]


[key clock]
[manpage modules/datefield/datefield.man datefield]
[key {composite widget}]
[manpage modules/chatwidget/chatwidget.man chatwidget]








[key {coordinate transformations}]
[manpage modules/plotchart/plotchart.man Plotchart]
[key coordinates]
[manpage modules/plotchart/plotchart.man Plotchart]
[key cross-hairs]
[manpage modules/crosshair/crosshair.man crosshair]


[key cursor]
[manpage modules/cursor/cursor.man cursor]



















[key diagrams]

[manpage modules/diagrams/draw_diagram.man Diagrams]
[key dialog]
[manpage modules/getstring/tk_getString.man getstring]
[manpage modules/swaplist/swaplist.man      swaplist]



[key disjointlistbox]
[manpage modules/swaplist/swaplist.man swaplist]


[key dll]
[manpage modules/ico/ico.man ico]


[key drawing]
[manpage modules/diagrams/draw_diagram.man Diagrams]












[key entry]
[manpage modules/datefield/datefield.man    datefield]
[manpage modules/getstring/tk_getString.man getstring]
[manpage modules/history/tklib_history.man  history]
[manpage modules/ico/ico.man                ico]
[manpage modules/ipentry/ipentry.man        ipentry]
[key exe]
[manpage modules/ico/ico.man ico]
[key {graphical presentation}]
[manpage modules/plotchart/plotchart.man Plotchart]


[key grid]
[manpage modules/canvas/canvas_sqmap.man canvas::sqmap]
[key help]
[manpage modules/tooltip/tooltip.man tooltip]


[key history]
[manpage modules/history/tklib_history.man history]
[key hover]
[manpage modules/tooltip/tooltip.man tooltip]
[key i18n]
[manpage modules/khim/khim.man khim]
[key ico]
[manpage modules/ico/ico.man ico]
[key icon]
[manpage modules/ico/ico.man ico]
[key image]


[manpage modules/canvas/canvas_sqmap.man canvas::sqmap]



[key input]
[manpage modules/khim/khim.man khim]


[key international]
[manpage modules/khim/khim.man khim]






[key {ip address}]
[manpage modules/ipentry/ipentry.man ipentry]
[key irc]
[manpage modules/chatwidget/chatwidget.man chatwidget]
[key {isometric plots}]
[manpage modules/plotchart/plotchart.man Plotchart]
[key labeler]
[manpage modules/tkpiechart/canvaslabel.man          canvasLabel]
[manpage modules/tkpiechart/pie.man                  pie]
[manpage modules/tkpiechart/pieboxlabeler.man        pieBoxLabeler]
[manpage modules/tkpiechart/pieperipherallabeler.man piePeripheralLabeler]







[key listbox]
[manpage modules/swaplist/swaplist.man swaplist]
[key location]
[manpage modules/crosshair/crosshair.man crosshair]


[key map]
[manpage modules/canvas/canvas_sqmap.man canvas::sqmap]
[key mega-widget]
[manpage modules/chatwidget/chatwidget.man chatwidget]
[key megawidget]
[manpage modules/widget/widget.man          widget]
[manpage modules/widget/widget_calendar.man widget_calendar]
[manpage modules/widget/widget_dateentry.man widget_dateentry]
[manpage modules/widget/widget_toolbar.man  widget_toolbar]


[key method]
[manpage modules/khim/khim.man khim]
















[key pie]
[manpage modules/tkpiechart/canvaslabel.man          canvasLabel]
[manpage modules/tkpiechart/pie.man                  pie]
[manpage modules/tkpiechart/pieboxlabeler.man        pieBoxLabeler]
[manpage modules/tkpiechart/pieperipherallabeler.man piePeripheralLabeler]
[key {pie charts}]
[manpage modules/plotchart/plotchart.man Plotchart]




[key plotting]

[manpage modules/plotchart/plotchart.man Plotchart]






[key {polar plots}]
[manpage modules/plotchart/plotchart.man Plotchart]









[key re_syntax]
[manpage modules/ntext/ntext.man          ntext]
[manpage modules/ntext/ntextIndent.man    ntextIndent]
[manpage modules/ntext/ntextWordBreak.man ntextWordBreak]
[key regexp]
[manpage modules/ntext/ntext.man          ntext]
[manpage modules/ntext/ntextIndent.man    ntextIndent]
[manpage modules/ntext/ntextWordBreak.man ntextWordBreak]










[key scroll]
[manpage modules/autoscroll/autoscroll.man autoscroll]
[key scrollbar]
[manpage modules/autoscroll/autoscroll.man autoscroll]







[key slice]
[manpage modules/tkpiechart/canvaslabel.man          canvasLabel]
[manpage modules/tkpiechart/pie.man                  pie]
[manpage modules/tkpiechart/pieboxlabeler.man        pieBoxLabeler]
[manpage modules/tkpiechart/pieperipherallabeler.man piePeripheralLabeler]


[key snit]
[manpage modules/widget/widget.man          widget]
[manpage modules/widget/widget_calendar.man widget_calendar]
[manpage modules/widget/widget_dateentry.man widget_dateentry]
[manpage modules/widget/widget_toolbar.man  widget_toolbar]


[key {square map}]
[manpage modules/canvas/canvas_sqmap.man canvas::sqmap]




[key string]
[manpage modules/getstring/tk_getString.man getstring]
[key {strip charts}]
[manpage modules/plotchart/plotchart.man Plotchart]


[key {syntax highlighting}]
[manpage modules/ctext/ctext.man ctext]




[key text]
[manpage modules/ctext/ctext.man          ctext]

[manpage modules/ntext/ntext.man          ntext]
[manpage modules/ntext/ntextBindings.man  ntextBindings]
[manpage modules/ntext/ntextIndent.man    ntextIndent]
[manpage modules/ntext/ntextWordBreak.man ntextWordBreak]
[key tile]
[manpage modules/canvas/canvas_sqmap.man canvas::sqmap]
[key {time charts}]
[manpage modules/plotchart/plotchart.man Plotchart]



[key tooltip]
[manpage modules/tooltip/tooltip.man tooltip]
[key tracking]

[manpage modules/crosshair/crosshair.man crosshair]











[key viewport]
[manpage modules/crosshair/crosshair.man crosshair]
[key widget]
[manpage modules/chatwidget/chatwidget.man  chatwidget]
[manpage modules/ctext/ctext.man            ctext]
[manpage modules/datefield/datefield.man    datefield]
[manpage modules/widget/widget.man          widget]
[manpage modules/widget/widget_calendar.man widget_calendar]
[manpage modules/widget/widget_dateentry.man widget_dateentry]


[manpage modules/widget/widget_toolbar.man  widget_toolbar]




[key xy-plots]
[manpage modules/plotchart/plotchart.man Plotchart]
[key zoom]
[manpage modules/canvas/canvas_zoom.man canvas::zoom]
[index_end]

>
>




>
>
>
>
>
>









>
>
>
>
>
>
>
>
>

>
>
>
>
>
>
>

>
>


>
>













>
>




>
>
>
>
>
>
>
>






>
>


>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
|



>
>
>


>
>


>
>

|
>
>
>
>
>
>
>
>
>
>
>
>










>
>




>
>











>
>

>
>
>


>
>


>
>
>
>
>
>











>
>
>
>
>
>
>




>
>





|
|

|
>
>


>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







>
>
>
>

>

>
>
>
>
>
>


>
>
>
>
>
>
>
>
>








>
>
>
>
>
>
>
>
>
>




>
>
>
>
>
>
>





>
>

|
|

|
>
>


>
>
>
>




>
>


>
>
>
>


>








>
>
>



>
|
>
>
>
>
>
>
>
>
>
>
>



|
|
|
|
|
|
>
>
|
>
>
>
>





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
[index_begin {Keyword Index} {}]
[key {2D geometry}]
[manpage modules/diagrams/diagram.man diagram]
[key {3D bars}]
[manpage modules/plotchart/plotchart.man Plotchart]
[key {3D surfaces}]
[manpage modules/plotchart/plotchart.man Plotchart]
[key {append tag}]
[manpage modules/canvas/canvas_tags.man canvas::tag]
[key arc]
[manpage modules/diagrams/diagram.man diagram]
[key arrow]
[manpage modules/diagrams/diagram.man diagram]
[key balloon]
[manpage modules/tooltip/tooltip.man tooltip]
[key {bar charts}]
[manpage modules/plotchart/plotchart.man Plotchart]
[key bindtags]
[manpage modules/ntext/ntext.man          ntext]
[manpage modules/ntext/ntextBindings.man  ntextBindings]
[manpage modules/ntext/ntextIndent.man    ntextIndent]
[manpage modules/ntext/ntextWordBreak.man ntextWordBreak]
[key bitmap]
[manpage apps/bitmap-editor.man bitmap-editor]
[key box]
[manpage modules/diagrams/diagram.man diagram]
[key bundle]
[manpage modules/widget/widget.man widget]
[key calendar]
[manpage modules/widget/widget.man          widget]
[manpage modules/widget/widget_calendar.man widget_calendar]
[key canvas]
[manpage modules/canvas/canvas_drag.man              canvas::drag]
[manpage modules/canvas/canvas_epoints.man           canvas::edit::points]
[manpage modules/canvas/canvas_epolyline.man         canvas::edit::polyline]
[manpage modules/canvas/canvas_equad.man             canvas::edit::quadrilateral]
[manpage modules/canvas/canvas_highlight.man         canvas::highlight]
[manpage modules/canvas/canvas_mvg.man               canvas::mvg]
[manpage modules/canvas/canvas_snap.man              canvas::snap]
[manpage modules/canvas/canvas_sqmap.man             canvas::sqmap]
[manpage modules/canvas/canvas_tags.man              canvas::tag]
[manpage modules/canvas/canvas_trlines.man           canvas::track::lines]
[manpage modules/tkpiechart/canvaslabel.man          canvasLabel]
[manpage modules/crosshair/crosshair.man             crosshair]
[manpage apps/dia.man                                dia]
[manpage modules/diagrams/diagram.man                diagram]
[manpage modules/tkpiechart/pie.man                  pie]
[manpage modules/tkpiechart/pieboxlabeler.man        pieBoxLabeler]
[manpage modules/tkpiechart/pieperipherallabeler.man piePeripheralLabeler]
[key cell]
[manpage modules/canvas/canvas_sqmap.man canvas::sqmap]
[key character]
[manpage modules/khim/khim.man khim]
[key charts]
[manpage modules/plotchart/plotchart.man Plotchart]
[key chat]
[manpage modules/chatwidget/chatwidget.man chatwidget]
[key chatwidget]
[manpage modules/chatwidget/chatwidget.man chatwidget]
[key circle]
[manpage modules/diagrams/diagram.man diagram]
[key clock]
[manpage modules/datefield/datefield.man datefield]
[key {composite widget}]
[manpage modules/chatwidget/chatwidget.man chatwidget]
[key concave]
[manpage modules/canvas/canvas_equad.man canvas::edit::quadrilateral]
[key controlling]
[manpage modules/controlwidget/controlwidget.man controlwidget]
[key conversion]
[manpage apps/dia.man dia]
[key convex]
[manpage modules/canvas/canvas_equad.man canvas::edit::quadrilateral]
[key {coordinate transformations}]
[manpage modules/plotchart/plotchart.man Plotchart]
[key coordinates]
[manpage modules/plotchart/plotchart.man Plotchart]
[key cross-hairs]
[manpage modules/crosshair/crosshair.man crosshair]
[key crosshair]
[manpage modules/canvas/canvas_trlines.man canvas::track::lines]
[key cursor]
[manpage modules/cursor/cursor.man cursor]
[key {data entry lists}]
[manpage modules/widgetl/widget_listentry.man  widget_listentry]
[manpage modules/widgetl/widget_listsimple.man widget_listsimple]
[key {data entry ordered list}]
[manpage modules/widgetl/widget_listentry.man widget_listentry]
[key {data entry set of strings}]
[manpage modules/widgetl/widget_listentry.man  widget_listentry]
[manpage modules/widgetl/widget_listsimple.man widget_listsimple]
[key {data entry unordered list}]
[manpage modules/widgetl/widget_listentry.man  widget_listentry]
[manpage modules/widgetl/widget_listsimple.man widget_listsimple]
[key date]
[manpage modules/datefield/datefield.man     datefield]
[manpage modules/widget/widget_calendar.man  widget_calendar]
[manpage modules/widget/widget_dateentry.man widget_dateentry]
[key dateentry]
[manpage modules/datefield/datefield.man     datefield]
[manpage modules/widget/widget.man           widget]
[manpage modules/widget/widget_dateentry.man widget_dateentry]
[key diagram]
[manpage apps/dia.man                 dia]
[manpage modules/diagrams/diagram.man diagram]
[key dialog]
[manpage modules/getstring/tk_getString.man getstring]
[manpage modules/swaplist/swaplist.man      swaplist]
[manpage modules/widget/widget.man          widget]
[key diamond]
[manpage modules/diagrams/diagram.man diagram]
[key disjointlistbox]
[manpage modules/swaplist/swaplist.man swaplist]
[key displaying]
[manpage modules/controlwidget/controlwidget.man controlwidget]
[key dll]
[manpage modules/ico/ico.man ico]
[key dragging]
[manpage modules/canvas/canvas_drag.man canvas::drag]
[key drawing]
[manpage modules/diagrams/diagram.man diagram]
[key drum]
[manpage modules/diagrams/diagram.man diagram]
[key editing]
[manpage modules/canvas/canvas_epoints.man   canvas::edit::points]
[manpage modules/canvas/canvas_epolyline.man canvas::edit::polyline]
[manpage modules/canvas/canvas_equad.man     canvas::edit::quadrilateral]
[key editor]
[manpage apps/bitmap-editor.man bitmap-editor]
[key ellipse]
[manpage modules/diagrams/diagram.man diagram]
[key {enter callback}]
[manpage modules/canvas/canvas_highlight.man canvas::highlight]
[key entry]
[manpage modules/datefield/datefield.man    datefield]
[manpage modules/getstring/tk_getString.man getstring]
[manpage modules/history/tklib_history.man  history]
[manpage modules/ico/ico.man                ico]
[manpage modules/ipentry/ipentry.man        ipentry]
[key exe]
[manpage modules/ico/ico.man ico]
[key {graphical presentation}]
[manpage modules/plotchart/plotchart.man Plotchart]
[key graphics]
[manpage modules/canvas/canvas_mvg.man canvas::mvg]
[key grid]
[manpage modules/canvas/canvas_sqmap.man canvas::sqmap]
[key help]
[manpage modules/tooltip/tooltip.man tooltip]
[key highlighting]
[manpage modules/canvas/canvas_highlight.man canvas::highlight]
[key history]
[manpage modules/history/tklib_history.man history]
[key hover]
[manpage modules/tooltip/tooltip.man tooltip]
[key i18n]
[manpage modules/khim/khim.man khim]
[key ico]
[manpage modules/ico/ico.man ico]
[key icon]
[manpage modules/ico/ico.man ico]
[key image]
[manpage apps/bitmap-editor.man          bitmap-editor]
[manpage modules/canvas/canvas_snap.man  canvas::snap]
[manpage modules/canvas/canvas_sqmap.man canvas::sqmap]
[manpage modules/diagrams/diagram.man    diagram]
[key imagemagick]
[manpage modules/canvas/canvas_mvg.man canvas::mvg]
[key input]
[manpage modules/khim/khim.man khim]
[key {insert tag}]
[manpage modules/canvas/canvas_tags.man canvas::tag]
[key international]
[manpage modules/khim/khim.man khim]
[key interpolation]
[manpage modules/diagrams/diagram.man diagram]
[key intersection]
[manpage modules/diagrams/diagram.man diagram]
[key invalid]
[manpage modules/widgetv/widget_validator.man widget_validator]
[key {ip address}]
[manpage modules/ipentry/ipentry.man ipentry]
[key irc]
[manpage modules/chatwidget/chatwidget.man chatwidget]
[key {isometric plots}]
[manpage modules/plotchart/plotchart.man Plotchart]
[key labeler]
[manpage modules/tkpiechart/canvaslabel.man          canvasLabel]
[manpage modules/tkpiechart/pie.man                  pie]
[manpage modules/tkpiechart/pieboxlabeler.man        pieBoxLabeler]
[manpage modules/tkpiechart/pieperipherallabeler.man piePeripheralLabeler]
[key {leave callback}]
[manpage modules/canvas/canvas_highlight.man canvas::highlight]
[key line]
[manpage modules/diagrams/diagram.man diagram]
[key {list entry panel}]
[manpage modules/widgetl/widget_listentry.man  widget_listentry]
[manpage modules/widgetl/widget_listsimple.man widget_listsimple]
[key listbox]
[manpage modules/swaplist/swaplist.man swaplist]
[key location]
[manpage modules/crosshair/crosshair.man crosshair]
[key {magick vector graphics}]
[manpage modules/canvas/canvas_mvg.man canvas::mvg]
[key map]
[manpage modules/canvas/canvas_sqmap.man canvas::sqmap]
[key mega-widget]
[manpage modules/chatwidget/chatwidget.man chatwidget]
[key megawidget]
[manpage modules/widget/widget.man           widget]
[manpage modules/widget/widget_calendar.man  widget_calendar]
[manpage modules/widget/widget_dateentry.man widget_dateentry]
[manpage modules/widget/widget_toolbar.man   widget_toolbar]
[key menu]
[manpage modules/widget/widget.man widget]
[key method]
[manpage modules/khim/khim.man khim]
[key move]
[manpage modules/diagrams/diagram.man diagram]
[key mvg]
[manpage modules/canvas/canvas_mvg.man canvas::mvg]
[key network]
[manpage modules/ipentry/ipentry.man ipentry]
[key non-convex]
[manpage modules/canvas/canvas_equad.man canvas::edit::quadrilateral]
[key {numerical values}]
[manpage modules/controlwidget/controlwidget.man controlwidget]
[key panelframe]
[manpage modules/widget/widget.man widget]
[key photo]
[manpage modules/canvas/canvas_snap.man canvas::snap]
[key picture]
[manpage modules/diagrams/diagram.man diagram]
[key pie]
[manpage modules/tkpiechart/canvaslabel.man          canvasLabel]
[manpage modules/tkpiechart/pie.man                  pie]
[manpage modules/tkpiechart/pieboxlabeler.man        pieBoxLabeler]
[manpage modules/tkpiechart/pieperipherallabeler.man piePeripheralLabeler]
[key {pie charts}]
[manpage modules/plotchart/plotchart.man Plotchart]
[key pixel]
[manpage apps/bitmap-editor.man bitmap-editor]
[key {plane geometry}]
[manpage modules/diagrams/diagram.man diagram]
[key plotting]
[manpage modules/diagrams/diagram.man    diagram]
[manpage modules/plotchart/plotchart.man Plotchart]
[key point]
[manpage modules/diagrams/diagram.man diagram]
[key {point cloud}]
[manpage modules/canvas/canvas_epoints.man canvas::edit::points]
[key points]
[manpage modules/canvas/canvas_epoints.man canvas::edit::points]
[key {polar plots}]
[manpage modules/plotchart/plotchart.man Plotchart]
[key polyline]
[manpage modules/canvas/canvas_epolyline.man canvas::edit::polyline]
[key {print screen}]
[manpage modules/canvas/canvas_mvg.man  canvas::mvg]
[manpage modules/canvas/canvas_snap.man canvas::snap]
[key quadrilateral]
[manpage modules/canvas/canvas_equad.man canvas::edit::quadrilateral]
[key {raster image}]
[manpage modules/diagrams/diagram.man diagram]
[key re_syntax]
[manpage modules/ntext/ntext.man          ntext]
[manpage modules/ntext/ntextIndent.man    ntextIndent]
[manpage modules/ntext/ntextWordBreak.man ntextWordBreak]
[key regexp]
[manpage modules/ntext/ntext.man          ntext]
[manpage modules/ntext/ntextIndent.man    ntextIndent]
[manpage modules/ntext/ntextWordBreak.man ntextWordBreak]
[key {remove tag}]
[manpage modules/canvas/canvas_tags.man canvas::tag]
[key rubberband]
[manpage modules/canvas/canvas_trlines.man canvas::track::lines]
[key ruler]
[manpage modules/widget/widget.man widget]
[key {scale widget}]
[manpage modules/controlwidget/controlwidget.man controlwidget]
[key screenruler]
[manpage modules/widget/widget.man widget]
[key scroll]
[manpage modules/autoscroll/autoscroll.man autoscroll]
[key scrollbar]
[manpage modules/autoscroll/autoscroll.man autoscroll]
[key scrolledwindow]
[manpage modules/widget/widget.man widget]
[key serialization]
[manpage modules/canvas/canvas_mvg.man canvas::mvg]
[key {set entry panel}]
[manpage modules/widgetl/widget_listentry.man  widget_listentry]
[manpage modules/widgetl/widget_listsimple.man widget_listsimple]
[key slice]
[manpage modules/tkpiechart/canvaslabel.man          canvasLabel]
[manpage modules/tkpiechart/pie.man                  pie]
[manpage modules/tkpiechart/pieboxlabeler.man        pieBoxLabeler]
[manpage modules/tkpiechart/pieperipherallabeler.man piePeripheralLabeler]
[key snapshot]
[manpage modules/canvas/canvas_snap.man canvas::snap]
[key snit]
[manpage modules/widget/widget.man           widget]
[manpage modules/widget/widget_calendar.man  widget_calendar]
[manpage modules/widget/widget_dateentry.man widget_dateentry]
[manpage modules/widget/widget_toolbar.man   widget_toolbar]
[key spline]
[manpage modules/diagrams/diagram.man diagram]
[key {square map}]
[manpage modules/canvas/canvas_sqmap.man canvas::sqmap]
[key {state management}]
[manpage modules/widgetv/widget_validator.man widget_validator]
[key statusbar]
[manpage modules/widget/widget.man widget]
[key string]
[manpage modules/getstring/tk_getString.man getstring]
[key {strip charts}]
[manpage modules/plotchart/plotchart.man Plotchart]
[key superframe]
[manpage modules/widget/widget.man widget]
[key {syntax highlighting}]
[manpage modules/ctext/ctext.man ctext]
[key tables]
[manpage modules/plotchart/plotchart.man Plotchart]
[key tags]
[manpage modules/canvas/canvas_tags.man canvas::tag]
[key text]
[manpage modules/ctext/ctext.man          ctext]
[manpage modules/diagrams/diagram.man     diagram]
[manpage modules/ntext/ntext.man          ntext]
[manpage modules/ntext/ntextBindings.man  ntextBindings]
[manpage modules/ntext/ntextIndent.man    ntextIndent]
[manpage modules/ntext/ntextWordBreak.man ntextWordBreak]
[key tile]
[manpage modules/canvas/canvas_sqmap.man canvas::sqmap]
[key {time charts}]
[manpage modules/plotchart/plotchart.man Plotchart]
[key toolbar]
[manpage modules/widget/widget.man         widget]
[manpage modules/widget/widget_toolbar.man widget_toolbar]
[key tooltip]
[manpage modules/tooltip/tooltip.man tooltip]
[key tracking]
[manpage modules/canvas/canvas_trlines.man canvas::track::lines]
[manpage modules/crosshair/crosshair.man   crosshair]
[key ttk::combobox]
[manpage modules/widgetv/widget_validator.man widget_validator]
[key ttk::entry]
[manpage modules/widgetv/widget_validator.man widget_validator]
[key validation]
[manpage modules/widgetv/widget_validator.man widget_validator]
[key vector]
[manpage apps/dia.man                 dia]
[manpage modules/diagrams/diagram.man diagram]
[key {vector graphics}]
[manpage modules/canvas/canvas_mvg.man canvas::mvg]
[key viewport]
[manpage modules/crosshair/crosshair.man crosshair]
[key widget]
[manpage modules/chatwidget/chatwidget.man     chatwidget]
[manpage modules/ctext/ctext.man               ctext]
[manpage modules/datefield/datefield.man       datefield]
[manpage modules/widget/widget.man             widget]
[manpage modules/widget/widget_calendar.man    widget_calendar]
[manpage modules/widget/widget_dateentry.man   widget_dateentry]
[manpage modules/widgetl/widget_listentry.man  widget_listentry]
[manpage modules/widgetl/widget_listsimple.man widget_listsimple]
[manpage modules/widget/widget_toolbar.man     widget_toolbar]
[key {widget validation}]
[manpage modules/widgetv/widget_validator.man widget_validator]
[key xbm]
[manpage apps/bitmap-editor.man bitmap-editor]
[key xy-plots]
[manpage modules/plotchart/plotchart.man Plotchart]
[key zoom]
[manpage modules/canvas/canvas_zoom.man canvas::zoom]
[index_end]

Changes to support/devel/sak/doc/manpages.txt.



1







2


3
4

5
6
7
8
9
10
11
12
13
14

15
16
17
18
19
20
21
..
23
24
25
26
27
28
29





modules/autoscroll/autoscroll.man







modules/canvas/canvas_sqmap.man


modules/canvas/canvas_zoom.man
modules/chatwidget/chatwidget.man

modules/crosshair/crosshair.man
modules/ctext/ctext.man
modules/cursor/cursor.man
modules/datefield/datefield.man
modules/diagrams/draw_diagram.man
modules/getstring/tk_getString.man
modules/history/tklib_history.man
modules/ico/ico.man
modules/ipentry/ipentry.man
modules/khim/khim.man

modules/ntext/ntext.man
modules/ntext/ntextBindings.man
modules/ntext/ntextIndent.man
modules/ntext/ntextWordBreak.man
modules/plotchart/plotchart.man
modules/swaplist/swaplist.man
modules/tkpiechart/canvaslabel.man
................................................................................
modules/tkpiechart/pieboxlabeler.man
modules/tkpiechart/pieperipherallabeler.man
modules/tooltip/tooltip.man
modules/widget/widget.man
modules/widget/widget_calendar.man
modules/widget/widget_dateentry.man
modules/widget/widget_toolbar.man



>
>

>
>
>
>
>
>
>

>
>


>




|





>







 







>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
..
36
37
38
39
40
41
42
43
44
45
apps/bitmap-editor.man
apps/dia.man
modules/autoscroll/autoscroll.man
modules/canvas/canvas_drag.man
modules/canvas/canvas_epoints.man
modules/canvas/canvas_epolyline.man
modules/canvas/canvas_equad.man
modules/canvas/canvas_highlight.man
modules/canvas/canvas_mvg.man
modules/canvas/canvas_snap.man
modules/canvas/canvas_sqmap.man
modules/canvas/canvas_tags.man
modules/canvas/canvas_trlines.man
modules/canvas/canvas_zoom.man
modules/chatwidget/chatwidget.man
modules/controlwidget/controlwidget.man
modules/crosshair/crosshair.man
modules/ctext/ctext.man
modules/cursor/cursor.man
modules/datefield/datefield.man
modules/diagrams/diagram.man
modules/getstring/tk_getString.man
modules/history/tklib_history.man
modules/ico/ico.man
modules/ipentry/ipentry.man
modules/khim/khim.man
modules/menubar/menubar.man
modules/ntext/ntext.man
modules/ntext/ntextBindings.man
modules/ntext/ntextIndent.man
modules/ntext/ntextWordBreak.man
modules/plotchart/plotchart.man
modules/swaplist/swaplist.man
modules/tkpiechart/canvaslabel.man
................................................................................
modules/tkpiechart/pieboxlabeler.man
modules/tkpiechart/pieperipherallabeler.man
modules/tooltip/tooltip.man
modules/widget/widget.man
modules/widget/widget_calendar.man
modules/widget/widget_dateentry.man
modules/widget/widget_toolbar.man
modules/widgetl/widget_listentry.man
modules/widgetl/widget_listsimple.man
modules/widgetv/widget_validator.man

Changes to support/devel/sak/doc/toc.txt.

1
2







3
4







5


6
7
8

9
10
11
12
13
14
15
16
17
18

19
20
21
22
23
24
25
26
27
28








29
30
31
32
33
34
35
36


37
38
39
40
41
42







43


44
45
46
47
48



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
..
72
73
74
75
76
77
78



79
80
81
82
83
84
85
..
94
95
96
97
98
99
100
101
102
103
104







105
106
107
108
[toc_begin {Table Of Contents} {}]
[division_start {By Categories}]







[division_start Unfiled]
[item modules/autoscroll/autoscroll.man           autoscroll           {Provides for a scrollbar to automatically mapped and unmapped as needed}]







[item modules/canvas/canvas_sqmap.man             canvas::sqmap        {Canvas with map background based on square tiles}]


[item modules/canvas/canvas_zoom.man              canvas::zoom         {Zoom control for canvas::sqmap}]
[item modules/tkpiechart/canvaslabel.man          canvasLabel          {tkpiechart canvas label class}]
[item modules/chatwidget/chatwidget.man           chatwidget           {Provides a multi-paned view suitable for display of chat room or irc channel information}]

[item modules/crosshair/crosshair.man             crosshair            {Crosshairs for Tk canvas}]
[item modules/ctext/ctext.man                     ctext                {Ctext a text widget with highlighting support}]
[item modules/cursor/cursor.man                   cursor               {Procedures to handle CURSOR data}]
[item modules/datefield/datefield.man             datefield            {Tk datefield widget}]
[item modules/diagrams/draw_diagram.man           Diagrams             {User documentation of the Diagrams package}]
[item modules/getstring/tk_getString.man          getstring            {A string dialog}]
[item modules/history/tklib_history.man           history              {Provides a history for Entry widgets}]
[item modules/ico/ico.man                         ico                  {Reading and writing windows icons}]
[item modules/ipentry/ipentry.man                 ipentry              {An IP address entry widget}]
[item modules/khim/khim.man                       khim                 {Provides key bindings for entering international characters on a keyboard that does not support them}]

[item modules/ntext/ntext.man                     ntext                {Alternative Bindings for the Text Widget}]
[item modules/ntext/ntextBindings.man             ntextBindings        {Alternative Bindings for the Text Widget}]
[item modules/ntext/ntextIndent.man               ntextIndent          {ntext Indentation for the Text Widget}]
[item modules/ntext/ntextWordBreak.man            ntextWordBreak       {ntext Word Boundary Detection for the Text Widget}]
[item modules/tkpiechart/pie.man                  pie                  {2D or 3D pie chart object in a canvas}]
[item modules/tkpiechart/pieboxlabeler.man        pieBoxLabeler        {tkpiechart pie box style labeler class}]
[item modules/tkpiechart/pieperipherallabeler.man piePeripheralLabeler {tkpiechart pie peripheral style labeler class}]
[item modules/plotchart/plotchart.man             Plotchart            {Simple plotting and charting package}]
[item modules/swaplist/swaplist.man               swaplist             {A dialog which allows a user to move options between two lists}]
[item modules/tooltip/tooltip.man                 tooltip              {Tooltip management}]








[item modules/widget/widget.man                   widget               {Megawidget package}]
[item modules/widget/widget_calendar.man          widget_calendar      {widget::calendar Megawidget}]
[item modules/widget/widget_dateentry.man         widget_dateentry     {widget::dateentry Megawidget}]
[item modules/widget/widget_toolbar.man           widget_toolbar       {widget::toolbar Megawidget}]
[division_end]
[division_end]
[division_start {By Type}]
[division_start Applications]


[division_end]
[division_start Modules]
[division_start autoscroll]
[item modules/autoscroll/autoscroll.man autoscroll {Provides for a scrollbar to automatically mapped and unmapped as needed}]
[division_end]
[division_start canvas]







[item modules/canvas/canvas_sqmap.man canvas::sqmap {Canvas with map background based on square tiles}]


[item modules/canvas/canvas_zoom.man  canvas::zoom  {Zoom control for canvas::sqmap}]
[division_end]
[division_start chatwidget]
[item modules/chatwidget/chatwidget.man chatwidget {Provides a multi-paned view suitable for display of chat room or irc channel information}]
[division_end]



[division_start crosshair]
[item modules/crosshair/crosshair.man crosshair {Crosshairs for Tk canvas}]
[division_end]
[division_start ctext]
[item modules/ctext/ctext.man ctext {Ctext a text widget with highlighting support}]
[division_end]
[division_start cursor]
[item modules/cursor/cursor.man cursor {Procedures to handle CURSOR data}]
[division_end]
[division_start datefield]
[item modules/datefield/datefield.man datefield {Tk datefield widget}]
[division_end]
[division_start diagrams]
[item modules/diagrams/draw_diagram.man Diagrams {User documentation of the Diagrams package}]
[division_end]
[division_start getstring]
[item modules/getstring/tk_getString.man getstring {A string dialog}]
[division_end]
[division_start history]
[item modules/history/tklib_history.man history {Provides a history for Entry widgets}]
[division_end]
................................................................................
[division_end]
[division_start ipentry]
[item modules/ipentry/ipentry.man ipentry {An IP address entry widget}]
[division_end]
[division_start khim]
[item modules/khim/khim.man khim {Provides key bindings for entering international characters on a keyboard that does not support them}]
[division_end]



[division_start ntext]
[item modules/ntext/ntext.man          ntext          {Alternative Bindings for the Text Widget}]
[item modules/ntext/ntextBindings.man  ntextBindings  {Alternative Bindings for the Text Widget}]
[item modules/ntext/ntextIndent.man    ntextIndent    {ntext Indentation for the Text Widget}]
[item modules/ntext/ntextWordBreak.man ntextWordBreak {ntext Word Boundary Detection for the Text Widget}]
[division_end]
[division_start plotchart]
................................................................................
[item modules/tkpiechart/pieboxlabeler.man        pieBoxLabeler        {tkpiechart pie box style labeler class}]
[item modules/tkpiechart/pieperipherallabeler.man piePeripheralLabeler {tkpiechart pie peripheral style labeler class}]
[division_end]
[division_start tooltip]
[item modules/tooltip/tooltip.man tooltip {Tooltip management}]
[division_end]
[division_start widget]
[item modules/widget/widget.man          widget          {Megawidget package}]
[item modules/widget/widget_calendar.man widget_calendar {widget::calendar Megawidget}]
[item modules/widget/widget_dateentry.man widget_dateentry {widget::dateentry Megawidget}]
[item modules/widget/widget_toolbar.man  widget_toolbar  {widget::toolbar Megawidget}]







[division_end]
[division_end]
[division_end]
[toc_end]


>
>
>
>
>
>
>

|
>
>
>
>
>
>
>
|
>
>
|
|
|
>
|
|
|
<
<
|
|
|
<
|
>
|
|
|
|
|
|
|
|
<
|
>
>
>
>
>
>
>
>
|
|
|
|




>
>






>
>
>
>
>
>
>
|
>
>
|




>
>
>













|







 







>
>
>







 







|
|
|
|
>
>
>
>
>
>
>




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28


29
30
31

32
33
34
35
36
37
38
39
40
41

42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
...
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
...
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
[toc_begin {Table Of Contents} {}]
[division_start {By Categories}]
[division_start {Documentation tools}]
[item apps/dia.man                 dia     {Lightweight Diagram Processor}]
[item modules/diagrams/diagram.man diagram {Diagram drawing}]
[division_end]
[division_start {Image processing}]
[item apps/bitmap-editor.man bitmap-editor {Editor for XBM images}]
[division_end]
[division_start Unfiled]
[item modules/autoscroll/autoscroll.man           autoscroll                  {Provides for a scrollbar to automatically mapped and unmapped as needed}]
[item modules/canvas/canvas_drag.man              canvas::drag                {Manage the dragging of canvas items or item groups}]
[item modules/canvas/canvas_epoints.man           canvas::edit::points        {Editing a cloud of points on a canvas}]
[item modules/canvas/canvas_epolyline.man         canvas::edit::polyline      {Editing a polyline on a canvas}]
[item modules/canvas/canvas_equad.man             canvas::edit::quadrilateral {Editing a quadrilateral on a canvas}]
[item modules/canvas/canvas_highlight.man         canvas::highlight           {Manage the highlighting of canvas items or item groups}]
[item modules/canvas/canvas_mvg.man               canvas::mvg                 {Canvas to ImageMagick MVG vector format}]
[item modules/canvas/canvas_snap.man              canvas::snap                {Canvas snapshot to Tk photo image}]
[item modules/canvas/canvas_sqmap.man             canvas::sqmap               {Canvas with map background based on square tiles}]
[item modules/canvas/canvas_tags.man              canvas::tag                 {Easier management of the tags on canvas items or item groups}]
[item modules/canvas/canvas_trlines.man           canvas::track::lines        {Manage a group of rubber band lines}]
[item modules/canvas/canvas_zoom.man              canvas::zoom                {Zoom control for canvas::sqmap}]
[item modules/tkpiechart/canvaslabel.man          canvasLabel                 {tkpiechart canvas label class}]
[item modules/chatwidget/chatwidget.man           chatwidget                  {Provides a multi-paned view suitable for display of chat room or irc channel information}]
[item modules/controlwidget/controlwidget.man     controlwidget               {Collection of widgets for displaying and controlling numerical values}]
[item modules/crosshair/crosshair.man             crosshair                   {Crosshairs for Tk canvas}]
[item modules/ctext/ctext.man                     ctext                       {Ctext a text widget with highlighting support}]
[item modules/cursor/cursor.man                   cursor                      {Procedures to handle CURSOR data}]


[item modules/getstring/tk_getString.man          getstring                   {A string dialog}]
[item modules/history/tklib_history.man           history                     {Provides a history for Entry widgets}]
[item modules/ico/ico.man                         ico                         {Reading and writing windows icons}]

[item modules/khim/khim.man                       khim                        {Provides key bindings for entering international characters on a keyboard that does not support them}]
[item modules/menubar/menubar.man                 menubar                     {Creates an instance of the  Class.}]
[item modules/ntext/ntext.man                     ntext                       {Alternative Bindings for the Text Widget}]
[item modules/ntext/ntextBindings.man             ntextBindings               {Alternative Bindings for the Text Widget}]
[item modules/ntext/ntextIndent.man               ntextIndent                 {ntext Indentation for the Text Widget}]
[item modules/ntext/ntextWordBreak.man            ntextWordBreak              {ntext Word Boundary Detection for the Text Widget}]
[item modules/tkpiechart/pie.man                  pie                         {2D or 3D pie chart object in a canvas}]
[item modules/tkpiechart/pieboxlabeler.man        pieBoxLabeler               {tkpiechart pie box style labeler class}]
[item modules/tkpiechart/pieperipherallabeler.man piePeripheralLabeler        {tkpiechart pie peripheral style labeler class}]
[item modules/plotchart/plotchart.man             Plotchart                   {Simple plotting and charting package}]

[item modules/tooltip/tooltip.man                 tooltip                     {Tooltip management}]
[item modules/widgetl/widget_listentry.man        widget_listentry            {widget::listentry widget}]
[item modules/widgetl/widget_listsimple.man       widget_listsimple           {widget::listsimple widget}]
[item modules/widgetv/widget_validator.man        widget_validator            {widget::validator behaviour}]
[division_end]
[division_start Widget]
[item modules/datefield/datefield.man     datefield        {Tk datefield widget}]
[item modules/ipentry/ipentry.man         ipentry          {An IP address entry widget}]
[item modules/swaplist/swaplist.man       swaplist         {A dialog which allows a user to move options between two lists}]
[item modules/widget/widget.man           widget           {Megawidget bundle}]
[item modules/widget/widget_calendar.man  widget_calendar  {Calendar Megawidget}]
[item modules/widget/widget_dateentry.man widget_dateentry {Date Entry Megawidget}]
[item modules/widget/widget_toolbar.man   widget_toolbar   {Toolbar Megawidget}]
[division_end]
[division_end]
[division_start {By Type}]
[division_start Applications]
[item apps/bitmap-editor.man bitmap-editor {Editor for XBM images}]
[item apps/dia.man           dia           {Lightweight Diagram Processor}]
[division_end]
[division_start Modules]
[division_start autoscroll]
[item modules/autoscroll/autoscroll.man autoscroll {Provides for a scrollbar to automatically mapped and unmapped as needed}]
[division_end]
[division_start canvas]
[item modules/canvas/canvas_drag.man      canvas::drag                {Manage the dragging of canvas items or item groups}]
[item modules/canvas/canvas_epoints.man   canvas::edit::points        {Editing a cloud of points on a canvas}]
[item modules/canvas/canvas_epolyline.man canvas::edit::polyline      {Editing a polyline on a canvas}]
[item modules/canvas/canvas_equad.man     canvas::edit::quadrilateral {Editing a quadrilateral on a canvas}]
[item modules/canvas/canvas_highlight.man canvas::highlight           {Manage the highlighting of canvas items or item groups}]
[item modules/canvas/canvas_mvg.man       canvas::mvg                 {Canvas to ImageMagick MVG vector format}]
[item modules/canvas/canvas_snap.man      canvas::snap                {Canvas snapshot to Tk photo image}]
[item modules/canvas/canvas_sqmap.man     canvas::sqmap               {Canvas with map background based on square tiles}]
[item modules/canvas/canvas_tags.man      canvas::tag                 {Easier management of the tags on canvas items or item groups}]
[item modules/canvas/canvas_trlines.man   canvas::track::lines        {Manage a group of rubber band lines}]
[item modules/canvas/canvas_zoom.man      canvas::zoom                {Zoom control for canvas::sqmap}]
[division_end]
[division_start chatwidget]
[item modules/chatwidget/chatwidget.man chatwidget {Provides a multi-paned view suitable for display of chat room or irc channel information}]
[division_end]
[division_start controlwidget]
[item modules/controlwidget/controlwidget.man controlwidget {Collection of widgets for displaying and controlling numerical values}]
[division_end]
[division_start crosshair]
[item modules/crosshair/crosshair.man crosshair {Crosshairs for Tk canvas}]
[division_end]
[division_start ctext]
[item modules/ctext/ctext.man ctext {Ctext a text widget with highlighting support}]
[division_end]
[division_start cursor]
[item modules/cursor/cursor.man cursor {Procedures to handle CURSOR data}]
[division_end]
[division_start datefield]
[item modules/datefield/datefield.man datefield {Tk datefield widget}]
[division_end]
[division_start diagrams]
[item modules/diagrams/diagram.man diagram {Diagram drawing}]
[division_end]
[division_start getstring]
[item modules/getstring/tk_getString.man getstring {A string dialog}]
[division_end]
[division_start history]
[item modules/history/tklib_history.man history {Provides a history for Entry widgets}]
[division_end]
................................................................................
[division_end]
[division_start ipentry]
[item modules/ipentry/ipentry.man ipentry {An IP address entry widget}]
[division_end]
[division_start khim]
[item modules/khim/khim.man khim {Provides key bindings for entering international characters on a keyboard that does not support them}]
[division_end]
[division_start menubar]
[item modules/menubar/menubar.man menubar {Creates an instance of the  Class.}]
[division_end]
[division_start ntext]
[item modules/ntext/ntext.man          ntext          {Alternative Bindings for the Text Widget}]
[item modules/ntext/ntextBindings.man  ntextBindings  {Alternative Bindings for the Text Widget}]
[item modules/ntext/ntextIndent.man    ntextIndent    {ntext Indentation for the Text Widget}]
[item modules/ntext/ntextWordBreak.man ntextWordBreak {ntext Word Boundary Detection for the Text Widget}]
[division_end]
[division_start plotchart]
................................................................................
[item modules/tkpiechart/pieboxlabeler.man        pieBoxLabeler        {tkpiechart pie box style labeler class}]
[item modules/tkpiechart/pieperipherallabeler.man piePeripheralLabeler {tkpiechart pie peripheral style labeler class}]
[division_end]
[division_start tooltip]
[item modules/tooltip/tooltip.man tooltip {Tooltip management}]
[division_end]
[division_start widget]
[item modules/widget/widget.man           widget           {Megawidget bundle}]
[item modules/widget/widget_calendar.man  widget_calendar  {Calendar Megawidget}]
[item modules/widget/widget_dateentry.man widget_dateentry {Date Entry Megawidget}]
[item modules/widget/widget_toolbar.man   widget_toolbar   {Toolbar Megawidget}]
[division_end]
[division_start widgetl]
[item modules/widgetl/widget_listentry.man  widget_listentry  {widget::listentry widget}]
[item modules/widgetl/widget_listsimple.man widget_listsimple {widget::listsimple widget}]
[division_end]
[division_start widgetv]
[item modules/widgetv/widget_validator.man widget_validator {widget::validator behaviour}]
[division_end]
[division_end]
[division_end]
[toc_end]

Added support/devel/sak/doc/toc_apps.txt.













>
>
>
>
>
>
1
2
3
4
5
6
[toc_begin {Table Of Contents} {}]
[division_start Applications]
[item apps/bitmap-editor.man bitmap-editor {Editor for XBM images}]
[item apps/dia.man           dia           {Lightweight Diagram Processor}]
[division_end]
[toc_end]

Added support/devel/sak/doc/toc_cats.txt.



















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
[toc_begin {Table Of Contents} {}]
[division_start {By Categories}]
[division_start {Documentation tools}]
[item apps/dia.man                 dia     {Lightweight Diagram Processor}]
[item modules/diagrams/diagram.man diagram {Diagram drawing}]
[division_end]
[division_start {Image processing}]
[item apps/bitmap-editor.man bitmap-editor {Editor for XBM images}]
[division_end]
[division_start Unfiled]
[item modules/autoscroll/autoscroll.man           autoscroll                  {Provides for a scrollbar to automatically mapped and unmapped as needed}]
[item modules/canvas/canvas_drag.man              canvas::drag                {Manage the dragging of canvas items or item groups}]
[item modules/canvas/canvas_epoints.man           canvas::edit::points        {Editing a cloud of points on a canvas}]
[item modules/canvas/canvas_epolyline.man         canvas::edit::polyline      {Editing a polyline on a canvas}]
[item modules/canvas/canvas_equad.man             canvas::edit::quadrilateral {Editing a quadrilateral on a canvas}]
[item modules/canvas/canvas_highlight.man         canvas::highlight           {Manage the highlighting of canvas items or item groups}]
[item modules/canvas/canvas_mvg.man               canvas::mvg                 {Canvas to ImageMagick MVG vector format}]
[item modules/canvas/canvas_snap.man              canvas::snap                {Canvas snapshot to Tk photo image}]
[item modules/canvas/canvas_sqmap.man             canvas::sqmap               {Canvas with map background based on square tiles}]
[item modules/canvas/canvas_tags.man              canvas::tag                 {Easier management of the tags on canvas items or item groups}]
[item modules/canvas/canvas_trlines.man           canvas::track::lines        {Manage a group of rubber band lines}]
[item modules/canvas/canvas_zoom.man              canvas::zoom                {Zoom control for canvas::sqmap}]
[item modules/tkpiechart/canvaslabel.man          canvasLabel                 {tkpiechart canvas label class}]
[item modules/chatwidget/chatwidget.man           chatwidget                  {Provides a multi-paned view suitable for display of chat room or irc channel information}]
[item modules/controlwidget/controlwidget.man     controlwidget               {Collection of widgets for displaying and controlling numerical values}]
[item modules/crosshair/crosshair.man             crosshair                   {Crosshairs for Tk canvas}]
[item modules/ctext/ctext.man                     ctext                       {Ctext a text widget with highlighting support}]
[item modules/cursor/cursor.man                   cursor                      {Procedures to handle CURSOR data}]
[item modules/getstring/tk_getString.man          getstring                   {A string dialog}]
[item modules/history/tklib_history.man           history                     {Provides a history for Entry widgets}]
[item modules/ico/ico.man                         ico                         {Reading and writing windows icons}]
[item modules/khim/khim.man                       khim                        {Provides key bindings for entering international characters on a keyboard that does not support them}]
[item modules/menubar/menubar.man                 menubar                     {Creates an instance of the  Class.}]
[item modules/ntext/ntext.man                     ntext                       {Alternative Bindings for the Text Widget}]
[item modules/ntext/ntextBindings.man             ntextBindings               {Alternative Bindings for the Text Widget}]
[item modules/ntext/ntextIndent.man               ntextIndent                 {ntext Indentation for the Text Widget}]
[item modules/ntext/ntextWordBreak.man            ntextWordBreak              {ntext Word Boundary Detection for the Text Widget}]
[item modules/tkpiechart/pie.man                  pie                         {2D or 3D pie chart object in a canvas}]
[item modules/tkpiechart/pieboxlabeler.man        pieBoxLabeler               {tkpiechart pie box style labeler class}]
[item modules/tkpiechart/pieperipherallabeler.man piePeripheralLabeler        {tkpiechart pie peripheral style labeler class}]
[item modules/plotchart/plotchart.man             Plotchart                   {Simple plotting and charting package}]
[item modules/tooltip/tooltip.man                 tooltip                     {Tooltip management}]
[item modules/widgetl/widget_listentry.man        widget_listentry            {widget::listentry widget}]
[item modules/widgetl/widget_listsimple.man       widget_listsimple           {widget::listsimple widget}]
[item modules/widgetv/widget_validator.man        widget_validator            {widget::validator behaviour}]
[division_end]
[division_start Widget]
[item modules/datefield/datefield.man     datefield        {Tk datefield widget}]
[item modules/ipentry/ipentry.man         ipentry          {An IP address entry widget}]
[item modules/swaplist/swaplist.man       swaplist         {A dialog which allows a user to move options between two lists}]
[item modules/widget/widget.man           widget           {Megawidget bundle}]
[item modules/widget/widget_calendar.man  widget_calendar  {Calendar Megawidget}]
[item modules/widget/widget_dateentry.man widget_dateentry {Date Entry Megawidget}]
[item modules/widget/widget_toolbar.man   widget_toolbar   {Toolbar Megawidget}]
[division_end]
[division_end]
[toc_end]

Added support/devel/sak/doc/toc_mods.txt.



























































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
[toc_begin {Table Of Contents} {}]
[division_start Modules]
[division_start autoscroll]
[item modules/autoscroll/autoscroll.man autoscroll {Provides for a scrollbar to automatically mapped and unmapped as needed}]
[division_end]
[division_start canvas]
[item modules/canvas/canvas_drag.man      canvas::drag                {Manage the dragging of canvas items or item groups}]
[item modules/canvas/canvas_epoints.man   canvas::edit::points        {Editing a cloud of points on a canvas}]
[item modules/canvas/canvas_epolyline.man canvas::edit::polyline      {Editing a polyline on a canvas}]
[item modules/canvas/canvas_equad.man     canvas::edit::quadrilateral {Editing a quadrilateral on a canvas}]
[item modules/canvas/canvas_highlight.man canvas::highlight           {Manage the highlighting of canvas items or item groups}]
[item modules/canvas/canvas_mvg.man       canvas::mvg                 {Canvas to ImageMagick MVG vector format}]
[item modules/canvas/canvas_snap.man      canvas::snap                {Canvas snapshot to Tk photo image}]
[item modules/canvas/canvas_sqmap.man     canvas::sqmap               {Canvas with map background based on square tiles}]
[item modules/canvas/canvas_tags.man      canvas::tag                 {Easier management of the tags on canvas items or item groups}]
[item modules/canvas/canvas_trlines.man   canvas::track::lines        {Manage a group of rubber band lines}]
[item modules/canvas/canvas_zoom.man      canvas::zoom                {Zoom control for canvas::sqmap}]
[division_end]
[division_start chatwidget]
[item modules/chatwidget/chatwidget.man chatwidget {Provides a multi-paned view suitable for display of chat room or irc channel information}]
[division_end]
[division_start controlwidget]
[item modules/controlwidget/controlwidget.man controlwidget {Collection of widgets for displaying and controlling numerical values}]
[division_end]
[division_start crosshair]
[item modules/crosshair/crosshair.man crosshair {Crosshairs for Tk canvas}]
[division_end]
[division_start ctext]
[item modules/ctext/ctext.man ctext {Ctext a text widget with highlighting support}]
[division_end]
[division_start cursor]
[item modules/cursor/cursor.man cursor {Procedures to handle CURSOR data}]
[division_end]
[division_start datefield]
[item modules/datefield/datefield.man datefield {Tk datefield widget}]
[division_end]
[division_start diagrams]
[item modules/diagrams/diagram.man diagram {Diagram drawing}]
[division_end]
[division_start getstring]
[item modules/getstring/tk_getString.man getstring {A string dialog}]
[division_end]
[division_start history]
[item modules/history/tklib_history.man history {Provides a history for Entry widgets}]
[division_end]
[division_start ico]
[item modules/ico/ico.man ico {Reading and writing windows icons}]
[division_end]
[division_start ipentry]
[item modules/ipentry/ipentry.man ipentry {An IP address entry widget}]
[division_end]
[division_start khim]
[item modules/khim/khim.man khim {Provides key bindings for entering international characters on a keyboard that does not support them}]
[division_end]
[division_start menubar]
[item modules/menubar/menubar.man menubar {Creates an instance of the  Class.}]
[division_end]
[division_start ntext]
[item modules/ntext/ntext.man          ntext          {Alternative Bindings for the Text Widget}]
[item modules/ntext/ntextBindings.man  ntextBindings  {Alternative Bindings for the Text Widget}]
[item modules/ntext/ntextIndent.man    ntextIndent    {ntext Indentation for the Text Widget}]
[item modules/ntext/ntextWordBreak.man ntextWordBreak {ntext Word Boundary Detection for the Text Widget}]
[division_end]
[division_start plotchart]
[item modules/plotchart/plotchart.man Plotchart {Simple plotting and charting package}]
[division_end]
[division_start swaplist]
[item modules/swaplist/swaplist.man swaplist {A dialog which allows a user to move options between two lists}]
[division_end]
[division_start tkpiechart]
[item modules/tkpiechart/canvaslabel.man          canvasLabel          {tkpiechart canvas label class}]
[item modules/tkpiechart/pie.man                  pie                  {2D or 3D pie chart object in a canvas}]
[item modules/tkpiechart/pieboxlabeler.man        pieBoxLabeler        {tkpiechart pie box style labeler class}]
[item modules/tkpiechart/pieperipherallabeler.man piePeripheralLabeler {tkpiechart pie peripheral style labeler class}]
[division_end]
[division_start tooltip]
[item modules/tooltip/tooltip.man tooltip {Tooltip management}]
[division_end]
[division_start widget]
[item modules/widget/widget.man           widget           {Megawidget bundle}]
[item modules/widget/widget_calendar.man  widget_calendar  {Calendar Megawidget}]
[item modules/widget/widget_dateentry.man widget_dateentry {Date Entry Megawidget}]
[item modules/widget/widget_toolbar.man   widget_toolbar   {Toolbar Megawidget}]
[division_end]
[division_start widgetl]
[item modules/widgetl/widget_listentry.man  widget_listentry  {widget::listentry widget}]
[item modules/widgetl/widget_listsimple.man widget_listsimple {widget::listsimple widget}]
[division_end]
[division_start widgetv]
[item modules/widgetv/widget_validator.man widget_validator {widget::validator behaviour}]
[division_end]
[division_end]
[toc_end]

Added support/devel/sak/localdoc/cmd.tcl.











































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# -*- tcl -*-
# Implementation of 'localdoc'.

# Available variables
# * argv  - Cmdline arguments
# * base  - Location of sak.tcl = Top directory of Tcllib distribution
# * cbase - Location of all files relevant to this command.
# * sbase - Location of all files supporting the SAK.

# ###

package require sak::localdoc

if {[llength $argv]} {
    sak::localdoc::usage
}

sak::localdoc::run

##
# ###

Added support/devel/sak/localdoc/help.txt.

















>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8

    localdoc -- Generate documentation for website and installer.

    sak localdoc

        Convert all documentation into html and nroff, for use by the
        installer, and the website. For the latter the results of the
        conversion are stored in the repository itself.

Added support/devel/sak/localdoc/localdoc.tcl.







































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# -*- tcl -*-
# sak::doc - Documentation facilities

package require sak::util
package require sak::doc

namespace eval ::sak::localdoc {}

# ###
# API commands

## ### ### ### ######### ######### #########

proc ::sak::localdoc::usage {} {
    package require sak::help
    puts stdout \n[sak::help::on localdoc]
    exit 1
}

proc ::sak::localdoc::run {} {
    package require cmdline
    package require fileutil
    package require textutil::repeat
    package require doctools      1
    package require doctools::toc 1
    package require doctools::idx 1
    package require dtplite

    set nav ../../../../home

    puts "Reindex the documentation..."
    sak::doc::imake __dummy__
    sak::doc::index __dummy__

    puts "Removing old documentation..."
    file delete -force embedded
    file mkdir embedded/man
    file mkdir embedded/www

    puts "Generating manpages..."
    dtplite::do \
	[list \
	     -exclude {*/doctools/tests/*} \
	     -exclude {*/support/*} \
	     -ext n \
	     -o embedded/man \
	     nroff .]

    # Note: Might be better to run them separately.
    # Note @: Or we shuffle the results a bit more in the post processing stage.

    set map  {
	.man     .html
	modules/ tcllib/files/modules/
	apps/    tcllib/files/apps/
    }

    set toc  [string map $map [fileutil::cat support/devel/sak/doc/toc.txt]]
    set apps [string map $map [fileutil::cat support/devel/sak/doc/toc_apps.txt]]
    set mods [string map $map [fileutil::cat support/devel/sak/doc/toc_mods.txt]]
    set cats [string map $map [fileutil::cat support/devel/sak/doc/toc_cats.txt]]

    puts "Generating HTML... Pass 1, draft..."
    dtplite::do \
	[list \
	     -toc $toc \
	     -nav {Tcllib Home} $nav \
	     -post+toc Categories $cats \
	     -post+toc Modules $mods \
	     -post+toc Applications $apps \
	     -exclude {*/doctools/tests/*} \
	     -exclude {*/support/*} \
	     -merge \
	     -o embedded/www \
	     html .]

    puts "Generating HTML... Pass 2, resolving cross-references..."
    dtplite::do \
	[list \
	     -toc $toc \
	     -nav {Tcllib Home} $nav \
	     -post+toc Categories $cats \
	     -post+toc Modules $mods \
	     -post+toc Applications $apps \
	     -exclude {*/doctools/tests/*} \
	     -exclude {*/support/*} \
	     -merge \
	     -o embedded/www \
	     html .]

    return
}

# ### ### ### ######### ######### #########

package provide sak::localdoc 1.0

##
# ###

Added support/devel/sak/localdoc/pkgIndex.tcl.





>
>
1
2
if {![package vsatisfies [package provide Tcl] 8.2]} return
package ifneeded sak::localdoc 1.0 [list source [file join $dir localdoc.tcl]]

Added support/devel/sak/localdoc/topic.txt.





>
>
1
2
localdoc	Generate html & nroff documentation for display
				from the website, and the installer.

Changes to support/devel/sak/old/help.txt.

18
19
20
21
22
23
24

25
26
27
28
29
30
31
32
33
34
35
36
..
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
        lmodules         - See above, however one module per line
        imodules         - Return list of modules known to the installer.
        critcl-modules   - Return a list of modules with critcl enhancements.

        packages         - Return indexed packages in the bundle, plus versions,
                           one package per line. Extracted from the
                           package indices found in the modules.

        provided         - Return list and versions of provided packages
                           (in contrast to indexed).
        vcompare pkglist - Compare package list of previous 'packages'
                           call with current packages. Marks all new
                           and unchanged packages for higher attention.

        critcl ?module?  - Build a critcl module [default is @@].

        bench ?opt? ?module..?
                         - Run benchmark scripts (*.bench).

                Options: -throwerrors 0|1  Propagate errors if set.
................................................................................
        gentip55 - Generate a TIP55-style DESCRIPTION.txt file.
        yml      - Generate a YAML description file.

        release name sf-user-id
                 - Marks the current state of all files as a new
                   release. This updates all ChangeLog's, and
                   regenerates the contents of PACKAGES

        rstatus  - Determines the status of the code base with regard
                   to the last release.

        approve pkg - Suppress named package in rstatus output.
                      I.e. mark the packages which are done while going
                      over all of them for a release.








>


<
<
<







 







<
<
<
<
<
<
<
<
18
19
20
21
22
23
24
25
26
27



28
29
30
31
32
33
34
..
96
97
98
99
100
101
102








        lmodules         - See above, however one module per line
        imodules         - Return list of modules known to the installer.
        critcl-modules   - Return a list of modules with critcl enhancements.

        packages         - Return indexed packages in the bundle, plus versions,
                           one package per line. Extracted from the
                           package indices found in the modules.

        provided         - Return list and versions of provided packages
                           (in contrast to indexed).




        critcl ?module?  - Build a critcl module [default is @@].

        bench ?opt? ?module..?
                         - Run benchmark scripts (*.bench).

                Options: -throwerrors 0|1  Propagate errors if set.
................................................................................
        gentip55 - Generate a TIP55-style DESCRIPTION.txt file.
        yml      - Generate a YAML description file.

        release name sf-user-id
                 - Marks the current state of all files as a new
                   release. This updates all ChangeLog's, and
                   regenerates the contents of PACKAGES








Added support/devel/sak/readme/cmd.tcl.



















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# -*- tcl -*-
# Implementation of 'readme'.

# Available variables
# * argv  - Cmdline arguments
# * base  - Location of sak.tcl = Top directory of Tcllib distribution
# * cbase - Location of all files relevant to this command.
# * sbase - Location of all files supporting the SAK.

package require sak::util
package require sak::readme

set raw  0
set log  0
set stem {}
set tclv {}

if {[llength $argv]} {
    sak::readme::usage
}

sak::readme::run

##
# ###

Added support/devel/sak/readme/help.txt.





























>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

    readme -- Generate a readme listing changes to modules and packages.

    sak readme

    	This command compares the current state of the modules and
    	packages and against information from the last release
    	(support/releases/PACKAGES) and generates a README.txt listing
    	the relevant changes (new modules/packages, package version
    	changes, unchanged packages).

	The generated README is written to stdout.

	This is a support command for the release manager.

Added support/devel/sak/readme/pkgIndex.tcl.





>
>
1
2
if {![package vsatisfies [package provide Tcl] 8.2]} return
package ifneeded sak::readme 1.0 [list source [file join $dir readme.tcl]]

Added support/devel/sak/readme/readme.tcl.













































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
# -*- tcl -*-
# (C) 2009 Andreas Kupries <andreas_kupries@users.sourceforge.net>
##
# ###

package require sak::color

namespace eval ::sak::readme {
    namespace import ::sak::color::*
}

# ###

proc ::sak::readme::usage {} {
    package require sak::help
    puts stdout \n[sak::help::on readme]
    exit 1
}

proc ::sak::readme::run {} {
    global package_name package_version

    getpackage struct::set      struct/sets.tcl
    getpackage struct::matrix   struct/matrix.tcl
    getpackage textutil::adjust textutil/adjust.tcl

    set issues {}

    # package -> list(version)
    set old_version    [loadoldv [location_PACKAGES]]
    array set releasep [loadpkglist [location_PACKAGES]]
    array set currentp [ipackages]

    # Determine which packages are potentially changed, from the set
    # of modules touched since the last release, as per their
    # changelog ... (future: md5sum of files in a module, and
    # file/package association).

    set modifiedm [modified-modules]
    array set changed {}
    foreach p [array names currentp] {
	foreach {vlist module} $currentp($p) break
	set currentp($p) $vlist
	set changed($p) [struct::set contains $modifiedm $module]
    }

    LoadNotes

    # Containers for results
    struct::matrix NEW ; NEW add columns 4 ; # module, package, version, notes
    struct::matrix CHG ; CHG add columns 5 ; # module, package, old/new version, notes
    struct::matrix ICH ; ICH add columns 5 ; # module, package, old/new version, notes
    struct::matrix CNT ; CNT add columns 5;
    set UCH {}

    NEW add row {Module Package {New Version} Comments}

    CHG add row [list {} {} "$package_name $old_version" "$package_name $package_version" {}]
    CHG add row {Module Package {Old Version} {New Version} Comments}

    ICH add row [list {} {} "$package_name $old_version" "$package_name $package_version" {}]
    ICH add row {Module Package {Old Version} {New Version} Comments}

    set newp {} ; set chgp {} ; set ichp {}
    set newm {} ; set chgm {} ; set ichm {} ; set uchm {}
    set nm 0
    set np 0

    # Process all packages in all modules ...
    foreach m [lsort -dict [modules]] {
	puts stderr ...$m
	incr nm

	foreach name [lsort -dict [Provided $m]] {
	    #puts stderr ......$p
	    incr np

	    # Define list of versions, if undefined so far.
	    if {![info exists currentp($name)]} {
		set currentp($name) {}
	    }

	    # Detect and process new packages.

	    if {![info exists releasep($name)]} {
		# New package.
		foreach v $currentp($name) {
		    puts stderr .........NEW
		    NEW add row [list $m $name $v [Note $m $name]]
		    lappend newm $m
		    lappend newp $name
		}
		continue
	    }

	    # The package is not new, but possibly changed. And even
	    # if the version has not changed it may have been, this is
	    # indicated by changed(), which is based on the ChangeLog.

	    set vequal [struct::set equal $releasep($name) $currentp($name)]
	    set note   [Note $m $name]

	    if {$vequal && ($note ne {})} {
		if {$note eq "---"} {
		    # The note declares the package as unchanged.
		    puts stderr .........UNCHANGED/1
		    lappend uchm $m
		    lappend UCH $name
		} else {
		    # Note for package without version changes => must be invisible
		    puts stderr .........INVISIBLE-CHANGE
		    Enter $m $name $note ICH
		    lappend ichm $m
		    lappend ichp $name
		}
		continue
	    }

	    if {!$changed($name) && $vequal} {
		# Versions are unchanged, changelog also indicates no
		# change. No particular attention here.
		
		puts stderr .........UNCHANGED/2
		lappend uchm $m
		lappend UCH $name
		continue
	    }

	    if {$changed($name) && !$vequal} {
		# Both changelog and version number indicate a
		# change. Small alert, have to classify the order of
		# changes. But not if there is a note, this is assumed
		# to be the classification.

		if {$note eq {}} {
		    set note "\t=== Classify changes."
		    lappend issues [list $m $name "Classify changes"]
		}
		Enter $m $name $note

		lappend chgm $m
		lappend chgp $name
		continue
	    }

	    #     Changed according to ChangeLog, Version is not. ALERT.
	    # or: Versions changed, but according to changelog nothing
	    #     in the code. ALERT.

	    # Suppress the alert if we have a note, and dispatch per
	    # the note's contents (some tags are special, instructions
	    # to us here).

	    if {($note eq {})} {
		if {$changed($name)} {
		    # Changed according to ChangeLog, Version is not. ALERT.
		    set note "\t<<< MISMATCH. Version ==, ChangeLog ++"
		} else {
		    set note "\t<<< MISMATCH. ChangeLog ==, Version ++"
		}

		lappend issues [list $m $name [string range $note 5 end]]
	    }

	    Enter $m $name $note
	    lappend chgm $m
	    lappend chgp $name
	}
    }

    # .... process the matrices and others results, make them presentable ...

    set newp [llength [lsort -uniq $newp]]
    set newm [llength [lsort -uniq $newm]]
    if {$newp} {
	CNT add row [list $newp {new packages} in $newm modules]
    }

    set chgp [llength [lsort -uniq $chgp]]
    set chgm [llength [lsort -uniq $chgm]]
    if {$chgp} {
	CNT add row [list $chgp {changed packages} in $chgm modules]
    }

    set ichp [llength [lsort -uniq $ichp]]
    set ichm [llength [lsort -uniq $ichm]]
    if {$ichp} {
	CNT add row [list $ichp {internally changed packages} in $ichm modules]
    }

    set uchp [llength [lsort -uniq $UCH]]
    set uchm [llength [lsort -uniq $uchm]]
    if {$uchp} {
	CNT add row [list $uchp {unchanged packages} in $uchm modules]
    }

    CNT add row [list $np {packages, total} in $nm {modules, total}]

    Header Overview
    puts ""
    if {[CNT rows] > 0} {
	puts [Indent "    " [Detrail [CNT format 2string]]]
    }
    puts ""

    if {[NEW rows] > 1} {
	Header "New in $package_name $package_version"
	puts ""
	Sep NEW - [Clean NEW 1 0]
	puts [Indent "    " [Detrail [NEW format 2string]]]
	puts ""
    }

    if {[CHG rows] > 2} {
	Header "Changes from $package_name $old_version to $package_version"
	puts ""
	Sep CHG - [Clean CHG 2 0]
	puts [Indent "    " [Detrail [CHG format 2string]]]
	puts ""
    }

    if {[ICH rows] > 2} {
	Header "Invisible changes (documentation, testsuites)"
	puts ""
	Sep ICH - [Clean ICH 2 0]
	puts [Indent "    " [Detrail [ICH format 2string]]]
	puts ""
    }

    if {[llength $UCH]} {
	Header Unchanged
	puts ""
	puts [Indent "    " [textutil::adjust::adjust \
				 [join [lsort -dict $UCH] {, }] -length 64]]
    }

    variable legend
    puts $legend

    if {![llength $issues]} return

    puts stderr [=red "Issues found ([llength $issues])"]
    puts stderr "  Please run \"./sak.tcl review\" to resolve,"
    puts stderr "  then run \"./sak.tcl readme\" again."
    puts stderr Details:

    struct::matrix ISS ; ISS add columns 3
    foreach issue $issues {
	foreach {m p w} $issue break
	set m "  $m"
	ISS add row [list $m $p $w]
    }

    puts stderr [ISS format 2string]


    puts stderr [=red "Issues found ([llength $issues])"]
    puts stderr "  Please run \"./sak.tcl review\" to resolve,"
    puts stderr "  then run \"./sak.tcl readme\" again."
    return
}

proc ::sak::readme::Header {s {sep =}} {
    puts $s
    puts [string repeat $sep [string length $s]]
    return
}

proc ::sak::readme::Enter {m name note {mat CHG}} {
    upvar 1 currentp currentp releasep releasep

    # To handle multiple versions we match the found versions up by
    # major version. We assume that we have only one version per major
    # version. This allows us to detect changes within each major
    # version, new major versions, etc.

    array set om {} ; foreach v $releasep($name) {set om([lindex [split $v .] 0]) $v}
    array set cm {} ; foreach v $currentp($name) {set cm([lindex [split $v .] 0]) $v}

    set all [lsort -dict [struct::set union [array names om] [array names cm]]]

    sakdebug {
	puts @@@@@@@@@@@@@@@@
	parray om
	parray cm
	puts all\ $all
	puts @@@@@@@@@@@@@@@@
    }

    foreach v $all {
	if {[info exists om($v)]} {set ov $om($v)} else {set ov ""}
	if {[info exists cm($v)]} {set cv $cm($v)} else {set cv ""}
	$mat add row [list $m $name $ov $cv $note]
    }
    return
}

proc ::sak::readme::Clean {m start col} {
    set n [$m rows]
    set marks [list $start]
    set last {}
    set lastm -1
    set sq 0

    for {set i $start} {$i < $n} {incr i} {
	set str [$m get cell $col $i]

	if {$str eq $last} {
	    set sq 1
	    $m set cell $col $i {}
	    if {$lastm >= 0} {
		#puts stderr "@ $i / <$last> / <$str> / ++ $lastm"
		lappend marks $lastm
		set lastm -1
	    } else {
		#puts stderr "@ $i / <$last> / <$str> /"
	    }
	} else {
	    set last $str
	    set lastm $i
	    if {$sq} {
		#puts stderr "@ $i / <$last> / <$str> / ++ $i /saved"
		lappend marks $i
		set sq 0
	    } else {
		#puts stderr "@ $i / <$last> / <$str> / saved"
	    }
	}
    }
    return [lsort -uniq -increasing -integer $marks]
}

proc ::sak::readme::Sep {m char marks} {

    #puts stderr "$m = $marks"

    set n [$m columns]
    set sep {}
    for {set i 0} {$i < $n} {incr i} {
	lappend sep [string repeat $char [expr {2+[$m columnwidth $i]}]]
    }

    foreach k [linsert [lsort -decreasing -integer -uniq $marks] 0 end] {
	$m insert row $k $sep
    }
    return
}

proc ::sak::readme::Indent {pfx text} {
    return ${pfx}[join [split $text \n] \n$pfx]
}

proc ::sak::readme::Detrail {text} {
    set res {}
    foreach line [split $text \n] {
	lappend res [string trimright $line]
    }
    return [join $res \n]
}

proc ::sak::readme::Note {m p} {
    # Look for a note, and present to caller, if any.
    variable notes
    #parray notes
    set k [list $m $p]
    #puts <$k>
    if {[info exists notes($k)]} {
	return [join $notes($k) { }]
    }
    return ""
}

proc ::sak::readme::Provided {m} {
    set result {}
    foreach {p ___} [ppackages $m] {
	lappend result $p
    }
    return $result
}

proc ::sak::readme::LoadNotes {} {
    global distribution
    variable  notes
    array set notes {}

    catch {
	set f [file join $distribution .NOTE]
	set f [open $f r]
	while {![eof $f]} {
	    if {[gets $f line] < 0} continue
	    set line [string trim $line]
	    if {$line == {}} continue
	    foreach {k t} $line break
	    set notes($k) $t
	}
	close $f
    } msg
    return
}

proc ::sak::readme::loadoldv {fname} {
    set f [open $fname r]
    foreach line [split [read $f] \n] {
	set line [string trim $line]
	if {[string match @* $line]} {
	    foreach {__ __ v} $line break
	    close $f
	    return $v
	}
    }
    close $f
    return -code error {Version not found}
}

##
# ###

namespace eval ::sak::readme {
    variable legend {
Legend  Change  Details Comments
        ------  ------- ---------
        Major   API:    ** incompatible ** API changes.

        Minor   EF :    Extended functionality, API.
                I  :    Major rewrite, but no API change

        Patch   B  :    Bug fixes.
                EX :    New examples.
                P  :    Performance enhancement.

        None    T  :    Testsuite changes.
                D  :    Documentation updates.
    }

    variable review {}
}

package provide sak::readme 1.0

Added support/devel/sak/readme/topic.txt.





>
>
1
2
readme		Generate a README listing the changes to modules and packages
				since the last release.

Changes to support/devel/sak/registry/registry.test.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# -*- tcl -*-
# registry.test:  tests for the registry structure.
#
# Copyright (c) 2006 by Andreas Kupries <a.kupries@westend.com>
# All rights reserved.
#
# RCS: @(#) $Id: registry.test,v 1.1 2009/02/07 05:18:22 andreas_kupries Exp $

# -------------------------------------------------------------------------

source [file join \
	[file dirname [file dirname [file join [pwd] [info script]]]] \
	devtools testutilities.tcl]







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
# -*- tcl -*-
# registry.test:  tests for the registry structure.
#
# Copyright (c) 2006 by Andreas Kupries <a.kupries@westend.com>
# All rights reserved.
#
# RCS: @(#) $Id: registry.test,v 1.1 2006/09/06 06:07:09 andreas_kupries Exp $

# -------------------------------------------------------------------------

source [file join \
	[file dirname [file dirname [file join [pwd] [info script]]]] \
	devtools testutilities.tcl]

Added support/devel/sak/review/cmd.tcl.



















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# -*- tcl -*-
# Implementation of 'review'.

# Available variables
# * argv  - Cmdline arguments
# * base  - Location of sak.tcl = Top directory of Tcllib distribution
# * cbase - Location of all files relevant to this command.
# * sbase - Location of all files supporting the SAK.

package require sak::util
package require sak::review

set raw  0
set log  0
set stem {}
set tclv {}

if {[llength $argv]} {
    sak::review::usage
}

sak::review::run

##
# ###

Added support/devel/sak/review/help.txt.





















>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10

    review -- Interactively review changed modules and packages

    sak review

    	This command scans the system for changes and then enters
	a sub-shell where the caller can interactively review and
	tag these changes.

	This is a support command for the release manager.

Added support/devel/sak/review/pkgIndex.tcl.





>
>
1
2
if {![package vsatisfies [package provide Tcl] 8.2]} return
package ifneeded sak::review 1.0 [list source [file join $dir review.tcl]]

Added support/devel/sak/review/review.tcl.



























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
# -*- tcl -*-
# # ## ### ##### ######## ############# ##################### 
# (C) 2013 Andreas Kupries <andreas_kupries@users.sourceforge.net>
##
# ###

package require linenoise
package require sak::color

getpackage fileutil                 fileutil/fileutil.tcl
getpackage doctools::changelog      doctools/changelog.tcl
getpackage struct::set              struct/sets.tcl
getpackage term::ansi::send         term/ansi/send.tcl

namespace eval ::sak::review {
    namespace import ::sak::color::*
}

# ###

proc ::sak::review::usage {} {
    package require sak::help
    puts stdout \n[sak::help::on review]
    exit 1
}

proc ::sak::review::run {} {
    Scan ; Review
    return
}

# # ## ### ##### ######## ############# ##################### 
## Phase I. Determine which modules require a review.
## A derivative of the code in ::sak::readme.

proc ::sak::review::Scan {} {
    global distribution
    variable review

    Banner "Scan for modules and packages to review..."

    # Determine which packages are potentially changed and therefore
    # in need of review, from the set of modules touched since the
    # last release, as per their changelog ... (future: md5sum of
    # files in a module, and file/package association).

    array set review {}

    # package -> list(version)
    set old_version    [loadoldv [location_PACKAGES]]
    array set releasep [loadpkglist [location_PACKAGES]]
    array set currentp [ipackages]

    set modifiedm [modified-modules]
    array set changed {}
    foreach p [array names currentp] {
	foreach {vlist module} $currentp($p) break
	set currentp($p) $vlist
	set changed($p) [struct::set contains $modifiedm $module]
    }

    LoadNotes

    set np 0
    # Process all packages in all modules ...
    foreach m [lsort -dict [modules]] {
	Next ; Progress " $m"
	foreach name [lsort -dict [Provided $m]] {
	    #Next ; Progress "... $m/$name"
	    # Define list of versions, if undefined so far.
	    if {![info exists currentp($name)]} {
		set currentp($name) {}
	    }

	    # Detect new packages. Ignore them.

	    if {![info exists releasep($name)]} {
		#Progress " /new"
		continue
	    }

	    # The package is not new, but possibly changed. And even
	    # if the version has not changed it may have been, this is
	    # indicated by changed(), which is based on the ChangeLog.

	    set vequal [struct::set equal $releasep($name) $currentp($name)]
	    set note   [Note $m $name]

	    # Detect packages whose versions are unchanged, and whose
	    # changelog also indicates no change. Ignore these too.

	    if {!$changed($name) && $vequal} {
		#Progress " /not changed"
		continue
	    }

	    # Now look for packages where both changelog and version
	    # number indicate a change. These we have to review.

	    if {$changed($name) && !$vequal} {
		lappend review($m) [list $name classify $note]
		#Progress " [=cya classify]"
		incr np
		continue
	    }

	    # What remains are packages which are changed according to
	    # their changelog, but their version disagrees. Or the
	    # reverse. These need a big review to see who is right.
	    # We may have to bump their version information, not just
	    # classify changes. Of course, in modules with multiple
	    # packages it is quite possible to be unchanged and the
	    # changelog refers to the siblings.

	    lappend review($m) [list $name mismatch $note]
	    #Progress " [=cya mismatch]"
	    incr np
	}
    }

    Close

    # Postprocessing phase, pull in all relevant changelogs.

    foreach m [array names review] {
	set clog [fileutil::cat $distribution/modules/$m/ChangeLog]
	set entries {}
	foreach e [doctools::changelog::scan $clog] {
	    if {[string match -nocase "*Released and tagged*" $e]} break
	    lappend entries $e
	}
	set entries [doctools::changelog::flatten $entries]

	set review($m) [list $review($m) [join $entries \n\n]]
    }

    set review() $np
    return
}

# see also readme
proc ::sak::review::Provided {m} {
    set result {}
    foreach {p ___} [ppackages $m] {
	lappend result $p
    }
    return $result
}

# see also readme
proc ::sak::review::loadoldv {fname} {
    set f [open $fname r]
    foreach line [split [read $f] \n] {
	set line [string trim $line]
	if {[string match @* $line]} {
	    foreach {__ __ v} $line break
	    close $f
	    return $v
	}
    }
    close $f
    return -code error {Version not found}
}

proc ::sak::review::Progress {text} {
    puts -nonewline stdout $text
    flush stdout
    return
}

proc ::sak::review::Next {} {
    # erase to end of line, then move back to start of line.
    term::ansi::send::eeol
    puts -nonewline stdout \r
    flush stdout
    return
}

proc ::sak::review::Close {} {
    puts stdout ""
    return
}

proc ::sak::review::Clear {} {
    term::ansi::send::clear
    return
}

proc ::sak::review::Banner {text} {
    Clear
    puts stdout "\n <<SAK Tcllib: $text>>\n"
    return
}

proc ::sak::review::Note {m p} {
    # Look for a note, and present to caller, if any.
    variable notes
    #parray notes
    set k [list $m $p]
    #puts <$k>
    if {[info exists notes($k)]} {
	return $notes($k)
    }
    return ""
}

proc ::sak::review::SaveNote {at t} {
    global distribution
    set    f [open [file join $distribution .NOTE] a]
    puts  $f [list $at $t]
    close $f
    return
}

proc ::sak::review::LoadNotes {} {
    global distribution
    variable  notes
    array set notes {}

    catch {
	set f [file join $distribution .NOTE]
	set f [open $f r]
	while {![eof $f]} {
	    if {[gets $f line] < 0} continue
	    set line [string trim $line]
	    if {$line == {}} continue
	    foreach {k t} $line break
	    set notes($k) $t
	}
	close $f
    }

    return
}

# # ## ### ##### ######## ############# ##################### 
## Phase II. Interactively review the changes packages.

# Namespace variables
#
# review      : array, database of all modules, keyed by name
# nm          : number of modules
# modules     : list of module names, keys to --> review
# current     : index in -> modules, current module
# np          : number of packages in current module
# packages    : list of packages in current module
# currentp    : index in --> packages
# im          : 1+current  | indices for display
# ip          : 1+currentp |
# end         : array : module (name) --> index of last package
# stop        : repl exit flag
# map         : array : text -> module/package index
# commands    : proper commands
# allcommands : commands + namesof(map)
# 

proc ::sak::review::Review {} {
    variable review   ;# table of everything to review
    variable nm       ;# number of modules
    variable modules  ;# list of module names, sorted
    variable stop 0   ;# repl exit flag
    variable end      ;# last module/package index.

    variable navcommands
    variable allcommands ;# list of all commands, sorted
    variable commands    ;# list of proper commands, sorted
    variable map         ;# map from package names to module/package indices.
    variable prefix

    Banner "Packages to review: $review()"
    unset   review()

    set nm [array size review]
    if {!$nm} return

    set modules [lsort -dict [array names review]]

    # Map package name --> module/package index.
    set im 0
    foreach m $modules {
	foreach {packages clog} $review($m) break
	set ip 0
	foreach p $packages {
	    set end($im) $ip
	    set end($m) $ip
	    set end() [list $im $ip]
	    foreach {name what tags} $p break
	    lappend map(@$name)    [list $im $ip]
	    lappend map(@$name/$m) [list $im $ip]
	    incr ip
	}
	incr im
    }

    # Drop amibigous mappings, and fill the list of commands.
    foreach k [array names map] {
	# Skip already dropped keys (extended forms).
	if {![info exists map($k)]} continue
	if {[llength $map($k)] < 2} {
	    set map($k) [lindex $map($k) 0]
	    # Drop extended form, not needed.
	    array unset map $k/*
	} else {
	    unset map($k)
	}
    }

    # Map module name --> module/package index
    # If not preempted by package mapping.
    set im -1
    foreach m $modules {
	incr im
	if {[info exists map(@$m)]} continue
	set map(@$m) [list $im 0]
    }

    # Map command prefix -> full command.

    array set prefix {}
    foreach c [info commands ::sak::review::C_*] {
	set c [string range [namespace tail $c] 2 end]
	lappend commands    $c
	lappend allcommands $c
	set buf {}
	foreach ch [split $c {}] {
	    append buf $ch
	    lappend prefix($buf) $c
	}
    }

    foreach c [array names map] {
	lappend allcommands $c
	set buf {}
	foreach ch [split $c {}] {
	    append buf $ch
	    lappend prefix($buf) $c
	}
    }

    set commands    [lsort -dict $commands]
    set allcommands [lsort -dict $allcommands]
    set navcommands [lsort -dict [array names map]]

    # Enter the REPL
    Goto {0 0} 1
    linenoise::cmdloop \
	-history   1 \
	-exit      ::sak::review::Exit \
	-continued ::sak::review::Continued \
	-prompt1   ::sak::review::Prompt \
	-complete  ::sak::review::Complete \
	-dispatch  ::sak::review::Dispatch
    return
}

# # ## ### ##### ######## ############# ##################### 

proc ::sak::review::RefreshDisplay {} {
    variable m
    variable im
    variable nm
    variable clog
    variable what

    Banner "\[$im/$nm\] [=cya [string totitle $what]] [=green $m]"
    puts "| [join [split $clog \n] \n|]\n"
    return
}

proc ::sak::review::Exit {} {
    variable stop
    return  $stop
}

proc ::sak::review::Continued {buffer} {
    return 0
}

proc ::sak::review::Prompt {} {
    variable ip
    variable np
    variable name
    variable tags

    return "\[$ip/$np\] $name ($tags): "
}

proc ::sak::review::Complete {line} {
    variable allcommands
    if {$line eq {}} {
	return $allcommands
    } elseif {[llength $line] == 1} {
	set r {}
	foreach c $allcommands {
	    if {![string match ${line}* $c]} continue
	    lappend r $c
	}
	return $r
    } else {
	return {}
    }
}

proc ::sak::review::Dispatch {line} {
    variable prefix
    variable map

    if {$line == ""} { set line next }

    set cmd [lindex $line 0]

    if {![info exists prefix($cmd)]} {
	return -code error "Unknown command $cmd, use help or ? to list them"
    } elseif {[llength $prefix($cmd)] > 1} {
	return -code error "Ambigous prefix \"$cmd\", expected [join $prefix($cmd) {, }]"
    }

    # Map prefix to actual command
    set line [lreplace $line 0 0 $prefix($cmd)]

    # Run command.
    if {[info exists map($cmd)]} {
	Goto $map($cmd)
	return
    }
    eval C_$line
}

proc ::sak::review::Goto {loc {skip 0}} {
    variable review
    variable modules
    variable packages
    variable clog
    variable current
    variable currentp
    variable nm
    variable np
    variable at
    variable tags
    variable what
    variable name

    variable m
    variable p
    variable ip
    variable im

    foreach {current currentp} $loc break

    puts "Goto ($current/$currentp)"

    set m [lindex $modules $current]
    foreach {packages clog} $review($m) break

    set np [llength $packages]
    set p  [lindex  $packages $currentp]

    foreach {name what tags} $p break
    set at [list $m $name]

    set im [expr {1+$current}]
    set ip [expr {1+$currentp}]

    if {$skip && ([llength $tags] ||
		  ($tags == "---"))} {
	C_next
    } else {
	RefreshDisplay
    }
    return
}

proc ::sak::review::C_exit {} { variable stop 1 }
proc ::sak::review::C_quit {} { variable stop 1 }

proc ::sak::review::C_? {} { C_help }
proc ::sak::review::C_help {} {
    variable commands
    return [join $commands {, }]
}

proc ::sak::review::C_@? {} { C_@help }
proc ::sak::review::C_@help {} {
    variable navcommands
    return [join $navcommands {, }]
}

proc ::sak::review::C_@start {} { Goto {0 0} }
proc ::sak::review::C_@0     {} { Goto {0 0} }
proc ::sak::review::C_@end   {} { variable end ; Goto $end() }

proc ::sak::review::C_next {} {
    variable tags
    variable current
    variable currentp

    C_step 0

    set stop @$current/$currentp
    while {[llength $tags] ||
	   ($tags == "---")} {
	C_step 0
	if {"@$current/$currentp" == "$stop"} break
    }

    RefreshDisplay
    return
}

proc ::sak::review::C_step {{refresh 1}} {
    variable nm
    variable np
    variable current
    variable currentp
    variable packages

    incr currentp
    if {$currentp >= $np} {
	# skip to next module, first package
	incr current
	if {$current >= $nm} {
	    # skip to first module
	    set current 0
	}
	set currentp 0

    }
    Goto [list $current $currentp]
    return
}

proc ::sak::review::C_prev {} {
    variable end
    variable nm
    variable np
    variable current
    variable currentp
    variable packages

    incr currentp -1
    if {$currentp < 0} {
	# skip to previous module, last package
	incr current -1
	if {$current < 0} {
	    # skip to back to last module
	    set current [expr {$nm - 1}]
	}
	set currentp $end($current)
    }
    Goto [list $current $currentp]
    return
}

# Commands to add/remove tags, clear set, replace set

proc ::sak::review::C_feature {} { +T EF }
proc ::sak::review::C_test    {} { +T T }
proc ::sak::review::C_doc     {} { +T D }
proc ::sak::review::C_bug     {} { +T B }
proc ::sak::review::C_perf    {} { +T P }
proc ::sak::review::C_example {} { +T EX }
proc ::sak::review::C_api     {} { +T API }
proc ::sak::review::C_impl    {} { +T I }

proc ::sak::review::C_-feature {} { -T EF }
proc ::sak::review::C_-test    {} { -T T }
proc ::sak::review::C_-doc     {} { -T D }
proc ::sak::review::C_-bug     {} { -T B }
proc ::sak::review::C_-perf    {} { -T P }
proc ::sak::review::C_-example {} { -T EX }
proc ::sak::review::C_-api     {} { -T API }
proc ::sak::review::C_-impl    {} { -T I }

proc ::sak::review::C_---   {} { =T --- }
proc ::sak::review::C_clear {} { =T --- }
#proc ::sak::review::C_cn {} { C_clear ; C_next }

proc ::sak::review::+T {tag} {
    variable tags
    if {[lsearch -exact $tags $tag] >= 0} {
	RefreshDisplay
	return
    }
    =T [linsert $tags end $tag]
    return
}

proc ::sak::review::-T {tag} {
    variable tags
    set pos [lsearch -exact $tags $tag]
    if {$pos < 0} {
	RefreshDisplay
	return
    }
    =T [lreplace $tags $pos $pos]
    return
}

proc ::sak::review::=T {newtags} {
    variable review
    variable clog
    variable packages
    variable currentp
    variable p
    variable m
    variable at
    variable name
    variable what
    variable tags

    if {([llength $newtags] > 1) &&
	([set pos [lsearch -exact $newtags ---]] >= 0)} {
	# Drop --- if there are other tags.
	set newtags [lreplace $newtags $pos $pos]
    }

    set tags       [lsort -dict $newtags]
    set p          [list $name $what $newtags]
    set packages   [lreplace $packages $currentp $currentp $p]
    set review($m) [list $packages $clog]

    SaveNote $at $tags
    RefreshDisplay
    return
}

proc ::sak::review::?T {} {
    variable tags
    return $tags
}

##
# ###

namespace eval ::sak::review {}

package provide sak::review 1.0

Added support/devel/sak/review/topic.txt.



>
1
review		Interactively review changes since the last release.

Changes to support/devel/sak/test/run.tcl.

7
8
9
10
11
12
13

14
15
16
17
18
19
20
..
79
80
81
82
83
84
85
86
87
88
89
90



91
92
93
94
95
96
97
...
149
150
151
152
153
154
155





















156
157
158
159
160
161
162
...
243
244
245
246
247
248
249

250
251
252
253
254
255
256
257
258
259







260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275

276
277
278
279
280
281
282
...
354
355
356
357
358
359
360









































361
362
363
364
365
366
367
...
473
474
475
476
477
478
479


480
481
482
483
484
485
486
...
544
545
546
547
548
549
550
551
552
553
554
555
556
557

558



559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582





















583
584
585
586
587
588
589
590















591
592
593
594
595
596
597
...
630
631
632
633
634
635
636

637








638
639
640
641
642
643
644
...
707
708
709
710
711
712
713


714
715
716
717
718
719
720
package require  sak::registry
package require  sak::animate
package require  sak::color
# TODO: Rework this package to use the sak::feedback package

getpackage textutil::repeat textutil/repeat.tcl
getpackage fileutil         fileutil/fileutil.tcl


namespace eval ::sak::test::run {
    namespace import ::textutil::repeat::blank
    namespace import ::sak::color::*
}

# ###
................................................................................
	catch {set shells [sak::test::shell::list]}
    }
    if {![llength $shells]} {
	set shells [list [info nameofexecutable]]
    }

    if {$alog} {
	variable logext [open $config(stem).log      w]
	variable logsum [open $config(stem).summary  w]
	variable logfai [open $config(stem).failures w]
	variable logski [open $config(stem).skipped  w]
	variable lognon [open $config(stem).none     w]



    } else {
	variable logext stdout
    }

    # Preprocessing of module names and shell versions to allows
    # better formatting of the progress output, i.e. vertically
    # aligned columns
................................................................................
	puts $logext "Failed  [format %6d $fail] of [format %6d $total]"
    }
    if {$err} {
	puts $logext "#Errors [mag][format %6d $err][rst]"
    } else {
	puts $logext "#Errors [format %6d $err]"
    }






















    exit [expr {($err || $fail) ? 1 : 0}]
    return
}

# ###

................................................................................
    variable araw
    variable alog
    variable logext
    while {1} {
	if {[eof  $pipe]} break
	if {[gets $pipe line] < 0} break
	if {$alog || $araw} {puts $logext $line ; flush $logext}

	set line [string trim $line]
	if {[string equal $line ""]} continue
	Host;	Platform
	Cwd;	Shell
	Tcl;	Match||Skip||Sourced
	Start;	End
	Module;	Testsuite
	NoTestsuite
	Support;Testing;Other
	Summary








	TestStart
	TestSkipped
	TestPassed
	TestFailed
	CaptureFailureSync
	CaptureFailureCollectBody
	CaptureFailureCollectActual
	CaptureFailureCollectExpected
	CaptureStackStart
	CaptureStack

	SetupError
	Aborted
	AbortCause


	# Unknown lines are printed
	if {!$araw} {puts !$line}
    }
    return $pipe
}

# ###
................................................................................
    return -code continue
}

proc ::sak::test::run::End {} {
    upvar 1 line line
    if {![regexp "^@@ End (.*)$" $line -> end]} return
    variable xshell









































    #sak::registry::local set $xshell End $end
    return -code continue
}

proc ::sak::test::run::Module {} {
    upvar 1 line line ; variable xmodule
    if {![regexp "^@@ Module (.*)$" $line -> xmodule]} return
................................................................................
proc ::sak::test::run::TestStart {} {
    upvar 1 line line
    if {![string match {---- * start} $line]} return
    set testname [string range $line 5 end-6]
    = "---- $testname"
    variable xfile
    variable xtest [linsert $xfile end $testname]


    return -code continue
}

proc ::sak::test::run::TestSkipped {} {
    upvar 1 line line
    if {![string match {++++ * SKIPPED:*} $line]} return
    regexp {^[^ ]* (.*)SKIPPED:.*$} $line -> testname
................................................................................
    set xcollect 2
    return -code continue
}

proc ::sak::test::run::CaptureFailureCollectBody {} {
    variable xcollect
    if {$xcollect != 2} return
    upvar 1 line line
    variable xbody
    if {![string match {---- Result was*} $line]} {
	variable xbody
	append   xbody $line \n
    } else {
	set xcollect 3

    }



    return -code continue
}

proc ::sak::test::run::CaptureFailureCollectActual {} {
    variable xcollect
    if {$xcollect != 3} return
    upvar 1 line line
    if {![string match {---- Result should*} $line]} {
	variable xactual
	append   xactual $line \n
    } else {
	set xcollect 4
    }
    return -code continue
}

proc ::sak::test::run::CaptureFailureCollectExpected {} {
    variable xcollect
    if {$xcollect != 4} return
    upvar 1 line line
    if {![string match {==== *} $line]} {
	variable xexpected
	append   xexpected $line \n
    } else {





















	set xcollect 0
	#sak::registry::local set $xtest Body     $xbody
	#sak::registry::local set $xtest Actual   $xactual
	#sak::registry::local set $xtest Expected $xexpected
	set xtest {}
    }
    return -code continue
}
















proc ::sak::test::run::Aborted {} {
    upvar 1 line line
    if {![string match {Aborting the tests found *} $line]} return
    variable xfile
    variable xstatus
    # Ignore aborted status if we already have it, or some other error
................................................................................
    upvar 1 line line
    variable xstack
    if {![string match {@-*} $line]} {
	append xstack [string range $line 2 end] \n
    } else {
	set xstackcollect 0
	variable xfile

	#sak::registry::local set $xfile Stacktrace $xstack








    }
    return -code continue
}

proc ::sak::test::run::SetupError {} {
    upvar 1 line line
    if {![string match {SETUP Error*} $line]} return
................................................................................
    variable xhost     {}
    variable xplatform {}
    variable xcwd      {}
    variable xshell    {}
    variable xmodule   {}
    variable xfile     {}
    variable xtest     {}



    variable xstatus ok

    # Animation prefix of test processing, and flag controlling the
    # nature of logging (raw vs animation).

    variable aprefix   {}







>







 







|
|
|
|
|
>
>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>




|
|




>
>
>
>
>
>
>




|
<
<
<
<
<
<





>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>
>







 







|

|
|
|
|
|
>

>
>
>






|












|




>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>

>
>
>
>
>
>
>
>







 







>
>







7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
..
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
...
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
...
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297






298
299
300
301
302
303
304
305
306
307
308
309
310
...
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
...
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
...
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
...
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
...
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
package require  sak::registry
package require  sak::animate
package require  sak::color
# TODO: Rework this package to use the sak::feedback package

getpackage textutil::repeat textutil/repeat.tcl
getpackage fileutil         fileutil/fileutil.tcl
getpackage struct::matrix   struct/matrix.tcl

namespace eval ::sak::test::run {
    namespace import ::textutil::repeat::blank
    namespace import ::sak::color::*
}

# ###
................................................................................
	catch {set shells [sak::test::shell::list]}
    }
    if {![llength $shells]} {
	set shells [list [info nameofexecutable]]
    }

    if {$alog} {
	variable logext [open $config(stem).log         w]
	variable logsum [open $config(stem).summary     w]
	variable logfai [open $config(stem).failures    w]
	variable logski [open $config(stem).skipped     w]
	variable lognon [open $config(stem).none        w]
	variable logerd [open $config(stem).errdetails  w]
	variable logfad [open $config(stem).faildetails w]
	variable logtim [open $config(stem).timings     w]
    } else {
	variable logext stdout
    }

    # Preprocessing of module names and shell versions to allows
    # better formatting of the progress output, i.e. vertically
    # aligned columns
................................................................................
	puts $logext "Failed  [format %6d $fail] of [format %6d $total]"
    }
    if {$err} {
	puts $logext "#Errors [mag][format %6d $err][rst]"
    } else {
	puts $logext "#Errors [format %6d $err]"
    }

    if {$alog} {
	variable xtimes
	array set times $xtimes

	struct::matrix M
	M add columns 6
	foreach k [lsort -dict [array names times]] {
	    #foreach {shell module testfile} $k break
	    foreach {testnum delta score} $times($k) break
	    M add row [linsert $k end $testnum $delta $score]
	}
	M sort rows -decreasing 5

	M insert row 0 {Shell Module Testsuite Tests Seconds uSec/Test}
	M insert row 1 {===== ====== ========= ===== ======= =========}
	M add    row   {===== ====== ========= ===== ======= =========}

	puts $logsum \nTimings...
	puts $logsum [M format 2string]
    }

    exit [expr {($err || $fail) ? 1 : 0}]
    return
}

# ###

................................................................................
    variable araw
    variable alog
    variable logext
    while {1} {
	if {[eof  $pipe]} break
	if {[gets $pipe line] < 0} break
	if {$alog || $araw} {puts $logext $line ; flush $logext}
	set rline $line
	set line [string trim $line]
	if {[string equal $line ""]} continue
	Host;	Platform
	Cwd;	Shell
	Tcl
	Start;	End ; StartFile ; EndFile
	Module;	Testsuite
	NoTestsuite
	Support;Testing;Other
	Summary
	CaptureFailureSync            ; # xcollect 1 => 2
	CaptureFailureCollectBody     ; # xcollect 2 => 3 => 5
	CaptureFailureCollectActual   ; # xcollect 3 => 4
	CaptureFailureCollectExpected ; # xcollect 4 => 0
	CaptureFailureCollectError    ; # xcollect 5 => 0
	CaptureStackStart
	CaptureStack

	TestStart
	TestSkipped
	TestPassed
	TestFailed                    ; # xcollect => 1







	SetupError
	Aborted
	AbortCause

	Match||Skip||Sourced
	# Unknown lines are printed
	if {!$araw} {puts !$line}
    }
    return $pipe
}

# ###
................................................................................
    return -code continue
}

proc ::sak::test::run::End {} {
    upvar 1 line line
    if {![regexp "^@@ End (.*)$" $line -> end]} return
    variable xshell
    #sak::registry::local set $xshell End $end
    return -code continue
}

proc ::sak::test::run::StartFile {} {
    upvar 1 line line
    if {![regexp "^@@ StartFile (.*)$" $line -> start]} return
    variable xstartfile $start
    variable xtestnum 0
    #sak::registry::local set $xshell Start $start
    return -code continue
}

proc ::sak::test::run::EndFile {} {
    upvar 1 line line
    if {![regexp "^@@ EndFile (.*)$" $line -> end]} return
    variable xfile
    variable xstartfile
    variable xtimes
    variable xtestnum

    set k [lreplace $xfile 0 3]
    set k [lreplace $k 2 2 [file tail [lindex $k 2]]]
    set delta [expr {$end - $xstartfile}]

    if {$xtestnum == 0} {
	set score $delta
    } else {
	# average number of microseconds per test.
	set score [expr {int(($delta/double($xtestnum))*1000000)}]
	#set score [expr {$delta/double($xtestnum)}]
    }

    lappend xtimes $k [list $xtestnum $delta $score]

    variable alog
    if {$alog} {
	variable logtim
	puts $logtim [linsert [linsert $k end $xtestnum $delta $score] 0 TIME]
    }

    #sak::registry::local set $xshell End $end
    return -code continue
}

proc ::sak::test::run::Module {} {
    upvar 1 line line ; variable xmodule
    if {![regexp "^@@ Module (.*)$" $line -> xmodule]} return
................................................................................
proc ::sak::test::run::TestStart {} {
    upvar 1 line line
    if {![string match {---- * start} $line]} return
    set testname [string range $line 5 end-6]
    = "---- $testname"
    variable xfile
    variable xtest [linsert $xfile end $testname]
    variable xtestnum
    incr     xtestnum
    return -code continue
}

proc ::sak::test::run::TestSkipped {} {
    upvar 1 line line
    if {![string match {++++ * SKIPPED:*} $line]} return
    regexp {^[^ ]* (.*)SKIPPED:.*$} $line -> testname
................................................................................
    set xcollect 2
    return -code continue
}

proc ::sak::test::run::CaptureFailureCollectBody {} {
    variable xcollect
    if {$xcollect != 2} return
    upvar 1 rline line
    variable xbody
    if {[string match {---- Result was*} $line]} {
	set xcollect 3
	return -code continue
    } elseif {[string match {---- Test generated error*} $line]} {
	set xcollect 5
	return -code continue
    }

    variable xbody
    append   xbody $line \n
    return -code continue
}

proc ::sak::test::run::CaptureFailureCollectActual {} {
    variable xcollect
    if {$xcollect != 3} return
    upvar 1 rline line
    if {![string match {---- Result should*} $line]} {
	variable xactual
	append   xactual $line \n
    } else {
	set xcollect 4
    }
    return -code continue
}

proc ::sak::test::run::CaptureFailureCollectExpected {} {
    variable xcollect
    if {$xcollect != 4} return
    upvar 1 rline line
    if {![string match {==== *} $line]} {
	variable xexpected
	append   xexpected $line \n
    } else {
	variable alog
	if {$alog} {
	    variable logfad
	    variable xtest
	    variable xbody
	    variable xactual
	    variable xexpected

	    puts  $logfad "==== [lrange $xtest end-1 end] FAILED ========="
	    puts  $logfad "==== Contents of test case:\n"
	    puts  $logfad $xbody

	    puts  $logfad "---- Result was:"
	    puts  $logfad [string range $xactual 0 end-1]

	    puts  $logfad "---- Result should have been:"
	    puts  $logfad [string range $xexpected 0 end-1]

	    puts  $logfad "==== [lrange $xtest end-1 end] ====\n\n"
	    flush $logfad
	}
	set xcollect 0
	#sak::registry::local set $xtest Body     $xbody
	#sak::registry::local set $xtest Actual   $xactual
	#sak::registry::local set $xtest Expected $xexpected
	set xtest {}
    }
    return -code continue
}

proc ::sak::test::run::CaptureFailureCollectError {} {
    variable xcollect
    if {$xcollect != 5} return
    upvar 1 rline line
    variable xbody
    if {[string match {---- errorCode*} $line]} {
	set xcollect 4
	return -code continue
    }

    variable xactual
    append   xactual $line \n
    return -code continue
}

proc ::sak::test::run::Aborted {} {
    upvar 1 line line
    if {![string match {Aborting the tests found *} $line]} return
    variable xfile
    variable xstatus
    # Ignore aborted status if we already have it, or some other error
................................................................................
    upvar 1 line line
    variable xstack
    if {![string match {@-*} $line]} {
	append xstack [string range $line 2 end] \n
    } else {
	set xstackcollect 0
	variable xfile
	variable alog
	#sak::registry::local set $xfile Stacktrace $xstack
	if {$alog} {
	    variable logerd
	    puts  $logerd "[lindex $xfile end] StackTrace"
	    puts  $logerd "========================================"
	    puts  $logerd $xstack
	    puts  $logerd "========================================\n\n"
	    flush $logerd
	}
    }
    return -code continue
}

proc ::sak::test::run::SetupError {} {
    upvar 1 line line
    if {![string match {SETUP Error*} $line]} return
................................................................................
    variable xhost     {}
    variable xplatform {}
    variable xcwd      {}
    variable xshell    {}
    variable xmodule   {}
    variable xfile     {}
    variable xtest     {}
    variable xstartfile {}
    variable xtimes     {}

    variable xstatus ok

    # Animation prefix of test processing, and flag controlling the
    # nature of logging (raw vs animation).

    variable aprefix   {}

Changes to support/devel/sak/util/anim.tcl.

1
2
3
4
5
6








7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# -*- tcl -*-
# (C) 2006 Andreas Kupries <andreas_kupries@users.sourceforge.net>
##
# ###

namespace eval ::sak::animate {}









# ###

proc ::sak::animate::init {} {
    variable prefix
    variable n      0
    variable max    [llength $prefix]
    variable extend 0
}

proc ::sak::animate::next {string} {
    variable prefix
    variable n
    variable max
    Extend string

    puts -nonewline stdout \r\[[lindex $prefix $n]\]\ $string
    flush           stdout

    incr n ; if {$n >= $max} {set n 0}
    return
}

proc ::sak::animate::last {string} {
    variable clear
    Extend string

    puts  stdout \r\[$clear\]\ $string
    flush stdout
    return
}

# ###

proc ::sak::animate::Extend {sv} {
    variable extend
    upvar 1 $sv string

    set l [string length $string]
    while {[string length $string] < $extend} {append string " "}
    if {$l > $extend} {set extend $l}
    return
}

# ###

namespace eval ::sak::animate {
    namespace export init next last

    variable  prefix {
	{*   }	{*   }	{*   }	{*   }	{*   }

|



|
>
>
>
>
>
>
>
>







<






|

|








<






<
<
<
<
<
<
<
<
<
<
<
<







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

39
40
41
42
43
44












45
46
47
48
49
50
51
# -*- tcl -*-
# (C) 2006-2013 Andreas Kupries <andreas_kupries@users.sourceforge.net>
##
# ###

namespace eval ::sak::animate {
    # EL (Erase Line)
    #    Sequence: ESC [ n K
    # ** Effect: if n is 0 or missing, clear from cursor to end of line
    #    Effect: if n is 1, clear from beginning of line to cursor
    #    Effect: if n is 2, clear entire line

    variable eeol \033\[K
}

# ###

proc ::sak::animate::init {} {
    variable prefix
    variable n      0
    variable max    [llength $prefix]

}

proc ::sak::animate::next {string} {
    variable prefix
    variable n
    variable max
    variable eeol

    puts -nonewline stdout \r\[[lindex $prefix $n]\]\ $string$eeol
    flush           stdout

    incr n ; if {$n >= $max} {set n 0}
    return
}

proc ::sak::animate::last {string} {
    variable clear


    puts  stdout \r\[$clear\]\ $string
    flush stdout
    return
}













# ###

namespace eval ::sak::animate {
    namespace export init next last

    variable  prefix {
	{*   }	{*   }	{*   }	{*   }	{*   }

Changes to support/devel/sak/util/color.tcl.

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
..
31
32
33
34
35
36
37

38
39
40
41
42
43
44

# ###

if {$::tcl_platform(platform) == "windows"} {
    # No ansi colorization on windows
    namespace eval ::sak::color {
	variable n
	foreach n {cya yel whi mag red rst} {
	    proc $n {} {return ""}
	    namespace export $n

	    proc =$n {s} {return $s}
	    namespace export =$n
	}
	unset n
................................................................................
	variable n
	foreach {s n} {
	    sda_bgcyan    cya
	    sda_bgyellow  yel
	    sda_bgwhite   whi
	    sda_bgmagenta mag
	    sda_bgred     red

	    sda_reset     rst
	} {
	    rename $s $n
	    namespace export $n

	    proc =$n {s} "return \[$n\]\$s\[rst\]"
	    namespace export =$n







|







 







>







7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
..
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

# ###

if {$::tcl_platform(platform) == "windows"} {
    # No ansi colorization on windows
    namespace eval ::sak::color {
	variable n
	foreach n {cya yel whi mag red green rst} {
	    proc $n {} {return ""}
	    namespace export $n

	    proc =$n {s} {return $s}
	    namespace export =$n
	}
	unset n
................................................................................
	variable n
	foreach {s n} {
	    sda_bgcyan    cya
	    sda_bgyellow  yel
	    sda_bgwhite   whi
	    sda_bgmagenta mag
	    sda_bgred     red
	    sda_bggreen   green
	    sda_reset     rst
	} {
	    rename $s $n
	    namespace export $n

	    proc =$n {s} "return \[$n\]\$s\[rst\]"
	    namespace export =$n

Changes to support/devel/sak/validate/cmd.tcl.

9
10
11
12
13
14
15

16
17
18
19
20
21
22
..
34
35
36
37
38
39
40




41
42
43
44
45
46
47
..
55
56
57
58
59
60
61
62
63
64
65

package require sak::util
package require sak::validate

set raw  0
set log  0
set stem {}


if {[llength $argv]} {
    # First argument may be a command.
    set cmd [lindex $argv 0]
    if {![catch {
	package require sak::validate::$cmd
    } msg]} {
................................................................................
		set argv [lrange $argv 1 end]
	    }
	    -l - --log {
		set log 1
		set stem [lindex $argv 1]
		set argv [lrange $argv 2 end]
	    }




	    default {
		sak::validate::usage Unknown option "\"$opt\""
	    }
	}
    }
} else {
    set cmd all
................................................................................
array set mode {
    00 short
    01 log
    10 verbose
    11 _impossible_
}

sak::validate::$cmd $argv $mode($raw$log) $stem

##
# ###







>







 







>
>
>
>







 







|



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
..
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
..
60
61
62
63
64
65
66
67
68
69
70

package require sak::util
package require sak::validate

set raw  0
set log  0
set stem {}
set tclv {}

if {[llength $argv]} {
    # First argument may be a command.
    set cmd [lindex $argv 0]
    if {![catch {
	package require sak::validate::$cmd
    } msg]} {
................................................................................
		set argv [lrange $argv 1 end]
	    }
	    -l - --log {
		set log 1
		set stem [lindex $argv 1]
		set argv [lrange $argv 2 end]
	    }
	    -t - --tcl {
		set tclv [lindex $argv 1]
		set argv [lrange $argv 2 end]
	    }
	    default {
		sak::validate::usage Unknown option "\"$opt\""
	    }
	}
    }
} else {
    set cmd all
................................................................................
array set mode {
    00 short
    01 log
    10 verbose
    11 _impossible_
}

sak::validate::$cmd $argv $mode($raw$log) $stem $tclv

##
# ###

Changes to support/devel/sak/validate/manpages.tcl.

21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    namespace import ::sak::feedback::log
    namespace import ::sak::feedback::summary
    rename summary sum
}

# ###

proc ::sak::validate::manpages {modules mode stem} {
    manpages::run $modules $mode $stem
    manpages::summary
    return
}

proc ::sak::validate::manpages::run {modules mode stem} {
    sak::feedback::init $mode $stem
    sak::feedback::first log  "\[ Documentation \] ==============================================="
    sak::feedback::first unc  "\[ Documentation \] ==============================================="
    sak::feedback::first fail "\[ Documentation \] ==============================================="
    sak::feedback::first warn "\[ Documentation \] ==============================================="
    sak::feedback::first miss "\[ Documentation \] ==============================================="
    sak::feedback::first none "\[ Documentation \] ==============================================="







|
|




|







21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    namespace import ::sak::feedback::log
    namespace import ::sak::feedback::summary
    rename summary sum
}

# ###

proc ::sak::validate::manpages {modules mode stem tclv} {
    manpages::run $modules $mode $stem $tclv
    manpages::summary
    return
}

proc ::sak::validate::manpages::run {modules mode stem tclv} {
    sak::feedback::init $mode $stem
    sak::feedback::first log  "\[ Documentation \] ==============================================="
    sak::feedback::first unc  "\[ Documentation \] ==============================================="
    sak::feedback::first fail "\[ Documentation \] ==============================================="
    sak::feedback::first warn "\[ Documentation \] ==============================================="
    sak::feedback::first miss "\[ Documentation \] ==============================================="
    sak::feedback::first none "\[ Documentation \] ==============================================="

Changes to support/devel/sak/validate/syntax.tcl.

21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
..
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
...
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
...
190
191
192
193
194
195
196

197

198
199
200
201
202
203
204
...
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317


318
319
320
321
322
323
324
325
326
327
328
329
330
331
    namespace import ::sak::feedback::log
    namespace import ::sak::feedback::summary
    rename summary sum
}

# ###

proc ::sak::validate::syntax {modules mode stem} {
    syntax::run $modules $mode $stem
    syntax::summary
    return
}

proc ::sak::validate::syntax::run {modules mode stem} {
    sak::feedback::init $mode $stem
    sak::feedback::first log  "\[ Syntax \] ======================================================"
    sak::feedback::first unc  "\[ Syntax \] ======================================================"
    sak::feedback::first fail "\[ Syntax \] ======================================================"
    sak::feedback::first warn "\[ Syntax \] ======================================================"
    sak::feedback::first miss "\[ Syntax \] ======================================================"
    sak::feedback::first none "\[ Syntax \] ======================================================"
................................................................................

	# Per package: Have they pcx files claiming them? After that,
	# are pcx files left over (i.e. without a package)?

	ProcessAllPCX     $m
	ProcessPackages   $m
	ProcessUnclaimed
	ProcessTclSources $m
	ModuleSummary
    }

    Shutdown
    return
}

................................................................................
    if {![array size claims]} return
    foreach p [lsort -dict [array names claims]] {
	foreach fx $claims($p) { +u $fx }
    }
    return
}

proc ::sak::validate::syntax::ProcessTclSources {m} {
    variable tclchecker
    if {![llength $tclchecker]} return

    foreach t [modtclfiles $m] {
	# Ignore TeX files.
	if {[string equal [file extension $t] .tex]} continue

	=file $t
	set cmd [Command $t]
	if {[catch {Close [Process [open |$cmd r+]]} msg]} {
	    if {[string match {*child process exited abnormally*} $msg]} continue
	    +e $msg
	}
    }
    return
}
................................................................................
	if {[string equal $c set]}       continue
	if {[string equal $c if]}        continue
	if {[string equal $c rename]}    continue
	if {[string equal $c namespace]} continue
	interp eval $ip [list ::rename $c {}]
    }


    interp eval $ip [list ::namespace delete ::tcl]

    interp eval $ip [list ::rename namespace {}]
    interp eval $ip [list ::rename rename    {}]

    foreach m {
	pcx::register unknown
    } {
	interp alias $ip $m {} ::sak::validate::syntax::PCX/[string map {:: _} $m] $ip
................................................................................

    # We assume that codetype contains a default * pattern as the last
    # entry, capturing all unknown codes.
    +e INTERNAL
    exit
}

proc ::sak::validate::syntax::Command {t} {
    # Unix. Construction of the pipe to run the tclchecker against a
    # single tcl file.

    set     cmd [Driver]
    lappend cmd $t

    #lappend cmd >@ stdout 2>@ stderr
    #puts <<$cmd>>

    return $cmd
}

proc ::sak::validate::syntax::Close {pipe} {
    close $pipe
    return
}

proc ::sak::validate::syntax::Driver {} {
    variable tclchecker
    set cmd $tclchecker



    # Make all syntax definition files we may have available to the
    # checker for higher accuracy of its output.
    foreach m [modules] { lappend cmd -pcx [At $m] }

    # Memoize
    proc ::sak::validate::syntax::Driver {} [list return $cmd]
    return $cmd
}

###

proc ::sak::validate::syntax::=file {f} {
    variable current [file tail $f]







|
|




|







 







|







 







|








|







 







>
|
>







 







|



|













|


>
>






|







21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
..
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
...
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
...
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
...
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
    namespace import ::sak::feedback::log
    namespace import ::sak::feedback::summary
    rename summary sum
}

# ###

proc ::sak::validate::syntax {modules mode stem tclv} {
    syntax::run $modules $mode $stem $tclv
    syntax::summary
    return
}

proc ::sak::validate::syntax::run {modules mode stem tclv} {
    sak::feedback::init $mode $stem
    sak::feedback::first log  "\[ Syntax \] ======================================================"
    sak::feedback::first unc  "\[ Syntax \] ======================================================"
    sak::feedback::first fail "\[ Syntax \] ======================================================"
    sak::feedback::first warn "\[ Syntax \] ======================================================"
    sak::feedback::first miss "\[ Syntax \] ======================================================"
    sak::feedback::first none "\[ Syntax \] ======================================================"
................................................................................

	# Per package: Have they pcx files claiming them? After that,
	# are pcx files left over (i.e. without a package)?

	ProcessAllPCX     $m
	ProcessPackages   $m
	ProcessUnclaimed
	ProcessTclSources $m $tclv
	ModuleSummary
    }

    Shutdown
    return
}

................................................................................
    if {![array size claims]} return
    foreach p [lsort -dict [array names claims]] {
	foreach fx $claims($p) { +u $fx }
    }
    return
}

proc ::sak::validate::syntax::ProcessTclSources {m tclv} {
    variable tclchecker
    if {![llength $tclchecker]} return

    foreach t [modtclfiles $m] {
	# Ignore TeX files.
	if {[string equal [file extension $t] .tex]} continue

	=file $t
	set cmd [Command $t $tclv]
	if {[catch {Close [Process [open |$cmd r+]]} msg]} {
	    if {[string match {*child process exited abnormally*} $msg]} continue
	    +e $msg
	}
    }
    return
}
................................................................................
	if {[string equal $c set]}       continue
	if {[string equal $c if]}        continue
	if {[string equal $c rename]}    continue
	if {[string equal $c namespace]} continue
	interp eval $ip [list ::rename $c {}]
    }

    if {![package vsatisfies [package present Tcl] 8.6]} {
	interp eval $ip [list ::namespace delete ::tcl]
    }
    interp eval $ip [list ::rename namespace {}]
    interp eval $ip [list ::rename rename    {}]

    foreach m {
	pcx::register unknown
    } {
	interp alias $ip $m {} ::sak::validate::syntax::PCX/[string map {:: _} $m] $ip
................................................................................

    # We assume that codetype contains a default * pattern as the last
    # entry, capturing all unknown codes.
    +e INTERNAL
    exit
}

proc ::sak::validate::syntax::Command {t tclv} {
    # Unix. Construction of the pipe to run the tclchecker against a
    # single tcl file.

    set     cmd [Driver $tclv]
    lappend cmd $t

    #lappend cmd >@ stdout 2>@ stderr
    #puts <<$cmd>>

    return $cmd
}

proc ::sak::validate::syntax::Close {pipe} {
    close $pipe
    return
}

proc ::sak::validate::syntax::Driver {tclv} {
    variable tclchecker
    set cmd $tclchecker

    if {$tclv ne {}} { lappend cmd -use Tcl-$tclv }

    # Make all syntax definition files we may have available to the
    # checker for higher accuracy of its output.
    foreach m [modules] { lappend cmd -pcx [At $m] }

    # Memoize
    proc ::sak::validate::syntax::Driver {tclv} [list return $cmd]
    return $cmd
}

###

proc ::sak::validate::syntax::=file {f} {
    variable current [file tail $f]

Changes to support/devel/sak/validate/testsuites.tcl.

21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
...
135
136
137
138
139
140
141

142

143
144
145
146
147
148
149
    namespace import ::sak::feedback::log
    namespace import ::sak::feedback::summary
    rename summary sum
}

# ###

proc ::sak::validate::testsuites {modules mode stem} {
    testsuites::run $modules $mode $stem
    testsuites::summary
    return
}

proc ::sak::validate::testsuites::run {modules mode stem} {
    sak::feedback::init $mode $stem
    sak::feedback::first log  "\[ Testsuites \] =================================================="
    sak::feedback::first unc  "\[ Testsuites \] =================================================="
    sak::feedback::first fail "\[ Testsuites \] =================================================="
    sak::feedback::first miss "\[ Testsuites \] =================================================="
    sak::feedback::first none "\[ Testsuites \] =================================================="

................................................................................
	if {[string equal $c set]}       continue
	if {[string equal $c if]}        continue
	if {[string equal $c rename]}    continue
	if {[string equal $c namespace]} continue
	interp eval $ip [list ::rename $c {}]
    }


    interp eval $ip [list ::namespace delete ::tcl]

    interp eval $ip [list ::rename namespace {}]
    interp eval $ip [list ::rename rename    {}]

    foreach m {
	testing unknown useLocal useLocalKeep useAccel
    } {
	interp alias $ip $m {} ::sak::validate::testsuites::Process/$m $ip







|
|




|







 







>
|
>







21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
...
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
    namespace import ::sak::feedback::log
    namespace import ::sak::feedback::summary
    rename summary sum
}

# ###

proc ::sak::validate::testsuites {modules mode stem tclv} {
    testsuites::run $modules $mode $stem $tclv
    testsuites::summary
    return
}

proc ::sak::validate::testsuites::run {modules mode stem tclv} {
    sak::feedback::init $mode $stem
    sak::feedback::first log  "\[ Testsuites \] =================================================="
    sak::feedback::first unc  "\[ Testsuites \] =================================================="
    sak::feedback::first fail "\[ Testsuites \] =================================================="
    sak::feedback::first miss "\[ Testsuites \] =================================================="
    sak::feedback::first none "\[ Testsuites \] =================================================="

................................................................................
	if {[string equal $c set]}       continue
	if {[string equal $c if]}        continue
	if {[string equal $c rename]}    continue
	if {[string equal $c namespace]} continue
	interp eval $ip [list ::rename $c {}]
    }

    if {![package vsatisfies [package present Tcl] 8.6]} {
	interp eval $ip [list ::namespace delete ::tcl]
    }
    interp eval $ip [list ::rename namespace {}]
    interp eval $ip [list ::rename rename    {}]

    foreach m {
	testing unknown useLocal useLocalKeep useAccel
    } {
	interp alias $ip $m {} ::sak::validate::testsuites::Process/$m $ip

Changes to support/devel/sak/validate/validate.tcl.

9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

proc ::sak::validate::usage {args} {
    package require sak::help
    puts stdout [join $args { }]\n[sak::help::on validate]
    exit 1
}

proc ::sak::validate::all {modules mode stem} {
    package require sak::validate::versions
    package require sak::validate::manpages
    package require sak::validate::testsuites
    package require sak::validate::syntax

    sak::validate::versions::run   $modules $mode $stem
    sak::validate::manpages::run   $modules $mode $stem
    sak::validate::testsuites::run $modules $mode $stem
    sak::validate::syntax::run     $modules $mode $stem

    sak::validate::versions::summary
    sak::validate::manpages::summary
    sak::validate::testsuites::summary
    sak::validate::syntax::summary
    return
}

##
# ###

package provide sak::validate 1.0







|





|
|
|
|












9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

proc ::sak::validate::usage {args} {
    package require sak::help
    puts stdout [join $args { }]\n[sak::help::on validate]
    exit 1
}

proc ::sak::validate::all {modules mode stem tclv} {
    package require sak::validate::versions
    package require sak::validate::manpages
    package require sak::validate::testsuites
    package require sak::validate::syntax

    sak::validate::versions::run   $modules $mode $stem $tclv
    sak::validate::manpages::run   $modules $mode $stem $tclv
    sak::validate::testsuites::run $modules $mode $stem $tclv
    sak::validate::syntax::run     $modules $mode $stem $tclv

    sak::validate::versions::summary
    sak::validate::manpages::summary
    sak::validate::testsuites::summary
    sak::validate::syntax::summary
    return
}

##
# ###

package provide sak::validate 1.0

Changes to support/devel/sak/validate/versions.tcl.

23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
...
117
118
119
120
121
122
123

124
125
126
127
128
129
130
    namespace import ::sak::feedback::log
    namespace import ::sak::feedback::summary
    rename summary sum
}

# ###

proc ::sak::validate::versions {modules mode stem} {
    versions::run $modules $mode $stem
    versions::summary
    return
}

proc ::sak::validate::versions::run {modules mode stem} {
    sak::feedback::init $mode $stem
    sak::feedback::first log  "\[ Versions \] ===================================================="
    sak::feedback::first warn "\[ Versions \] ===================================================="
    sak::feedback::first fail "\[ Versions \] ===================================================="

    # Preprocessing of module names to allow better formatting of the
    # progress output, i.e. vertically aligned columns
................................................................................
    !
    =| {Packages mapped ...}
    return
}

proc ::sak::validate::versions::Provided {m} {
    variable pkg

    return [lsort -dict $pkg(mp,$m)]
}

proc ::sak::validate::versions::Indexed {m} {
    variable pkg
    if {![info exists pkg(mi,$m)]} { return {} }
    return [lsort -dict $pkg(mi,$m)]







|
|




|







 







>







23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
...
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
    namespace import ::sak::feedback::log
    namespace import ::sak::feedback::summary
    rename summary sum
}

# ###

proc ::sak::validate::versions {modules mode stem tclv} {
    versions::run $modules $mode $stem $tclv
    versions::summary
    return
}

proc ::sak::validate::versions::run {modules mode stem tclv} {
    sak::feedback::init $mode $stem
    sak::feedback::first log  "\[ Versions \] ===================================================="
    sak::feedback::first warn "\[ Versions \] ===================================================="
    sak::feedback::first fail "\[ Versions \] ===================================================="

    # Preprocessing of module names to allow better formatting of the
    # progress output, i.e. vertically aligned columns
................................................................................
    !
    =| {Packages mapped ...}
    return
}

proc ::sak::validate::versions::Provided {m} {
    variable pkg
    if {![info exists pkg(mp,$m)]} { return {} }
    return [lsort -dict $pkg(mp,$m)]
}

proc ::sak::validate::versions::Indexed {m} {
    variable pkg
    if {![info exists pkg(mi,$m)]} { return {} }
    return [lsort -dict $pkg(mi,$m)]

Changes to support/installation/actions.tcl.

105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
    _tcl $module $libdir
    xcopyfile [file join $distribution modules $module tclIndex] \
	    [file join $libdir $module]
    return
}


proc _manfile {f format ext docdir} {
    global distribution argv argc argv0 config

    set out [file join $docdir [file rootname [file tail $f]]].$ext

    log "Generating $out"
    if {$config(dry)} return

    ::doctools::new dt -format $format -file $f

    file mkdir [file dirname $out]

    set data [dt format [get_input $f]]
    switch -exact -- $format {
	nroff {
	    set data [string map \
		    [list \
		    {.so man.macros} \
		    $config(man.macros)] \
		    $data]
	}
	html {}
    }
    write_out $out $data

    set warnings [dt warnings]
    if {[llength $warnings] > 0} {
	log [join $warnings \n]
    }

    dt destroy
    return
}

proc _man {module format ext docdir} {
    global distribution argv argc argv0 config

    # In Tklib we do not have access to a bundled doctools. We have to
    # use whatever is installed. Best we can do is to use whatever is
    # installed and pray that it supports everything needed.

    package require doctools
    ::doctools::new dt -format $format -module $module

    foreach f [glob -nocomplain [file join $distribution modules $module *.man]] {

	set out [file join $docdir [file rootname [file tail $f]]].$ext

	log "Generating $out"
	if {$config(dry)} {continue}

	dt configure -file $f
	file mkdir [file dirname $out]

	set data [dt format [get_input $f]]
	switch -exact -- $format {
	    nroff {
		set data [string map \
			[list \
			{.so man.macros} \
			$config(man.macros)] \
			$data]
	    }
	    html {}
	}
	write_out $out $data

	set warnings [dt warnings]
	if {[llength $warnings] > 0} {
	    log [join $warnings \n]
	}
    }
    dt destroy
    return
}

proc _exa {module exadir} {
    global distribution
    xcopy \
	    [file join $distribution examples $module] \
	    [file join $exadir $module] \
	    1
    return
}







|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<

<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<








105
106
107
108
109
110
111
112

































113

114







































115
116
117
118
119
120
121
122
    _tcl $module $libdir
    xcopyfile [file join $distribution modules $module tclIndex] \
	    [file join $libdir $module]
    return
}


proc _manfile {f format ext docdir} { return }

































proc _man {module format ext docdir} { return }









































proc _exa {module exadir} {
    global distribution
    xcopy \
	    [file join $distribution examples $module] \
	    [file join $exadir $module] \
	    1
    return
}

Changes to support/installation/version.tcl.

1
2
package_version 0.5.0.1
package_name    tklib
|

1
2
package_version 0.6
package_name    tklib

Changes to support/releases/PACKAGES.

1
2
3
4
5

6
7
8

9








10


11
12

13
14
15
16









17
18

19
20
21









22



23
24
25
26
27
28
29

30
31
32






@@ RELEASE 0.5

$bundle           $bundlev
$pkg              $ver
Diagrams          0.2

Plotchart         1.6.1
Tablelist         4.10.1
Tablelist_tile    4.10.1

autoscroll        1.1








canvas::sqmap     0.2


canvas::zoom      0.1
chatwidget        1.1.0

crosshair         1.0.2
ctext             3.2
cursor            0.2
datefield         0.2









getstring         0.1
history           0.1

ico               1.0.3
ipentry           0.3
khim              1.0.1









ntext             0.81



style             0.3
style::as         1.4
style::lobster    0.2
swaplist          0.2
tablelist         4.10.1
tablelist::common 4.10.1
tablelist_tile    4.10.1

tipstack          1.0.1
tkpiechart        6.6
tooltip           1.4.4






|

|
|
|
>
|
|
|
>
|
>
>
>
>
>
>
>
>
|
>
>
|
|
>
|
|
|
|
>
>
>
>
>
>
>
>
>
|
|
>
|
|
|
>
>
>
>
>
>
>
>
>
|
>
>
>
|
|
|
|
|
|
|
>
|
|
|
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
@@ RELEASE 0.6

$bundle                     $bundlev
$pkg                        $ver
Mentry                      3.6
Mentry_tile                 3.6
Plotchart                   2.1.0
Tablelist                   5.7
Tablelist_tile              5.7
Wcb                         3.4
autoscroll                  1.1
bindDown                    1.0
canvas::drag                0.1
canvas::edit::points        0.1
canvas::edit::polyline      0.1
canvas::edit::quadrilateral 0.1
canvas::highlight           0.1
canvas::mvg                 1
canvas::snap                1.0.1
canvas::sqmap               0.3.1
canvas::tag                 0.1
canvas::track::lines        0.1
canvas::zoom                0.2.1
chatwidget                  1.1.0
controlwidget               0.1
crosshair                   1.1
ctext                       3.3
cursor                      0.3.1
datefield                   0.2
diagram                     1
diagram::application        1.2
diagram::attribute          1
diagram::basic              1.0.1
diagram::core               1
diagram::direction          1
diagram::element            1
diagram::navigation         1
diagram::point              1
getstring                   0.1
history                     0.1
ico                         0.3.2
ico                         1.1
ipentry                     0.3
khim                        1.0.1
led                         1.0
mentry                      3.6
mentry::common              3.6
mentry_tile                 3.6
menubar                     0.5
menubar::debug              0.5
menubar::node               0.5
menubar::tree               0.5
meter                       1.0
ntext                       0.81
plotanim                    0.2
radioMatrix                 1.0
rdial                       0.3
style                       0.3
style::as                   1.4.1
style::lobster              0.2
swaplist                    0.2
tablelist                   5.7
tablelist::common           5.7
tablelist_tile              5.7
tachometer                  0.1
tipstack                    1.0.1
tkpiechart                  6.6
tooltip                     1.4.4
voltmeter                   0.1
wcb                         3.4
widget::listentry           0.1.1
widget::listsimple          0.1.1
widget::validator           0.1
xyplot                      1.0.1

Added support/releases/history/README-0.6.txt.









































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
Overview
========

    38 new packages                in 9  modules
    9  changed packages            in 8  modules
    1  internally changed packages in 1  modules
    13 unchanged packages          in 11 modules
    75 packages, total             in 27 modules, total

New in tklib 0.6
================

    Module          Package                       New Version   Comments
    --------------- ----------------------------- ------------- ----------
    canvas          canvas::drag                  0.1
                    canvas::edit::points          0.1
                    canvas::edit::polyline        0.1
                    canvas::edit::quadrilateral   0.1
                    canvas::highlight             0.1
                    canvas::mvg                   1
                    canvas::snap                  1.0.1
                    canvas::tag                   0.1
                    canvas::track::lines          0.1
    --------------- ----------------------------- ------------- ----------
    controlwidget   bindDown                      1.0
                    controlwidget                 0.1
                    led                           1.0
                    meter                         1.0
                    radioMatrix                   1.0
                    rdial                         0.3
                    tachometer                    0.1
                    voltmeter                     0.1
    --------------- ----------------------------- ------------- ----------
    diagrams        diagram                       1
                    diagram::application          1.2
                    diagram::attribute            1
                    diagram::basic                1.0.1
                    diagram::core                 1
                    diagram::direction            1
                    diagram::element              1
                    diagram::navigation           1
                    diagram::point                1
    --------------- ----------------------------- ------------- ----------
    mentry          mentry::common                3.6
    --------------- ----------------------------- ------------- ----------
    menubar         menubar                       0.5
                    menubar::debug                0.5
                    menubar::node                 0.5
                    menubar::tree                 0.5
    --------------- ----------------------------- ------------- ----------
    plotchart       plotanim                      0.2
                    xyplot                        1.0.1
    --------------- ----------------------------- ------------- ----------
    wcb             Wcb                           3.4
                    wcb                           3.4
    --------------- ----------------------------- ------------- ----------
    widgetl         widget::listentry             0.1.1
                    widget::listsimple            0.1.1
    --------------- ----------------------------- ------------- ----------
    widgetv         widget::validator             0.1
    --------------- ----------------------------- ------------- ----------

Changes from tklib 0.5 to 0.6
=============================

                                    tklib 0.5     tklib 0.6
    Module      Package             Old Version   New Version   Comments
    ----------- ------------------- ------------- ------------- --------------
    canvas      canvas::sqmap       0.2           0.3.1         EF
                canvas::zoom        0.1           0.2.1         B D
    ----------- ------------------- ------------- ------------- --------------
    crosshair   crosshair           1.0.2         1.1           EF
    ctext       ctext               3.2           3.3           EF
    cursor      cursor              0.2           0.3.1         B EF
    ----------- ------------------- ------------- ------------- --------------
    ico         ico                               0.3.2         B EF
                ico                 1.0.3         1.1           B EF
    ----------- ------------------- ------------- ------------- --------------
    plotchart   Plotchart           1.6.1                       API B D EF T
                Plotchart                         2.1.0         API B D EF T
    ----------- ------------------- ------------- ------------- --------------
    style       style::as           1.4           1.4.1         B
    ----------- ------------------- ------------- ------------- --------------
    tablelist   tablelist::common   4.10.1                      B D EF
                tablelist::common                 5.7           B D EF
    ----------- ------------------- ------------- ------------- --------------

Invisible changes (documentation, testsuites)
=============================================

                              tklib 0.5     tklib 0.6
    Module       Package      Old Version   New Version   Comments
    ------------ ------------ ------------- ------------- ----------
    tkpiechart   tkpiechart   6.6           6.6           B
    ------------ ------------ ------------- ------------- ----------

Unchanged
=========

    autoscroll, chatwidget, datefield, getstring, history, ipentry,
    khim, ntext, style, style::lobster, swaplist, tipstack, tooltip

Legend  Change  Details Comments
        ------  ------- ---------
        Major   API:    ** incompatible ** API changes.

        Minor   EF :    Extended functionality, API.
                I  :    Major rewrite, but no API change

        Patch   B  :    Bug fixes.
                EX :    New examples.
                P  :    Performance enhancement.

        None    T  :    Testsuite changes.
                D  :    Documentation updates.
    

Changes to support/releases/package_rpm.txt.

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Summary: The standard Tk library
Name: @PACKAGE_NAME@
Version: %{version}
Release: 2
Copyright: BSD
Group: Development/Languages
Source: %{name}-%{version}.tar.bz2
URL: http://tcllib.sourceforge.net/
Packager: Jean-Luc Fontaine <jfontain@free.fr>
BuildArchitectures: noarch
Prefix: /usr
Requires: tcl >= 8.3.1
BuildRequires: tcl >= 8.3.1
Buildroot: /var/tmp/%{name}-%{version}

%description
Tklib, the Tk Standard Library is a collection of Tcl packages
that provide utility functions useful to a large collection of Tk
programmers.
The home web site for this code is http://tcllib.sourceforge.net/.
At this web site, you will find mailing lists, web forums, databases
for bug reports and feature requests, the CVS repository (browsable
on the web, or read-only accessible via CVS ), and more.
Note: also grab source tarball for more documentation, examples, ...

%prep








|











|







6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Summary: The standard Tk library
Name: @PACKAGE_NAME@
Version: %{version}
Release: 2
Copyright: BSD
Group: Development/Languages
Source: %{name}-%{version}.tar.bz2
URL: http://core.tcl.tk/tklib/
Packager: Jean-Luc Fontaine <jfontain@free.fr>
BuildArchitectures: noarch
Prefix: /usr
Requires: tcl >= 8.3.1
BuildRequires: tcl >= 8.3.1
Buildroot: /var/tmp/%{name}-%{version}

%description
Tklib, the Tk Standard Library is a collection of Tcl packages
that provide utility functions useful to a large collection of Tk
programmers.
The home web site for this code is http://core.tcl.tk/tklib/.
At this web site, you will find mailing lists, web forums, databases
for bug reports and feature requests, the CVS repository (browsable
on the web, or read-only accessible via CVS ), and more.
Note: also grab source tarball for more documentation, examples, ...

%prep

Changes to support/releases/package_tip55.txt.

1
2
3
4
5
6
7
8
9
Identifier: @PACKAGE_NAME@
Title:  Tk Standard Library
Description: This package is intended to be a collection of
    Tcl packages that provide utility functions useful to a
    large collection of Tk programmers.
Rights: BSD
Version: @PACKAGE_VERSION@
URL: http://tcllib.sourceforge.net/
Architecture: tcl







|

1
2
3
4
5
6
7
8
9
Identifier: @PACKAGE_NAME@
Title:  Tk Standard Library
Description: This package is intended to be a collection of
    Tcl packages that provide utility functions useful to a
    large collection of Tk programmers.
Rights: BSD
Version: @PACKAGE_VERSION@
URL: http://core.tcl.tk/tklib/
Architecture: tcl

Changes to support/releases/package_yml.txt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dist_id: tklib
version: @PACKAGE_VERSION@
language: tcl
description: |
   This package is intended to be a collection of Tcl packages that provide
   utility functions useful to a large collection of Tk programmers.

   The home web site for this code is http://tcllib.sourceforge.net/.
   At this web site, you will find mailing lists, web forums, databases
   for bug reports and feature requests, the CVS repository (browsable
   on the web, or read-only accessible via CVS ), and more.

categories: 
  - Library/Utility
  - Library/GUI
license: BSD
owner_id: AndreasKupries
wrapped_content: @PACKAGE_NAME@-@PACKAGE_VERSION@/







|










1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dist_id: tklib
version: @PACKAGE_VERSION@
language: tcl
description: |
   This package is intended to be a collection of Tcl packages that provide
   utility functions useful to a large collection of Tk programmers.

   The home web site for this code is http://core.tcl.tk/tklib/.
   At this web site, you will find mailing lists, web forums, databases
   for bug reports and feature requests, the CVS repository (browsable
   on the web, or read-only accessible via CVS ), and more.

categories: 
  - Library/Utility
  - Library/GUI
license: BSD
owner_id: AndreasKupries
wrapped_content: @PACKAGE_NAME@-@PACKAGE_VERSION@/

Added tklib.spec.







































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# $Id: package_rpm.txt,v 1.1 2009/02/07 05:18:22 andreas_kupries Exp $

%define version 0.6
%define directory /usr

Summary: The standard Tk library
Name: tklib
Version: %{version}
Release: 2
Copyright: BSD
Group: Development/Languages
Source: %{name}-%{version}.tar.bz2
URL: http://core.tcl.tk/tklib/
Packager: Jean-Luc Fontaine <jfontain@free.fr>
BuildArchitectures: noarch
Prefix: /usr
Requires: tcl >= 8.3.1
BuildRequires: tcl >= 8.3.1
Buildroot: /var/tmp/%{name}-%{version}

%description
Tklib, the Tk Standard Library is a collection of Tcl packages
that provide utility functions useful to a large collection of Tk
programmers.
The home web site for this code is http://core.tcl.tk/tklib/.
At this web site, you will find mailing lists, web forums, databases
for bug reports and feature requests, the CVS repository (browsable
on the web, or read-only accessible via CVS ), and more.
Note: also grab source tarball for more documentation, examples, ...

%prep

%setup -q

%install
# compensate for missing manual files:
/usr/bin/tclsh installer.tcl -no-gui -no-wait -no-html -no-examples\
    -pkg-path $RPM_BUILD_ROOT/usr/lib/%{name}-%{version}\
    -nroff-path $RPM_BUILD_ROOT/usr/share/man/mann/
# install HTML documentation to specific modules sub-directories:
# generate list of files in the package (man pages are compressed):
find $RPM_BUILD_ROOT ! -type d |\
    sed -e "s,^$RPM_BUILD_ROOT,,;" -e 's,\.n$,\.n\.gz,;' >\
    %{_builddir}/%{name}-%{version}/files

%clean
rm -rf $RPM_BUILD_ROOT

%files -f %{_builddir}/%{name}-%{version}/files
%defattr(-,root,root)
%doc README ChangeLog license.terms

Added tklib.tap.













































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
format  {TclDevKit Project File}
fmtver  2.0
fmttool {TclDevKit TclApp PackageDefinition} 2.5

##  Saved at : Mon Mar 11 14:48:34 PST 2013
##  By       : andreask
##
##  Generated by "sak.tcl tap"
##  of tklib 0.6

########
#####
###
##
#

# ###############
# Complete bundle

Package {tklib 0.6}
Base     @TAP_DIR@
Platform *
Desc     {Tklib: Bundle of all packages}
Path     pkgIndex.tcl
Path     autoscroll
Path     canvas
Path     chatwidget
Path     controlwidget
Path     ctext
Path     cursor
Path     crosshair
Path     datefield
Path     diagrams
Path     getstring
Path     history
Path     ico
Path     ipentry
Path     khim
Path     mentry
Path     menubar
Path     ntext
Path     plotchart
Path     style
Path     swaplist
Path     tablelist
Path     tkpiechart
Path     tooltip
Path     wcb
Path     widget
Path     widgetl
Path     widgetv

# ###################
# Module "autoscroll"
# [1]    | "autoscroll" (1.1)
# -------+

Package {autoscroll 1.1}
Platform *
Desc     {Provides for a scrollbar to automatically mapped and unmapped as needed}
Base     @TAP_DIR@/autoscroll
Path     autoscroll.tcl
Path     pkgIndex.tcl

#
# ###################

# ###############
# Module "canvas"
# [1]    | "canvas::tag" (0.1)
# [2]    | "canvas::highlight" (0.1)
# [3]    | "canvas::track::lines" (0.1)
# [4]    | "canvas::edit::quadrilateral" (0.1)
# [5]    | "canvas::zoom" (0.2.1)
# [6]    | "canvas::mvg" (1)
# [7]    | "canvas::snap" (1.0.1)
# [8]    | "canvas::edit::polyline" (0.1)
# [9]    | "canvas::drag" (0.1)
# [10]    | "canvas::sqmap" (0.3.1)
# [11]    | "canvas::edit::points" (0.1)
# -------+

Package {__canvas 0.0}
Platform *
Desc     {Variations on a canvas}
Hidden
Base     @TAP_DIR@/canvas
Path     canvas_drag.tcl
Path     canvas_epoints.tcl
Path     canvas_epolyline.tcl
Path     canvas_equad.tcl
Path     canvas_highlight.tcl
Path     canvas_mvg.tcl
Path     canvas_snap.tcl
Path     canvas_sqmap.tcl
Path     canvas_tags.tcl
Path     canvas_trlines.tcl
Path     canvas_zoom.tcl
Path     pkgIndex.tcl

Package {canvas::tag 0.1}
See   __canvas
Platform *
Desc     {Easier management of the tags on canvas items or item groups}

Package {canvas::highlight 0.1}
See   __canvas
Platform *
Desc     {Manage the highlighting of canvas items or item groups}

Package {canvas::track::lines 0.1}
See   __canvas
Platform *
Desc     {Tklib package}

Package {canvas::edit::quadrilateral 0.1}
See   __canvas
Platform *
Desc     {Editing a quadrilateral on a canvas}

Package {canvas::zoom 0.2.1}
See   __canvas
Platform *
Desc     {Zoom control for canvas::sqmap}

Package {canvas::mvg 1}
See   __canvas
Platform *
Desc     {Canvas to ImageMagick MVG vector format}

Package {canvas::snap 1.0.1}
See   __canvas
Platform *
Desc     {Canvas snapshot to Tk photo image}

Package {canvas::edit::polyline 0.1}
See   __canvas
Platform *
Desc     {Editing a polyline on a canvas}

Package {canvas::drag 0.1}
See   __canvas
Platform *
Desc     {Manage the dragging of canvas items or item groups}

Package {canvas::sqmap 0.3.1}
See   __canvas
Platform *
Desc     {Canvas with map background based on square tiles}

Package {canvas::edit::points 0.1}
See   __canvas
Platform *
Desc     {Editing a cloud of points on a canvas}

#
# ###############

# ###################
# Module "chatwidget"
# [1]    | "chatwidget" (1.1.0)
# -------+

Package {chatwidget 1.1.0}
Platform *
Desc     {Provides a multi-paned view suitable for display of chat room or irc channel information}
Base     @TAP_DIR@/chatwidget
Path     chatwidget.tcl
Path     pkgIndex.tcl

#
# ###################

# ######################
# Module "controlwidget"
# [1]    | "rdial" (0.3)
# [2]    | "radioMatrix" (1.0)
# [3]    | "tachometer" (0.1)
# [4]    | "controlwidget" (0.1)
# [5]    | "meter" (1.0)
# [6]    | "bindDown" (1.0)
# [7]    | "led" (1.0)
# [8]    | "voltmeter" (0.1)
# -------+

Package {__controlwidget 0.0}
Platform *
Desc     {controlwidget}
Hidden
Base     @TAP_DIR@/controlwidget
Path     bindDown.tcl
Path     controlwidget.tcl
Path     led.tcl
Path     pkgIndex.tcl
Path     radioMatrix.tcl
Path     rdial.tcl
Path     tachometer.tcl
Path     vertical_meter.tcl
Path     voltmeter.tcl

Package {rdial 0.3}
See   __controlwidget
Platform *
Desc     {Tklib package}

Package {radioMatrix 1.0}
See   __controlwidget
Platform *
Desc     {Tklib package}

Package {tachometer 0.1}
See   __controlwidget
Platform *
Desc     {Tklib package}

Package {controlwidget 0.1}
See   __controlwidget
Platform *
Desc     {Collection of widgets for displaying and controlling numerical values}

Package {meter 1.0}
See   __controlwidget
Platform *
Desc     {Tklib package}

Package {bindDown 1.0}
See   __controlwidget
Platform *
Desc     {Tklib package}

Package {led 1.0}
See   __controlwidget
Platform *
Desc     {Tklib package}

Package {voltmeter 0.1}
See   __controlwidget
Platform *
Desc     {Tklib package}

#
# ######################

# ##############
# Module "ctext"
# [1]    | "ctext" (3.3)
# -------+

Package {ctext 3.3}
Platform *
Desc     {Ctext a text widget with highlighting support}
Base     @TAP_DIR@/ctext
Path     ctext.tcl
Path     pkgIndex.tcl

#
# ##############

# ###############
# Module "cursor"
# [1]    | "cursor" (0.3.1)
# -------+

Package {cursor 0.3.1}
Platform *
Desc     {Procedures to handle CURSOR data}
Base     @TAP_DIR@/cursor
Path     cursor.tcl
Path     pkgIndex.tcl

#
# ###############

# ##################
# Module "crosshair"
# [1]    | "crosshair" (1.1)
# -------+

Package {crosshair 1.1}
Platform *
Desc     {Crosshairs for Tk canvas}
Base     @TAP_DIR@/crosshair
Path     crosshair.tcl
Path     pkgIndex.tcl

#
# ##################

# ##################
# Module "datefield"
# [1]    | "datefield" (0.2)
# -------+

Package {datefield 0.2}
Platform *
Desc     {Tk datefield widget}
Base     @TAP_DIR@/datefield
Path     datefield.tcl
Path     pkgIndex.tcl

#
# ##################

# #################
# Module "diagrams"
# [1]    | "diagram::navigation" (1)
# [2]    | "diagram::application" (1.2)
# [3]    | "diagram" (1)
# [4]    | "diagram::attribute" (1)
# [5]    | "diagram::direction" (1)
# [6]    | "diagram::core" (1)
# [7]    | "diagram::element" (1)
# [8]    | "diagram::point" (1)
# [9]    | "diagram::basic" (1.0.1)
# -------+

Package {__diagrams 0.0}
Platform *
Desc     {Documentation toolbox}
Hidden
Base     @TAP_DIR@/diagrams
Path     application.tcl
Path     attributes.tcl
Path     basic.tcl
Path     core.tcl
Path     diagram.tcl
Path     direction.tcl
Path     element.tcl
Path     navigation.tcl
Path     pkgIndex.tcl
Path     point.tcl

Package {diagram::navigation 1}
See   __diagrams
Platform *
Desc     {Tklib package}

Package {diagram::application 1.2}
See   __diagrams
Platform *
Desc     {Tklib package}

Package {diagram 1}
See   __diagrams
Platform *
Desc     {Diagram drawing}

Package {diagram::attribute 1}
See   __diagrams
Platform *
Desc     {Tklib package}

Package {diagram::direction 1}
See   __diagrams
Platform *
Desc     {Tklib package}

Package {diagram::core 1}
See   __diagrams
Platform *
Desc     {Tklib package}

Package {diagram::element 1}
See   __diagrams
Platform *
Desc     {Tklib package}

Package {diagram::point 1}
See   __diagrams
Platform *
Desc     {Tklib package}

Package {diagram::basic 1.0.1}
See   __diagrams
Platform *
Desc     {Tklib package}

#
# #################

# ##################
# Module "getstring"
# [1]    | "getstring" (0.1)
# -------+

Package {getstring 0.1}
Platform *
Desc     {A string dialog}
Base     @TAP_DIR@/getstring
Path     pkgIndex.tcl
Path     tk_getString.tcl

#
# ##################

# ################
# Module "history"
# [1]    | "history" (0.1)
# -------+

Package {history 0.1}
Platform *
Desc     {Provides a history for Entry widgets}
Base     @TAP_DIR@/history
Path     history.tcl
Path     pkgIndex.tcl

#
# ################

# ############
# Module "ico"
# [1]    | "ico" (0.3.2)
# [2]    | "ico" (1.1)
# -------+

Package {__ico 0.0}
Platform *
Desc     {Windows ICO handling}
Hidden
Base     @TAP_DIR@/ico
Path     ico.tcl
Path     ico0.tcl
Path     pkgIndex.tcl

Package {ico 0.3.2}
See   __ico
Platform *
Desc     {Reading and writing windows icons}

Package {ico 1.1}
See   __ico
Platform *
Desc     {Reading and writing windows icons}

#
# ############

# ################
# Module "ipentry"
# [1]    | "ipentry" (0.3)
# -------+

Package {ipentry 0.3}
Platform *
Desc     {An IP address entry widget}
Base     @TAP_DIR@/ipentry
Path     ipentry.tcl
Path     pkgIndex.tcl

#
# ################

# #############
# Module "khim"
# [1]    | "khim" (1.0.1)
# -------+

Package {khim 1.0.1}
Platform *
Desc     {Provides key bindings for entering international characters on a keyboard that does not support them}
Base     @TAP_DIR@/khim
Path     cs.msg
Path     da.msg
Path     de.msg
Path     en.msg
Path     es.msg
Path     khim.tcl
Path     pkgIndex.tcl
Path     pl.msg
Path     ROOT.msg
Path     ru.msg
Path     uk.msg

#
# #############

# ###############
# Module "mentry"
# [1]    | "mentry::common" (3.6)
# -------+

Package {mentry::common 3.6}
Platform *
Desc     {Tklib package}
Base     @TAP_DIR@/mentry
Path     mentry.tcl
Path     mentry_tile.tcl
Path     mentryPublic.tcl
Path     pkgIndex.tcl
Path     scripts/mentryDateTime.tcl
Path     scripts/mentryFixedPoint.tcl
Path     scripts/mentryIPAddr.tcl
Path     scripts/mentryIPv6Addr.tcl
Path     scripts/mentryThemes.tcl
Path     scripts/mentryWidget.tcl
Path     scripts/mwutil.tcl
Path     scripts/tclIndex

#
# ###############

# ################
# Module "menubar"
# [1]    | "menubar::node" (0.5)
# [2]    | "menubar::debug" (0.5)
# [3]    | "menubar" (0.5)
# [4]    | "menubar::tree" (0.5)
# -------+

Package {__menubar 0.0}
Platform *
Desc     {Create and manipulate menubars}
Hidden
Base     @TAP_DIR@/menubar
Path     debug.tcl
Path     menubar.tcl
Path     node.tcl
Path     pkgIndex.tcl
Path     tree.tcl

Package {menubar::node 0.5}
See   __menubar
Platform *
Desc     {Tklib package}

Package {menubar::debug 0.5}
See   __menubar
Platform *
Desc     {Tklib package}

Package {menubar 0.5}
See   __menubar
Platform *
Desc     {Creates an instance of the  Class.}

Package {menubar::tree 0.5}
See   __menubar
Platform *
Desc     {Tklib package}

#
# ################

# ##############
# Module "ntext"
# [1]    | "ntext" (0.81)
# -------+

Package {ntext 0.81}
Platform *
Desc     {ntext Word Boundary Detection for the Text Widget}
Base     @TAP_DIR@/ntext
Path     ntext.tcl
Path     pkgIndex.tcl

#
# ##############

# ##################
# Module "plotchart"
# [1]    | "plotanim" (0.2)
# [2]    | "xyplot" (1.0.1)
# [3]    | "Plotchart" (2.0.1)
# -------+

Package {__plotchart 0.0}
Platform *
Desc     {Plotchart}
Hidden
Base     @TAP_DIR@/plotchart
Path     pkgIndex.tcl
Path     plot3d.tcl
Path     plotanim.tcl
Path     plotannot.tcl
Path     plotaxis.tcl
Path     plotbind.tcl
Path     plotbusiness.tcl
Path     plotchart.tcl
Path     plotcombined.tcl
Path     plotconfig.tcl
Path     plotcontour.tcl
Path     plotgantt.tcl
Path     plotobject.tcl
Path     plotpack.tcl
Path     plotpriv.tcl
Path     plotscada.tcl
Path     plotspecial.tcl
Path     plottable.tcl
Path     scaling.tcl
Path     xyplot.tcl

Package {plotanim 0.2}
See   __plotchart
Platform *
Desc     {Tklib package}

Package {xyplot 1.0.1}
See   __plotchart
Platform *
Desc     {Tklib package}

Package {Plotchart 2.0.1}
See   __plotchart
Platform *
Desc     {Simple plotting and charting package}

#
# ##################

# ##############
# Module "style"
# [1]    | "style::lobster" (0.2)
# [2]    | "style" (0.3)
# [3]    | "style::as" (1.4.1)
# -------+

Package {__style 0.0}
Platform *
Desc     {Tklib module}
Hidden
Base     @TAP_DIR@/style
Path     as.tcl
Path     lobster.tcl
Path     pkgIndex.tcl
Path     style.tcl

Package {style::lobster 0.2}
See   __style
Platform *
Desc     {Tklib package}

Package {style 0.3}
See   __style
Platform *
Desc     {Tklib package}

Package {style::as 1.4.1}
See   __style
Platform *
Desc     {Tklib package}

#
# ##############

# #################
# Module "swaplist"
# [1]    | "swaplist" (0.2)
# -------+

Package {swaplist 0.2}
Platform *
Desc     {A dialog which allows a user to move options between two lists}
Base     @TAP_DIR@/swaplist
Path     pkgIndex.tcl
Path     swaplist.tcl

#
# #################

# ##################
# Module "tablelist"
# [1]    | "tablelist::common" (5.7)
# -------+

Package {tablelist::common 5.7}
Platform *
Desc     {Tklib package}
Base     @TAP_DIR@/tablelist
Path     pkgIndex.tcl
Path     scripts/mwutil.tcl
Path     scripts/repair.tcl
Path     scripts/tablelistBind.tcl
Path     scripts/tablelistConfig.tcl
Path     scripts/tablelistEdit.tcl
Path     scripts/tablelistImages.tcl
Path     scripts/tablelistMove.tcl
Path     scripts/tablelistSort.tcl
Path     scripts/tablelistThemes.tcl
Path     scripts/tablelistUtil.tcl
Path     scripts/tablelistWidget.tcl
Path     scripts/tclIndex
Path     tablelist.tcl
Path     tablelist_tile.tcl
Path     tablelistPublic.tcl

#
# ##################

# ###################
# Module "tkpiechart"
# [1]    | "tkpiechart" (6.6)
# -------+

Package {tkpiechart 6.6}
Platform *
Desc     {2D or 3D pie chart object in a canvas}
Base     @TAP_DIR@/tkpiechart
Path     boxlabel.tcl
Path     canlabel.tcl
Path     labarray.tcl
Path     objselec.tcl
Path     perilabel.tcl
Path     pie.tcl
Path     pielabel.tcl
Path     pkgIndex.tcl
Path     relirect.tcl
Path     selector.tcl
Path     slice.tcl
Path     tkpiechart.tcl

#
# ###################

# ################
# Module "tooltip"
# [1]    | "tipstack" (1.0.1)
# [2]    | "tooltip" (1.4.4)
# -------+

Package {__tooltip 0.0}
Platform *
Desc     {Tooltip management}
Hidden
Base     @TAP_DIR@/tooltip
Path     pkgIndex.tcl
Path     tipstack.tcl
Path     tooltip.tcl

Package {tipstack 1.0.1}
See   __tooltip
Platform *
Desc     {Tklib package}

Package {tooltip 1.4.4}
See   __tooltip
Platform *
Desc     {Tooltip management}

#
# ################

# ############
# Module "wcb"
# [1]    | "Wcb" (3.4)
# [2]    | "wcb" (3.4)
# -------+

Package {__wcb 0.0}
Platform *
Desc     {Tklib module}
Hidden
Base     @TAP_DIR@/wcb
Path     pkgIndex.tcl
Path     scripts/tclIndex
Path     scripts/wcbCommon.tcl
Path     scripts/wcbEntry.tcl
Path     scripts/wcbListbox.tcl
Path     scripts/wcbTablelist.tcl
Path     scripts/wcbText.tcl
Path     wcb.tcl

Package {Wcb 3.4}
See   __wcb
Platform *
Desc     {Tklib package}

Package {wcb 3.4}
See   __wcb
Platform *
Desc     {Tklib package}

#
# ############

# ###############
# Module "widget"
# [1]    | "widget::statusbar" (1.2.1)
# [2]    | "widget::superframe" (1.0.1)
# [3]    | "widget::calendar" (1)
# [4]    | "widget::ruler" (1.1)
# [5]    | "widget::screenruler" (1.2)
# [6]    | "widget" (3.1)
# [7]    | "widget::scrolledtext" (1.0)
# [8]    | "widget::dateentry" (0.95)
# [9]    | "widget::dialog" (1.3.1)
# [10]    | "widget::scrolledwindow" (1.2.1)
# [11]    | "widget::panelframe" (1.1)
# [12]    | "widget::toolbar" (1.2.1)
# [13]    | "widget::menuentry" (1.0.1)
# [14]    | "widget::arrowbutton" (1)
# -------+

Package {__widget 0.0}
Platform *
Desc     {widget::listsimple widget, Various megawidgets}
Hidden
Base     @TAP_DIR@/widget
Path     arrowb.tcl
Path     calendar.tcl
Path     dateentry.tcl
Path     dialog.tcl
Path     mentry.tcl
Path     panelframe.tcl
Path     pkgIndex.tcl
Path     ruler.tcl
Path     scrollw.tcl
Path     statusbar.tcl
Path     stext.tcl
Path     superframe.tcl
Path     toolbar.tcl
Path     widget.tcl

Package {widget::statusbar 1.2.1}
See   __widget
Platform *
Desc     {Tklib package}

Package {widget::superframe 1.0.1}
See   __widget
Platform *
Desc     {Tklib package}

Package {widget::calendar 1}
See   __widget
Platform *
Desc     {Calendar Megawidget}

Package {widget::ruler 1.1}
See   __widget
Platform *
Desc     {Tklib package}

Package {widget::screenruler 1.2}
See   __widget
Platform *
Desc     {Tklib package}

Package {widget 3.1}
See   __widget
Platform *
Desc     {Date Entry Megawidget}

Package {widget::scrolledtext 1.0}
See   __widget
Platform *
Desc     {Tklib package}

Package {widget::dateentry 0.95}
See   __widget
Platform *
Desc     {Date Entry Megawidget}

Package {widget::dialog 1.3.1}
See   __widget
Platform *
Desc     {Tklib package}

Package {widget::scrolledwindow 1.2.1}
See   __widget
Platform *
Desc     {widget::listsimple widget}

Package {widget::panelframe 1.1}
See   __widget
Platform *
Desc     {Tklib package}

Package {widget::toolbar 1.2.1}
See   __widget
Platform *
Desc     {Toolbar Megawidget}

Package {widget::menuentry 1.0.1}
See   __widget
Platform *
Desc     {Tklib package}

Package {widget::arrowbutton 1}
See   __widget
Platform *
Desc     {Tklib package}

#
# ###############

# ################
# Module "widgetl"
# [1]    | "widget::listsimple" (0.1.1)
# [2]    | "widget::listentry" (0.1.1)
# -------+

Package {__widgetl 0.0}
Platform *
Desc     {widget::listentry widget, widget::listsimple widget}
Hidden
Base     @TAP_DIR@/widgetl
Path     listentry.tcl
Path     listsimple.tcl
Path     pkgIndex.tcl

Package {widget::listsimple 0.1.1}
See   __widgetl
Platform *
Desc     {widget::listsimple widget}

Package {widget::listentry 0.1.1}
See   __widgetl
Platform *
Desc     {widget::listentry widget}

#
# ################

# ################
# Module "widgetv"
# [1]    | "widget::validator" (0.1)
# -------+

Package {widget::validator 0.1}
Platform *
Desc     {widget::listsimple widget}
Base     @TAP_DIR@/widgetv
Path     pkgIndex.tcl
Path     validator.tcl

#
# ################

#
##
###
#####
########

Added tklib.yml.





































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dist_id: tklib
version: 0.6
language: tcl
description: |
   This package is intended to be a collection of Tcl packages that provide
   utility functions useful to a large collection of Tk programmers.

   The home web site for this code is http://core.tcl.tk/tklib/.
   At this web site, you will find mailing lists, web forums, databases
   for bug reports and feature requests, the CVS repository (browsable
   on the web, or read-only accessible via CVS ), and more.

categories: 
  - Library/Utility
  - Library/GUI
license: BSD
owner_id: AndreasKupries
wrapped_content: tklib-0.6/