Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Comment: | Integrated Tklib 0.7 RC into trunk. Updated release information. Tagged Tklib 0.7 Release. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk | tklib-0.7 |
Files: | files | file ages | folders |
SHA3-256: | 4a6cbb19d1c5c7845169ef4586acd349ee189eb367142b2534eedf9d2cdb3df1 |
User & Date: | aku 2020-02-09 20:52:26 |
2020-04-16
| ||
23:54 | Clean up Fossil commit warnings (fossil test-commit-warning) by removing carriage returns, switching to UTF-8 where appropriate, and configuring Fossil to ignore known binaries. check-in: 41c28aaff2 user: andy tags: trunk | |
2020-02-09
| ||
20:52 | Integrated Tklib 0.7 RC into trunk. Updated release information. Tagged Tklib 0.7 Release. check-in: 4a6cbb19d1 user: aku tags: trunk, tklib-0.7 | |
20:45 | Updated .tap information. Closed-Leaf check-in: 7fbc0db947 user: aku tags: tklib-0-7-rc | |
2020-02-06
| ||
14:09 | * doc/scrollutil.html: Minor improvements. check-in: f38162f408 user: csaba tags: trunk | |
Changes to ChangeLog.
1 2 3 4 5 6 7 |
2013-10-30 Andreas Kupries (AS Senior Dev) <andreask@activestate.com> * examples/canvas/crosshairs_for_axes.tcl: [Ticket [19721eff15]]. * examples/canvas/crosshairs_for_multixyplot.tcl: Updated canvas * examples/canvas/crosshairs_scaled.tcl: examples for runnability against an installed tklib. Patch by stu. |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2013-10-30 Andreas Kupries (AS Senior Dev) <andreask@activestate.com> * examples/canvas/crosshairs_for_axes.tcl: [Ticket [19721eff15]]. * examples/canvas/crosshairs_for_multixyplot.tcl: Updated canvas * examples/canvas/crosshairs_scaled.tcl: examples for runnability against an installed tklib. Patch by stu. |
Changes to DESCRIPTION.txt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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> |
| | > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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.7 URL: http://core.tcl.tk/tklib/ Architecture: tcl Contributor: Aaron Faupell <afaupell at users dot sourceforge dot net> Contributor: Andreas Kupries <andreask at activestate dot com> Contributor: Andreas Kupries (AS Senior Dev) <andreask at activestate dot com> 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> |
Changes to embedded/man/files/modules/datefield/datefield.n.
1 2 3 4 5 6 7 8 9 10 11 12 ... 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 ... 331 332 333 334 335 336 337 338 339 |
'\" '\" Generated from file 'datefield\&.man' by tcllib/doctools with format 'nroff' '\" Copyright (c) Keith Vetter <keith@ebook\&.gemstar\&.com> '\" .TH "datefield" n 0\&.2 tklib "Tk datefield widget" .\" The -*- nroff -*- 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, ................................................................................ .. .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 ................................................................................ .SH KEYWORDS clock, date, dateentry, entry, widget .SH CATEGORY Widget .SH COPYRIGHT .nf Copyright (c) Keith Vetter <keith@ebook\&.gemstar\&.com> .fi |
> | | > > | | > > > > > > > > > > > > > | > | > |
1 2 3 4 5 6 7 8 9 10 11 12 13 ... 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 ... 348 349 350 351 352 353 354 355 356 357 |
'\" '\" Generated from file 'datefield\&.man' by tcllib/doctools with format 'nroff' '\" Copyright (c) Keith Vetter <keith@ebook\&.gemstar\&.com> '\" Copyright (c) Thomas Wunderlich <tcl\&.tk@blindenfreizeiten\&.de> '\" .TH "datefield" n 0\&.3 tklib "Tk datefield widget" .\" The -*- nroff -*- 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, ................................................................................ .. .BS .SH NAME datefield \- Tk datefield widget .SH SYNOPSIS package require \fBTk \fR .sp package require \fBdatefield ?0\&.3?\fR .sp \fB::datefield::datefield\fR \fIwidgetpath\fR ?\fIoptions\fR? .sp \fI-format\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\&. There are three valid formats for the dates which can be entered: .IP [1] English form MM/DD/YYYY using \fI-format "%m/%d/%Y"\fR (default) .IP [2] German form DD\&.MM\&.YYYY using \fI-format "%d\&.%m\&.%Y"\fR .IP [3] ISO form YYYY-MM-DD using \fI-format "%Y-%m-%d"\fR .PP .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 .TP \fI-format\fR One of "%m/%d/%Y" (English, default if option left), "%d\&.%m\&.%Y" (German), or "%Y-%m-%d" (ISO)\&. .PP .PP See the \fBentry\fR manual entry for details on all remaining/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 -format "%m/%d/%Y" 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 ................................................................................ .SH KEYWORDS clock, date, dateentry, entry, widget .SH CATEGORY Widget .SH COPYRIGHT .nf Copyright (c) Keith Vetter <keith@ebook\&.gemstar\&.com> Copyright (c) Thomas Wunderlich <tcl\&.tk@blindenfreizeiten\&.de> .fi |
Changes to embedded/man/files/modules/widgetPlus/widgetPlus.n.
609 610 611 612 613 614 615 616 617 |
package require widgetPlus ::widgetPlus::EnableBWidget namespace import widgetPlus::* entryPlus \&.cb\&.e -undo 1 -maxundo 0 .CE .SH "SEE ALSO" BWidget, ComboBox, Entry, entry, persistentSelection, spinbox, text, ttk::combobox, ttk::entry, ttk::spinbox |
> > > > > > > |
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 |
package require widgetPlus ::widgetPlus::EnableBWidget namespace import widgetPlus::* entryPlus \&.cb\&.e -undo 1 -maxundo 0 .CE .SH "BUGS, IDEAS, FEEDBACK" This document, and the package it describes, will undoubtedly contain bugs and other problems\&. Please report such in the category \fIwidgetPlus\fR of the \fITklib Trackers\fR [http://core\&.tcl\&.tk/tklib/reportlist]\&. Please also report any ideas for enhancements you may have for either package and/or documentation\&. .SH "SEE ALSO" BWidget, ComboBox, Entry, entry, persistentSelection, spinbox, text, ttk::combobox, ttk::entry, ttk::spinbox |
Changes to embedded/www/tklib/files/modules/datefield/datefield.html.
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 ... 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 ... 186 187 188 189 190 191 192 193 194 195 |
margin-bottom: 1em; border-bottom: 1px solid black; } --></style> </head> <!-- Generated from file 'datefield.man' by tcllib/doctools with format 'html' --> <!-- Copyright &copy; Keith Vetter &lt;keith@ebook.gemstar.com&gt; --> <!-- datefield.n --> <body><hr> [ <a href="../../../../../../../../home">Tklib 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> <div class="doctools"> <h1 class="doctools_title">datefield(n) 0.2 tklib "Tk datefield widget"</h1> <div id="name" class="doctools_section"><h2><a name="name">Name</a></h2> <p>datefield - Tk datefield widget</p> </div> <div id="toc" class="doctools_section"><h2><a name="toc">Table Of Contents</a></h2> <ul class="doctools_toc"> <li class="doctools_section"><a href="#toc">Table Of Contents</a></li> <li class="doctools_section"><a href="#synopsis">Synopsis</a></li> ................................................................................ <li class="doctools_section"><a href="#copyright">Copyright</a></li> </ul> </div> <div id="synopsis" class="doctools_section"><h2><a name="synopsis">Synopsis</a></h2> <div class="doctools_synopsis"> <ul class="doctools_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="doctools_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="doctools_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="doctools_section"><h2><a name="section2">COMMANDS</a></h2> <dl class="doctools_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="doctools_section"><h2><a name="section3">OPTIONS</a></h2> <p>See the <b class="cmd"><a href="../../../../index.html#key32">entry</a></b> manual entry for details on all available options.</p> </div> <div id="section4" class="doctools_section"><h2><a name="section4">EXAMPLE</a></h2> <pre class="doctools_example"> 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 </pre> ................................................................................ <div id="keywords" class="doctools_section"><h2><a name="keywords">Keywords</a></h2> <p><a href="../../../../index.html#key31">clock</a>, <a href="../../../../index.html#key33">date</a>, <a href="../../../../index.html#key6">dateentry</a>, <a href="../../../../index.html#key32">entry</a>, <a href="../../../../index.html#key11">widget</a></p> </div> <div id="category" class="doctools_section"><h2><a name="category">Category</a></h2> <p>Widget</p> </div> <div id="copyright" class="doctools_section"><h2><a name="copyright">Copyright</a></h2> <p>Copyright © Keith Vetter <keith@ebook.gemstar.com></p> </div> </div></body></html> |
| | | > | | > > > > > > > > > > | > | | > |
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 ... 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 ... 198 199 200 201 202 203 204 205 206 207 208 |
margin-bottom: 1em; border-bottom: 1px solid black; } --></style> </head> <!-- Generated from file 'datefield.man' by tcllib/doctools with format 'html' --> <!-- Copyright &copy; Keith Vetter &lt;keith@ebook.gemstar.com&gt; -- Copyright &copy; Thomas Wunderlich &lt;tcl.tk@blindenfreizeiten.de&gt; --> <!-- datefield.n --> <body><hr> [ <a href="../../../../../../../../home">Tklib 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> <div class="doctools"> <h1 class="doctools_title">datefield(n) 0.3 tklib "Tk datefield widget"</h1> <div id="name" class="doctools_section"><h2><a name="name">Name</a></h2> <p>datefield - Tk datefield widget</p> </div> <div id="toc" class="doctools_section"><h2><a name="toc">Table Of Contents</a></h2> <ul class="doctools_toc"> <li class="doctools_section"><a href="#toc">Table Of Contents</a></li> <li class="doctools_section"><a href="#synopsis">Synopsis</a></li> ................................................................................ <li class="doctools_section"><a href="#copyright">Copyright</a></li> </ul> </div> <div id="synopsis" class="doctools_section"><h2><a name="synopsis">Synopsis</a></h2> <div class="doctools_synopsis"> <ul class="doctools_requirements"> <li>package require <b class="pkgname">Tk</b></li> <li>package require <b class="pkgname">datefield <span class="opt">?0.3?</span></b></li> </ul> <ul class="doctools_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> <li><a href="#2"><i class="arg">-format</i></a></li> </ul> </div> </div> <div id="section1" class="doctools_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. There are three valid formats for the dates which can be entered:</p> <ol class="doctools_enumerated"> <li><p>English form MM/DD/YYYY using <i class="arg">-format "%m/%d/%Y"</i> (default)</p></li> <li><p>German form DD.MM.YYYY using <i class="arg">-format "%d.%m.%Y"</i></p></li> <li><p>ISO form YYYY-MM-DD using <i class="arg">-format "%Y-%m-%d"</i></p></li> </ol> <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="doctools_section"><h2><a name="section2">COMMANDS</a></h2> <dl class="doctools_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="doctools_section"><h2><a name="section3">OPTIONS</a></h2> <dl class="doctools_definitions"> <dt><a name="2"><i class="arg">-format</i></a></dt> <dd><p>One of "%m/%d/%Y" (English, default if option left), "%d.%m.%Y" (German), or "%Y-%m-%d" (ISO).</p></dd> </dl> <p>See the <b class="cmd"><a href="../../../../index.html#key32">entry</a></b> manual entry for details on all remaining/available options.</p> </div> <div id="section4" class="doctools_section"><h2><a name="section4">EXAMPLE</a></h2> <pre class="doctools_example"> 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 -format "%m/%d/%Y" 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 </pre> ................................................................................ <div id="keywords" class="doctools_section"><h2><a name="keywords">Keywords</a></h2> <p><a href="../../../../index.html#key31">clock</a>, <a href="../../../../index.html#key33">date</a>, <a href="../../../../index.html#key6">dateentry</a>, <a href="../../../../index.html#key32">entry</a>, <a href="../../../../index.html#key11">widget</a></p> </div> <div id="category" class="doctools_section"><h2><a name="category">Category</a></h2> <p>Widget</p> </div> <div id="copyright" class="doctools_section"><h2><a name="copyright">Copyright</a></h2> <p>Copyright © Keith Vetter <keith@ebook.gemstar.com><br> Copyright © Thomas Wunderlich <tcl.tk@blindenfreizeiten.de></p> </div> </div></body></html> |
Added embedded/www/tklib/files/modules/mentry/datetime1.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/mentry/datetime2.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/mentry/ethernetaddr.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/mentry/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 |
<!DOCTYPE html> <html> <head> <title>The Multi-Entry Widget Package Mentry 3.10</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="mentry, widget, entry, label"> </head> <body> <div align="center"> <h1>The Multi-Entry Widget Package Mentry 3.10</h1> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2>Contents</h2> <p><a href="mentry.html">Mentry Programmer's Guide</a></p> <p><a href="mentryWidget.html">The <code>mentry::mentry</code> Command</a></p> <p><a href="mentryDateTime.html">Multi-Entry Widgets for Date and Time</a></p> <p><a href="mentryFixedPoint.html">Multi-Entry Widgets for Real Numbers in Fixed-Point Format</a></p> <p><a href="mentryIPAddr.html">Multi-Entry Widgets for IP Addresses</a></p> <p><a href="mentryIPv6Addr.html">Multi-Entry Widgets for IPv6 Addresses</a></p> <p><a href="mentryThemes.html">Commands Related to Tile Themes</a></p> <p><a href="wcbRef.html">Wcb Command Reference</a></p> </body> </html> |
Added embedded/www/tklib/files/modules/mentry/mentry.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 |
<!DOCTYPE html> <html> <head> <title>Mentry Programmer's Guide</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="mentry, widget, entry, label"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Mentry Programmer's Guide</h1> <h2>For Mentry Version 3.10</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <h4><a href="#overview">Overview</a></h4> <ul> <li><a href="#ov_what">What Is Mentry?</a></li> <li><a href="#ov_get">How to Get It?</a></li> <li><a href="#ov_install">How to Install It?</a></li> <li><a href="#ov_use">How to Use It?</a></li> <li><a href="#ov_tile">More on Mentry_tile</a></li> </ul> <h4><a href="#examples">Examples</a></h4> <ul> <li><a href="#ex_phoneNumber">A mentry Widget for Phone Numbers</a></li> <li><a href="#ex_ethernetAddr">A mentry Widget for Ethernet Addresses</a></li> <li><a href="#ex_dateTime">Using mentry Widgets for Date and Time</a></li> <li><a href="#ex_tile">Tile-Based Demo Scripts</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="overview">Overview</h2> <h3 id="ov_what">What Is Mentry?</h3> <p>Mentry is a library package for Tcl/Tk versions 8.0 or higher, written in pure Tcl/Tk code. It contains:</p> <ul> <li>the implementation of the <a href="mentryWidget.html">multi-entry mega-widget <b>mentry</b></a>, including a general utility module for mega-widgets;</li> <li>procedures that facilitate the use of multi-entry widgets for displaying and editing <a href="mentryDateTime.html">date and time</a> in a great variety of formats, <a href="mentryFixedPoint.html">real numbers in fixed-point format</a>, as well as <a href="mentryIPAddr.html">IP(v4) addresses</a> and <a href="mentryIPv6Addr.html">IPv6 addresses</a>;</li> <li>two richly commented demo scripts containing the typical steps needed to create and handle a mentry widget for a particular purpose;</li> <li>two demo scripts that show how to use the date- and time-related procedures;</li> <li>tile-based counterparts of the above-mentioned demo scripts;</li> <li>this tutorial;</li> <li>reference pages in HTML format.</li> </ul> <p>A multi-entry widget consists of any number of entry widgets separated by labels, all embedded in a frame. Appropriately chosen configuration options make this conglomerate look like one single entry containing preinserted text pieces having invariant positions within the widget. The initial width of an entry child also determines the maximal number of characters that can be inserted into it; when reaching this limit in an entry having the input focus, the latter is set automatically to the next enabled entry child. The same action is triggered by typing a character contained in the label following the current entry, if the latter is non-empty.</p> <p>Within a mentry widget, the <code>Left</code>, <code>Right</code>, <code>Home</code>, <code>End</code>, and <code>BackSpace</code> keys work across entry boundaries, while <code>Control-Left</code> and <code>Control-Right</code> play the same role as <code>Tab</code> and <code>Shift-Tab</code> in the case of ordinary entries.</p> <p>Some of the above features are implemented with the aid of the widget callback package Wcb, written in pure Tcl/Tk code as well. <b>The Mentry package requires version 3.1 or higher of Wcb</b>, whose download location is</p> <blockquote> <address> <a href="http://www.nemethi.de">http://www.nemethi.de</a> </address> </blockquote> <p id="ov_example">It is very easy to create a multi-entry widget. For example, the command</p> <blockquote> <pre> mentry::mentry .me -body {3 - 3 - 4} </pre> </blockquote> <p>will create a mentry widget consisting of two entries of width 3 and one of width 4, separated by <code>"-"</code> characters. With the command</p> <blockquote> <pre> foreach w [.me entries] { wcb::cbappend $w before insert wcb::checkStrForNum } </pre> </blockquote> <p>you can make sure that the three entries will only accept numeric input, thus providing a comfortable and safe user interface for editing 10-digit phone numbers.</p> <h3 id="ov_get">How to Get It?</h3> <p>Mentry is available for free download from the same URL as Wcb. The distribution file is <code>mentry3.10.tar.gz</code> for UNIX and <code>mentry3_10.zip</code> 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.</p> <p>Mentry is also included in tklib, which has the address</p> <blockquote> <address> <a href="http://core.tcl.tk/tklib">http://core.tcl.tk/tklib</a> </address> </blockquote> <h3 id="ov_install">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. For example, you can install it as a directory at the same level as the Tcl and Tk script libraries. The locations of these library directories are given by the <code>tcl_library</code> and <code>tk_library</code> variables, respectively.</p> <p>To install Mentry <i>on UNIX</i>, <code>cd</code> to the desired directory and unpack the distribution file <code>mentry3.10.tar.gz</code>:</p> <blockquote> <pre> gunzip -c mentry3.10.tar.gz | tar -xf - </pre> </blockquote> <p>On most UNIX systems this can be replaced with</p> <blockquote> <pre> tar -zxf mentry3.10.tar.gz </pre> </blockquote> <p>Both commands will create a directory named <code>mentry3.10</code>, with the subdirectories <code>demos</code>, <code>doc</code>, and <code>scripts</code>.</p> <p><i>On Windows</i>, use WinZip or some other program capable of unpacking the distribution file <code>mentry3_10.zip</code> into the directory <code>mentry3.10</code>, with the subdirectories <code>demos</code>, <code>doc</code>, and <code>scripts</code>.</p> <p>The file <code>mentryThemes.tcl</code> in the <code>scripts</code> directory is only needed for applications using the package Mentry_tile (see next section).</p> <p>Notice that in tklib the Mentry <code>demos</code> directory is replaced with the subdirectory <code>mentry</code> of the <code>examples</code> directory. Please take this into account when reading the <a href= "#examples">examples</a> below.</p> <h3 id="ov_use">How to Use It?</h3> <p>The Mentry distribution provides two packages, called <b>Mentry</b> and <b>Mentry_tile</b>. The main difference between the two is that Mentry_tile enables the tile-based, theme-specific appearance of mentry widgets; this package requires Tcl/Tk 8.4 or higher and tile 0.6 or higher. It is not possible to use both packages in one and the same application, because both are implemented in the same <code>mentry</code> namespace and provide identical commands.</p> <p>To be able to access the commands and variables defined in the package Mentry, your scripts must contain one of the lines</p> <blockquote> <pre> package require mentry ?<i>version</i>? package require Mentry ?<i>version</i>? </pre> </blockquote> <p>You can use either one of the two statements above because the file <code>mentry.tcl</code> contains both lines</p> <blockquote> <pre> package provide mentry ... package provide Mentry ... </pre> </blockquote> <p>Likewise, to be able to access the commands and variables defined in the package Mentry_tile, your scripts must contain one of the lines</p> <blockquote> <pre> package require mentry_tile ?<i>version</i>? package require Mentry_tile ?<i>version</i>? </pre> </blockquote> <p>Again, you can use either one of the two statements above because the file <code>mentry_tile.tcl</code> contains both lines</p> <blockquote> <pre> package provide mentry_tile ... package provide Mentry_tile ... </pre> </blockquote> <p>You are free to remove one of the above lines from <code>mentry.tcl</code> and <code>mentry_tile.tcl</code>, respectively, if you want to prevent the corresponding packages from making themselves known under two different names each. Of course, by doing so you restrict the argument of <code>package require</code> to a single name per package.</p> <p>Please note that <b>ActiveTcl versions 8.5 and later use a modified package mechanism, which only exports the all-lowercase names <code>mentry</code> and <code>mentry_tile</code></b>. For this reason, the <a href="#examples">examples</a> below use the statement <code>package require mentry</code>, and their tile-based counterparts invoke the command <code>package require mentry_tile</code>.</p> <p>Since the packages Mentry and Mentry_tile are implemented in the <code>mentry</code> namespace, you must either invoke the</p> <blockquote> <pre> namespace import mentry::<i>pattern</i> ?mentry::<i>pattern ...</i>? </pre> </blockquote> <p>command to import the <i>procedures</i> you need, or use qualified names like <code>mentry::mentry</code>. In the examples below we have chosen the latter approach.</p> <p>To access Mentry <i>variables</i>, you <i>must</i> use qualified names. There are only three Mentry variables (and one more when using Mentry_tile) that are designed to be accessed outside the namespace <code>mentry</code>:</p> <ul> <li>The variable <code>mentry::version</code> holds the current version number of the Mentry package.</li> <li>The variable <code>mentry::library</code> holds the location of the Mentry installation directory.</li> <li>The read-only variable <code>mentry::usingTile</code> has the value <code>0</code> in the package Mentry and the value <code>1</code> in Mentry_tile.</li> <li>In Mentry_tile the array <code>mentry::themeDefaults</code> holds the theme-specific default values of a series of Mentry configuration options.</li> </ul> <h3 id="ov_tile">More on Mentry_tile</h3> <p>As mentioned above, a mentry widget consists of entry and label widgets, embedded in a frame. While in the Mentry package all of these components are Tk widgets, the Mentry_tile package uses both Tk frame, tile entry, and Tk label widgets. Due to several incompatibilities between Tk and tile, it is currently not possible to replace all Tk widgets making up a mentry with their tile counterparts. Actually, the entry components of a tile-based mentry are embedded into Tk frame widgets, which in turn, together with the labels, are packed into a specially constructed tile entry rather than a frame. This somewhat complicated layout is needed because in several themes it is not possible to draw flat, borderless tile enty widgets.</p> <p>From the above it follows that <b>the package Mentry_tile will only work as expected if the Tk <code>frame</code> and <code>label</code> commands haven't been overridden by using <code>namespace import -force ttk::*</code> at global scope</b>. While earlier tile releases suggested using this command at global scope for the really adventurous, in newer tile versions this is considered a Really Bad Idea, causing many things to break. Instead, <b>you should explicitly invoke <code>ttk::frame</code>, <code>ttk::label</code>, etc. whenever you want to use a tile widget</b>.</p> <p>Another restriction to be taken into account (as of tile version 0.8) is due to the fact that the <code>(ttk::)style theme use</code> command can only be used to set the current theme, but not to retrieve it. For this reason, the package Mentry_tile makes use of the variable <code>ttk::currentTheme</code> or <code>tile::currentTheme</code> (depending on the tile version), which is set by the <code>ttk::setTheme</code> or <code>tile::setTheme</code> procedure. From this it follows that <b>the tile-based mentry widgets will only have the expected appearance if the platform-specific default theme is either left unchanged or replaced with another theme by invoking the procedure <code>ttk::setTheme</code> or <code>tile::setTheme</code>, depending on the current tile version</b>. (See also the <code><a href= "mentryThemes.html#setTheme">mentry::setTheme</a></code> command.)</p> <p>After these cautions concerning the use of tile, the rest of this section describes the differences between the packages Mentry and Mentry_tile.</p> <p>The Mentry_tile package checks whether the required Tk and tile versions are present, by executing the commands</p> <blockquote> <pre> package require Tk 8.4 if {$::tk_version < 8.5 || [regexp {^8\.5a[1-5]$} $::tk_patchLevel]} { package require tile 0.6 } </pre> </blockquote> <p>The second command above reflects the fact that, beginning with Tk 8.5a6, tile is integrated into the Tk core and therefore it should only be loaded explicitly when using an earlier Tk version.</p> <p>Apart from this and the <code>_tile</code> suffix in the <code>package require</code> command, the only difference (from the programmer's point of view) between the packages Mentry and Mentry_tile is related to the supported configuration options: The following Tk (entry) widget options, present in the Mentry package, are not supported by Mentry_tile, because they are not available for tile (entry) widgets: <code>-borderwidth</code>, <code>-disabledbackground</code>, <code>-disabledforeground</code>, <code>-highlightbackground</code>, <code>-highlightcolor</code>, <code>-highlightthickness</code>, <code>-insertbackground</code>, <code>-insertborderwidth</code>, <code>-insertofftime</code>, <code>-insertontime</code>, <code>-insertwidth</code>, <code>-readonlybackground</code>, <code>-relief</code>, <code>-selectbackground</code>, <code>-selectborderwidth</code>, and <code>-selectforeground</code>.</p> <p>Notice that the <code>-background</code> option doesn't work as expected if the current theme is <code>plastik</code>, <code>tileqt</code>, <code>vista</code>, or <code>xpnative</code>, because these themes silently ignore any attempt to change the background color of a tile entry widget.</p> <p>Finally, take into account that, when using the <code>tileqt</code> theme, the version number of the <code>tile::theme::tileqt</code> package must be 0.4 or higher, and <code>tileqt</code> itself won't work with tile versions earlier than 0.7.</p> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="examples">Examples</h2> <h3 id="ex_phoneNumber">A mentry Widget for Phone Numbers</h3> <p>Let's resume the <a href="#ov_example">example</a> mentioned in the Overview in a bit more systematical manner. First, we will write a procedure for creating a mentry widget that allows to display and edit 10-digit phone numbers and accepts any configuration options supported by the <code><a href="mentryWidget.html">mentry::mentry</a></code> command:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # phoneNumberMentry # # Creates a new mentry widget win that allows to display and edit 10-digit # phone numbers. Sets the type attribute of the widget to PhoneNumber and # returns the name of the newly created widget. #------------------------------------------------------------------------------</span> proc phoneNumberMentry {win args} { <span class="cmt"># # Create a mentry widget consisting of two entries of width 3 and one of # width 4, separated by "-" characters, and set its type to PhoneNumber #</span> eval [list mentry::mentry $win] $args $win configure -body {3 - 3 - 4} $win attrib type PhoneNumber <span class="cmt"># # Allow only decimal digits in all entry children; use # wcb::cbappend (or wcb::cbprepend) instead of wcb::callback # in order to keep the wcb::checkEntryLen callback, # registered by mentry::mentry for all entry children #</span> for {set n 0} {$n < 3} {incr n} { wcb::cbappend [$win entrypath $n] before insert wcb::checkStrForNum $win adjustentry $n "0123456789" } return $win } </pre> </blockquote> <p>The first argument <code>win</code> is the name of the widget, and the keyword <code>args</code> represents a list of configuration options and their values, just like in the case of the standard Tk widgets. The value <code>{3 - 3 - 4}</code> of the <code><a href= "mentryWidget.html#body">-body</a></code> option specifies that the mentry should consist of two entries of width 3 and one of width 4, separated by labels displaying the <code>"-"</code> character.</p> <p>Each mentry widget may have any number of private <b>attributes</b>, which can be set and retrieved with the aid of the <code><a href= "mentryWidget.html#attrib">attrib</a></code> subcommand of the Tcl procedure corresponding to the widget. We use this subcommand to define the <code>type</code> attribute of the newly created widget and set it to the value <code>"PhoneNumber"</code>. Although this is not strictly necessary, it will enable us to distinguish a phone number mentry from other multi-entry widgets.</p> <p>The <code>mentry::mentry</code> command registers the <code><a href= "wcbRef.html#entrycb">wcb::checkEntryLen</a></code> callback with each entry child of the mentry widget to restrict the number of characters that can be inserted into it to the initial width specified in the <code>-body</code> option. Besides this constraint, we want our entries to accept only decimal digits, therefore we use the <code><a href= "wcbRef.html#cbappend">wcb::cbappend</a></code> command to <i>add</i> the procedure <code><a href="wcbRef.html#entrycb">wcb::checkStrForNum</a></code> to the callback list of each entry child. By invoking <code><a href= "wcbRef.html#callback">wcb::callback</a></code> instead of <code>wcb::cbappend</code> (or <code><a href= "wcbRef.html#cbprepend">wcb::cbprepend</a></code>), we would <i>replace</i> the callback list with the one consisting of the single element <code>wcb::checkStrForNum</code>.</p> <p>Now we know that each entry child of the mentry widget will only accept a limited number of decimal digits. But are the widths of the entry children large enough to hold the maximal number of 3 or 4 decimal digits, respectively? In the case of a fixed-width font the answer is definitely "yes", and the same holds true for most proportionally-spaced fonts. There are, however, fonts in which not all decimal digits have the same width. For this reason, we invoke the <code><a href= "mentryWidget.html#adjustentry">adjustentry</a></code> subcommand for each entry child, passing to it as last argument a string consisting of the allowed characters, which in this example are the decimal digits. This subcommand will increase the entry widget's width if needed, to make it just large enough for texts of the child-specific maximal length, consisting of characters specified by that string.</p> <p>Our second procedure outputs a phone number to a mentry widget having a <code>type</code> attribute value of <code>"PhoneNumber"</code>:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # putPhoneNumber # # Outputs the phone number num to the mentry widget win of type PhoneNumber. # The phone number must be a string of length 10, consisting of decimal digits. #------------------------------------------------------------------------------</span> proc putPhoneNumber {num win} { <span class="cmt"># # Check the syntax of num #</span> if {[string length $num] != 10 || ![regexp {^[0-9]*$} $num]} { return -code error "expected 10 decimal digits but got \"$num\"" } <span class="cmt"># # Check the widget and display the properly formatted phone number #</span> checkIfPhoneNumberMentry $win $win put 0 [string range $num 0 2] [string range $num 3 5] \ [string range $num 6 9] } </pre> </blockquote> <p>We use the <code><a href="mentryWidget.html#put">put</a></code> subcommand of the Tcl procedure corresponding to the mentry widget to display the three substrings of the given phone number in the corresponding entries, starting with the entry child whose index is specified as the first argument following the word <code>put</code>.</p> <p>Next, we need a procedure that returns the phone number contained in a mentry widget having a <code>type</code> attribute value of <code>"PhoneNumber"</code>:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # getPhoneNumber # # Returns the phone number contained in the mentry widget win of type # PhoneNumber. #------------------------------------------------------------------------------</span> proc getPhoneNumber win { <span class="cmt"># # Check the widget #</span> checkIfPhoneNumberMentry $win <span class="cmt"># # Generate an error if any entry child is empty or incomplete #</span> for {set n 0} {$n < 3} {incr n} { if {[$win isempty $n]} { focus [$win entrypath $n] return -code error EMPTY } if {![$win isfull $n]} { focus [$win entrypath $n] return -code error INCOMPL } } <span class="cmt"># # Return the phone number built from the # values contained in the entry children #</span> $win getarray strs return $strs(0)$strs(1)$strs(2) } </pre> </blockquote> <p>The procedure runs over the indices of the entry children of the given mentry widget and invokes the <code><a href= "mentryWidget.html#isempty">isempty</a></code> and <code><a href= "mentryWidget.html#isfull">isfull</a></code> subcommands of the Tcl command corresponding to the given mentry widget. If one of the entries is found to be empty or incomplete, the procedure gets its path name by calling the <code><a href="mentryWidget.html#entrypath">entrypath</a></code> subcommand, sets the focus to that entry, raises an error, and returns the value <code>"EMPTY"</code> or <code>"INCOMPL"</code>, respectively. The application invoking this procedure should then display an appropriate error message corresponding to the return value.</p> <p>Notice that the number <code>3</code> in the <code>for</code> loop above is nothing else than <code>[$win <a href= "mentryWidget.html#entrycount">entrycount</a>]</code>. Also, it would be sufficient to check whether all entry children are full, because an empty entry is at the same time incomplete. The preliminary check whether an entry is empty is just made for the user's convenience.</p> <p>To build the phone number from the values contained in the entry children, we use a temporary array variable and invoke the <code><a href= "mentryWidget.html#getarray">getarray</a></code> subcommand, which copies the contents of the entries to the corresponding array elements.</p> <p>The last two procedures presented above contain an invocation of the command <code>checkIfPhoneNumberMentry</code>, which is implemented as folows:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # checkIfPhoneNumberMentry # # Generates an error if win is not a mentry widget of type PhoneNumber. #------------------------------------------------------------------------------</span> proc checkIfPhoneNumberMentry win { if {![winfo exists $win]} { return -code error "bad window path name \"$win\"" } if {[string compare [winfo class $win] "Mentry"] != 0 || [string compare [$win attrib type] "PhoneNumber"] != 0} { return -code error \ "window \"$win\" is not a mentry widget for phone numbers" } } </pre> </blockquote> <p>This procedure retrieves the value of the <code>type</code> attribute of its argument to check whether the latter denotes a mentry widget for phone numbers (remember that this attribute was set to the value <code>"PhoneNumber"</code> in the procedure <code>phoneNumberMentry</code>).</p> <p>The four procedures discussed above are implemented in the file <code>phonenumber.tcl</code>, contained in the <code>demos</code> directory. This script also puts them together to build a small application displaying the following figure:</p> <blockquote> <img src="phonenumber.png" alt="Phone Number" width="269" height="228"> </blockquote> <p>Here is the relevant code fragment:</p> <blockquote> <pre> package require mentry set title "Phone Number" wm title . $title <span class="cmt"># # Add some entries to the Tk option database #</span> source [file join [file dirname [info script]] option.tcl] . . . <span class="cmt"># # Frame .f with a mentry displaying a phone number #</span> frame .f label .f.l -text "A mentry widget for phone numbers:" phoneNumberMentry .f.me -background white pack .f.l .f.me <span class="cmt"># # Message strings corresponding to the values # returned by getPhoneNumber on failure #</span> array set msgs { EMPTY "Field value missing" INCOMPL "Incomplete field value" } <span class="cmt"># # Button .get invoking the procedure getPhoneNumber #</span> button .get -text "Get from mentry" -command { if {[catch { set num "" set num [getPhoneNumber .f.me] } result] != 0} { bell tk_messageBox -icon error -message $msgs($result) \ -title $title -type ok } } <span class="cmt"># # Label .num displaying the result of getPhoneNumber #</span> label .num -textvariable num -background white . . . putPhoneNumber 1234567890 .f.me focus [.f.me entrypath 0] </pre> </blockquote> <h3 id="ex_ethernetAddr">A mentry Widget for Ethernet Addresses</h3> <p>Ethernet addresses are usuallly written in the form <code>"XX:XX:XX:XX:XX:XX"</code>, where each <code>"X"</code> is a hexadecimal digit. The file <code>ethernetaddr.tcl</code> in the <code>demos</code> directory contains the steps needed to create and use a multi-entry widget for displaying and editing Ethernet addresses. It implements the procedures <code>ethernetAddrMentry</code>, <code>putEthernetAddr</code>, and <code>getEthernetAddr</code>; the last two invoke the helper procedure <code>checkIfEthernetAddrMentry</code>, while the first one is implemented as follows:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # ethernetAddrMentry # # Creates a new mentry widget win that allows to display and edit Ethernet # addresses. Sets the type attribute of the widget to EthernetAddr and returns # the name of the newly created widget. #------------------------------------------------------------------------------</span> proc ethernetAddrMentry {win args} { <span class="cmt"># # Create a mentry widget consisting of 6 entry children of # width 2, separated by colons, and set its type to EthernetAddr #</span> eval [list mentry::mentry $win] $args $win configure -body {2 : 2 : 2 : 2 : 2 : 2} $win attrib type EthernetAddr <span class="cmt"># # Install automatic uppercase conversion and allow only hexadecimal # digits in all entry children; use wcb::cbappend (or wcb::cbprepend) # instead of wcb::callback in order to keep the wcb::checkEntryLen # callback, registered by mentry::mentry for all entry children #</span> for {set n 0} {$n < 6} {incr n} { wcb::cbappend [$win entrypath $n] before insert wcb::convStrToUpper \ {wcb::checkStrForRegExp {^[0-9A-F]*$}} $win adjustentry $n "0123456789ABCDEF" } return $win } </pre> </blockquote> <p>Notice again the invocation of the <code><a href= "mentryWidget.html#adjustentry">adjustentry</a></code> subcommand of the Tcl command associated with the mentry widget, for each of its entry children. This is necessary, because in the case of a proportionally-spaced font the characters <code>A</code> - <code>F</code> need more room than the digits <code>0</code> - <code>9</code> (and it is not even guaranteed that the latters have the same width).</p> <p>The procedure <code>putEthernetAddr</code> expects as its first argument a string of the form <code>"XX:XX:XX:XX:XX:XX"</code>, where each <code>"XX"</code> must be a hexadecimal string in the range <code>0</code> - <code>255</code>:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # putEthernetAddr # # Outputs the Ethernet address addr to the mentry widget win of type # EthernetAddr. The address must be a string of the form XX:XX:XX:XX:XX:XX, # where each XX must be a hexadecimal string in the range 0 - 255. Leading # zeros are allowed (but not required), hence the components may have more (but # also less) than two characters; the procedure displays them with exactly two # digits. #------------------------------------------------------------------------------</span> proc putEthernetAddr {addr win} { set errorMsg "expected an Ethernet address but got \"$addr\"" <span class="cmt"># # Check the syntax of addr #</span> set lst [split $addr :] if {[llength $lst] != 6} { return -code error $errorMsg } <span class="cmt"># # Try to convert the 6 components of addr to hexadecimal # strings and check whether they are in the range 0 - 255 #</span> for {set n 0} {$n < 6} {incr n} { set val 0x[lindex $lst $n] if {[catch {format "%02X" $val} str$n] != 0 || $val < 0 || $val > 255} { return -code error $errorMsg } } <span class="cmt"># # Check the widget and display the properly formatted Ethernet address #</span> checkIfEthernetAddrMentry $win $win put 0 $str0 $str1 $str2 $str3 $str4 $str5 } </pre> </blockquote> <p>The procedure <code>getEthernetAddr</code> raises an error if any entry child of the given mentry widget is empty. It accepts also entry strings of length one, but in the return value all components will have exactly two digits:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # getEthernetAddr # # Returns the Ethernet address contained in the mentry widget win of type # EthernetAddr. #------------------------------------------------------------------------------</span> proc getEthernetAddr win { <span class="cmt"># # Check the widget #</span> checkIfEthernetAddrMentry $win <span class="cmt"># # Generate an error if any entry child is empty #</span> for {set n 0} {$n < 6} {incr n} { if {[$win isempty $n]} { focus [$win entrypath $n] return -code error EMPTY } } <span class="cmt"># # Return the properly formatted Ethernet address built # from the values contained in the entry children #</span> $win getarray strs return [format "%02X:%02X:%02X:%02X:%02X:%02X" \ 0x$strs(0) 0x$strs(1) 0x$strs(2) 0x$strs(3) 0x$strs(4) 0x$strs(5)] } </pre> </blockquote> <p>We will not show the rest of the code here, because it is very similar to the one presented in the preceding section. The mentry widget for Ethernet addresses looks like in the following figure:</p> <blockquote> <img src="ethernetaddr.png" alt="Ethernet Address" width="290" height="243"> </blockquote> <h3 id="ex_dateTime">Using mentry Widgets for Date and Time</h3> <p>Multi-entry widgets can be used to display and edit date and time in a great variety of formats. The Mentry package contains ready-to-use commands for this purpose:</p> <ul> <li>The procedure <code><a href= "mentryDateTime.html#dateMentry">mentry::dateMentry</a></code> creates a new mentry widget for displaying and editing a date according to the format passed to the command as a three-character string consisting of the field descriptor characters <code>"d"</code>, <code>"m"</code>, and <code>"y"</code> or <code>"Y"</code>, known from the <code>clock format</code> command. Another argument expected by the procedure is the string (usually a single character) to be displayed in the labels separating the three components of the date.</li> <li class="tm">Similarly, the procedure <code><a href= "mentryDateTime.html#timeMentry">mentry::timeMentry</a></code> creates a new mentry widget for displaying and editing a time according to the format passed to the command as a two- or three-character string consisting of the following field descriptor characters of the <code>clock format</code> command: <code>"H"</code> or <code>"I"</code>, followed by <code>"M"</code>, and optionally the letter <code>"S"</code>. An <code>"H"</code> as first character specifies the time format <code>"%H:%M"</code> or <code>"%H:%M:%S"</code> (i.e., with the hour between <code>0</code> and <code>23</code>), while the letter <code>"I"</code> stands for <code>"%I:%M %p"</code> or <code>"%I:%M:%S %p"</code> (i.e., with AM/PM indicator). The procedure expects the separator string (which is usually the <code>":"</code> character) as another command-line argument.</li> <li class="tm">Finally, the procedure <code><a href= "mentryDateTime.html#dateTimeMentry">mentry::dateTimeentry</a></code> creates a new mentry widget for displaying and editing a date & time according to the format passed to the command as a 5- or 6-character string, with the first three characters consisting of the letters <code>"d"</code>, <code>"m"</code>, and <code>"y"</code> or <code>"Y"</code>, followed by two or three further field descriptor characters of the <code>clock format</code> command, which must be: <code>"H"</code> or <code>"I"</code>, then <code>"M"</code>, and optionally the letter <code>"S"</code>. The procedure expects two more arguments, specifying the separators to be used in the date and time parts of the mentry widget, respectively.</li> </ul> <p>Before describing the other date- and time-related commands provided by the Mentry package, let's see how the first two of the above are invoked in the file <code>datetime1.tcl</code>, located in the <code>demos</code> directory:</p> <blockquote> <pre> package require mentry set title "Date & Time" wm title . $title <span class="cmt"># # Add some entries to the Tk option database #</span> source [file join [file dirname [info script]] option.tcl] <span class="cmt"># # Date and time formats supported by this demo # script and the corresponding field separators #</span> array set dateFmts {0 mdy 1 dmy 2 Ymd} array set dateSeps {0 / 1 . 2 - } array set timeFmts {0 IMS 1 HMS} array set timeSeps {0 : 1 : } <span class="cmt"># # Choose the date & time formats; don't use the %p field descriptor # for displaying the AM/PM indicator, because it doesn't work on # UNIX if Tcl/Tk 8.4 or higher is used in a non-default locale #</span> wm withdraw . set clockVal [clock seconds] if {[clock format $clockVal -format "%H"] < 12} { set meridian AM } else { set meridian PM } set dateIdx [tk_dialog .choice $title "Please choose a date format" {} -1 \ [clock format $clockVal -format "%m/%d/%y"] \ [clock format $clockVal -format "%d.%m.%y"] \ [clock format $clockVal -format "%Y-%m-%d"]] set timeIdx [tk_dialog .choice $title "Please choose a time format" {} -1 \ [clock format $clockVal -format "%I:%M:%S $meridian"] \ [clock format $clockVal -format "%H:%M:%S"]] wm deiconify . <span class="cmt"># # Frame .f with mentries displaying the date & time #</span> frame .f label .f.lDate -text "Date: " mentry::dateMentry .f.date $dateFmts($dateIdx) $dateSeps($dateIdx) \ -justify center -background white frame .f.gap -width 10 label .f.lTime -text "Time: " mentry::timeMentry .f.time $timeFmts($timeIdx) $timeSeps($timeIdx) \ -justify center -background white pack .f.lDate .f.date .f.gap .f.lTime .f.time -side left </pre> </blockquote> <p>Before displaying the main window, the script lets the user choose one out of three date and one out of two time formats. The corresponding command-line arguments passed to <code>mentry::dateMentry</code> and <code>mentry::timeMentry</code> are taken from the arrays <code>dateFmts</code>, <code>dateSeps</code>, <code>timeFmts</code>, and <code>timeSeps</code>.</p> <p>The following figure corresponds to the choices <code>dateIdx = 2</code> and <code>timeIdx = 1</code>:</p> <blockquote> <img src="datetime1.png" alt="Date & Time" width="279" height="209"> </blockquote> <p>The demo script <code>datetime2.tcl</code> displays both the date and time in the same mentry widget, with the aid of the third command described above:</p> <blockquote> <pre> <span class="cmt"># # Frame .f with a mentry displaying the date & time #</span> frame .f label .f.l -text "Date & time: " mentry::dateTimeMentry .f.me $dateFmts($dateIdx)$timeFmts($timeIdx) \ $dateSeps($dateIdx) $timeSeps($timeIdx) \ -justify center -background white pack .f.l .f.me </pre> </blockquote> <blockquote> <img src="datetime2.png" alt="Date & Time" width="272" height="209"> </blockquote> <p>The Mentry package exports two further commands for date, time, and date & time mentries:</p> <ul> <li>The procedure <code><a href= "mentryDateTime.html#putClockVal">mentry::putClockVal</a></code> outputs the date, time, or date & time corresponding to an integer clock value specified as its first argument to a date, time, or date & time mentry widget, passed to it as the second parameter. Like the <code>clock format</code> command, the procedure accepts the optional argument pair <code>-gmt <i>boolean</i></code>.</li> <li class="tm">The procedure <code><a href= "mentryDateTime.html#getClockVal">mentry::getClockVal</a></code> returns the clock value corresponding to the date, time, or date & time contained in the date, time, or date & time mentry specified as its first argument. Like the <code>clock scan</code> command, the procedure accepts the optional argument pairs <code>-base <i>clockValue</i></code> and <code>-gmt <i>boolean</i></code>. On failure, the procedure sets the focus to the first erronous entry child, generates an error, and returns one of the values contained in the following code fragment taken from the scripts <code>datetime1.tcl</code> and <code>datetime2.tcl</code>: <blockquote> <pre> <span class="cmt"># # Message strings corresponding to the values # returned by mentry::getClockVal on failure #</span> array set msgs { EMPTY "Field value missing" BAD "Invalid field value" BAD_DATE "Invalid date" BAD_YEAR "Unsupported year" } </pre> </blockquote> <p>The string <code>"EMPTY"</code> is returned if any entry child (except the one containing the seconds) was found to be empty. The value <code>"BAD"</code> means a day, month, or hour value of <code>0</code> (the hour must not be <code>0</code> if the AM/PM indicator is present). The string <code>"BAD_DATE"</code> is returned when the <year, month, day> triple is invalid (note that the procedure is aware of leap years). Finally, even if this triple is valid, the conversion (made with the aid of the <code>clock scan</code> command) can fail because of an unsupported year value (e.g., between <code>38</code> and <code>70</code>); in this case the string <code>"BAD_YEAR"</code> is returned.</p> </li> </ul> <p>The demo script <code>datetime1.tcl</code> invokes the last two commands as follows:</p> <blockquote> <pre> <span class="cmt"># # Button .get invoking the procedure mentry::getClockVal #</span> button .get -text "Get from mentries" -command { if {[catch { set dateTime "" set base [mentry::getClockVal .f.date] set clockVal [mentry::getClockVal .f.time -base $base] set dateTime [clock format $clockVal -format "%c"] } result] != 0} { bell tk_messageBox -icon error -message $msgs($result) \ -title $title -type ok } } <span class="cmt"># # Label .dateTime displaying the result of mentry::getClockVal #</span> label .dateTime -textvariable dateTime -background white . . . set clockVal [clock seconds] mentry::putClockVal $clockVal .f.date mentry::putClockVal $clockVal .f.time focus [.f.date entrypath 0] </pre> </blockquote> <p>To obtain the clock value from the mentry widgets <code>.f.date</code> and <code>.f.time</code>, we first pass the name of the date mentry to the command <code>mentry::getClockVal</code> and then use the result as the value of the <code>-base</code> option when passing the name of the time mentry to the same procedure.</p> <p>The demo script <code>datetime2.tcl</code> is simpler:</p> <blockquote> <pre> <span class="cmt"># # Button .get invoking the procedure mentry::getClockVal #</span> button .get -text "Get from mentry" -command { if {[catch { set dateTime "" set clockVal [mentry::getClockVal .f.me] set dateTime [clock format $clockVal -format "%c"] } result] != 0} { bell tk_messageBox -icon error -message $msgs($result) \ -title $title -type ok } } <span class="cmt"># # Label .dateTime displaying the result of mentry::getClockVal #</span> label .dateTime -textvariable dateTime -background white . . . set clockVal [clock seconds] mentry::putClockVal $clockVal .f.me focus [.f.me entrypath 0] </pre> </blockquote> <h3 id="ex_tile">Tile-Based Demo Scripts</h3> <p>The Mentry distribution contains also tile-based counterparts of the demo scripts discussed above. As described in the <a href="#ov_tile">More on Mentry_tile</a> section of this tutorial, it is quite easy to port an application using the Mentry package to one based on Mentry_tile. For example, let's see how to transform the demo script <code>phonenumber.tcl</code> into a tile-based one, called <code>phonenumber_tile.tcl</code>. The changes are shown below in <span class="red">red</span> color:</p> <blockquote> <pre> package require mentry<span class="red">_tile</span> set title "Phone Number" wm title . $title <span class="cmt"># # Add some entries to the Tk option database #</span> source [file join [file dirname [info script]] option<span class="red">_tile</span>.tcl] . . . <span class="red"># # Improve the window's appearance by using a tile # frame as a container for the other widgets # ttk::frame .base</span> <span class="cmt"># # Frame <span class="red">.base</span>.f with a mentry displaying a phone number #</span> <span class="red">ttk::</span>frame .base.f <span class="red">ttk::</span>label .base.f.l -text "A mentry widget for phone numbers:" phoneNumberMentry <span class="red">.base</span>.f.me pack <span class="red">.base</span>.f.l <span class="red">.base</span>.f.me <span class="cmt"># # Message strings corresponding to the values # returned by getPhoneNumber on failure #</span> array set msgs { EMPTY "Field value missing" INCOMPL "Incomplete field value" } <span class="cmt"># # Button <span class="red">.base</span>.get invoking the procedure getPhoneNumber #</span> <span class="red">ttk</span>::button <span class="red">.base</span>.get -text "Get from mentry" -command { if {[catch { set num "" set num [getPhoneNumber <span class="red">.base</span>.f.me] } result] != 0} { bell tk_messageBox -icon error -message $msgs($result) \ -title $title -type ok } } <span class="cmt"># # Label <span class="red">.base</span>.num displaying the result of getPhoneNumber #</span> <span class="red">ttk::</span>label <span class="red">.base</span>.num -textvariable num -background white . . . putPhoneNumber 1234567890 <span class="red">.base</span>.f.me focus [<span class="red">.base</span>.f.me entrypath 0] </pre> </blockquote> <p>That's all! The resulting window has a nice theme-specific appearance:</p> <blockquote> <img src="phonenumber_tile.png" alt="Phone Number" width="267" height="216"> </blockquote> <p>The only Mentry-specific change in the code above consists of the use of the <code>_tile</code> suffix in <code>mentry_tile</code>.</p> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/mentry/mentryDateTime.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 |
<!DOCTYPE html> <html> <head> <title>Multi-Entry Widgets for Date and Time</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="mentry, widget, date, time, clock"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Multi-Entry Widgets for Date and Time</h1> <h2>For Mentry Version 3.10</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#dateMentry">The <code><b>mentry::dateMentry</b></code> Command</a></li> <li><a href="#timeMentry">The <code><b>mentry::timeMentry</b></code> Command</a></li> <li><a href="#dateTimeMentry">The <code><b>mentry::dateTimeMentry</b></code> Command</a></li> <li><a href="#putClockVal">The <code><b>mentry::putClockVal</b></code> Command</a></li> <li><a href="#getClockVal">The <code><b>mentry::getClockVal</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="dateMentry">The <code><b>mentry::dateMentry</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::dateMentry</code> – Create and manipulate mentry widgets for date</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::dateMentry</b> <i>pathName format separator</i> ?<i>options</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command creates a new mentry widget <code><i>pathName</i></code> for displaying and editing a date according to the <code><i>format</i></code> argument, which must be a string of length 3, consisting of the letters <code><b>"d"</b></code> for the day (<code>01</code> - <code>31</code>), <code><b>"m"</b></code> for the month (<code>01</code> - <code>12</code>), and <code><b>"y"</b></code> or <code><b>"Y"</b></code> for the year without century (<code>00</code> - <code>99</code>) or with century (e.g., <code>2008</code>), in an arbitrary order. These field descriptor characters have the same meanings as in the <code><b>clock format</b></code> command. The <code><i>separator</i></code> argument specifies the text to be displayed in the labels separating the three entry children of the mentry widget (the most common values are the <code><b>"/"</b></code>, <code><b>"-"</b></code>, and <code><b>"."</b></code> characters). The supported <code><i>options</i></code> are the same as in the case of the <code><b><a href="mentryWidget.html">mentry::mentry</a></b></code> command.</dd> <dd class="tm">The command sets the <code><b>type</b></code> attribute of the widget to the value <code>"Date"</code>, saves the value of <code><i>format</i></code> in its <code><b>format</b></code> attribute, and returns the name of the newly created widget.</dd> <dt class="tm"><b>DEFAULT BINDINGS</b></dt> <dd>The <code><b>mentry::dateMentry</b></code> command defines four new keyboard bindings for the entry children of the mentry widget it creates: The <code>Up</code> key increments the entry's value by 1 if the latter is less than the allowed maximum for that child. Similarly, the <code>Down</code> key decrements the entry's value by 1 if the latter is greater than the allowed minimum for that child. The <code>Prior</code> key increments the entry's value by at most 10 if the latter is less than the allowed maximum for that child. Similarly, the <code>Next</code> key decrements the entry's value by at most 10 if the latter is greater than the allowed minimum for that child. If the entry is empty then all of these keys insert the child-specific minimum value into the entry.</dd> <dd class="tm">The actions performed by the <code>Up</code> and <code>Down</code> keys can also be triggered by rolling the mouse wheel. In addition, on Mac OS Classic and Mac OS X Aqua, the actions performed by the <code>Prior</code> and <code>Next</code> keys can also be triggered by rolling the mouse wheel while holding down the <code>Option</code> key.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, widget, date</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="timeMentry">The <code><b>mentry::timeMentry</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::timeMentry</code> – Create and manipulate mentry widgets for time</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::timeMentry</b> <i>pathName format separator</i> ?<i>options</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command creates a new mentry widget <code><i>pathName</i></code> for displaying and editing a time according to the <code><i>format</i></code> argument, which must be a string of length 2 or 3, consisting of the following field descriptor characters of the <code><b>clock format</b></code> command: <code><b>"H"</b></code> or <code><b>"I"</b></code>, followed by <code><b>"M"</b></code>, and optionally the letter <code><b>"S"</b></code>. An <code><b>"H"</b></code> as first character specifies the time format <code><b>"%H:%M"</b></code> or <code><b>"%H:%M:%S"</b></code> (i.e., with the hour between <code>0</code> and <code>23</code>), while the letter <code><b>"I"</b></code> stands for <code><b>"%I:%M %p"</b></code> or <code><b>"%I:%M:%S %p"</b></code> (i.e., with AM/PM indicator). The <code><i>separator</i></code> argument specifies the text to be displayed in the labels separating the entry children of the mentry widget (this is usually the <code><b>":"</b></code> character). The <code><i>options</i></code> are the same as in the case of the <code><b><a href= "mentryWidget.html">mentry::mentry</a></b></code> command.</dd> <dd class="tm">The command sets the <code><b>type</b></code> attribute of the widget to the value <code>"Time"</code>, saves the value of <code><i>format</i></code> in its <code><b>format</b></code> attribute, and returns the name of the newly created widget.</dd> <dt class="tm"><b>DEFAULT BINDINGS</b></dt> <dd>The <code><b>mentry::timeMentry</b></code> command defines four new keyboard bindings for the entry children of the mentry widget it creates: The <code>Up</code> key increments the entry's value by 1 if the latter is less than the allowed maximum for that child. Similarly, the <code>Down</code> key decrements the entry's value by 1 if the latter is greater than the allowed minimum for that child. The <code>Prior</code> key increments the entry's value by at most 10 if the latter is less than the allowed maximum for that child. Similarly, the <code>Next</code> key decrements the entry's value by at most 10 if the latter is greater than the allowed minimum for that child. If the entry is empty then all of these keys insert the child-specific minimum value into the entry.</dd> <dd class="tm">The actions performed by the <code>Up</code> and <code>Down</code> keys can also be triggered by rolling the mouse wheel. In addition, on Mac OS Classic and Mac OS X Aqua, the actions performed by the <code>Prior</code> and <code>Next</code> keys can also be triggered by rolling the mouse wheel while holding down the <code>Option</code> key.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, widget, time</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="dateTimeMentry">The <code><b>mentry::dateTimeMentry</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::dateTimeMentry</code> – Create and manipulate mentry widgets for date & time</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::dateTimeMentry</b> <i>pathName format dateSeparator timeSeparator</i> ?<i>options</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command creates a new mentry widget <code><i>pathName</i></code> for displaying and editing a date & time according to the <code><i>format</i></code> argument, which must be a string of length 5 or 6, with the first 3 characters consisting of the letters <code><b>"d"</b></code> for the day (<code>01</code> - <code>31</code>), <code><b>"m"</b></code> for the month (<code>01</code> - <code>12</code>), and <code><b>"y"</b></code> or <code><b>"Y"</b></code> for the year without century (<code>00</code> - <code>99</code>) or with century (e.g., <code>2008</code>), in an arbitrary order, followed by 2 or 3 further field descriptor characters of the <code><b>clock format</b></code> command, which must be: <code><b>"H"</b></code> or <code><b>"I"</b></code>, then <code><b>"M"</b></code>, and optionally the letter <code><b>"S"</b></code>. An <code><b>"H"</b></code> specifies the time format <code><b>"%H:%M"</b></code> or <code><b>"%H:%M:%S"</b></code> (i.e., with the hour between <code>0</code> and <code>23</code>), while the letter <code><b>"I"</b></code> stands for <code><b>"%I:%M %p"</b></code> or <code><b>"%I:%M:%S %p"</b></code> (i.e., with AM/PM indicator). The <code><i>dateSeparator</i></code> argument specifies the text to be displayed in the labels separating the entry children in the date part of the mentry widget (the most common values are the <code><b>"/"</b></code>, <code><b>"-"</b></code>, and <code><b>"."</b></code> characters). Similarly, the <code><i>timeSeparator</i></code> argument stands for the text to be displayed in the labels separating the entry children in the time part of mentry widget (this is usually the <code><b>":"</b></code> character). The date and time parts in turn are separated from each other by a space character. The supported <code><i>options</i></code> are the same as in the case of the <code><b><a href= "mentryWidget.html">mentry::mentry</a></b></code> command.</dd> <dd class="tm">The command sets the <code><b>type</b></code> attribute of the widget to the value <code>"DateTime"</code>, saves the value of <code><i>format</i></code> in its <code><b>format</b></code> attribute, and returns the name of the newly created widget.</dd> <dt class="tm"><b>DEFAULT BINDINGS</b></dt> <dd>The <code><b>mentry::dateTimeMentry</b></code> command defines four new keyboard bindings for the entry children of the mentry widget it creates: The <code>Up</code> key increments the entry's value by 1 if the latter is less than the allowed maximum for that child. Similarly, the <code>Down</code> key decrements the entry's value by 1 if the latter is greater than the allowed minimum for that child. The <code>Prior</code> key increments the entry's value by at most 10 if the latter is less than the allowed maximum for that child. Similarly, the <code>Next</code> key decrements the entry's value by at most 10 if the latter is greater than the allowed minimum for that child. If the entry is empty then all of these keys insert the child-specific minimum value into the entry.</dd> <dd class="tm">The actions performed by the <code>Up</code> and <code>Down</code> keys can also be triggered by rolling the mouse wheel. In addition, on Mac OS Classic and Mac OS X Aqua, the actions performed by the <code>Prior</code> and <code>Next</code> keys can also be triggered by rolling the mouse wheel while holding down the <code>Option</code> key.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, widget, date, time</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="putClockVal">The <code><b>mentry::putClockVal</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::putClockVal</code> – Output a clock value to a date, time, or date & time mentry</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::putClockVal</b> <i>clockValue</i> <i>pathName</i> ?<b>-gmt</b> <i>boolean</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command outputs the date, time, or date & time corresponding to the integer <code><i>clockValue</i></code> to the mentry widget <code><i>pathName</i></code>, which must have been created with the <code><b><a href="#dateMentry">mentry::dateMentry</a></b></code>, <code><b><a href="#timeMentry">mentry::timeMentry</a></b></code>, or <code><b><a href="#dateTimeMentry">mentry::dateTimeMentry</a></b></code> command (this is checked by examining the widget's <code><b>type</b></code> attribute, which must have the value <code>"Date"</code>, <code>"Time"</code>, or <code>"DateTime"</code>).</dd> <dd class="tm">Like in the case of the <code><b>clock format</b></code> command, the optional argument pair <code><b>-gmt</b> <i>boolean</i></code> specifies whether the clock value is to be formatted as Greenwich Mean Time or according to the local timezone as defined by the operating environment.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, widget, date, time, clock</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="getClockVal">The <code><b>mentry::getClockVal</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::getClockVal</code> – Get the clock value from a date, time, or date & time mentry</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::getClockVal</b> <i>pathName</i> ?<b>-base</b> <i>clockValue</i>? ?<b>-gmt</b> <i>boolean</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command returns the clock value corresponding to the date, time, or date & time contained in the mentry widget <code><i>pathName</i></code>, which must have been created with the <code><b><a href= "#dateMentry">mentry::dateMentry</a></b></code>, <code><b><a href= "#timeMentry">mentry::timeMentry</a></b></code>, or <code><b><a href= "#dateTimeMentry">mentry::dateTimeMentry</a></b></code> command (this is checked by examining the widget's <code><b>type</b></code> attribute, which must have the value <code>"Date"</code>, <code>"Time"</code>, or <code>"DateTime"</code>).</dd> <dd class="tm">Like in the case of the <code><b>clock scan</b></code> command, the optional argument pair <code><b>-base</b> <i>clockValue</i></code> specifies that the date contained in <code><i>clockValue</i></code> is to be used when getting the clock value from the given mentry widget, and the optional argument pair <code><b>-gmt</b> <i>boolean</i></code> specifies whether the clock value is to be calculated relative to Greenwich Mean Time or according to the local timezone as defined by the operating environment.</dd> <dd class="tm">If an error occurs during the conversion, the command sets the focus to the first erronous entry child, generates an error, and returns one of the values contained in the following table:</dd> <dd class="tm"> <table border="2" cellspacing="0" cellpadding="3"> <tr bgcolor="#FFFFE0"> <th align="left" nowrap>Return Value</th> <th align="left">Meaning</th> </tr> <tr> <td><code>"EMPTY"</code></td> <td>Any entry child (except the one containing the seconds) is empty.</td> </tr> <tr> <td><code>"BAD"</code></td> <td>The value of the day, month, or hour (the latter only if the AM/PM indicator is present) is <code>0</code>.</td> </tr> <tr> <td><code>"BAD_DATE"</code></td> <td>The <year, month, day> triple is invalid (note that the command is aware of leap years).</td> </tr> <tr> <td><code>"BAD_YEAR"</code></td> <td>The above triple is valid, but the conversion (made with the aid of the <code><b>clock scan</b></code> command) failed because of an unsupported year value (e.g., between <code>38</code> and <code>70</code>).</td> </tr> </table> </dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, widget, date, time, clock</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/mentry/mentryFixedPoint.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 |
<!DOCTYPE html> <html> <head> <title>Multi-Entry Widgets for Real Numbers in Fixed-Point Format</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="mentry, widget, real number"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Multi-Entry Widgets for Real Numbers<br> in Fixed-Point Format</h1> <h2>For Mentry Version 3.10</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#fixedPointMentry">The <code><b>mentry::fixedPointMentry</b></code> Command</a></li> <li><a href="#putReal">The <code><b>mentry::putReal</b></code> Command</a></li> <li><a href="#getReal">The <code><b>mentry::getReal</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="fixedPointMentry">The <code><b>mentry::fixedPointMentry</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::fixedPointMentry</code> – Create and manipulate mentry widgets for real numbers in fixed-point format</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::fixedPointMentry</b> <i>pathName count1 count2</i> ?<b>-comma</b>? ?<i>options</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command creates a new mentry widget <code><i>pathName</i></code> for displaying and editing real numbers in fixed-point format, with <code><i>count1</i></code> characters before and <code><i>count2</i></code> digits after the decimal point. Both <code><i>count1</i></code> and <code><i>count2</i></code> must be positive integers. The mentry will have two entry children, separated by a label displaying a <code><b>"."</b></code> character by default; the optional <code><b>-comma</b></code> switch changes the label text to <code><b>","</b></code>. The supported <code><i>options</i></code> are the same as in the case of the <code><b><a href= "mentryWidget.html">mentry::mentry</a></b></code> command.</dd> <dd class="tm">The command sets the <code><b>type</b></code> attribute of the widget to the value <code>"FixedPoint"</code> and returns the name of the newly created widget.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, widget, real number</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="putReal">The <code><b>mentry::putReal</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::putReal</code> – Output a real number to a mentry of type <code>"FixedPoint"</code></dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::putReal</b> <i>number</i> <i>pathName</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command outputs the real number <code><i>number</i></code> to the mentry widget <code><i>pathName</i></code>, which must have been created with the <code><b><a href= "#fixedPointMentry">mentry::fixedPointMentry</a></b></code> command (this is checked by examining the widget's <code><b>type</b></code> attribute, which must have the value <code>"FixedPoint"</code>).</dd> <dd class="tm">The command generates an error if the number does not fit into the widget because it has too many characters before the decimal point.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, widget, real number</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="getReal">The <code><b>mentry::getReal</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::getReal</code> – Get a real number from a mentry of type <code>"FixedPoint"</code></dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::getReal</b> <i>pathName</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command returns the number contained in the mentry widget <code><i>pathName</i></code>, which must have been created with the <code><b><a href= "#fixedPointMentry">mentry::fixedPointMentry</a></b></code> command (this is checked by examining the widget's <code><b>type</b></code> attribute, which must have the value <code>"FixedPoint"</code>).</dd> <dd class="tm">If both entry children of the widget are empty, the command sets the focus to the first entry child, generates an error, and returns the string <code>"EMPTY"</code>.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, widget, real number</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/mentry/mentryIPAddr.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 |
<!DOCTYPE html> <html> <head> <title>Multi-Entry Widgets for IP Addresses</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="mentry, widget, IP address"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Multi-Entry Widgets for IP Addresses</h1> <h2>For Mentry Version 3.10</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#ipAddrMentry">The <code><b>mentry::ipAddrMentry</b></code> Command</a></li> <li><a href="#putIPAddr">The <code><b>mentry::putIPAddr</b></code> Command</a></li> <li><a href="#getIPAddr">The <code><b>mentry::getIPAddr</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="ipAddrMentry">The <code><b>mentry::ipAddrMentry</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::ipAddrMentry</code> – Create and manipulate mentry widgets for IP addresses</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::ipAddrMentry</b> <i>pathName</i> ?<i>options</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command creates a new mentry widget <code><i>pathName</i></code> for displaying and editing IP addresses in the standard dotted-decimal notation. The supported <code><i>options</i></code> are the same as in the case of the <code><b><a href= "mentryWidget.html">mentry::mentry</a></b></code> command.</dd> <dd class="tm">The command sets the <code><b>type</b></code> attribute of the widget to the value <code>"IPAddr"</code> and returns the name of the newly created widget.</dd> <dt class="tm"><b>DEFAULT BINDINGS</b></dt> <dd>The <code><b>mentry::ipAddrMentry</b></code> command defines four new keyboard bindings for the entry children of the mentry widget it creates: The <code>Up</code> key increments the entry's value by 1 if the latter is less than 255. Similarly, the <code>Down</code> key decrements the entry's value by 1 if the latter is greater than 0. The <code>Prior</code> key increments the entry's value by at most 10 if the latter is less than 255. Similarly, the <code>Next</code> key decrements the entry's value by at most 10 if the latter is greater than 0. If the entry is empty then all of these keys insert the value <code>0</code> into the entry.</dd> <dd class="tm">The actions performed by the <code>Up</code> and <code>Down</code> keys can also be triggered by rolling the mouse wheel. In addition, on Mac OS Classic and Mac OS X Aqua, the actions performed by the <code>Prior</code> and <code>Next</code> keys can also be triggered by rolling the mouse wheel while holding down the <code>Option</code> key.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, widget, IP address</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="putIPAddr">The <code><b>mentry::putIPAddr</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::putIPAddr</code> – Output an IP address to a mentry of type <code>"IPAddr"</code></dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::putIPAddr</b> <i>address</i> <i>pathName</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command outputs the IP address <code><i>address</i></code> to the mentry widget <code><i>pathName</i></code>, which must have been created with the <code><b><a href= "#ipAddrMentry">mentry::ipAddrMentry</a></b></code> command (this is checked by examining the widget's <code><b>type</b></code> attribute, which must have the value <code>"IPAddr"</code>).</dd> <dd class="tm">The command generates an error if the address is invalid.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, widget, IP address</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="getIPAddr">The <code><b>mentry::getIPAddr</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::getIPAddr</code> – Get an IP address from a mentry of type <code>"IPAddr"</code></dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::getIPAddr</b> <i>pathName</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command returns the IP address contained in the mentry widget <code><i>pathName</i></code>, which must have been created with the <code><b><a href="#ipAddrMentry">mentry::ipAddrMentry</a></b></code> command (this is checked by examining the widget's <code><b>type</b></code> attribute, which must have the value <code>"IPAddr"</code>).</dd> <dd class="tm">If any entry child of the widget is empty, the command sets the focus to the first such entry, generates an error, and returns the string <code>"EMPTY"</code>.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, widget, IP address</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/mentry/mentryIPv6Addr.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 |
<!DOCTYPE html> <html> <head> <title>Multi-Entry Widgets for IPv6 Addresses</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="mentry, widget, IPv6 address"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Multi-Entry Widgets for IPv6 Addresses</h1> <h2>For Mentry Version 3.10</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#ipv6AddrMentry">The <code><b>mentry::ipv6AddrMentry</b></code> Command</a></li> <li><a href="#putIPv6Addr">The <code><b>mentry::putIPv6Addr</b></code> Command</a></li> <li><a href="#getIPv6Addr">The <code><b>mentry::getIPv6Addr</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="ipv6AddrMentry">The <code><b>mentry::ipv6AddrMentry</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::ipv6AddrMentry</code> – Create and manipulate mentry widgets for IPv6 addresses</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::ipv6AddrMentry</b> <i>pathName</i> ?<i>options</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command creates a new mentry widget <code><i>pathName</i></code> for displaying and editing IPv6 addresses in the standard hexadecimal notation (where the eight groups of one to four hexadecimal digits are separated from each other by o colon). The supported <code><i>options</i></code> are the same as in the case of the <code><b><a href="mentryWidget.html">mentry::mentry</a></b></code> command.</dd> <dd class="tm">The command sets the <code><b>type</b></code> attribute of the widget to the value <code>"IPv6Addr"</code> and returns the name of the newly created widget.</dd> <dt class="tm"><b>DEFAULT BINDINGS</b></dt> <dd>The <code><b>mentry::ipv6AddrMentry</b></code> command defines four new keyboard bindings for the entry children of the mentry widget it creates: The <code>Up</code> key increments the entry's value by 1 if the latter is less than 65535. Similarly, the <code>Down</code> key decrements the entry's value by 1 if the latter is greater than 0. The <code>Prior</code> key increments the entry's value by at most 10 if the latter is less than 65535. Similarly, the <code>Next</code> key decrements the entry's value by at most 10 if the latter is greater than 0. If the entry is empty then all of these keys insert the value <code>0</code> into the entry.</dd> <dd class="tm">The actions performed by the <code>Up</code> and <code>Down</code> keys can also be triggered by rolling the mouse wheel. In addition, on Mac OS Classic and Mac OS X Aqua, the actions performed by the <code>Prior</code> and <code>Next</code> keys can also be triggered by rolling the mouse wheel while holding down the <code>Option</code> key.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, widget, IPv6 address</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="putIPAddr">The <code><b>mentry::putIPv6Addr</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::putIPv6Addr</code> – Output an IPv6 address to a mentry of type <code>"IPv6Addr"</code></dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::putIPv6Addr</b> <i>address</i> <i>pathName</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command outputs the IPv6 address <code><i>address</i></code> to the mentry widget <code><i>pathName</i></code>, which must have been created with the <code><b><a href= "#ipv6AddrMentry">mentry::ipv6AddrMentry</a></b></code> command (this is checked by examining the widget's <code><b>type</b></code> attribute, which must have the value <code>"IPv6Addr"</code>).</dd> <dd class="tm">The address is expected to consist of up to eight colon-separated groups of one to four hexadecimal digits each. in case of less than eight groups, the address must include exactly one double-colon (<code>::</code>) (representing consecutive groups of zeros). The command generates an error if the address is invalid.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, widget, IPv6 address</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="getIPv6Addr">The <code><b>mentry::getIPv6Addr</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::getIPv6Addr</code> – Get an IPv6 address from a mentry of type <code>"IPv6Addr"</code></dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::getIPv6Addr</b> <i>pathName</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command returns the IPv6 address contained in the mentry widget <code><i>pathName</i></code>, which must have been created with the <code><b><a href="#ipv6AddrMentry">mentry::ipv6AddrMentry</a></b></code> command (this is checked by examining the widget's <code><b>type</b></code> attribute, which must have the value <code>"IPv6Addr"</code>).</dd> <dd class="tm">If any entry child of the widget is empty, the command sets the focus to the first such entry, generates an error, and returns the string <code>"EMPTY"</code>.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, widget, IPv6 address</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/mentry/mentryThemes.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 |
<!DOCTYPE html> <html> <head> <title>Commands Related to Tile Themes</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="mentry, theme, tile"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Commands Related to Tile Themes</h1> <h2>For Mentry Version 3.10</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#overview">Overview</a></li> <li><a href="#setTheme">The <code><b>mentry::setTheme</b></code> Command</a></li> <li><a href="#getCurrentTheme">The <code><b>mentry::getCurrentTheme</b></code> Command</a></li> <li><a href="#getThemes">The <code><b>mentry::getThemes</b></code> Command</a></li> <li><a href="#setThemeDefaults">The <code><b>mentry::setThemeDefaults</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="overview">Overview</h2> <p>The commands described in this reference page should only be invoked when using the package Mentry_tile. They enable you to set and query the current theme, to retrieve a list of the available themes, and to make sure that your widgets will have a theme-specific appearance.</p> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="setTheme">The <code><b>mentry::setTheme</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::setTheme</code> – Set the current theme</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::setTheme</b> <i>theme</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command sets the current theme to <code><i>theme</i></code>, loading it if necessary. It is simply an alias for <code><b>ttk::setTheme</b></code> or <code><b>tile::setTheme</b></code>, depending on the tile version loaded into the interpreter. (The <code><b>tile::setTheme</b></code> command was renamed to <code><b>ttk::setTheme</b></code> in tile version 0.8.)</dd> <dd class="tm">Being just an alias for a tile library procedure, the <code><b>mentry::setTheme</b></code> command does exactly the same as the original one: It loads the package implementing the given theme if needed, sets the theme to the specified one, and saves the latter in the variable <code><b>ttk::currentTheme</b></code> or <code><b>tile::currentTheme</b></code>, depending on the current tile version.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, theme, tile</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="getCurrentTheme">The <code><b>mentry::getCurrentTheme</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::getCurrentTheme</code> – Get the current theme</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::getCurrentTheme</b> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command returns the value of the variable <code><b>ttk::currentTheme</b></code> or <code><b>tile::currentTheme</b></code>, depending on the tile version loaded into the interpreter. (The namespace containing the variable <code><b>currentTheme</b></code> was changed in tile version 0.8 from <code><b>tile</b></code> to <code><b>ttk</b></code>.)</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, theme, tile</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="getThemes">The <code><b>mentry::getThemes</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::getThemes</code> – Get the themes registered in the package database</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::getThemes</b> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command returns a list of the themes registered in the package database. It is simply an alias for <code><b>ttk::themes</b></code> or <code><b>tile::availableThemes</b></code>, depending on the tile version loaded into the interpreter. (The <code><b>tile::availableThemes</b></code> command was renamed to <code><b>ttk::themes</b></code> in tile version 0.8.)</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mentry, theme, tile</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="setThemeDefaults">The <code><b>mentry::setThemeDefaults</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>mentry::setThemeDefaults</code> – Set theme-specific default values of some mentry configuration options</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::setThemeDefaults</b> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command populates the array <code><b>mentry::themeDefaults</b></code> with theme-specific default values of a series of Mentry configuration options. The array names are the command-line names of the options, and the corresponding array values are the default values of these configuration options for the currently set tile theme.</dd> <dd class="tm">The options whose names and values are written into the array <code><b>mentry::themeDefaults</b></code> are: <code><b>-background</b></code>, <code><b>-foreground</b></code>, and <code><b>-font</b></code>. In addition, the command sets some other array elements to theme-specific default values, needed for internal purposes, like updating the background and foreground colors of the label components of a mentry widget in <code><b>disabled</b></code> or <code><b>readonly</b></code> state; the corresponding array names are: <code><b>-disabledbackground</b></code>, <code><b>-disabledforeground</b></code>, and <code><b>-readonlybackground</b></code>. Finally, the array values associated with the names <code><b>-selectbackground</b></code>, <code><b>-selectforeground</b></code>, and <code><b>-selectborderwidth</b></code> are not used by Mentry_tile, but might prove useful for other purposes, as described below.</dd> <dd class="tm">The <code><b>mentry::setThemeDefaults</b></code> command is invoked by Mentry_tile automatically whenever a mentry widget is createad or the <code><b><<ThemeChanged>></b></code> virtual event is received by a mentry widget. In the latter case, the widget is reconfigured, using the new default values of those options that were not set explicitly to values different from the corresponding defaults.</dd> <dd class="tm">Besides being used by the Mentry_tile code, this command can also be invoked in Tcl scripts, still before creating any tile-based mentry widget. By calling it explicitly and using the values written by it into the array <code><b>mentry::themeDefaults</b></code>, you can make sure that classical Tk widgets, e.g., text, will have a theme-specific appearance, just like the tile widgets. For example, you can add some common configuration options to the option database as follows:</dd> <dd> <blockquote> <pre> mentry::setThemeDefaults option add *Text.background $mentry::themeDefaults(-background) option add *Text.foreground $mentry::themeDefaults(-foreground) option add *Font $mentry::themeDefaults(-font) option add *selectBackground $mentry::themeDefaults(-selectbackground) option add *selectForeground $mentry::themeDefaults(-selectforeground) option add *selectBorderWidth $mentry::themeDefaults(-selectborderwidth) </pre> </blockquote> </dd> <dt><b>KEYWORDS</b></dt> <dd>mentry, theme, tile</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/mentry/mentryWidget.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 |
<!DOCTYPE html> <html> <head> <title>The mentry::mentry Command</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="mentry, widget, entry, label"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>The <code><b>mentry::mentry</b></code> Command</h1> <h2>For Mentry Version 3.10</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#quick_ref">Quick Reference</a></li> <li><a href="#detailed_ref">Detailed Reference</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="quick_ref">Quick Reference</h2> <dl> <dt><a href="#name">NAME</a></dt> <dd><code>mentry::mentry</code> – Create and manipulate multi-entry widgets</dd> <dt class="tm"><a href="#synopsis">SYNOPSIS</a></dt> <dd> <pre> <b>mentry::mentry</b> <i>pathName</i> ?<i>options</i>? </pre> </dd> <dt><a href="#description">DESCRIPTION</a></dt> <dt class="tm"><a href="#std_options">STANDARD OPTIONS</a></dt> <dd> <pre> <b>-borderwidth -highlightcolor -relief -highlightbackground -highlightthickness</b> </pre> </dd> <dt><a href="#child_options">OPTIONS FOR ALL ENTRY AND LABEL CHILDREN</a></dt> <dd> <pre> <b>-background -cursor -font -foreground</b> </pre> </dd> <dt><a href="#entry_options">OPTIONS FOR ALL ENTRY CHILDREN</a></dt> <dd> <pre> <b>-exportselection -insertwidth -selectforeground -insertbackground -invalidcommand -show -insertborderwidth -justify -state -insertofftime -selectbackground -validate -insertontime -selectborderwidth -validatecommand</b> </pre> </dd> <dt><a href="#widget_options">WIDGET-SPECIFIC OPTIONS</a></dt> <dd><code><b><a href="#body">-body</a></b> {<i>width</i> ?<i>text</i> <i>width</i> <i>text</i> ...?}</code></dd> <dd><code><b><a href="#disabledbackground">-disabledbackground</a></b> <i>color</i></code></dd> <dd><code><b><a href="#disabledforeground">-disabledforeground</a></b> <i>color</i></code></dd> <dd><code><b><a href="#readonlybackground">-readonlybackground</a></b> <i>color</i></code></dd> <dd><code><b><a href="#takefocus">-takefocus</a></b> <b>0</b>|<b>1</b>|<b>""</b>|<i>command</i></code></dd> <dd><code><b><a href="#textvariable">-textvariable</a></b> <i>array</i></code></dd> <dt class="tm"><a href="#indices">INDICES</a></dt> <dd> <pre> <i>number</i> <b>end</b> </pre> </dd> <dt class="tm"><a href="#widget_command">WIDGET COMMAND</a></dt> <dd><code><i>pathName</i> <b><a href="#adjustentry">adjustentry</a></b> <i>index</i> <i>string</i></code></dd> <dd><code><i>pathName</i> <b><a href="#attrib">attrib</a></b> ?<i>name</i>? ?<i>value</i> <i>name</i> <i>value</i> ...?</code></dd> <dd><code><i>pathName</i> <b><a href="#cget">cget</a></b> <i>option</i></code></dd> <dd><code><i>pathName</i> <b><a href="#clear">clear</a></b> <i>first</i> ?<i>last</i>?</code></dd> <dd><code><i>pathName</i> <b><a href="#configure">configure</a></b> ?<i>option</i>? ?<i>value</i> <i>option</i> <i>value</i> ...?</code></dd> <dd><code><i>pathName</i> <b><a href="#entries">entries</a></b></code></dd> <dd><code><i>pathName</i> <b><a href= "#entrycount">entrycount</a></b></code></dd> <dd><code><i>pathName</i> <b><a href="#entrylimit">entrylimit</a></b> <i>index</i></code></dd> <dd><code><i>pathName</i> <b><a href="#entrypath">entrypath</a></b> <i>index</i></code></dd> <dd><code><i>pathName</i> <b><a href="#getarray">getarray</a></b> <i>array</i></code></dd> <dd><code><i>pathName</i> <b><a href="#getlist">getlist</a></b></code></dd> <dd><code><i>pathName</i> <b><a href= "#getstring">getstring</a></b></code></dd> <dd><code><i>pathName</i> <b><a href="#hasattrib">hasattrib</a></b> <i>name</i></code></dd> <dd><code><i>pathName</i> <b><a href="#isempty">isempty</a></b> ?<i>index</i>?</code></dd> <dd><code><i>pathName</i> <b><a href="#isfull">isfull</a></b> ?<i>index</i>?</code></dd> <dd><code><i>pathName</i> <b><a href= "#labelcount">labelcount</a></b></code></dd> <dd><code><i>pathName</i> <b><a href="#labelpath">labelpath</a></b> <i>index</i></code></dd> <dd><code><i>pathName</i> <b><a href="#labels">labels</a></b></code></dd> <dd><code><i>pathName</i> <b><a href="#put">put</a></b> <i>startIndex</i> ?<i>string</i> <i>string</i> ...?</code></dd> <dd><code><i>pathName</i> <b><a href= "#setentryextrawidth">setentryextrawidth</a></b> <i>index</i> <i>amount</i></code></dd> <dd><code><i>pathName</i> <b><a href="#setentryfont">setentryfont</a></b> <i>index</i> <i>font</i></code></dd> <dd><code><i>pathName</i> <b><a href="#setentrywidth">setentrywidth</a></b> <i>index</i> <i>width</i></code></dd> <dd><code><i>pathName</i> <b><a href="#unsetattrib">unsetattrib</a></b> <i>name</i></code></dd> <dt class="tm"><a href="#bindings">DEFAULT BINDINGS</a></dt> <dt class="tm"><a href="#keywords">KEYWORDS</a></dt> <dd>mentry, widget, entry, label</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="detailed_ref">Detailed Reference</h2> <dl> <dt id="name"><b>NAME</b></dt> <dd><code>mentry::mentry</code> – Create and manipulate multi-entry widgets</dd> <dt class="tm" id="synopsis"><b>SYNOPSIS</b></dt> <dd> <pre> <b>mentry::mentry</b> <i>pathName</i> ?<i>options</i>? </pre> </dd> <dt id="description"><b>DESCRIPTION</b></dt> <dd>The <code><b>mentry::mentry</b></code> command creates a new window named <code><i>pathName</i></code> and of the class <code><b>Mentry</b></code>, and makes it into a <b>mentry</b> widget. Additional options, described below, may be specified on the command line or in the option database to configure aspects of the mentry such as its colors, font, and children. The <code><b>mentry::mentry</b></code> command returns its <code><i>pathName</i></code> argument. At the time this command is invoked, there must not exist a window named <code><i>pathName</i></code>, but <code><i>pathName</i></code>'s parent must exist.</dd> <dd class="tm">The word <i>mentry</i> is an abbreviation of <i>multi-entry</i>. A mentry is a mega-widget consisting of any number of entries separated by labels, all embedded in a frame. Due to appropriately chosen configuration options for the entries and labels, a mentry widget looks like one single entry containing preinserted text pieces that cannot be moved, changed, or deleted by the user.</dd> <dd class="tm">The initial width of each entry child (specified by the <code><b><a href="#body">-body</a></b></code> configuration option) also determines the maximal number of characters that can be inserted into it. This is achieved with the aid of the <code><b><a href= "wcbRef.html#callback">wcb::callback</a></b></code> command, by registering the <code><b><a href= "wcbRef.html#entrycb">wcb::checkEntryLen</a></b></code> before-<code><b>insert</b></code> callback with the entry child. In order to keep this callback, additional before-<code><b>insert</b></code> callbacks (if needed) should only be registered with the <code><b><a href= "wcbRef.html#cbappend">wcb::cbappend</a></b></code> and <code><b><a href= "wcbRef.html#cbprepend">wcb::cbprepend</a></b></code> commands. When reaching this limit in an entry having the input focus, the latter is set automatically to the next enabled entry child, the contents of that widget is selected, and the insertion cursor is set to its end. This is made sure by defining an appropriate after-<code><b>insert</b></code> callback, which must be kept to be the last such callback for the entry. For this reason, additional after-<code><b>insert</b></code> callbacks (if needed) should only be registered with the <code><b>wcb::cbprepend</b></code> command. The same command should be used exclusively to define after-<code><b>motion</b></code> callbacks (if needed), because <code><b>mentry::mentry</b></code> registers one that must be the last after-<code><b>motion</b></code> callback for each entry child.</dd> <dd class="tm">Each mentry widget may have any number of <b>attributes</b>, which can be used in commands that create or manipulate mentry widgets for particular purposes. For example, each date mentry created by the <code><b><a href= "mentryDateTime.html#dateMentry">mentry::dateMentry</a></b></code> command has a <code><b>type</b></code> attribute having the value <code>"Date"</code> and a <code><b>format</b></code> attribute specifying the meanings of its components. The values of these attributes are queried and used in the bodies of the procedures <code><b><a href= "mentryDateTime.html#putClockVal">mentry::putClockVal</a></b></code> and <code><b><a href= "mentryDateTime.html#getClockVal">mentry::getClockVal</a></b></code>.</dd> <dt class="tm" id="std_options"><b>STANDARD OPTIONS</b></dt> <dd> <pre> <b>-borderwidth -highlightcolor -relief -highlightbackground -highlightthickness</b> </pre> </dd> <dd>See the <b>options</b> manual entry for details on the standard Tk widget options. These options are only supported by the Mentry package, but not by Mentry_tile.</dd> <dt class="tm" id="child_options"><b>OPTIONS FOR ALL ENTRY AND LABEL CHILDREN</b></dt> <dd> <pre> <b>-background -cursor -font -foreground</b> </pre> </dd> <dd>These options (described in the <b>options</b> manual entry) specify the values of the options of the same names for all entry and label children of the given multi-entry widget. These values may be changed for an individual child by using the <code><b>configure</b></code> subcommand of the Tcl command corresponding to that child. However, applying this method to change the font of an entry child of a tile-based mentry widget might break the latter's appearance (this has tile-related technical reasons). To avoid this problem, it is recommended to use the <code><b><a href="#setentryfont">setentryfont</a></b></code> subcommand of the Tcl command associated with the mentry widget for changing the value of the <code><b>-font</b></code> option of one of its entry children.</dd> <dd class="tm">When using the package Mentry_tile, these options have theme-specific default values. The common abbreviations <code><b>-bg</b></code> (for <code><b>-background</b></code>) and <code><b>-fg</b></code> (for <code><b>-foreground</b></code>) are supported for both classical and tile-based mentry widgets.</dd> <dd class="tm"><b>REMARK:</b> Please take into account that for some themes (like <code><b>Arc</b></code>, <code><b>plastik</b></code>, <code><b>tileqt</b></code>, <code><b>vista</b></code>, and <code><b>xpnative</b></code>), the <code><b>-background</b></code> option will be ignored for the entry children of a tile-based mentry widget.</dd> <dt class="tm" id="entry_options"><b>OPTIONS FOR ALL ENTRY CHILDREN</b></dt> <dd> <pre> <b>-exportselection -insertwidth -selectforeground -insertbackground -invalidcommand -show -insertborderwidth -justify -state -insertofftime -selectbackground -validate -insertontime -selectborderwidth -validatecommand</b> </pre> </dd> <dd>These options specify the values of the options of the same names for all entry children of the given multi-entry widget. These values may be changed for an individual entry child by using the <code><b>configure</b></code> subcommand of the Tcl command corresponding to that entry. The <code><b>-invalidcommand</b></code>, <code><b>-validate</b></code>, and <code><b>-validatecommand</b></code> options are only supported if Tk version 8.3 or higher is used, because the options of the same names for entry widgets were introduced in Tk 8.3. The options <code><b>-insertbackground</b></code>, <code><b>-insertborderwidth</b></code>, <code><b>-insertofftime</b></code>, <code><b>-insertontime</b></code>, <code><b>-insertwidth</b></code>, <code><b>-selectbackground</b></code>, <code><b>-selectborderwidth</b></code>, and <code><b>-selectforeground</b></code> are only supported by the Mentry package, but not by Mentry_tile. The common abbreviations <code><b>-invcmd</b></code> (for <code><b>-invalidcommand</b></code>) and <code><b>-vcmd</b></code> (for <code><b>-validatecommand</b></code>) are supported for both classical and tile-based mentry widgets.</dd> <dt class="tm" id="widget_options"><b>WIDGET-SPECIFIC OPTIONS</b></dt> <dd class="tm" id="body"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-body</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> body</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> Body</b></code></td> </tr> </table> <blockquote> <p>Specifies the initial widths of the entry children of the given multi-entry widget, as well as the texts to be displayed in the labels separating the entries. The value of this option is viewed as a list. Each odd-numbered element is interpreted as the value of the <code><b>-width</b></code> configuration option of an entry child, while each even-numbered element represents the value of the <code><b>-text</b></code> configuration option of a label child. That is, each entry width must be followed by a label text, except for the last one, for which a corresponding label text is optional. The order of the list elements determines the creation order of the child widgets; these will be packed in a row, without any horizontal padding. The initial width of each entry child also determines the number of characters that can be inserted into it; this maximal length remains unchanged even if the entry's width is set to a new value later on.</p> <p>The width of an entry child and the text displayed in a label may be changed by using the <code><b>configure</b></code> subcommand of the Tcl command corresponding to that child. However, applying this method to change the width of of an entry child of a tile-based mentry widget might break the latter's appearance (this has tile-related technical reasons). To avoid this problem, it is recommended to use the <code><b><a href="#setentrywidth">setentrywidth</a></b></code> subcommand of the Tcl command associated with the mentry widget for changing the value of the <code><b>-width</b></code> option of one of its entry children.</p> </blockquote> </dd> <dd id="disabledbackground"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-disabledbackground</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> disabledBackground</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> DisabledBackground</b></code></td> </tr> </table> <blockquote> <p>This option, which is only supported for Tk versions 8.4 or higher, specifies the background color to use for all entry and label children of the given multi-entry widget when it is disabled. If the value of this option is the empty string then the normal background color is used. This option is only supported by the Mentry package, but not by Mentry_tile.</p> </blockquote> </dd> <dd id="disabledforeground"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-disabledforeground</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> disabledForeground</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> DisabledForeground</b></code></td> </tr> </table> <blockquote> <p>This option, which is only supported for Tk versions 8.4 or higher, specifies the foreground color to use for all entry and label children of the given multi-entry widget when it is disabled. If the value of this option is the empty string then the normal foreground color is used. This option is only supported by the Mentry package, but not by Mentry_tile.</p> </blockquote> </dd> <dd id="readonlybackground"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-readonlybackground</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> readonlyBackground</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> ReadonlyBackground</b></code></td> </tr> </table> <blockquote> <p>This option, which is only supported for Tk versions 8.4 or higher, specifies the background color to use for all entry and label children of the given multi-entry widget when it is readonly. If the value of this option is the empty string then the normal background color is used. This option is only supported by the Mentry package, but not by Mentry_tile.</p> </blockquote> </dd> <dd id="takefocus"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-takefocus</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> takeFocus</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> TakeFocus</b></code></td> </tr> </table> <blockquote> <p>This option determines whether the widget accepts the focus during keyboard traversal. It is almost identical to the standard option of the same name (see the <b>options</b> manual entry for details). The only difference is that not the widget itself but its first enabled entry child will receive the focus during keyboard traversal with the standard keys (<code>Tab</code> and <code>Shift-Tab</code>). See the <a href="#bindings">DEFAULT BINDINGS</a> section below for information on how to move the focus from one entry child to another using the keyboard.</p> </blockquote> </dd> <dd id="textvariable"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-textvariable</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> textvariable</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> Variable</b></code></td> </tr> </table> <blockquote> <p>If the value of this option is not an empty string then it must be an array. In this case, for each entry child of the given multi-entry widget the value of the array element with the index of the entry as element name specifies the value of the <code><b>-textvariable</b></code> option for that entry. The entry indices start with <code>0</code>. For example, specifying <code>-textvariable arr</code> for a multi-entry widget having two entry children is equivalent to specifying <code>-textvariable arr(0)</code> for the first and <code>-textvariable arr(1)</code> for the second entry child of that widget.</p> </blockquote> </dd> <dt id="indices"><b>INDICES</b></dt> <dd>Some of the widget commands for mentries take an index as argument. An index specifies a particular entry or label child of the mentry, in any of the following ways:</dd> <dd class="tm"> <table border="0" cellpadding="6" cellspacing="0"> <tr valign="top"> <td><code><i>number </i></code></td> <td>Specifies the child as a numerical index, where <code>0</code> corresponds to the first entry or label child.</td> </tr> <tr valign="top"> <td><code><b>end</b></code></td> <td>Indicates the last entry or label child of the mentry.</td> </tr> </table> </dd> <dd class="tm">The word <code><b>end</b></code> can be abbreviated as <code><b>en</b></code> or <code><b>e</b></code>. Out-of-range indices are automatically rounded to the nearest legal value.</dd> <dt class="tm" id="widget_command"><b>WIDGET COMMAND</b></dt> <dd> The <code><b>mentry::mentry</b></code> command creates a new Tcl command whose name is <code><i>pathName</i></code>. This command may be used to invoke various operations on the widget. It has the following general form: <blockquote> <pre> <i>pathName</i> <i>option</i> ?<i>arg</i> <i>arg</i> ...? </pre> </blockquote> </dd> <dd><code><i>option</i></code> and the <code><i>arg</i></code>s determine the exact behavior of the command. The following commands are possible for mentry widgets:</dd> <dd> <dl> <dt class="tm" id="adjustentry"><code><i>pathName</i> <b>adjustentry</b> <i>index</i> <i>string</i></code></dt> <dd>Increases the width in pixels of the entry child identified by <code><i>index</i></code> if needed, to make it just large enough for texts of the child-specific maximal length, consisting of characters contained in the <code><i>string</i></code> argument. Returns an empty string.</dd> <dd class="tm">For example, when constructing a mentry widget whose components will accept up to two uppercase hexadecimal digits only, by passing the string <code>"0123456789ABCDEF"</code> to this subcommand you can make sure that the entry children will have optimal widths, just large enough to display not only the decimal digits, but also up to two letters in the range <code>A</code> - <code>F</code> (which need more room than the decimal digits when using a proportionally-spaced font). It is recommended to invoke this subcommand even if the allowed characters are restricted to the digits <code>0</code> - <code>9</code> only, because in some fonts not all decimal digits have the same width.</dd> <dt class="tm" id="attrib"><code><i>pathName</i> <b>attrib</b> ?<i>name</i>? ?<i>value</i> <i>name</i> <i>value</i> ...?</code></dt> <dd>Queries or modifies the attributes of the widget. If no <code><i>name</i></code> is specified, the command returns a list of pairs, each of which contains the name and the value of an attribute for <code><i>pathName</i></code>. If <code><i>name</i></code> is specified with no <code><i>value</i></code>, then the command returns the value of the one named attribute, or an empty string if no corresponding value exists (you can use the <code><b><a href= "#hasattrib">hasattrib</a></b></code> subcommand to distinguish this case from the one that the value of an <i>existing</i> attribute is an empty string). If one or more <code><i>name</i></code>-<code><i>value</i></code> pairs are specified, then the command sets the given widget attribute(s) to the given value(s); in this case the return value is an empty string. <code><i>name</i></code> may be an arbitrary string.</dd> <dt class="tm" id="cget"><code><i>pathName</i> <b>cget</b> <i>option</i></code></dt> <dd>Returns the current value of the configuration option given by <code><i>option</i></code>, which may have any of the values accepted by the <code><b>mentry::mentry</b></code> command.</dd> <dt class="tm" id="clear"><code><i>pathName</i> <b>clear</b> <i>first</i> ?<i>last</i>?</code></dt> <dd>Erases the contents of one or more entry children of the widget. <code><i>first</i></code> and <code><i>last</i></code> are indices specifying the first and last entries in the range to clear. If <code><i>last</i></code> is not specified then it defaults to <code><i>first</i></code>, i.e., a single entry child is cleared. The return value is an empty string.</dd> <dt class="tm" id="configure"><code><i>pathName</i> <b>configure</b> ?<i>option</i>? ?<i>value</i> <i>option</i> <i>value</i> ...?</code></dt> <dd>Queries or modifies the configuration options of the widget. If no <code><i>option</i></code> is specified, the command returns a list describing all of the available options for <code><i>pathName</i></code> (see <code><b>Tk_ConfigureInfo</b></code> for information on the format of this list). If <code><i>option</i></code> is specified with no <code><i>value</i></code>, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no <code><i>option</i></code> is specified). If one or more <code><i>option</i></code>-<code><i>value</i></code> pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the return value is an empty string. <code><i>option</i></code> may have any of the values accepted by the <code><b>mentry::mentry</b></code> command.</dd> <dt class="tm" id="entries"><code><i>pathName</i> <b>entries</b></code></dt> <dd>Returns a list containing the path names of all entry children of the widget.</dd> <dt class="tm" id="entrycount"><code><i>pathName</i> <b>entrycount</b></code></dt> <dd>Returns the number of all entry children of the widget.</dd> <dt class="tm" id="entrylimit"><code><i>pathName</i> <b>entrylimit</b> <i>index</i></code></dt> <dd>Returns the number of characters that can be inserted into the entry child identfied by <code><i>index</i></code>.</dd> <dt class="tm" id="entrypath"><code><i>pathName</i> <b>entrypath</b> <i>index</i></code></dt> <dd>Returns the path name of the entry child identfied by <code><i>index</i></code>.</dd> <dt class="tm" id="getarray"><code><i>pathName</i> <b>getarray</b> <i>array</i></code></dt> <dd>For each entry child of the widget, the command assigns the string contained in the entry to the element of <code><i>array</i></code> having the index of the entry as element name. The entry indices start with <code>0</code>. The return value is an empty string.</dd> <dt class="tm" id="getlist"><code><i>pathName</i> <b>getlist</b></code></dt> <dd>Returns a list containing the strings of all entry children of the widget.</dd> <dt class="tm" id="getstring"><code><i>pathName</i> <b>getstring</b></code></dt> <dd>Returns a string built by concatenating the strings contained in the entry children of the widget with the texts displayed in the labels separating the entries, in the creation order of the children, as given by the <code><b><a href="#body">-body</a></b></code> configuration option. That is, the string of the first entry child is followed by the text of the first label, which in turn is followed by the string of the second entry, and so on.</dd> <dt class="tm" id="hasattrib"><code><i>pathName</i> <b>hasattrib</b> <i>name</i></code></dt> <dd>Returns <code>1</code> if the attribute <code><i>name</i></code> exists and <code>0</code> otherwise.</dd> <dt class="tm" id="isempty"><code><i>pathName</i> <b>isempty</b> ?<i>index</i>?</code></dt> <dd>If <code><i>index</i></code> is specified then the command returns the value <code>1</code> if the string contained in the entry child identfied by <code><i>index</i></code> is empty and <code>0</code> otherwise. If this optional argument is not present then the command returns the value <code>1</code> if the strings contained in the entry children of the widget are all empty and <code>0</code> otherwise.</dd> <dt class="tm" id="isfull"><code><i>pathName</i> <b>isfull</b> ?<i>index</i>?</code></dt> <dd>If <code><i>index</i></code> is specified then the command returns the value <code>1</code> if the length of the string contained in the entry child identfied by <code><i>index</i></code> equals the number of characters that can be inserted into the entry and <code>0</code> otherwise. If this optional argument is not present then the command returns the value <code>1</code> if the lengths of the strings contained in the entry children of the widget all equal the numbers of characters that can be inserted into the respective entries (i.e., if all entry children are full) and <code>0</code> otherwise.</dd> <dt class="tm" id="labelcount"><code><i>pathName</i> <b>labelcount</b></code></dt> <dd>Returns the number of all label children of the widget.</dd> <dt class="tm" id="labelpath"><code><i>pathName</i> <b>labelpath</b> <i>index</i></code></dt> <dd>Returns the path name of the label child identfied by <code><i>index</i></code>.</dd> <dt class="tm" id="labels"><code><i>pathName</i> <b>labels</b></code></dt> <dd>Returns a list containing the path names of all label children of the widget.</dd> <dt class="tm" id="put"><code><i>pathName</i> <b>put</b> <i>startIndex</i> ?<i>string</i> <i>string</i> ...?</code></dt> <dd>Replaces the texts of the entry children whose indices are greater than or equal to <code><i>startIndex</i></code> with the corresponding <code><i>string</i></code> arguments by using the <code><b>delete</b></code> and <code><b>insert</b></code> operations, until either the entries or the <code><i>string</i></code>s are consumed. If one of these subcommands gets canceled by some before-callback in any entry child then the command restores the original contents of all affected entries and returns the value <code>0</code>, otherwise it returns <code>1</code>. In both cases, the command keeps the position of the insertion cursor in all entry children.</dd> <dt class="tm" id="setentryextrawidth"><code><i>pathName</i> <b>setentryextrawidth</b> <i>index</i> <i>amount</i></code></dt> <dd>Specifies additonal width to provide for the entry child identified by <code><i>index</i></code>. <code><i>amount</i></code> may have any of the standard forms for screen distances (e.g., a number of pixels). The return value is an empty string.</dd> <dd class="tm">Notice that changing the width of an entry child has no impact on the number of characters that can be inserted into it, which remains set to the corresponding component of the value of the mentry's <code><b><a href="#body">-body</a></b></code> option.</dd> <dt class="tm" id="setentryfont"><code><i>pathName</i> <b>setentryfont</b> <i>index</i> <i>font</i></code></dt> <dd>Sets the font of the entry child identified by <code><i>index</i></code> to the value given by <code><i>font</i></code>. This is done by invoking the <code><b>configure</b></code> subcommand of the Tcl command corresponding to the entry. When using the package Mentry_tile, this command also performs some additional steps necessary for updating the appearance of the tile-based mentry widget. The return value is an empty string.</dd> <dt class="tm" id="setentrywidth"><code><i>pathName</i> <b>setentrywidth</b> <i>index</i> <i>width</i></code></dt> <dd>Sets the width of the entry child identified by <code><i>index</i></code> to the number of characters given by <code><i>width</i></code>. This is done by invoking the <code><b>configure</b></code> subcommand of the Tcl command corresponding to the entry. When using the package Mentry_tile, this command also performs some additional steps necessary for updating the appearance of the tile-based mentry widget. The return value is an empty string.</dd> <dd class="tm">Notice that changing the width of an entry child has no impact on the number of characters that can be inserted into it, which remains set to the corresponding component of the value of the mentry's <code><b><a href="#body">-body</a></b></code> option.</dd> <dt class="tm" id="unsetattrib"><code><i>pathName</i> <b>unsetattrib</b> <i>name</i></code></dt> <dd>Unsets the attribute <code><i>name</i></code>. Returns an empty string.</dd> </dl> </dd> <dt class="tm" id="bindings"><b>DEFAULT BINDINGS</b></dt> <dd>The <code><b>mentry::mentry</b></code> command partially redefines the bindings of the children of the mentry widget it creates:</dd> <dd> <ol> <li class="tm">Clicking mouse button 1 in a label child positions the insertion cursor to the end of the last enabled entry preceding the label, sets the input focus to that entry, and clears any selection in it.</li> <li class="tm">If in a non-empty entry child a character is typed that is contained in the label following that entry (if any), then the focus is moved to the next enabled entry child, the contents of that entry are selected, and the insertion cursor is set to its end.</li> <li class="tm">At the beginning of an entry child that is not the first enabled entry within the widget, the <code>Left</code> key clears the selection in that entry, moves the focus to the previous enabled entry child, and sets the insertion cursor to the end of that widget. Similarly, at the end of an entry child that is not the last enabled entry within the widget, the <code>Right</code> key clears the selection in that entry, moves the focus to the next enabled entry child, and sets the insertion cursor to the beginning of that widget. If <code><b>tk_strictMotif</b></code> is false then <code>Control-b</code> and <code>Control-f</code> behave the same as <code>Left</code> and <code>Right</code>, respectively.</li> <li class="tm">In an entry child that is not the first enabled entry within the widget, <code>Control-Left</code> moves the focus to the previous enabled entry child, selects the contents of that widget, and sets the insertion cursor to its end; if there is no enabled entry child to the left of the current one then <code>Control-Left</code> moves the insertion cursor to the beginning of the current entry and clears the selection in that widget. Similarly, in an entry child that is not the last enabled entry within the widget, <code>Control-Right</code> moves the focus to the next enabled entry child, selects the contents of that widget, and sets the insertion cursor to its end; if there is no enabled entry child to the right of the current one then <code>Control-Right</code> moves the insertion cursor to the end of the current entry and clears the selection in that widget. If <code><b>tk_strictMotif</b></code> is false then <code>Meta-b</code> and <code>Meta-f</code> behave the same as <code>Control-Left</code> and <code>Control-Right</code>, respectively.</li> <li class="tm">The <code>Home</code> key clears the selection in the current entry widget, moves the focus to the first enabled entry child, and sets the insertion cursor to the beginning of that widget. Similarly, the <code>End</code> key clears the selection in the current entry widget, moves the focus to the last enabled entry child, and sets the insertion cursor to the end of that widget. If <code><b>tk_strictMotif</b></code> is false then <code>Control-a</code> and <code>Control-e</code> behave the same as <code>Home</code> and <code>End</code>, respectively.</li> <li class="tm"><code>Shift-Home</code> moves the focus to the first enabled entry child, sets the insertion cursor to the beginning of that widget, and either extends the selection to that position, or clears the selection in the current entry and selects the contents of the new widget, depending upon whether the current entry is the first enabled entry child or not. Similarly, <code>Shift-End</code> moves the focus to the last enabled entry child, sets the insertion cursor to the end of that widget, and either extends the selection to that position, or clears the selection in the current entry and selects the contents of the new widget, depending upon whether the current entry is the last enabled entry child or not.</li> <li class="tm">The <code>BackSpace</code> key deletes the selection if there is one in the current entry. Otherwise, it deletes either the character to the left of the insertion cursor in the current entry, or the last character of the previous enabled entry child. The latter takes place at the beginning of an entry child that is not the first enabled entry within the widget; in this case, the <code>BackSpace</code> key also moves the focus to the previous enabled entry child and sets the insertion cursor to its end. If <code><b>tk_strictMotif</b></code> is false then <code>Control-h</code> behaves the same as <code>BackSpace</code>.</li> <li class="tm">If <code><b>tk_strictMotif</b></code> is false then <code>Meta-d</code> deletes all characters to the right of the insertion cursor within the current entry, while <code>Meta-BackSpace</code> and <code>Meta-Delete</code> delete either all characters to the left of the insertion cursor in the current entry, or the contents of the previous enabled entry child. The latter takes place at the beginning of an entry child that is not the first enabled entry within the widget; in this case, <code>Meta-BackSpace</code> and <code>Meta-Delete</code> also clear the selection in the current entry widget and move the focus to the previous enabled entry child.</li> </ol> </dd> <dt class="tm" id="keywords"><b>KEYWORDS</b></dt> <dd>mentry, widget, entry, label</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/mentry/phonenumber.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/mentry/phonenumber_tile.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/mentry/stylesheet.css.
> > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 |
/* generic class defining a top margin whose height equals the font size */ .tm {margin-top: 1em} /* background, border, and padding for the <pre> tag */ pre {background: #F7F7F7; border: silver solid 1px; padding: 1px} /* background for the <body> tag */ body {background: #FFFFFF} /* color for the <span> tag */ span.red {color: #E00000} span.cmt {color: #36648b} |
Added embedded/www/tklib/files/modules/mentry/wcbRef.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 |
<!DOCTYPE html> <html> <head> <title>Wcb Command Reference</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content= "callback, widget, Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, listbox, tablelist, tile treeview, text, ctext"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Wcb Command Reference</h1> <h2>For Wcb Version 3.6</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#callback">The <code><b>wcb::callback</b></code> Command</a></li> <li><a href="#cbappend">The <code><b>wcb::cbappend</b></code> Command</a></li> <li><a href="#cbprepend">The <code><b>wcb::cbprepend</b></code> Command</a></li> <li><a href="#cancel">The <code><b>wcb::cancel</b></code> Command</a></li> <li><a href="#canceled">The <code><b>wcb::canceled</b></code> Command</a></li> <li><a href="#extend">The <code><b>wcb::extend</b></code> Command</a></li> <li><a href="#replace">The <code><b>wcb::replace</b></code> Command</a></li> <li><a href="#pathname">The <code><b>wcb::pathname</b></code> Command</a></li> <li><a href="#changeEntryText">The <code><b>wcb::changeEntryText</b></code> Command</a></li> <li><a href="#postInsertEntryLen">The <code><b>wcb::postInsertEntryLen</b></code> Command</a></li> <li><a href="#postInsertEntryText">The <code><b>wcb::postInsertEntryText</b></code> Command</a></li> <li><a href="#postDeleteEntryText">The <code><b>wcb::postDeleteEntryText</b></code> Command</a></li> <li><a href="#entrycb">Before-<code><b>insert</b></code> Callbacks for entry, spinbox, and combobox Widgets</a></li> <li><a href="#textcb">Before-<code><b>insert</b></code> Callbacks for text and ctext Widgets</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="callback">The <code><b>wcb::callback</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::callback</code> – Retrieve, set, and remove widget callbacks</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::callback</b> <i>widgetName</i> <b>before</b>|<b>after</b> <i>option</i> ?<i>callback</i> <i>callback</i> ...? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>Retrieves, sets, or removes the callbacks for the Tk or tile entry, BWidget Entry, Tk or tile spinbox, tile combobox, listbox, tablelist, tile treeview, text, or ctext widget <code><i>widgetName</i></code>, the argument <code><b>before</b></code> or <code><b>after</b></code>, and the command corresponding to <code><i>option</i></code>. The values of the <code><i>option</i></code> argument can be:</dd> <dd class="tm"> <ul> <li><code><b>insert</b></code>, <code><b>delete</b></code>, or <code><b>motion</b></code>, for a Tk or tile entry, BWidget Entry, Tk or tile spinbox, tile combobox, text, or ctext widget;</li> <li><code><b>replace</b></code>, for a text or ctext widget;</li> <li><code><b>activate</b></code>, for a listbox, tablelist, or tile treeview widget;</li> <li><code><b>selset</b></code> or <code><b>selclear</b></code>, for a listbox, tablelist, tile treeview, text, or ctext widget;</li> <li><code><b>seladd</b></code> or <code><b>seltoggle</b></code>, for a tile treeview widget;</li> <li><code><b>activatecell</b></code>, <code><b>cellselset</b></code>, or <code><b>cellselclear</b></code>, for a tablelist widget.</li> </ul> </dd> <dd class="tm">If no arguments after the <code><i>option</i></code> parameter are specified, then the procedure just returns the current before- or after-callback list, respectively, for the given widget operation.</dd> <dd class="tm">Otherwise:</dd> <dd> <ul> <li> <p>If at least one of the arguments following the <code><i>option</i></code> parameter is a nonempty string, then:</p> <ul> <li>if called for the first time for this widget with at least one nonempty argument following the <code><i>option</i></code> parameter, then the procedure renames the Tcl command <code><i>widgetName</i></code> to <code>_<i>widgetName</i></code> and builds a new procedure <code><i>widgetName</i></code>, in which the execution of the widget operations associated with the above values of <code><i>option</i></code> is preceded by invocations of the corresponding before-callbacks and followed by calls to the corresponding after-callbacks, in the global scope;</li> <li class="tm">it sets the callback list to the one built from these arguments and returns the new list.</li> </ul> </li> <li class="tm">If all arguments following the <code><i>option</i></code> parameter are empty, then the procedure unregisters all the corresponding before- or after-callbacks for the given widget and returns an empty string.</li> </ul> </dd> <dd class="tm">When a callback is invoked, the name of the original Tcl command for the widget <code><i>widgetName</i></code> as well as the command arguments are automatically appended to it as parameters.</dd> <dd class="tm">The following table shows the widget subcommands corresponding to the above values of <code><i>option</i></code>, together with the arguments of these subcommands:</dd> <dd class="tm" id="callback_table"> <table border="2" cellspacing="0" cellpadding="3"> <tr bgcolor="#FFFFE0"> <th align="left">Widget</th> <th align="left"><code><i>option</i></code></th> <th align="left">Subcommand</th> <th align="left">Arguments</th> </tr> <tr> <td rowspan="3">Tk entry, ttk::entry,<br> BWidget Entry,<br> Tk spinbox, ttk::spinbox,<br> or ttk::combobox</td> <td><code><b>insert</b></code></td> <td><code><b>insert</b></code></td> <td><code><i>index</i> <i>string</i></code></td> </tr> <tr> <td><code><b>delete</b></code></td> <td><code><b>delete</b></code></td> <td><code><i>from</i> ?<i>to</i>?</code></td> </tr> <tr> <td><code><b>motion</b></code></td> <td><code><b>icursor</b></code></td> <td><code><i>index</i></code></td> </tr> <tr> <td rowspan="3">listbox</td> <td><code><b>activate</b></code></td> <td><code><b>activate</b></code></td> <td><code><i>index</i></code></td> </tr> <tr> <td><code><b>selset</b></code></td> <td><code><b>selection set</b></code></td> <td><code><i>first</i> ?<i>last</i>?</code></td> </tr> <tr> <td><code><b>selclear</b></code></td> <td><code><b>selection clear</b></code></td> <td><code><i>first</i> ?<i>last</i>?</code></td> </tr> <tr> <td rowspan="6">tablelist::tablelist</td> <td><code><b>activate</b></code></td> <td><code><b>activate</b></code></td> <td><code><i>index</i></code></td> </tr> <tr> <td><code><b>selset</b></code></td> <td><code><b>selection set</b></code></td> <td><code><i>first</i> ?<i>last</i>?</code></td> </tr> <tr> <td><code><b>selclear</b></code></td> <td><code><b>selection clear</b></code></td> <td><code><i>first</i> ?<i>last</i>?</code></td> </tr> <tr> <td><code><b>activatecell</b></code></td> <td><code><b>activatecell</b></code></td> <td><code><i>cellIndex</i></code></td> </tr> <tr> <td><code><b>cellselset</b></code></td> <td><code><b>cellselection set</b></code></td> <td><code><i>first</i> ?<i>last</i>?</code></td> </tr> <tr> <td><code><b>cellselclear</b></code></td> <td><code><b>cellselection clear</b></code></td> <td><code><i>first</i> ?<i>last</i>?</code></td> </tr> <tr> <td rowspan="5">ttk::treeview</td> <td><code><b>activate</b></code></td> <td><code><b>focus</b></code></td> <td><code><i>item</i></code></td> </tr> <tr> <td><code><b>selset</b></code></td> <td><code><b>selection set</b></code></td> <td><code><i>itemList</i></code></td> </tr> <tr> <td><code><b>seladd</b></code></td> <td><code><b>selection add</b></code></td> <td><code><i>itemList</i></code></td> </tr> <tr> <td><code><b>selclear</b></code></td> <td><code><b>selection remove</b></code></td> <td><code><i>itemList</i></code></td> </tr> <tr> <td><code><b>seltoggle</b></code></td> <td><code><b>selection toggle</b></code></td> <td><code><i>itemList</i></code></td> </tr> <tr> <td rowspan="6">text or ctext</td> <td><code><b>insert</b></code></td> <td><code><b>insert</b></code></td> <td><code><i>index</i> <i>string</i> ?<i>tagList</i> <i>string</i> <i>tagList</i> ...?</code></td> </tr> <tr> <td><code><b>delete</b></code></td> <td><code><b>delete</b></code></td> <td><code><i>from</i> ?<i>to</i>?</code></td> </tr> <tr> <td><code><b>replace</b></code></td> <td><code><b>replace</b></code></td> <td><code><i>from</i> <i>to</i> <i>string</i> ?<i>tagList</i> <i>string</i> <i>tagList</i> ...?</code></td> </tr> <tr> <td><code><b>motion</b></code></td> <td><code><b>mark set insert</b></code></td> <td><code><i>index</i></code></td> </tr> <tr> <td><code><b>selset</b></code></td> <td><code><b>tag add sel</b></code></td> <td><code><i>from</i> ?<i>to</i> <i>from</i> <i>to</i> ...?</code></td> </tr> <tr> <td><code><b>selclear</b></code></td> <td><code><b>tag remove sel</b></code></td> <td><code><i>from</i> ?<i>to</i> <i>from</i> <i>to</i> ...?</code></td> </tr> </table> </dd> <dd class="tm"><b>REMARKS:</b></dd> <dd class="tm"> <ol> <li>You may abbreviate the words <code><b>before</b></code>, <code><b>after</b></code>, <code><b>insert</b></code>, <code><b>delete</b></code>, <code><b>replace</b></code>, <code><b>motion</b></code>, and <code><b>activate</b></code> (the latter not for tablelist widgets) to a minimum of one character. Similarly, the first four characters of the words <code><b>selset</b></code>, <code><b>selclear</b></code>, <code><b>seladd</b></code>, and <code><b>seltoggle</b></code>, the first eight characters of <code><b>cellselset</b></code> and <code><b>cellselclear</b></code>, and the first nine characters of <code><b>activatecell</b></code> are sufficient for Wcb to recognize these options.</li> <li class="tm">After a successful invocation of this command with at least one nonempty callback following the <code><i>option</i></code> argument, you can use either the new procedure <code><i>widgetName</i></code> or the original Tcl command <code>_<i>widgetName</i></code> to perform any valid operation on the widget <code><i>widgetName</i></code>. Use the old Tcl command <code>_<i>widgetName</i></code> if you want to prevent the callbacks from being invoked when executing the respective widget subcommand.</li> <li class="tm">When destroying a widget <code><i>widgetName</i></code> for which <code><b>wcb::callback</b></code> has replaced the corresponding Tcl command with a new procedure, the original command <code>_<i>widgetName</i></code> is deleted automatically by the Tcl interpreter (this is not true in the case of a BWidget Entry, tablelist, or ctext widget). The new widget procedure <code><i>widgetName</i></code> would persist, but Wcb arranges for it to be deleted from within a cleanup script bound to the <code><b><Destroy></b></code> event. This cleanup script is associated with a binding tag called <code><b>WcbCleanup</b></code>, which is appended to the list of binding tags of the widget the first time when registering some callbacks for it. (In the case of a BWidget Entry, tablelist, or ctext widget, this script also deletes the original Tcl command <code>_<i>widgetName</i></code>.)</li> <li class="tm">The cleanup script mentioned above also unregisters all callbacks defined for <code><i>widgetName</i></code>, thus ensuring that a widget with the same path created later will not inherit them from the widget just deleted (this can be important in some applications). For this reason, you should be careful not to remove <code><b>WcbCleanup</b></code> from the list of binding tags of the given widget!</li> </ol> </dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>callback, widget, Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, listbox, tablelist, tile treeview, text, ctext</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="cbappend">The <code><b>wcb::cbappend</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::cbappend</code> – Append to a callback list</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::cbappend</b> <i>widgetName</i> <b>before</b>|<b>after</b> <i>option</i> ?<i>callback</i> <i>callback</i> ...? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command is almost identical to <code><b><a href= "#callback">wcb::callback</a></b></code>. The only difference is that <code><b>wcb::cbappend</b></code> <i>appends</i> the arguments specified after the <code><i>option</i></code> parameter to the current callback list (if present), while <code><b>wcb::callback</b></code> <i>replaces</i> the old callbacks with these arguments.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>callback, append, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="cbprepend">The <code><b>wcb::cbprepend</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::cbprepend</code> – Prepend to a callback list</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::cbprepend</b> <i>widgetName</i> <b>before</b>|<b>after</b> <i>option</i> ?<i>callback</i> <i>callback</i> ...? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command is almost identical to <code><b><a href= "#callback">wcb::callback</a></b></code>. The only difference is that <code><b>wcb::cbprepend</b></code> <i>prepends</i> the arguments specified after the <code><i>option</i></code> parameter to the current callback list (if present), while <code><b>wcb::callback</b></code> <i>replaces</i> the old callbacks with these arguments.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>callback, prepend, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="cancel">The <code><b>wcb::cancel</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::cancel</code> – Cancel a widget command</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::cancel</b> ?<i>script</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This procedure is designed to be invoked from a before-callback for a widget command. It cancels the execution of that command and of the remaining callbacks, and evaluates the <code><i>script</i></code> argument in the global scope. If this argument is not specified, it defaults to the <code><b>bell</b></code> command.</dd> <dd class="tm">The return value is the one obtained from <code><i>script</i></code> if this argument is specified and nonempty. Otherwise, the command returns an empty string.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>cancel, command, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="canceled">The <code><b>wcb::canceled</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::canceled</code> – Query the canceled status of a widget command</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::canceled</b> <i>widgetName</i> <i>option</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>Returns the value <code>1</code> if the most recent invocation of the widget operation corresponding to <code><i>widgetName</i></code> and <code><i>option</i></code> has been aborted by some before-callback by invoking <code><b><a href="#cancel">wcb::cancel</a></b></code>; otherwise, the return value is <code>0</code>. The arguments must fulfil the same restrictions as in the case of the <code><b><a href= "#callback">wcb::callback</a></b></code> command.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>cancel, command, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="extend">The <code><b>wcb::extend</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::extend</code> – Extend the argument list of a widget command</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::extend</b> ?<i>arg</i> <i>arg</i> ...? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This procedure is designed to be invoked from a before-callback for a widget command. It appends the values given in the optional <code><i>arg</i></code> parameters to the argument list of that command. The new argument list will be passed to the remaining callbacks for that command, too.</dd> <dd class="tm">This procedure simply passes its parameters to the <code><b>lappend</b></code> command, called for the argument list of the respective widget operation.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>extend, argument, command, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="replace">The <code><b>wcb::replace</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::replace</code> – Replace arguments of a widget command with new ones</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::replace</b> <i>first</i> <i>last</i> ?<i>arg</i> <i>arg</i> ...? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This procedure is designed to be invoked from a before-callback for a widget command. It replaces the arguments having the indices <code><i>first</i></code> through <code><i>last</i></code> of that command with the optional <code><i>arg</i></code> parameters. The new argument list will be passed to the remaining callbacks for that command, too. The arguments are numbered from <code>0</code> (see the <a href= "#callback_table">table</a> in the description of the <code><b><a href= "#callback">wcb::callback</a></b></code> command).</dd> <dd class="tm">This procedure simply passes its parameters to the <code><b>lreplace</b></code> command, called for the argument list of the respective widget operation.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>replace, argument, command, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="pathname">The <code><b>wcb::pathname</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::pathname</code> – Query the path name of the widget corresponding to a Tcl command name</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::pathname</b> <i>origCmd</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This procedure returns the path name of the widget corresponding to the Tcl command name <code><i>origCmd</i></code> passed to a callback.</dd> <dd class="tm">When a before- or after-callback for a widget is invoked, the name of the original Tcl command associated with that widget is automatically appended to it as parameter. This procedure can be used within a callback to derive the path name of the widget from the command name passed to the callback as argument. It simply returns the string range obtained from <code><i>origCmd</i></code> by removing the <code>"::_"</code> prefix.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>path name, command, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="changeEntryText">The <code><b>wcb::changeEntryText</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::changeEntryText</code> – Change the text of a Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::changeEntryText</b> <i>widgetName string</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>Replaces the text of the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>widgetName</i></code> with <code><i>string</i></code>, by using the <code><b>delete</b></code> and <code><b>insert</b></code> operations. If the first subcommand is canceled by some before-<code><b>delete</b></code> callback then the procedure returns without inserting the new text; if the second operation is canceled by some before-<code><b>insert</b></code> callback then the command restores the original contents of the widget.</dd> <dd class="tm">The procedure keeps the position of the insertion cursor. The return value is <code>1</code> on success and <code>0</code> on failure, i.e., if one of the attempted operations was canceled by some before-callback.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="postInsertEntryLen">The <code><b>wcb::postInsertEntryLen</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::postInsertEntryLen</code> – Query the would-be length of the text in a Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget after text insertion</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::postInsertEntryLen</b> <i>widgetName string</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>Returns the length of the text that would be contained in the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>widgetName</i></code> after inserting <code><i>string</i></code>.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>insert, Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="postInsertEntryText">The <code><b>wcb::postInsertEntryText</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::postInsertEntryText</code> – Query the would-be text of a Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget after text insertion</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::postInsertEntryText</b> <i>widgetName index string</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>Returns the text that would be contained in the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>widgetName</i></code> after inserting <code><i>string</i></code> before the character indicated by <code><i>index</i></code>.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>insert, Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="postDeleteEntryText">The <code><b>wcb::postDeleteEntryText</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::postDeleteEntryText</code> – Query the would-be text of a Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget after text deletion</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::postDeleteEntryText</b> <i>widgetName from</i> ?<i>to</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>Returns the text that would be contained in the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>widgetName</i></code> after deleting the characters starting with the one indicated by the index <code><i>from</i></code> and stopping just before <code><i>to</i></code>. If <code><i>to</i></code> is not specified then the return value is the text that would be contained in the widget after deleting the single character given by <code><i>from</i></code>.</dd> <dd class="tm"><b>REMARK:</b> This command has a variable number (2 or 3) of arguments, because the <code><b>delete</b></code> subcommand of the Tcl command associated with <code><i>widgetName</i></code> expects either one or two indices as arguments. For this reason, the correct way to invoke this command from within a before-<code><b>delete</b></code> callback is as shown in the following example:</dd> <dd> <blockquote> <pre> proc myBeforeDeleteCallback {w args} { <span class="cmt"># # Get the text that would be contained in the widget after # deleting the characters specified by $args, which stands # for the one or two arguments passed to delete; pass these # arguments to wcb::postDeleteEntryText by expanding $args #</span> set newText [eval [list wcb::postDeleteEntryText $w] $args] if {!<i>some_condition_on_</i>$newText} { wcb::cancel } } </pre> </blockquote> </dd> <dd>The following alternative, more elegant solution requires Tcl/Tk 8.5 or later:</dd> <dd> <blockquote> <pre> proc myBeforeDeleteCallback {w args} { <span class="cmt"># . . .</span> set newText [wcb::postDeleteEntryText $w {*}$args] . . . } </pre> </blockquote> </dd> <dt><b>KEYWORDS</b></dt> <dd>delete, Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="entrycb">Before-<code><b>insert</b></code> Callbacks for entry, spinbox, and combobox Widgets</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::checkStrFor*</code>, <code>wcb::convStrTo*</code>, <code>wcb::checkEntryFor*</code>, <code>wcb::checkEntryLen</code> – Before-<code><b>insert</b></code> callbacks for Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, and tile combobox widgets</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::checkStrForRegExp</b> <i>exp w idx str</i> <b>wcb::checkStrForAlpha</b> <i> w idx str</i> <b>wcb::checkStrForNum</b> <i> w idx str</i> <b>wcb::checkStrForAlnum</b> <i> w idx str</i> <b>wcb::convStrToUpper</b> <i> w idx str</i> <b>wcb::convStrToLower</b> <i> w idx str</i> <b>wcb::checkEntryForInt</b> <i> w idx str</i> <b>wcb::checkEntryForUInt</b> <i>max w idx str</i> <b>wcb::checkEntryForReal</b> <i> w idx str</i> <b>wcb::checkEntryForFixed</b> <i>cnt w idx str</i> <b>wcb::checkEntryLen</b> <i>len w idx str</i> </pre> </dd> <dt class="tm"><b>DESCRIPTION</b></dt> <dd>The <code><b>wcb::checkStrForRegExp</b></code> callback checks whether the string <code><i>str</i></code> to be inserted into the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>w</i></code> is matched by the regular expression <code><i>exp</i></code>; if not, it cancels the <code><b>insert</b></code> operation.</dd> <dd class="tm">The three other <code><b>wcb::checkStrFor*</b></code> callbacks check whether the string <code><i>str</i></code> to be inserted into the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>w</i></code> is alphabetic, numeric, or alphanumeric, respectively; if not, they cancel the <code><b>insert</b></code> operation. These procedures just invoke the callback <code><b>wcb::checkStrForRegExp</b></code>, passing to it the Unicode-based patterns <code>{^[[:alpha:]]*$}</code>, <code>{^[[:digit:]]*$}</code>, and <code>{^[[:alnum:]]*$}</code> for Tk versions 8.1 or higher, and the ASCII patterns <code>{^[A-Za-z]*$}</code>, <code>{^[0-9]*$}</code>, and <code>{^[A-Za-z0-9]*$}</code> if Tk version 8.0 is being used.</dd> <dd class="tm">The <code><b>wcb::convStrTo*</b></code> callbacks replace the string <code><i>str</i></code> to be inserted into the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>w</i></code> with its uppercase or lowercase equivalent, respectively.</dd> <dd class="tm">The <code><b>wcb::checkEntryFor*</b></code> callbacks check whether the text contained in the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>w</i></code> after inserting the string <code><i>str</i></code> before the character indicated by the index <code><i>idx</i></code> would represent (the starting part of) an integer number, unsigned integer no greater than <code><i>max</i></code>, real number, or real number in fixed-point format with at most <code><i>cnt</i></code> digits after the decimal point, respectively; if not, they cancel the <code><b>insert</b></code> operation. <code><i>max</i></code> and <code><i>cnt</i></code> should be nonnegative numbers or <code><b>*</b></code>; <code><i>max</i> = <b>*</b></code> means: no upper bound for the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox value, while <code><i>cnt</i> = <b>*</b></code> stands for an unlimited number of digits after the decimal point.</dd> <dd class="tm">The <code><b>wcb::checkEntryLen</b></code> callback checks whether the length of the text contained in the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>w</i></code> after inserting the string <code><i>str</i></code> would be greater than <code><i>len</i></code>; if yes, it cancels the <code><b>insert</b></code> operation.</dd> <dd class="tm">These callback procedures are implemented in the file <code><b>wcbEntry.tcl</b></code>, contained in the <code><b>scripts</b></code> directory. They return an empty string.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>callback, insert, Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="textcb">Before-<code><b>insert</b></code> Callbacks for text and ctext Widgets</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::checkStrsFor*</code>, <code>wcb::convStrsTo*</code> – Before-<code><b>insert</b></code> callbacks for text and ctext widgets</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::checkStrsForRegExp</b> <i>exp w idx args</i> <b>wcb::checkStrsForAlpha</b> <i> w idx args</i> <b>wcb::checkStrsForNum</b> <i> w idx args</i> <b>wcb::checkStrsForAlnum</b> <i> w idx args</i> <b>wcb::convStrsToUpper</b> <i> w idx args</i> <b>wcb::convStrsToLower</b> <i> w idx args</i> </pre> </dd> <dt class="tm"><b>DESCRIPTION</b></dt> <dd>The <code><b>wcb::checkStrsForRegExp</b></code> callback checks whether the strings to be inserted into the text or ctext widget <code><i>w</i></code>, contained in the list <code><i>args</i></code> of the form <code><i>string</i> ?<i>tagList</i> <i>string</i> <i>tagList</i> ...?</code>, are matched by the regular expression <code><i>exp</i></code>; if not, it cancels the <code><b>insert</b></code> operation.</dd> <dd class="tm">The three other <code><b>wcb::checkStrsFor*</b></code> callbacks check whether the strings to be inserted into the text or ctext widget <code><i>w</i></code>, contained in the list <code><i>args</i></code> of the form <code><i>string</i> ?<i>tagList</i> <i>string</i> <i>tagList</i> ...?</code>, are alphabetic, numeric, or alphanumeric, respectively; if not, they cancel the <code><b>insert</b></code> operation. These procedures just invoke the callback <code><b>wcb::checkStrsForRegExp</b></code>, passing to it the Unicode-based patterns <code>{^[[:alpha:]\n]*$}</code>, <code>{^[[:digit:]\n]*$}</code>, and <code>{^[[:alnum:]\n]*$}</code> for Tk versions 8.1 or higher, and the ASCII patterns <code>"^\[A-Za-z\n]*$"</code>, <code>"^\[0-9\n]*$"</code>, and <code>"^\[A-Za-z0-9\n]*$"</code> if Tk version 8.0 is being used (in this case, the presence of the <code>"\n"</code> makes the regular expressions a bit ugly).</dd> <dd class="tm">The <code><b>wcb::convStrsTo*</b></code> callbacks replace the strings to be inserted into the text or ctext widget <code><i>w</i></code>, contained in the list <code><i>args</i></code> of the form <code><i>string</i> ?<i>tagList</i> <i>string</i> <i>tagList</i> ...?</code>, with their uppercase or lowercase equivalents, respectively.</dd> <dd class="tm">These callback procedures are implemented in the file <code><b>wcbText.tcl</b></code>, contained in the <code><b>scripts</b></code> directory. They return an empty string.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>callback, insert, text, ctext, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/scrollutil/ScrollableFrmDemo1.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/scrollutil/ScrollableFrmDemo2.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/scrollutil/ScrolledTablelist.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/scrollutil/ScrolledText.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/scrollutil/SyncListboxes.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/scrollutil/SyncTablelists.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/scrollutil/TablelistConfig.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/scrollutil/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 |
<!DOCTYPE html> <html> <head> <title>The Scrolling Utilities Package Scrollutil 1.5</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content= "mouse wheel event, binding, event handling, scrolling, scrollable widget container, focus, scrollarea, scrollsync, scrollableframe"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>The Scrolling Utilities Package Scrollutil 1.5</h1> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2>Contents</h2> <p><a href="scrollutil.html">Scrollutil Programmer's Guide</a></p> <p><a href="scrollarea.html">The <code>scrollutil::scrollarea</code> and <code>scrollutil::getscrollarea</code> Commands</a></p> <p><a href="scrollsync.html">The <code>scrollutil::scrollsync</code> and <code>scrollutil::getscrollsync</code> Commands</a></p> <p><a href="scrollableframe.html">The <code>scrollutil::scrollableframe</code> Command</a></p> <p><a href="wheelEvent.html">Commands Related to Mouse Wheel Event Handling</a></p> </body> </html> |
Added embedded/www/tklib/files/modules/scrollutil/scrollableframe.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 |
<!DOCTYPE html> <html> <head> <title>The scrollutil::scrollableframe Command</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="scrollableframe, widget, frame, scrollable"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>The <code><b>scrollutil::scrollableframe</b></code> Command</h1> <h2>For Scrollutil Version 1.5</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#quick_ref">Quick Reference</a></li> <li><a href="#detailed_ref">Detailed Reference</a></li> <li><a href="#comparison">Comparison with BWidget ScrollableFrame and iwidgets::scrolledframe</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="quick_ref">Quick Reference</h2> <dl> <dt><a href="#name">NAME</a></dt> <dd><code>scrollutil::scrollableframe</code> – Create and manipulate scrollableframe widgets</dd> <dt class="tm"><a href="#synopsis">SYNOPSIS</a></dt> <dd> <pre> <b>scrollutil::scrollableframe</b> <i>pathName</i> ?<i>options</i>? </pre> </dd> <dt><a href="#description">DESCRIPTION</a></dt> <dt class="tm"><a href="#std_options">STANDARD OPTIONS</a></dt> <dd> <pre> <b>-background -highlightbackground -relief -borderwidth -highlightcolor -xscrollcommand -cursor -highlightthickness -yscrollcommand</b> </pre> </dd> <dt><a href="#widget_options">WIDGET-SPECIFIC OPTIONS</a></dt> <dd><code><b><a href="#contentheight">-contentheight</a></b> <i>screenDistance</i></code></dd> <dd><code><b><a href="#contentwidth">-contentwidth</a></b> <i>screenDistance</i></code></dd> <dd><code><b><a href="#fitcontentheight">-fitcontentheight</a></b> <i>boolean</i></code></dd> <dd><code><b><a href="#fitcontentwidth">-fitcontentwidth</a></b> <i>boolean</i></code></dd> <dd><code><b><a href="#height">-height</a></b> <i>screenDistance</i></code></dd> <dd><code><b><a href="#takefocus">-takefocus</a></b> <b>0</b>|<b>1</b>|<b>""</b>|<i>command</i></code></dd> <dd><code><b><a href="#width">-width</a></b> <i>screenDistance</i></code></dd> <dd><code><b><a href="#xscrollincrement">-xscrollincrement</a></b> <i>screenDistance</i></code></dd> <dd><code><b><a href="#yscrollincrement">-yscrollincrement</a></b> <i>screenDistance</i></code></dd> <dt class="tm"><a href="#widget_command">WIDGET COMMAND</a></dt> <dd><code><i>pathName</i> <b><a href="#cget">cget</a></b> <i>option</i></code></dd> <dd><code><i>pathName</i> <b><a href="#configure">configure</a></b> ?<i>option</i>? ?<i>value</i> <i>option</i> <i>value</i> ...?</code></dd> <dd><code><i>pathName</i> <b><a href= "#contentframe">contentframe</a></b></code></dd> <dd> <code><i>pathName</i> <b><a href="#scan">scan</a></b> <i>option args</i></code> <dl> <dd><code><i>pathName</i> <b>scan mark</b> <i>x y</i></code></dd> <dd><code><i>pathName</i> <b>scan dragto</b> <i>x y</i> ?<i>gain</i>?</code> </dd> </dl> </dd> <dd><code><i>pathName</i> <b><a href="#see">see</a></b> <i>widget</i> ?<b>nw</b>|<b>ne</b>|<b>sw</b>|<b>se</b>?</code></dd> <dd> <code><i>pathName</i> <b><a href="#xview">xview</a></b> ?<i>args</i>?</code> <dl> <dd><code><i>pathName</i> <b>xview</b></code></dd> <dd><code><i>pathName</i> <b>xview moveto</b> <i>fraction</i></code></dd> <dd><code><i>pathName</i> <b>xview scroll</b> <i>number</i> <b>units</b>|<b>pages</b></code></dd> </dl> </dd> <dd> <code><i>pathName</i> <b><a href="#yview">yview</a></b> ?<i>args</i>?</code> <dl> <dd><code><i>pathName</i> <b>yview</b></code></dd> <dd><code><i>pathName</i> <b>yview moveto</b> <i>fraction</i></code></dd> <dd><code><i>pathName</i> <b>yview scroll</b> <i>number</i> <b>units</b>|<b>pages</b></code></dd> </dl> </dd> <dt class="tm"><a href="#bindings">BINDINGS</a></dt> <dt class="tm"><a href="#keywords">KEYWORDS</a></dt> <dd>scrollableframe, widget, frame, scrollable</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="detailed_ref">Detailed Reference</h2> <dl> <dt id="name"><b>NAME</b></dt> <dd><code>scrollutil::scrollableframe</code> – Create and manipulate scrollableframe widgets</dd> <dt class="tm" id="synopsis"><b>SYNOPSIS</b></dt> <dd> <pre> <b>scrollutil::scrollableframe</b> <i>pathName</i> ?<i>options</i>? </pre> </dd> <dt id="description"><b>DESCRIPTION</b></dt> <dd>The <code><b>scrollutil::scrollableframe</b></code> command creates a new window named <code><i>pathName</i></code> and of the class <code><b>Scrollableframe</b></code>, and makes it into a <b>scrollableframe</b> widget. Additional options, described below, may be specified on the command line or in the option database to configure aspects of the scrollableframe widget such as its width, height, and scrolling increments. The <code><b>scrollutil::scrollableframe</b></code> command returns its <code><i>pathName</i></code> argument. At the time this command is invoked, there must not exist a window named <code><i>pathName</i></code>, but <code><i>pathName</i></code>'s parent must exist.</dd> <dd class="tm">A scrollableframe is a mega-widget containing a <b>content frame</b>, whose dimensions may be larger than those of the widget itself. Arbitrary regions of this frame can be brought into view by scrolling, being that the scrollableframe widget supports the <code><b>-xscrollcommand</b></code> and <code><b>-yscrollcommand</b></code> configuration options and the associated Tcl command has the <code><b><a href="#xview">xview</a></b></code> and <code><b><a href= "#yview">yview</a></b></code> subcommands. The content frame may contain any number of arbitrary widgets. In other words, the <code><b>scrollutil::scrollableframe</b></code> command implements a <b>scrollable widget container</b>.</dd> <dd class="tm">In the Scrollutil package both the scrollableframe widget and its content frame are implemented as Tk core frames, while in Scrollutil_tile they are ttk::frame widgets. The content frame can be accessed by means of the <code><b><a href= "#contentframe">contentframe</a></b></code> subcommand. Individual widgets contained in it can be made visible in the scrollableframe window with the aid of the <code><b><a href="#see">see</a></b></code> subcommand. In addition to scrolling, scrollableframe widgets also support scanning, with the aid of appropriate mouse event bindings that invoke the <code><b><a href="#scan">scan</a></b></code> subcommand.</dd> <dd class="tm"> A scrollableframe widget is typically created within a <a href= "scrollarea.html">scrollarea</a>, like in the following example: <blockquote> <pre> set sa [<a href="scrollarea.html#synopsis">scrollutil::scrollarea</a> ...] set sf [<a href="#synopsis">scrollutil::scrollableframe</a> $sa.sf ...] $sa <a href="scrollarea.html#setwidget">setwidget</a> $sf set cf [$sf <a href="#contentframe">contentframe</a>] <i><populate the content frame></i> update idletasks $sf <a href="#configure">configure</a> <a href= "#width">-width</a> [winfo reqwidth $cf] <a href= "#height">-height</a> ... <a href="#yscrollincrement">-yscrollincrement</a> ... pack $sa -expand yes -fill both </pre> </blockquote> </dd> <dt id="std_options"><b>STANDARD OPTIONS</b></dt> <dd> <pre> <b>-background -highlightbackground -relief -borderwidth -highlightcolor -xscrollcommand -cursor -highlightthickness -yscrollcommand</b> </pre> </dd> <dd>See the <b>options</b> manual entry for details on the standard Tk widget options. The <code><b>-background</b></code>, <code><b>-highlightbackground</b></code>, <code><b>-highlightcolor</b></code>, and <code><b>-highlightthickness</b></code> options are only supported by the Scrollutil package, but not by Scrollutil_tile. They have the same default values as the options of the same names for Tk frame widgets. The default values of the remaining standard options are:</dd> <dd> <pre> <b>-borderwidth</b> 0 <b>-cursor</b> "" <b>-relief flat</b> <b>-xscrollcommand</b> "" <b>-yscrollcommand</b> "" </pre> </dd> <dt id="widget_options"><b>WIDGET-SPECIFIC OPTIONS</b></dt> <dd id="contentheight"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-contentheight</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> contentHeight</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> ContentHeight</b></code></td> </tr> </table> <blockquote> <p>Specifies the desired height for the content frame in any of the forms acceptable to <code><b>Tk_GetPixels</b></code>. If the option's value is less than or equal to zero then the content frame's height is made just large enough to hold all its children. This option is only relevant if the value of the <code><b><a href= "#fitcontentheight">-fitcontentheight</a></b></code> option is false; otherwise the content frame will have the same height as the scrollableframe window, regardless of the value of the <code><b>-contentheight</b></code> option. The default is <code>0</code>, which is suitable for the vast majority of applications.</p> </blockquote> </dd> <dd id="contentwidth"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-contentwidth</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> contentWidth</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> ContentWidth</b></code></td> </tr> </table> <blockquote> <p>Specifies the desired width for the content frame in any of the forms acceptable to <code><b>Tk_GetPixels</b></code>. If the option's value is less than or equal to zero then the content frame's width is made just large enough to hold all its children. This option is only relevant if the value of the <code><b><a href= "#fitcontentwidth">-fitcontentwidth</a></b></code> option is false; otherwise the content frame will have the same width as the scrollableframe window, regardless of the value of the <code><b>-contentwidth</b></code> option. The default is <code>0</code>, which is suitable for the vast majority of applications.</p> </blockquote> </dd> <dd id="fitcontentheight"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-fitcontentheight</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> fitContentHeight</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> FitContentHeight</b></code></td> </tr> </table> <blockquote> <p>Specifies a boolean value indicating whether or not the content frame should have the same height as the scrollableframe window. If true then the content frame's height will be kept in sync with that of the widget and the value of the <code><b><a href= "#contentheight">-contentheight</a></b></code> option will be ignored. The default is <code>0</code>.</p> </blockquote> </dd> <dd id="fitcontentwidth"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-fitcontentwidth</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> fitContentWidth</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> FitContentWidth</b></code></td> </tr> </table> <blockquote> <p>Specifies a boolean value indicating whether or not the content frame should have the same width as the scrollableframe window. If true then the content frame's width will be kept in sync with that of the widget and the value of the <code><b><a href= "#contentwidth">-contentwidth</a></b></code> option will be ignored. The default is <code>0</code>.</p> </blockquote> </dd> <dd id="height"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-height</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> height</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> Height</b></code></td> </tr> </table> <blockquote> <p>Specifies the desired height for the scrollableframe widget in any of the forms acceptable to <code><b>Tk_GetPixels</b></code>. Note that this sets the <i>inner</i> height, excluding the border and highlight rectangle (if any) drawn around the outside of the widget. The default is <code>100</code>, which should be overridden with a suitable application-specific value.</p> </blockquote> </dd> <dd id="takefocus"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-takefocus</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> takeFocus</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> TakeFocus</b></code></td> </tr> </table> <blockquote> <p>This option determines whether the scrollableframe widget accepts the focus during keyboard traversal. It is almost identical to the standard option of the same name (see the <b>options</b> manual entry for details). The only difference is that not the scrollableframe widget itself but its content frame will receive the focus during keyboard traversal with the standard keys (<code>Tab</code> and <code>Shift-Tab</code>). The default is <code>0</code>, being that a scrollableframe widget is esentially a frame used as a view for its content frame component.</p> </blockquote> </dd> <dd id="width"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-width</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> width</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> Width</b></code></td> </tr> </table> <blockquote> <p>Specifies the desired width for the scrollableframe widget in any of the forms acceptable to <code><b>Tk_GetPixels</b></code>. Note that this sets the <i>inner</i> width, excluding the border and highlight rectangle (if any) drawn around the outside of the widget. The default is <code>100</code>, which should be overridden with a suitable application-specific value.</p> </blockquote> </dd> <dd id="xscrollincrement"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-xscrollincrement</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> xScrollIncrement</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> ScrollIncrement</b></code></td> </tr> </table> <blockquote> <p>Specifies an increment for horizontal scrolling, in any of the forms acceptable to <code><b>Tk_GetPixels</b></code>. If the value of this option is greater than zero then the horizontal view in the window will be constrained so that the x coordinate within the content frame at the left edge of the window is always an even multiple of <code><b>xScrollIncrement</b></code>; furthermore, the units for horizontal scrolling (see the <code><b><a href= "#xview">xview</a></b></code> subcommad) will also be <code><b>xScrollIncrement</b></code>. If the value is less than or equal to zero then the horizontal scrolling is unconstrained. The default is <code>0</code>.</p> </blockquote> </dd> <dd id="yscrollincrement"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-yscrollincrement</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> yScrollIncrement</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> ScrollIncrement</b></code></td> </tr> </table> <blockquote> <p>Specifies an increment for vertical scrolling, in any of the forms acceptable to <code><b>Tk_GetPixels</b></code>. If the value of this option is greater than zero then the vertical view in the window will be constrained so that the y coordinate within the content frame at the top edge of the window is always an even multiple of <code><b>yScrollIncrement</b></code>; furthermore, the units for vertical scrolling (see the <code><b><a href= "#yview">yview</a></b></code> subcommad) will also be <code><b>yScrollIncrement</b></code>. If the value is less than or equal to zero then the vertical scrolling is unconstrained. The default is <code>0</code>.</p> </blockquote> </dd> <dt id="widget_command"><b>WIDGET COMMAND</b></dt> <dd> The <code><b>scrollutil::scrollableframe</b></code> command creates a new Tcl command whose name is <code><i>pathName</i></code>. This command may be used to invoke various operations on the widget. It has the following general form: <blockquote> <pre> <i>pathName</i> <i>option</i> ?<i>arg</i> <i>arg</i> ...? </pre> </blockquote> </dd> <dd><code><i>option</i></code> and the <code><i>arg</i></code>s determine the exact behavior of the command. The following commands are possible for scrollableframe widgets:</dd> <dd> <dl> <dt class="tm" id="cget"><code><i>pathName</i> <b>cget</b> <i>option</i></code></dt> <dd>Returns the current value of the configuration option given by <code><i>option</i></code>, which may have any of the values accepted by the <code><b>scrollutil::scrollableframe</b></code> command.</dd> <dt class="tm" id="configure"><code><i>pathName</i> <b>configure</b> ?<i>option</i>? ?<i>value</i> <i>option</i> <i>value</i> ...?</code></dt> <dd>Queries or modifies the configuration options of the widget. If no <code><i>option</i></code> is specified, the command returns a list describing all of the available options for <code><i>pathName</i></code> (see <code><b>Tk_ConfigureInfo</b></code> for information on the format of this list). If <code><i>option</i></code> is specified with no <code><i>value</i></code>, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no <code><i>option</i></code> is specified). If one or more <code><i>option</i></code>-<code><i>value</i></code> pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the return value is an empty string. <code><i>option</i></code> may have any of the values accepted by the <code><b>scrollutil::scrollableframe</b></code> command.</dd> <dt class="tm" id="contentframe"><code><i>pathName</i> <b>contentframe</b></code></dt> <dd>Returns the path name of the widget's content frame.</dd> <dt class="tm" id="scan"><code><i>pathName</i> <b>scan</b> <i>option args</i></code></dt> <dd>This command is used to implement scanning on scrollableframe widgets. It has two forms, depending on <code><i>option</i></code>:</dd> <dd> <dl> <dt class="tm"><code><i>pathName</i> <b>scan mark</b> <i>x y</i></code></dt> <dd>Records <code><i>x</i></code> and <code><i>y</i></code> and the current view in the scrollableframe window; used in conjunction with later <code><b>scan</b> <b>dragto</b></code> commands. Typically this command is associated with a mouse button press in the widget and <code><i>x</i></code> and <code><i>y</i></code> are the coordinates of the mouse. It returns an empty string.</dd> <dt class="tm"><code><i>pathName</i> <b>scan dragto</b> <i>x y</i> ?<i>gain</i>?</code></dt> <dd>This command computes the difference between its <code><i>x</i></code> and <code><i>y</i></code> arguments (which are typically mouse coordinates) and the <code><i>x</i></code> and <code><i>y</i></code> arguments to the last <code><b>scan</b> <b>mark</b></code> command for the widget. It then adjusts the view by <code><i>gain</i></code> times the difference in coordinates, where <code><i>gain</i></code> defaults to <code>10</code>. This command is typically associated with mouse motion events in the widget, to produce the effect of dragging the content frame at high speed through the window. The return value is an empty string.</dd> </dl> </dd> <dt class="tm" id="see"><code><i>pathName</i> <b>see</b> <i>widget</i> ?<i>corner</i>?</code></dt> <dd>This command adjusts the view in the scrollableframe's window so that <code><i>widget</i></code> becomes visible in it. The specified widget must be a descendant of the content frame and must have the same toplevel. In addition, it must be managed by some geometry manager (such as <code><b>grid</b></code>, <code><b>pack</b></code>, <code><b>place</b></code>, <code><b>text</b></code>, or <code><b>canvas</b></code>). The optional <code><i>corner</i></code> argument specifies which corner of <code><i>widget</i></code> should become visible if it is too large to fit into the window. The possible values are <code><b>nw</b></code> (north-west), <code><b>ne</b></code> (north-east), <code><b>sw</b></code> (south-west), and <code><b>se</b></code> (south-east). The default corner is <code><b>nw</b></code>.</dd> <dd class="tm"><b>REMARK:</b> By using this subcommand you can make the keyboard navigation in the content frame more user-friendly, like in the following example, in which <code>$w</code> is a descendant of the content frame of the scrollableframe widget <code>$sf</code> (it is assumed that <code>$sf</code> doesn't contain <code>%</code> characters):</dd> <dd> <blockquote> <pre> bind $w <<TraverseIn>> [list $sf <span class="red">see</span> %W] </pre> </blockquote> </dd> <dd>If the widget <code>$w</code> was embedded into a <a href= "scrollarea.html">scrollarea</a> via the latter's <code><b><a href= "scrollarea.html#setwidget">setwidget</a></b></code> subcommand, and the scrollarea in turn is a descendant of the content frame, then it is more user-friendly to bring the scrollarea into view rather than just the widget:</dd> <dd> <blockquote> <pre> bind $w <<TraverseIn>> [list seeScrollarea $sf %W] proc seeScrollarea {sf w} { $sf <span class="red">see</span> [<b><a href= "scrollarea.html#getscrollarea">scrollutil::getscrollarea</a></b> $w] } </pre> </blockquote> </dd> <dt id="xview"><code><i>pathName</i> <b>xview</b> ?<i>args</i>?</code></dt> <dd>This command is used to query and change the horizontal position of the information displayed in the widget's window. It can take any of the following forms:</dd> <dd> <dl> <dt class="tm"><code><i>pathName</i> <b>xview</b></code></dt> <dd>Returns a list containing two elements. Each element is a real fraction between <code>0</code> and <code>1</code>; together they describe the horizontal span that is visible in the window. For example, if the first element is <code>0.2</code> and the second element is <code>0.6</code> then 20% of the content frame is off-screen to the left, the middle 40% is visible in the window, and 40% of the content frame is off-screen to the right. These are the same values passed to scrollbars via the <code><b>-xscrollcommand</b></code> option.</dd> <dt class="tm"><code><i>pathName</i> <b>xview moveto</b> <i>fraction</i></code></dt> <dd>Adjusts the view in the window so that <code><i>fraction</i></code> of the total width of the content frame is off-screen to the left. <code><i>fraction</i></code> must be a fraction between <code>0</code> and <code>1</code>.</dd> <dt class="tm"><code><i>pathName</i> <b>xview scroll</b> <i>number what</i></code></dt> <dd>This command shifts the view in the window left or right according to <code><i>number</i></code> and <code><i>what</i></code>. <code><i>number</i></code> must be an integer. <code><i>what</i></code> must be either <code><b>units</b></code> or <code><b>pages</b></code> or an abbreviation of one of these. If <code><i>what</i></code> is <code><b>units</b></code>, the view adjusts left or right in units of the <code><b><a href= "#xscrollincrement">xScrollIncrement</a></b></code> option if it is greater than zero, or in units of one-tenth the window's width otherwise. If <code><i>what</i></code> is <code><b>pages</b></code> then the view adjusts in units of nine-tenths the window's width. If <code><i>number</i></code> is negative then information farther to the left becomes visible; if it is positive then information farther to the right becomes visible.</dd> </dl> </dd> <dt class="tm" id="yview"><code><i>pathName</i> <b>yview</b> ?<i>args</i>?</code></dt> <dd>This command is used to query and change the vertical position of the information displayed in the widget's window. It can take any of the following forms:</dd> <dd> <dl> <dt class="tm"><code><i>pathName</i> <b>yview</b></code></dt> <dd>Returns a list containing two elements. Each element is a real fraction between <code>0</code> and <code>1</code>; together they describe the vertical span that is visible in the window. For example, if the first element is <code>0.2</code> and the second element is <code>0.6</code> then 20% of the content frame is off-screen to the top, the middle 40% is visible in the window, and 40% of the content frame is off-screen to the bottom. These are the same values passed to scrollbars via the <code><b>-yscrollcommand</b></code> option.</dd> <dt class="tm"><code><i>pathName</i> <b>yview moveto</b> <i>fraction</i></code></dt> <dd>Adjusts the view in the window so that <code><i>fraction</i></code> of the total height of the content frame is off-screen to the top. <code><i>fraction</i></code> must be a fraction between <code>0</code> and <code>1</code>.</dd> <dt class="tm"><code><i>pathName</i> <b>yview scroll</b> <i>number what</i></code></dt> <dd>This command shifts the view in the window up or down according to <code><i>number</i></code> and <code><i>what</i></code>. <code><i>number</i></code> must be an integer. <code><i>what</i></code> must be either <code><b>units</b></code> or <code><b>pages</b></code> or an abbreviation of one of these. If <code><i>what</i></code> is <code><b>units</b></code>, the view adjusts up or down in units of the <code><b><a href= "#yscrollincrement">yScrollIncrement</a></b></code> option if it is greater than zero, or in units of one-tenth the window's height otherwise. If <code><i>what</i></code> is <code><b>pages</b></code> then the view adjusts in units of nine-tenths the window's height. If <code><i>number</i></code> is negative then higher information becomes visible; if it is positive then lower information becomes visible.</dd> </dl> </dd> </dl> </dd> <dt class="tm" id="bindings"><b>BINDINGS</b></dt> <dd>Mouse button 1 may be used for scanning. If it is pressed and dragged over the scrollableframe window, the content frame drags at high speed in the direction the mouse moves. For the duration of the scan the cursor is set to one having the shape of a pointing hand.</dd> <dt class="tm" id="keywords"><b>KEYWORDS</b></dt> <dd>scrollableframe, widget, frame, scrollable</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="comparison">Comparison with BWidget ScrollableFrame and iwidgets::scrolledframe</h2> <p>The scrollutil::scrollableframe widget was designed as a lightweight, theme-able, and full-featured replacement for BWidget ScrollableFrame and iwidgets::scrolledframe. The following table contains a comparison of the options and commands provided by the three widgets:</p> <table border="2" cellspacing="0" cellpadding="3"> <tr bgcolor="#FFFFE0"> <th align="left">scrollutil::scrollableframe</th> <th align="left">BWidget ScrollableFrame</th> <th align="left">iwidgets::scrolledframe</th> </tr> <tr> <td><code><b>-background</b></code></td> <td><code><b>-background</b></code></td> <td><code><b>-background</b></code></td> </tr> <tr> <td><code><b>-borderwidth</b></code></td> <td bgcolor="#e0e0e0"></td> <td><code><b>-borderwidth</b></code></td> </tr> <tr> <td><code><b>-cursor</b></code></td> <td bgcolor="#e0e0e0"></td> <td><code><b>-cursor</b></code></td> </tr> <tr> <td><code><b>-contentheight</b></code></td> <td><code><b>-areaheight</b></code></td> <td><code>[<i>pathName</i> <b>component canvas</b>] \<br> <b>itemconfigure frameTag -height</b> ...</code></td> </tr> <tr> <td><code><b>-contentwidth</b></code></td> <td><code><b>-areawidth</b></code></td> <td><code>[<i>pathName</i> <b>component canvas</b>] \<br> <b>itemconfigure frameTag -width</b> ...</code></td> </tr> <tr> <td><code><b>-fitcontentheight</b></code></td> <td><code><b>-constrainedheight</b></code></td> <td><code><b>bind</b> [<i>pathName</i> <b>component canvas</b>] <b><Configure></b> \<br> { <b>%W itemconfigure frameTag -height %h</b> }</code></td> </tr> <tr> <td><code><b>-fitcontentwidth</b></code></td> <td><code><b>-constrainedwidth</b></code></td> <td><code><b>bind</b> [<i>pathName</i> <b>component canvas</b>] <b><Configure></b> \<br> { <b>%W itemconfigure frameTag -width %w</b> }</code></td> </tr> <tr> <td><code><b>-height</b></code> (sets the <i>inner</i> height, excluding<br> the border and highlight rectangle, if any)</td> <td><code><b>-height</b></code> (inner height = total height)</td> <td><code><b>-height</b></code> (sets the <i>total</i> height, including<br> the border and horizontal scrollbar, if any)</td> </tr> <tr> <td><code><b>-highlightbackground</b></code></td> <td bgcolor="#e0e0e0"></td> <td bgcolor="#e0e0e0"></td> </tr> <tr> <td><code><b>-highlightcolor</b></code></td> <td bgcolor="#e0e0e0"></td> <td bgcolor="#e0e0e0"></td> </tr> <tr> <td><code><b>-highlightthickness</b></code></td> <td bgcolor="#e0e0e0"></td> <td bgcolor="#e0e0e0"></td> </tr> <tr> <td><code><b>-relief</b></code></td> <td bgcolor="#e0e0e0"></td> <td><code><b>-relief</b></code></td> </tr> <tr> <td><code><b>-takefocus</b></code></td> <td bgcolor="#e0e0e0"></td> <td bgcolor="#e0e0e0"></td> </tr> <tr> <td><code><b>-width</b></code> (sets the <i>inner</i> width, excluding<br> the border and highlight rectangle, if any)</td> <td><code><b>-width</b></code> (inner width = total width)</td> <td><code><b>-width</b></code> (sets the <i>total</i> width, including<br> the border and vertical scrollbar, if any)</td> </tr> <tr> <td><code><b>-xscrollcommand</b></code></td> <td><code><b>-xscrollcommand</b></code></td> <td bgcolor="#e0e0e0"></td> </tr> <tr> <td><code><b>-xscrollincrement</b></code></td> <td><code><b>-xscrollincrement</b></code></td> <td><code><b>-xscrollincrement</b></code> for <code>[<i>pathName</i> <b>component canvas</b>]</code></td> </tr> <tr> <td><code><b>-yscrollcommand</b></code></td> <td><code><b>-yscrollcommand</b></code></td> <td bgcolor="#e0e0e0"></td> </tr> <tr> <td><code><b>-yscrollincrement</b></code></td> <td><code><b>-yscrollincrement</b></code></td> <td><code><b>-yscrollincrement</b></code> for <code>[<i>pathName</i> <b>component canvas</b>]</code></td> </tr> <tr bgcolor="#FFFFE0"> <td></td> <td></td> <td></td> </tr> <tr> <td><code><b>cget</b></code></td> <td><code><b>cget</b></code></td> <td><code><b>cget</b></code></td> </tr> <tr> <td><code><b>configure</b></code></td> <td><code><b>configure</b></code></td> <td><code><b>configure</b></code></td> </tr> <tr> <td><code><b>contentframe</b></code></td> <td><code><b>getframe</b></code></td> <td><code><b>childsite</b></code></td> </tr> <tr> <td><code><b>scan</b></code> (with mouse event bindings)</td> <td bgcolor="#e0e0e0"></td> <td bgcolor="#e0e0e0"></td> </tr> <tr> <td><code><b>see</b> <i>widget</i> ?<b>nw</b>|<b>ne</b>|<b>sw</b>|<b>se</b>?</code></td> <td><code><b>see</b> <i>widget</i> ?<b>top</b>|<b>bottom</b> ?<b>left</b>|<b>right</b>??</code></td> <td bgcolor="#e0e0e0"></td> </tr> <tr> <td><code><b>xview</b></code></td> <td><code><b>xview</b></code></td> <td><code><b>xview</b></code></td> </tr> <tr> <td><code><b>yview</b></code></td> <td><code><b>yview</b></code></td> <td><code><b>yview</b></code></td> </tr> <tr> <td><code><b>xview</b>|<b>yview</b> <b>moveto</b> 0|1</code></td> <td><code><b>xview</b>|<b>yview</b> <b>moveto</b> 0|1</code></td> <td><code><b>justify</b> <b>left</b>|<b>right</b>|<b>top</b>|<b>bottom</b></code><br> (shortcut for <code><b>xview</b>|<b>yview</b> <b>moveto</b> 0|1</code>)</td> </tr> </table> <p><b>REMARK 1:</b> For the <code><b>see</b></code> command provided by the BWidget ScrollableFrame widget one cannot specify the horizontal side without the vertical one. More annoying is, however, that in the presence of a positive <code><b>-xscrollincrement</b></code> or <code><b>-yscrollincrement</b></code> value, widgets that are small enough to fit into the window are quite often just partially brought into view. In addition, the command works only for direct children of the ScrollableFrame widget's content frame.</p> <p><b>REMARK 2:</b> The iwidgets::scrolledframe widget has no equivalents of the scrollutil::scrollableframe options <code><b>-contentheight</b></code>, <code><b>-contentwidth</b></code>, <code><b>-fitcontentheight</b></code>, and <code><b>-fitcontentwidth</b></code>, but these can be emulated (using undocumented internal information!) as shown above. It provides a <code><b>justify</b></code> command, which is, however, just a shortcut for <code><b>xview</b>|<b>yview</b> <b>moveto</b> 0|1</code>. What this widget is really missing, is a <code><b>see</b></code> command for making individual widgets visible in the window (which is important for user-friendly keyboard navigation).</p> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/scrollutil/scrollarea.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 |
<!DOCTYPE html> <html> <head> <title>The scrollutil::scrollarea and scrollutil::getscrollarea Commands</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="scrollarea, widget, scrollbar"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>The <code><b>scrollutil::scrollarea</b></code> and<br> <code><b>scrollutil::getscrollarea</b></code> Commands</h1> <h2>For Scrollutil Version 1.5</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#quick_ref">The <code><b>scrollutil::scrollarea</b></code> Command – Quick Reference</a></li> <li><a href="#detailed_ref">The <code><b>scrollutil::scrollarea</b></code> Command – Detailed Reference</a></li> <li><a href="#getscrollarea">The <code><b>scrollutil::getscrollarea</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="quick_ref">The <code><b>scrollutil::scrollarea</b></code> Command – Quick Reference</h2> <dl> <dt><a href="#name">NAME</a></dt> <dd><code>scrollutil::scrollarea</code> – Create and manipulate scrollarea widgets</dd> <dt class="tm"><a href="#synopsis">SYNOPSIS</a></dt> <dd> <pre> <b>scrollutil::scrollarea</b> <i>pathName</i> ?<i>options</i>? </pre> </dd> <dt><a href="#description">DESCRIPTION</a></dt> <dt class="tm"><a href="#std_options">STANDARD OPTIONS</a></dt> <dd> <pre> <b>-background -highlightbackground -relief -borderwidth -highlightcolor -cursor -highlightthickness</b> </pre> </dd> <dt><a href="#widget_options">WIDGET-SPECIFIC OPTIONS</a></dt> <dd><code><b><a href="#lockinterval">-lockinterval</a></b> <i>milliseconds</i></code></dd> <dd><code><b><a href="#respectheader">-respectheader</a></b> <i>boolean</i></code></dd> <dd><code><b><a href="#respecttitlecolumns">-respecttitlecolumns</a></b> <i>boolean</i></code></dd> <dd><code><b><a href="#takefocus">-takefocus</a></b> <b>0</b>|<b>1</b>|<b>""</b>|<i>command</i></code></dd> <dd><code><b><a href="#xscrollbarmode">-xscrollbarmode</a></b> <b>static</b>|<b>dynamic</b>|<b>none</b></code></dd> <dd><code><b><a href="#yscrollbarmode">-yscrollbarmode</a></b> <b>static</b>|<b>dynamic</b>|<b>none</b></code></dd> <dt class="tm"><a href="#widget_command">WIDGET COMMAND</a></dt> <dd><code><i>pathName</i> <b><a href="#cget">cget</a></b> <i>option</i></code></dd> <dd><code><i>pathName</i> <b><a href="#configure">configure</a></b> ?<i>option</i>? ?<i>value</i> <i>option</i> <i>value</i> ...?</code></dd> <dd><code><i>pathName</i> <b><a href="#setwidget">setwidget</a></b> <i>widget</i></code></dd> <dd><code><i>pathName</i> <b><a href="#widget">widget</a></b></code></dd> <dt class="tm"><a href="#bindings">BINDINGS</a></dt> <dt class="tm"><a href="#keywords">KEYWORDS</a></dt> <dd>scrollarea, widget, scrollbar</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="detailed_ref">The <code><b>scrollutil::scrollarea</b></code> Command – Detailed Reference</h2> <dl> <dt id="name"><b>NAME</b></dt> <dd><code>scrollutil::scrollarea</code> – Create and manipulate scrollarea widgets</dd> <dt class="tm" id="synopsis"><b>SYNOPSIS</b></dt> <dd> <pre> <b>scrollutil::scrollarea</b> <i>pathName</i> ?<i>options</i>? </pre> </dd> <dt id="description"><b>DESCRIPTION</b></dt> <dd>The <code><b>scrollutil::scrollarea</b></code> command creates a new window named <code><i>pathName</i></code> and of the class <code><b>Scrollarea</b></code>, and makes it into a <b>scrollarea</b> widget. Additional options, described below, may be specified on the command line or in the option database to configure aspects of the scrollarea such as its borderwidth, relief, and display mode to be used for the scrollbars. The <code><b>scrollutil::scrollarea</b></code> command returns its <code><i>pathName</i></code> argument. At the time this command is invoked, there must not exist a window named <code><i>pathName</i></code>, but <code><i>pathName</i></code>'s parent must exist.</dd> <dd class="tm">A scrollarea is a mega-widget consisting of a scrollable widget specified with the aid of the <code><b><a href= "#setwidget">setwidget</a></b></code> subcommand of the associated Tcl command as well as two scrollbars connected with that widget. These components are managed within the scrollarea using <code><b>grid</b></code>. The scrollbars, named <code><b>hsb</b></code> (with <code><b>-orient horizontal</b></code>) and <code><b>vsb</b></code> (with <code><b>-orient vertical</b></code>) are direct children of the scrollarea. The display mode of each scrollbar can be <code><b>static</b></code>, <code><b>dynamic</b></code>, or <code><b>none</b></code> (see the <code><b><a href= "#xscrollbarmode">-xscrollbarmode</a></b></code> and <code><b><a href= "#yscrollbarmode">-yscrollbarmode</a></b></code> configuration options). The <code><b>-takefocus</b></code> option of both scrollbars is set to <code>0</code>. In the Scrollutil_tile package the scrollbars are created as ttk::scrollbar widgets, except on Mac OS X when using a Tk release earlier than 8.6.10, where the native ttk::scrollbar widget of the <code><b>aqua</b></code> theme didn't yet look as expected.</dd> <dd class="tm">If the widget embedded into the scrollarea via <code><b>setwidget</b></code> is a <a href= "https://www.nemethi.de/tablelist/">tablelist</a> and Tablelist version 6.5 or later is being used then the scrollarea can also contain siblings of the tablelist widget above the vertical scrollbar and/or to the left of the horizontal one, causing the vertical scrollbar to be displayed below the tablelist's header and/or the horizontal scrollbar to appear to the right of the tablelist's title column area, depending on the values of the <code><b><a href= "#respectheader">-respectheader</a></b></code> and <code><b><a href= "#respecttitlecolumns">-respecttitlecolumns</a></b></code> configuration options.</dd> <dd class="tm"> The following example shows the typical steps involved in creating a widget within a scrollarea: <blockquote> <pre> set sa [<a href="scrollarea.html#synopsis">scrollutil::scrollarea</a> ...] set lb [listbox $sa.lb ...] $sa <a href="scrollarea.html#setwidget">setwidget</a> $lb pack $sa -expand yes -fill both </pre> </blockquote> </dd> <dt id="std_options"><b>STANDARD OPTIONS</b></dt> <dd> <pre> <b>-background -highlightbackground -relief -borderwidth -highlightcolor -cursor -highlightthickness</b> </pre> </dd> <dd>See the <b>options</b> manual entry for details on the standard Tk widget options. The <code><b>-background</b></code>, <code><b>-highlightbackground</b></code>, <code><b>-highlightcolor</b></code>, and <code><b>-highlightthickness</b></code> options are only supported by the Scrollutil package, but not by Scrollutil_tile. They have the same default values as the options of the same names for Tk frame widgets. The default values of the remaining standard options are:</dd> <dd> <pre> <b>-borderwidth</b> 1 <b>-cursor</b> "" <b>-relief sunken</b> </pre> </dd> <dd><b>REMARK:</b> When configuring the <code><b>-borderwidth</b></code> or <code><b>-relief</b></code> option, if as a result of this action the scrollarea has a positive <code><b>-borderwidth</b></code> value (e.g., the default <code>1</code>) and a <code><b>-relief</b></code> value other than <code><b>flat</b></code> (e.g., the default <code><b>sunken</b></code>), then the <code><b>-borderwidth</b></code> option of the widget embedded into the scrollarea via the <code><b><a href="#setwidget">setwidget</a></b></code> subcommand of the associated Tcl command will automatically be set to <code>0</code>, provided that the embedded widget supports this option.</dd> <dt class="tm" id="widget_options"><b>WIDGET-SPECIFIC OPTIONS</b></dt> <dd class="tm" id="lockinterval"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-lockinterval</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> lockInterval</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> LockInterval</b></code></td> </tr> </table> <blockquote> <p>Specifies the time interval in milliseconds for which the scrollbars having the display mode <code><b>dynamic</b></code> (see the <code><b><a href="#xscrollbarmode">-xscrollbarmode</a></b></code> and <code><b><a href="#yscrollbarmode">-yscrollbarmode</a></b></code> options) will be protected from being unmapped after being mapped, in order to avoid any shimmering effects. Without this locking mechanism, under some rare circumstances a dynamic scrollbar could get mapped and unmapped in an endless loop, thus giving rise to an annoying and often dangerous flickering effect. The same problem can arise due to a too small <code><b>-lockinterval</b></code> value. The default is <code>1</code>, which works as expected in the vast majority of cases. Should you experience any shimmering in one of your scrollarea widgets, just set this option for that scrollarea to a sufficiently large value (e.g., <code>100</code>).</p> </blockquote> </dd> <dd class="tm" id="respectheader"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-respectheader</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> respectHeader</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> RespectHeader</b></code></td> </tr> </table> <blockquote> <p>This option is only relevant if the widget embedded into the scrollarea with the aid of the <code><b><a href= "#setwidget">setwidget</a></b></code> subcommand of the associated Tcl command is a <a href="https://www.nemethi.de/tablelist/">tablelist</a> and the Tablelist version being used is 6.5 or later. Its value must be a boolean specifying whether the vertical scrollbar should appear below the tablelist widget's header, thus respecting the native look & feel on Mac OS X Aqua and on many modern Linux systems. The default is <code>1</code> on the windowing systems <code><b>aqua</b></code> and <code><b>x11</b></code>, and <code>0</code> on <code><b>win32</b></code>.</p> </blockquote> </dd> <dd id="respecttitlecolumns"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-respecttitlecolumns</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> respectTitleColumns</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> RespectTitleColumns</b></code></td> </tr> </table> <blockquote> <p>This option is only relevant if the widget embedded into the scrollarea with the aid of the <code><b><a href= "#setwidget">setwidget</a></b></code> subcommand of the associated Tcl command is a <a href="https://www.nemethi.de/tablelist/">tablelist</a> and the Tablelist version being used is 6.5 or later. Its value must be a boolean specifying whether the horizontal scrollbar should start to the right of the tablelist widget's non-scrollable title column area if the value of the <code><b><a href= "https://www.nemethi.de/tablelist/tablelistWidget.html#titlecolumns">-titlecolumns</a></b></code> tablelist option is positive. The default is <code>1</code>.</p> </blockquote> </dd> <dd id="takefocus"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-takefocus</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> takeFocus</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> TakeFocus</b></code></td> </tr> </table> <blockquote> <p>This option determines whether the scrollarea accepts the focus during keyboard traversal. It is almost identical to the standard option of the same name (see the <b>options</b> manual entry for details). The only difference is that not the scrollarea itself but the widget embedded into it via the <code><b><a href= "#setwidget">setwidget</a></b></code> subcommand of the associated Tcl command will receive the focus during keyboard traversal with the standard keys (<code>Tab</code> and <code>Shift-Tab</code>). The default is <code>0</code>, being that a scrollarea is esentially a frame containing the above-mentioned widget and two scrollbars.</p> </blockquote> </dd> <dd id="xscrollbarmode"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-xscrollbarmode</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> xScrollbarMode</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> ScrollbarMode</b></code></td> </tr> </table> <blockquote> <p>Specifies the display mode to be used for the horizontal scrollbar. The allowed values are <code><b>static</b></code>, <code><b>dynamic</b></code>, and <code><b>none</b></code>. In <code><b>static</b></code> mode the scrollbar is displayed at all times. In <code><b>dynamic</b></code> mode (which is the default) the scrollbar is mapped and unmapped as needed. The display mode <code><b>none</b></code> disables the scrollbar display.</p> </blockquote> </dd> <dd id="yscrollbarmode"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-yscrollbarmode</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> yScrollbarMode</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> ScrollbarMode</b></code></td> </tr> </table> <blockquote> <p>Specifies the display mode to be used for the vertical scrollbar. The allowed values are <code><b>static</b></code>, <code><b>dynamic</b></code>, and <code><b>none</b></code>. In <code><b>static</b></code> mode the scrollbar is displayed at all times. In <code><b>dynamic</b></code> mode (which is the default) the scrollbar is mapped and unmapped as needed. The display mode <code><b>none</b></code> disables the scrollbar display.</p> </blockquote> </dd> <dt class="tm" id="widget_command"><b>WIDGET COMMAND</b></dt> <dd> The <code><b>scrollutil::scrollarea</b></code> command creates a new Tcl command whose name is <code><i>pathName</i></code>. This command may be used to invoke various operations on the widget. It has the following general form: <blockquote> <pre> <i>pathName</i> <i>option</i> ?<i>arg</i> <i>arg</i> ...? </pre> </blockquote> </dd> <dd><code><i>option</i></code> and the <code><i>arg</i></code>s determine the exact behavior of the command. The following commands are possible for scrollarea widgets:</dd> <dd> <dl> <dt class="tm" id="cget"><code><i>pathName</i> <b>cget</b> <i>option</i></code></dt> <dd>Returns the current value of the configuration option given by <code><i>option</i></code>, which may have any of the values accepted by the <code><b>scrollutil::scrollarea</b></code> command.</dd> <dt class="tm" id="configure"><code><i>pathName</i> <b>configure</b> ?<i>option</i>? ?<i>value</i> <i>option</i> <i>value</i> ...?</code></dt> <dd>Queries or modifies the configuration options of the widget. If no <code><i>option</i></code> is specified, the command returns a list describing all of the available options for <code><i>pathName</i></code> (see <code><b>Tk_ConfigureInfo</b></code> for information on the format of this list). If <code><i>option</i></code> is specified with no <code><i>value</i></code>, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no <code><i>option</i></code> is specified). If one or more <code><i>option</i></code>-<code><i>value</i></code> pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the return value is an empty string. <code><i>option</i></code> may have any of the values accepted by the <code><b>scrollutil::scrollarea</b></code> command.</dd> <dt class="tm" id="setwidget"><code><i>pathName</i> <b>setwidget</b> <i>widget</i></code></dt> <dd>The <code><i>widget</i></code> argument must be the path name of an existing widget or an empty string. In the first case, the command manages the widget to fill the top-left part of the scrollarea and connects it with the scrollbars by setting its <code><b>-xscrollcommand</b></code> and <code><b>-yscrollcommand</b></code> options to appropriate wrappers for the <code><b>set</b></code> command of the two scrollbars and setting the <code><b>-command</b></code> option of the scrollbars to <code>[<b>list</b> <i>widget</i> <b>xview</b>]</code> and <code>[<b>list</b> <i>widget</i> <b>yview</b>]</code>, respectively. If <code><i>widget</i></code> is an empty string then the widget passed to the most recent <code><b>setwidget</b></code> invocation (if any) is unmanaged and unconnected from the scrollbars. The return value is the argument passed to the previous successful invocation of this subcommand, or an empty string if there was no successful <code><b>setwidget</b></code> invocation before.</dd> <dd class="tm"><b>REMARK 1:</b> If <code><i>widget</i></code> is nonempty and the value of the <code><b><a href= "#xscrollbarmode">-xscrollbarmode</a></b></code> option is different from <code><b>none</b></code> then <code><i>widget</i></code> must be a horizontally scrollable widget, meaning that it must support the <code><b>-xscrollcommand</b></code> configuration option and the associated Tcl command must have the <code><b>xview</b></code> subcommand. Similarly, if <code><i>widget</i></code> is nonempty and the value of the <code><b><a href= "#yscrollbarmode">-yscrollbarmode</a></b></code> option is different from <code><b>none</b></code> then <code><i>widget</i></code> must be a vertically scrollable widget, meaning that it must support the <code><b>-yscrollcommand</b></code> configuration option and the associated Tcl command must have the <code><b>yview</b></code> subcommand. Consequently, if <code><i>widget</i></code> is an entry or ttk::entry then this subcommand will only be successful if the <code><b>-yscrollbarmode</b></code> option was previously set to <code><b>none</b></code>.</dd> <dd class="tm"><b>REMARK 2:</b> The widget identified by the <code><i>widget</i></code> argument must be a child of the scrollarea or of one of the latter's ascendants. This minor restriction is imposed by the <code><b>grid</b></code> geometry manager.</dd> <dd class="tm"><b>REMARK 3:</b> When the widget whose path name was passed to <code><b>setwidget</b></code> gets destroyed, this subcommand is automatically invoked with an empty string as argument.</dd> <dd class="tm"><b>REMARK 4:</b> This subcommand sets the <code><b>-highlightthickness</b></code> option of <code><i>widget</i></code> to <code>0</code> if <code><i>widget</i></code> supports this configuration option. In addition, if the scrollarea has a positive <code><b>-borderwidth</b></code> value (e.g., the default <code>1</code>) and a <code><b>-relief</b></code> value other than <code><b>flat</b></code> (e.g., the default <code><b>sunken</b></code>) then this subcommand sets the <code><b>-borderwidth</b></code> option of <code><i>widget</i></code> to <code>0</code>, provided that <code><i>widget</i></code> supports this option.</dd> <dt class="tm" id="widget"><code><i>pathName</i> <b>widget</b></code></dt> <dd>Returns the argument passed to the most recent successful invocation of the <code><b><a href= "#setwidget">setwidget</a></b></code> subcommand, or an empty string if there was no successful invocation of that subcommand yet.</dd> </dl> </dd> <dt class="tm" id="bindings"><b>BINDINGS</b></dt> <dd>When a new scrollarea is created, it has no default event bindings: scrollareas are not intended to be interactive.</dd> <dt class="tm" id="keywords"><b>KEYWORDS</b></dt> <dd>scrollarea, widget, scrollbar</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="getscrollarea">The <code><b>scrollutil::getscrollarea</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>scrollutil::getscrollarea</code> – Query the scrollarea containing a given widget</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>scrollutil::gescrollarea</b> <i>widget</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>Returns the path name of the scrollarea into which the widget given by the <code><i>widget</i></code> argument is embedded via the scrollarea's <code><b><a href="#setwidget">setwidget</a></b></code> subcommand, or an empty string if there is no such scrollarea widget.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>scrollarea, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/scrollutil/scrollsync.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 |
<!DOCTYPE html> <html> <head> <title>The scrollutil::scrollsync and scrollutil::getscrollsync Commands</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="scrollsync, widget, scrolling"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>The <code><b>scrollutil::scrollsync</b></code> and<br> <code><b>scrollutil::getscrollsync</b></code> Commands</h1> <h2>For Scrollutil Version 1.5</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#quick_ref">The <code><b>scrollutil::scrollsync</b></code> Command – Quick Reference</a></li> <li><a href="#detailed_ref">The <code><b>scrollutil::scrollsync</b></code> Command – Detailed Reference</a></li> <li><a href="#getscrollsync">The <code><b>scrollutil::getscrollsync</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="quick_ref">The <code><b>scrollutil::scrollsync</b></code> Command – Quick Reference</h2> <dl> <dt><a href="#name">NAME</a></dt> <dd><code>scrollutil::scrollsync</code> – Create and manipulate scrollsync widgets</dd> <dt class="tm"><a href="#synopsis">SYNOPSIS</a></dt> <dd> <pre> <b>scrollutil::scrollsync</b> <i>pathName</i> ?<i>options</i>? </pre> </dd> <dt><a href="#description">DESCRIPTION</a></dt> <dt class="tm"><a href="#std_options">STANDARD OPTIONS</a></dt> <dd> <pre> <b>-background -highlightbackground -relief -borderwidth -highlightcolor -xscrollcommand -cursor -highlightthickness -yscrollcommand</b> </pre> </dd> <dt><a href="#widget_options">WIDGET-SPECIFIC OPTIONS</a></dt> <dd><code><b><a href="#takefocus">-takefocus</a></b> <b>0</b>|<b>1</b>|<b>""</b>|<i>command</i></code></dd> <dt class="tm"><a href="#widget_command">WIDGET COMMAND</a></dt> <dd><code><i>pathName</i> <b><a href="#cget">cget</a></b> <i>option</i></code></dd> <dd><code><i>pathName</i> <b><a href="#configure">configure</a></b> ?<i>option</i>? ?<i>value</i> <i>option</i> <i>value</i> ...?</code></dd> <dd><code><i>pathName</i> <b><a href="#setwidgets">setwidgets</a></b> <i>widgetList</i></code></dd> <dd><code><i>pathName</i> <b><a href="#widgets">widgets</a></b></code></dd> <dd> <code><i>pathName</i> <b><a href="#xview">xview</a></b> ?<i>args</i>?</code> <dl> <dd><code><i>pathName</i> <b>xview</b></code></dd> <dd><code><i>pathName</i> <b>xview moveto</b> <i>fraction</i></code></dd> <dd><code><i>pathName</i> <b>xview scroll</b> <i>number</i> <b>units</b>|<b>pages</b></code></dd> </dl> </dd> <dd> <code><i>pathName</i> <b><a href="#yview">yview</a></b> ?<i>args</i>?</code> <dl> <dd><code><i>pathName</i> <b>yview</b></code></dd> <dd><code><i>pathName</i> <b>yview moveto</b> <i>fraction</i></code></dd> <dd><code><i>pathName</i> <b>yview scroll</b> <i>number</i> <b>units</b>|<b>pages</b></code></dd> </dl> </dd> <dt class="tm"><a href="#bindings">BINDINGS</a></dt> <dt class="tm"><a href="#keywords">KEYWORDS</a></dt> <dd>scrollsync, widget, scrolling</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="detailed_ref">The <code><b>scrollutil::scrollsync</b></code> Command – Detailed Reference</h2> <dl> <dt id="name"><b>NAME</b></dt> <dd><code>scrollutil::scrollsync</code> – Create and manipulate scrollsync widgets</dd> <dt class="tm" id="synopsis"><b>SYNOPSIS</b></dt> <dd> <pre> <b>scrollutil::scrollsync</b> <i>pathName</i> ?<i>options</i>? </pre> </dd> <dt id="description"><b>DESCRIPTION</b></dt> <dd>The <code><b>scrollutil::scrollsync</b></code> command creates a new window named <code><i>pathName</i></code> and of the class <code><b>Scrollsync</b></code>, and makes it into a <b>scrollsync</b> widget. Additional options, described below, may be specified on the command line or in the option database to configure aspects of the scrollsync widget such as its borderwidth and relief. The <code><b>scrollutil::scrollsync</b></code> command returns its <code><i>pathName</i></code> argument. At the time this command is invoked, there must not exist a window named <code><i>pathName</i></code>, but <code><i>pathName</i></code>'s parent must exist.</dd> <dd class="tm">A scrollsync is a mega-widget, designed for scrolling several widgets simultaneously. It is both horizontally and vertically scrollable, meaning that it supports the <code><b>-xscrollcommand</b></code> and <code><b>-yscrollcommand</b></code> configuration options and the associated Tcl command has the <code><b><a href="#xview">xview</a></b></code> and <code><b><a href= "#yview">yview</a></b></code> subcommands. Whenever the horizontal/vertical position of the view in the window of one of the horizontally/vertically scrollable widgets contained in the list passed to the <code><b><a href="#setwidgets">setwidgets</a></b></code> subcommand of the associated Tcl command changes, the view in the windows of all the other horizontally/vertically scrollable elements of that list is automatically adjusted accordingly, thus making sure that the view's position in these windows is kept in sync.</dd> <dd class="tm"> A scrollsync widget is typically created within a <a href= "scrollarea.html">scrollarea</a>, like in the following example: <blockquote> <pre> set sa [<a href="scrollarea.html#synopsis">scrollutil::scrollarea</a> ...] set ss [<a href="#synopsis">scrollutil::scrollsync</a> $sa.ss ...] $sa <a href="scrollarea.html#setwidget">setwidget</a> $ss set lb1 [listbox $ss.lb1 ...] set lb2 [listbox $ss.lb2 ...] $ss <a href="#setwidgets">setwidgets</a> [list $lb1 $lb2] grid $lb1 $lb2 -sticky news -padx {0 2} grid rowconfigure $ss 0 -weight 1 grid columnconfigure $ss all -weight 1 pack $sa -expand yes -fill both </pre> </blockquote> </dd> <dt id="std_options"><b>STANDARD OPTIONS</b></dt> <dd> <pre> <b>-background -highlightbackground -relief -borderwidth -highlightcolor -xscrollcommand -cursor -highlightthickness -yscrollcommand</b> </pre> </dd> <dd>See the <b>options</b> manual entry for details on the standard Tk widget options. The <code><b>-background</b></code>, <code><b>-highlightbackground</b></code>, <code><b>-highlightcolor</b></code>, and <code><b>-highlightthickness</b></code> options are only supported by the Scrollutil package, but not by Scrollutil_tile. They have the same default values as the options of the same names for Tk frame widgets. The default values of the remaining standard options are:</dd> <dd> <pre> <b>-borderwidth</b> 0 <b>-cursor</b> "" <b>-relief flat</b> <b>-xscrollcommand</b> "" <b>-yscrollcommand</b> "" </pre> </dd> <dt id="widget_options"><b>WIDGET-SPECIFIC OPTIONS</b></dt> <dd id="takefocus"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td>Command-Line Name: </td> <td><code><b>-takefocus</b></code></td> </tr> <tr> <td>Database Name:</td> <td><code><b> takeFocus</b></code></td> </tr> <tr> <td>Database Class:</td> <td><code><b> TakeFocus</b></code></td> </tr> </table> <blockquote> <p>This option determines whether the scrollsync widget accepts the focus during keyboard traversal. It is almost identical to the standard option of the same name (see the <b>options</b> manual entry for details). The only difference is that not the scrollsync widget itself but the first element of the widget list passed to the <code><b><a href="#setwidgets">setwidgets</a></b></code> subcommand of the associated Tcl command will receive the focus during keyboard traversal with the standard keys (<code>Tab</code> and <code>Shift-Tab</code>). The default is <code>0</code>, being that a scrollsync widget is esentially a frame containing the above-mentioned widgets.</p> </blockquote> </dd> <dt id="widget_command"><b>WIDGET COMMAND</b></dt> <dd> The <code><b>scrollutil::scrollsync</b></code> command creates a new Tcl command whose name is <code><i>pathName</i></code>. This command may be used to invoke various operations on the widget. It has the following general form: <blockquote> <pre> <i>pathName</i> <i>option</i> ?<i>arg</i> <i>arg</i> ...? </pre> </blockquote> </dd> <dd><code><i>option</i></code> and the <code><i>arg</i></code>s determine the exact behavior of the command. The following commands are possible for scrollsync widgets:</dd> <dd> <dl> <dt class="tm" id="cget"><code><i>pathName</i> <b>cget</b> <i>option</i></code></dt> <dd>Returns the current value of the configuration option given by <code><i>option</i></code>, which may have any of the values accepted by the <code><b>scrollutil::scrollsync</b></code> command.</dd> <dt class="tm" id="configure"><code><i>pathName</i> <b>configure</b> ?<i>option</i>? ?<i>value</i> <i>option</i> <i>value</i> ...?</code></dt> <dd>Queries or modifies the configuration options of the widget. If no <code><i>option</i></code> is specified, the command returns a list describing all of the available options for <code><i>pathName</i></code> (see <code><b>Tk_ConfigureInfo</b></code> for information on the format of this list). If <code><i>option</i></code> is specified with no <code><i>value</i></code>, then the command returns a list describing the one named option (this list will be identical to the corresponding sublist of the value returned if no <code><i>option</i></code> is specified). If one or more <code><i>option</i></code>-<code><i>value</i></code> pairs are specified, then the command modifies the given widget option(s) to have the given value(s); in this case the return value is an empty string. <code><i>option</i></code> may have any of the values accepted by the <code><b>scrollutil::scrollsync</b></code> command.</dd> <dt class="tm" id="setwidgets"><code><i>pathName</i> <b>setwidgets</b> <i>widgetList</i></code></dt> <dd>Sets the widgets in whose windows the view's position is to be kept in sync. The <code><i>widgetList</i></code> argument must be a valid list consisting of path names of existing widgets. Whenever the horizontal/vertical position of the view in the window of one of the horizontally/vertically scrollable widgets contained in this list changes, the view in the windows of all the other horizontally/vertically scrollable elements of the list will be automatically adjusted accordingly, thus making sure that the view's position in these windows is kept in sync. The return value is the argument passed to the previous successful invocation of this subcommand, or an empty list if there was no successful <code><b>setwidgets</b></code> invocation before.</dd> <dd class="tm"><b>REMARK:</b> When one of the widgets whose path name is contained in <code><i>widgetList</i></code> gets destroyed, that widget is automatically removed from the internal list of widgets in whose windows the view's position is kept in sync.</dd> <dt class="tm" id="widgets"><code><i>pathName</i> <b>widgets</b></code></dt> <dd>Returns the argument passed to the most recent successful invocation of the <code><b><a href= "#setwidgets">setwidgets</a></b></code> subcommand, or an empty list if there was no successful invocation of that subcommand yet.</dd> <dt class="tm" id="xview"><code><i>pathName</i> <b>xview</b> ?<i>args</i>?</code></dt> <dd><code><i>pathName</i> <b>xview</b></code></dd> <dd><code><i>pathName</i> <b>xview moveto</b> <i>fraction</i></code></dd> <dd><code><i>pathName</i> <b>xview scroll</b> <i>number</i> <b>units</b>|<b>pages</b></code></dd> <dd class="tm">This command passes its arguments to the <code><b>xview</b></code> command of the current <b>master widget for the x axis</b> and returns the result of that command invocation. The master widget for the x axis is the element of the widget list passed to the <code><b><a href="#setwidgets">setwidgets</a></b></code> subcommand having the smallest relative view width among the horizontally scrollable widgets in that list, i.e., the least difference between the last and first elements of the two-element list returned by its <code><b>xview</b></code> command. This master widget can vary during program execution (in case of text widgets it can even change depending on the current vertical view position).</dd> <dt class="tm" id="yview"><code><i>pathName</i> <b>yview</b> ?<i>args</i>?</code></dt> <dd><code><i>pathName</i> <b>yview</b></code></dd> <dd><code><i>pathName</i> <b>yview moveto</b> <i>fraction</i></code></dd> <dd><code><i>pathName</i> <b>yview scroll</b> <i>number</i> <b>units</b>|<b>pages</b></code></dd> <dd class="tm">This command passes its arguments to the <code><b>yview</b></code> command of the current <b>master widget for the y axis</b> and returns the result of that command invocation. The master widget for the y axis is the element of the widget list passed to the <code><b><a href="#setwidgets">setwidgets</a></b></code> subcommand having the smallest relative view height among the vertically scrollable widgets in that list, i.e., the least difference between the last and first elements of the two-element list returned by its <code><b>yview</b></code> command. This master widget can vary during program execution.</dd> </dl> </dd> <dt class="tm" id="bindings"><b>BINDINGS</b></dt> <dd>When a new scrollsync widget is created, it has no default event bindings: scrollsync widgets are not intended to be interactive.</dd> <dt class="tm" id="keywords"><b>KEYWORDS</b></dt> <dd>scrollsync, widget, scrolling</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="getscrollsync">The <code><b>scrollutil::getscrollsync</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>scrollutil::getscrollsync</code> – Query the scrollsync containing a given widget</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>scrollutil::gescrollsync</b> <i>widget</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>Returns the path name of the scrollsync into which the widget given by the <code><i>widget</i></code> argument is embedded via the scrollsync's <code><b><a href="#setwidgets">setwidgets</a></b></code> subcommand, or an empty string if there is no such scrollsync widget.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>scrollsync, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/scrollutil/scrollutil.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 |
<!DOCTYPE html> <html> <head> <title>Scrollutil Programmer's Guide</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content= "scrollarea, scrollsync, mouse wheel event, binding, event handling, scrolling, scrollable widget container, focus"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Scrollutil Programmer's Guide</h1> <h2>For Scrollutil Version 1.5</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <h4><a href="#overview">Overview</a></h4> <ul> <li><a href="#ov_what">What Is Scrollutil?</a></li> <li><a href="#ov_get">How to Get It?</a></li> <li><a href="#ov_install">How to Install It?</a></li> <li><a href="#ov_use">How to Use It?</a></li> </ul> <h4><a href="#examples">Examples</a></h4> <ul> <li><a href="#ex_styleUtil">The Helper Script <code>styleUtil.tcl</code></a></li> <li><a href="#ex_ScrolledTablelist">A Scrolled tablelist Widget</a></li> <li><a href="#ex_ScrolledText">A Scrolled text Widget</a></li> <li><a href="#ex_SyncListboxes">Synchronizing Two listbox Widgets</a></li> <li><a href="#ex_SyncTablelists">Synchronizing Three tablelist Widgets</a></li> <li><a href="#ex_SuScrollableFrameDemo1">A Script Using a scrollutil::scrollableframe Widget</a></li> <li><a href="#ex_BwScrollableFrameDemo1">A Script Using a BWidget ScrollableFrame Widget</a></li> <li><a href="#ex_ScrolledFrameDemo1">A Script Using an iwidgets::scrolledframe Widget</a></li> <li><a href="#ex_SuScrollableFrameDemo2">A Script Using Two scrollutil::scrollableframe Widgets</a></li> <li><a href="#ex_BwScrollableFrameDemo2">A Script Using Two BWidget ScrollableFrame Widgets</a></li> <li><a href="#ex_ScrolledFrameDemo2">A Script Using Two iwidgets::scrolledframe Widgets</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="overview">Overview</h2> <h3 id="ov_what">What Is Scrollutil?</h3> <p>Scrollutil is a library package for Tcl/Tk versions 8.0 or higher, written in pure Tcl/Tk code. It contains:</p> <ul> <li>the implementation of the <a href= "scrollarea.html"><b>scrollarea</b></a>, <a href= "scrollsync.html"><b>scrollsync</b></a>, and <a href= "scrollableframe.html"><b>scrollableframe</b></a> mega-widgets, including a general utility module for mega-widgets;</li> <li>the command <code><b><a href= "wheelEvent.html#add">scrollutil::addMouseWheelSupport</a></b></code>, which creates mouse wheel event bindings for a given binding tag. This command requires Tcl/Tk 8.4 or later;</li> <li>commands for <i>user-friendly</i> mouse wheel event handling in <b>scrollable widget containers</b> like scrollutil::scrollableframe, BWidget ScrollableFrame, and iwidgets::scrolledframe. These commands require Tcl/Tk versions 8.4 or higher on X11 and Mac OS X and Tk 8.6b2 or later on Windows;</li> <li>demo scripts illustrating the use of the Scrollutil package in connection with various scrollable widgets and the above-mentioned scrollable widget containers;</li> <li>this tutorial;</li> <li>reference pages in HTML format.</li> </ul> <p><b>The scrollutil::scrollarea mega-widget</b> greatly simplifies the creation of arbitrary scrolled widgets. It consists of a scrollable widget and two scrollbars connected with that widget. The display mode of each scrollbar can be <code>static</code>, <code>dynamic</code>, or <code>none</code>. This scrolled window implementation also supports the widgets that are scrollable in one direction only (e.g., entry and ttk::entry) and respects the header component and title columns of <a href= "https://www.nemethi.de/tablelist/">tablelist</a> widgets (this is freely configurable).</p> <p>The scrollutil::scrollarea widget is similar to BWidget ScrolledWindow and its snit-based equivalent widget::scrolledwindow, contributed by Jeffrey Hobbs and contained in tklib. The snit-based <a href= "http://web.tiscali.it/irrational/tcl/scrodget-2.1/">scrodget</a> package by Aldo Buratti and its TclOO-based equivalent <a href= "https://wiki.tcl-lang.org/page/A+Scrolled+Widget+implemented+with+TclOO">scrolledwidget</a> contributed by Johann Oberdorfer are further scrolled window implementations. However, <i>full</i> tablelist support is only provided by the scrollarea widget, which is free from external dependencies like BWidget, snit, or (for Tcl 8.5) TclOO. It is also free from the <a href= "https://wiki.tcl-lang.org/page/Scroll+bars+that+appear+only+when+needed">shimmering problem in connection with text widgets</a>, which the above-mentioned scrolled window implementations either share with the autoscroll package (contained in tklib) or circumvent in a suboptimal way.</p> <p><b>The scrollutil::scrollsync mega-widget</b> is designed for scrolling several widgets simultaneously. Whenever the horizontal/vertical position of the view in the window of one of its widgets changes, the view in the windows of all the other widgets is automatically adjusted accordingly, thus making sure that the view's position in these windows is kept in sync. This mega-widget is horizontally and vertically scrollable, hence it can be embedded into a scrollutil::scrollarea widget via the latter's <code>setwidget</code> subcommand.</p> <p><b>The scrollutil::scrollableframe mega-widget</b> is a scrollable widget container. It contains a content frame, whose dimensions are typically larger than those of the widget itself. Arbitrary regions of this frame can be brought into view by scrolling, and the widget also provides a command for making individual widgets contained in the content frame visible in the scrollableframe window.</p> <p>The scrollutil::scrollableframe widget is similar to BWidget ScrollableFrame and iwidgets::scrolledframe. However, unlike these widgets, which use a canvas for scrolling the content frame, it adjusts the view with the aid of the <code><b>place</b></code> geometry manager, just like the <code>scrolledframe::scrolledframe</code> command of the Scrolledframe package by Maurice Bredelet (ulis) and its optimized and enhanced version contributed by Keith Nash. For details on these commands see the wiki page</p> <blockquote> <address> <a href= "https://wiki.tcl-lang.org/page/A+scrolled+frame">https://wiki.tcl-lang.org/page/A+scrolled+frame</a> </address> </blockquote> <p>Scrollutil's canvas-free approach is more lightweight and integrates better in applications that use tile widgets.</p> <p>From the point of view of <b>the commands related to mouse wheel event handling</b> provided by the Scrollutil package, the scrollability of a widget or widget container window means that the associated Tcl command supports the <code>xview scroll <i>number</i> units</code> and <code>yview scroll <i>number</i> units</code> subcommands. The reason for requiring at least Tk version 8.6b2 on Windows for the commands related to scrollable widget containers is that in earlier Tk versions on this platform the mouse wheel events were sent to the widget having the focus rather than to the one under the pointer.</p> <p>To make use of the user-friendly mouse wheel event handling via the Scrollutil package, follow the steps below:</p> <ul> <li>Create mouse wheel event bindings for the binding tag <code>"all"</code> or for the toplevel widgets (including <code>"."</code>) having scrollable widget containers, by invoking the <code><a href= "wheelEvent.html#create">scrollutil::createWheelEventBindings</a></code> command. In addition, register your scrollable widget containers for scrolling via these bindings with the aid of the <code><a href= "wheelEvent.html#enable">scrollutil::enableScrollingByWheel</a></code> command. The above-mentioned bindings handle the mouse wheel events by scrolling the (innermost) registered scrollable widget container that is an ascendant of the widget under the pointer and is contained in the latter's toplevel.</li> <li class="tm">Invoke the <code><a href= "wheelEvent.html#adapt">scrollutil::adaptWheelEventHandling</a></code> command for those widgets contained in registered scrollable widget containers that have mouse wheel event (class) bindings. This step eliminates the annoying and often dangerous double-handling effect, by modifying the mouse wheel event handling as follows: If the focus is on the widget under the pointer then the mouse wheel events will be handled by the (class bindings of the) widget only, otherwise by the bindings created with the <code>scrollutil::createWheelEventBindings</code> command. Without this step the mouse wheel events would scroll both the listbox, text, ttk::treeview, or tablelist widget under the pointer <i>and</i> the widget container to whose descendants the latter belongs, or they would select the next/previous value in the ttk::combobox or ttk::spinbox under the pointer <i>in addition to</i> scrolling the widget container.</li> <li class="tm">For some widgets it can be desirable to make the focus check within this modified event handling less restrictive. For example, if the widget under the pointer is an entry component of a <a href= "https://www.nemethi.de/mentry/">mentry</a> of type <code>"Date"</code>, <code>"Time"</code>, <code>"DateTime"</code>, <code>"IPAddr"</code>, or <code>"IPv6Addr"</code> and the focus is on any of its siblings, then the mouse wheel events sent to this entry should be handled by the entry widget itself rather than scrolling the widget container that is an ascendant of the mentry. The <code><a href= "wheelEvent.html#setFocusCkWin">scrollutil::setFocusCheckWindow</a></code> command covers exactly cases like this.</li> </ul> <p>The mouse wheel event handling with the aid of the Scrollutil package was also tested to work with the <code>scrolledframe::scrolledframe</code> command of the Scrolledframe package by Maurice Bredelet (ulis) and its optimized and enhanced version contributed by Keith Nash, as well as with the <code>sframe</code> command implemented by Paul Walton. For details on these commands (which provide further implementations of scrollable widget containers) see the above-mentioned wiki page.</p> <h3 id="ov_get">How to Get It?</h3> <p>Scrollutil is available for free download from the Web page</p> <blockquote> <address> <a href="https://www.nemethi.de">https://www.nemethi.de</a> </address> </blockquote> <p>The distribution file is <code>scrollutil1.5.tar.gz</code> for UNIX and <code>scrollutil1_5.zip</code> 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.</p> <p>Scrollutil is also included in tklib, which has the address</p> <blockquote> <address> <a href="https://core.tcl.tk/tklib">https://core.tcl.tk/tklib</a> </address> </blockquote> <h3 id="ov_install">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. For example, you can install it as a directory at the same level as the Tcl and Tk script libraries. The locations of these library directories are given by the <code>tcl_library</code> and <code>tk_library</code> variables, respectively.</p> <p>To install Scrollutil <i>on UNIX</i>, <code>cd</code> to the desired directory and unpack the distribution file <code>scrollutil1.5.tar.gz</code>:</p> <blockquote> <pre> gunzip -c scrollutil1.5.tar.gz | tar -xf - </pre> </blockquote> <p>On most UNIX systems this can be replaced with</p> <blockquote> <pre> tar -zxf scrollutil1.5.tar.gz </pre> </blockquote> <p>Both commands will create a directory named <code>scrollutil1.5</code>, with the subdirectories <code>demos</code>, <code>doc</code>, and <code>scripts</code>.</p> <p><i>On Windows</i>, use WinZip or some other program capable of unpacking the distribution file <code>scrollutil1_5.zip</code> into the directory <code>scrollutil1.5</code>, with the subdirectories <code>demos</code>, <code>doc</code>, and <code>scripts</code>.</p> <p>Notice that in tklib the Scrollutil <code>demos</code> directory is replaced with the subdirectory <code>scrollutil</code> of the <code>examples</code> directory. Please take this into account when reading the <a href="#examples">examples</a> below.</p> <h3 id="ov_use">How to Use It?</h3> <p>The Scrollutil distribution provides two packages, called <b>Scrollutil</b> and <b>Scrollutil_tile</b>. The main difference between the two is that Scrollutil_tile enables the tile-based, theme-specific appearance of scrollarea, scrollsync, and scrollableframe widgets; this package requires Tcl/Tk 8.4 or higher and tile 0.6 or higher. It is not possible to use both packages in one and the same application, because both are implemented in the same <code>scrollutil</code> namespace and provide identical commands.</p> <p>To be able to access the commands and variables defined in the package Scrollutil, your scripts must contain one of the lines</p> <blockquote> <pre> package require scrollutil ?<i>version</i>? package require Scrollutil ?<i>version</i>? </pre> </blockquote> <p>You can use either one of the two statements above because the file <code>scrollutil.tcl</code> contains both lines</p> <blockquote> <pre> package provide scrollutil ... package provide Scrollutil ... </pre> </blockquote> <p>Likewise, to be able to access the commands and variables defined in the package Scrollutil_tile, your scripts must contain one of the lines</p> <blockquote> <pre> package require scrollutil_tile ?<i>version</i>? package require Scrollutil_tile ?<i>version</i>? </pre> </blockquote> <p>Again, you can use either one of the two statements above because the file <code>scrollutil_tile.tcl</code> contains both lines</p> <blockquote> <pre> package provide scrollutil_tile ... package provide Scrollutil_tile ... </pre> </blockquote> <p>You are free to remove one of these two lines from <code>scrollutil.tcl</code> and <code>scrollutil_tile.tcl</code>, respectively, if you want to prevent the corresponding packages from making themselves known under two different names each. Of course, by doing so you restrict the argument of <code>package require</code> to a single name.</p> <p>Since the packages Scrollutil and Scrollutil_tile are implemented in the <code>scrollutil</code> namespace, you must either invoke the</p> <blockquote> <pre> namespace import scrollutil::<i>pattern</i> ?scrollutil::<i>pattern ...</i>? </pre> </blockquote> <p>command to import the <i>procedures</i> you need, or use qualified names like <code>scrollutil::scrollarea</code>. In the <a href= "#examples">examples</a> below we have chosen the latter approach.</p> <p>To access Scrollutil <i>variables</i>, you <i>must</i> use qualified names. There are only three Scrollutil variables that are designed to be accessed outside the namespace <code>scrollutil</code>:</p> <ul> <li>The variable <code>scrollutil::version</code> holds the current version number of the Scrollutil package.</li> <li>The variable <code>scrollutil::library</code> holds the location of the Scrollutil installation directory.</li> <li>The read-only variable <code>scrollutil::usingTile</code> has the value <code>0</code> in the package Scrollutil and the value <code>1</code> in Scrollutil_tile.</li> </ul> <p>The Scrollutil_tile package checks whether the required Tk and tile versions are present, by executing the commands</p> <blockquote> <pre> package require Tk 8.4 if {$::tk_version < 8.5 || [regexp {^8\.5a[1-5]$} $::tk_patchLevel]} { package require tile 0.6 } </pre> </blockquote> <p>The second command above reflects the fact that, beginning with Tk 8.5a6, tile is integrated into the Tk core and therefore it should only be loaded explicitly when using an earlier Tk version.</p> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="examples">Examples</h2> <h3 id="ex_styleUtil">The Helper Script <code>styleUtil.tcl</code></h3> <p>All the examples in the <code>demos</code> directory use tile (ttk) widgets and contain the line</p> <blockquote> <pre> source styleUtil.tcl </pre> </blockquote> <p>The script <code>styleUtil.tcl</code> patches a few ttk widget styles and defines the style <code>Small.Toolbutton</code>. In addition, on X11 it sets the theme to a slightly patched variant of the <code>clam</code> theme (having smaller ttk::button widgets as well as ttk::treeview and tablelist headers).</p> <p>The patch for the style <code>TCombobox</code> makes sure that the (readonly) ttk::combobox widgets of the themes <code>alt</code>, <code>clam</code>, and <code>default</code> will show whether they have the focus. This basic requirement, which makes the keyboard navigation more user-friendly, is already fulfilled by the themes <code>vista</code>, <code>xpnative</code>, and <code>aqua</code>.</p> <p>The ttk::button widgets of the style <code>Small.Toolbutton</code> created by the procedure <code>createToolbutton</code>, implemented in this helper script, will appear raised when they have the focus. Again, this makes the keyboard navigation more user-friendly.</p> <h3 id="ex_ScrolledTablelist">A Scrolled tablelist Widget</h3> <p>This example shows how you can greatly simplify the creation of a scrolled tablelist by using a <a href="scrollarea.html">scrollarea</a> widget.</p> <p>The file <code>ScrolledTablelist1.tcl</code> in the <code>demos</code> directory creates a horizontally and vertically scrolled tablelist widget having two header rows and one title column, and manages the two scrollbars in such a way that the vertical scrollbar appears below the tablelist's header and the horizontal one starts to the right of the widget's title column area:</p> <blockquote> <img src="ScrolledTablelist.png" alt="ScrolledTablelist" width="480" height="337"> </blockquote> <p>The script achieves these requirements using traditional scrollbar management, which is shown below in <span class="red">red</span> color:</p> <blockquote> <pre> package require Tk 8.5 package require tablelist_tile 6.3 source styleUtil.tcl wm title . "Scrolled Tablelist" <span class="cmt"># # Create the tablelist and the scrollbars as children # of a frame having -borderwidth 1 and -relief sunken #</span> set f [ttk::frame .f] set frm [ttk::frame $f.frm <span class="red">-borderwidth 1 -relief sunken</span>] set tbl $frm.tbl <span class="red">set vsb $frm.vsb set hsb $frm.hsb</span> tablelist::tablelist $tbl ... <span class="red">-borderwidth 0</span> \ <span class="red"> -xscrollcommand [list $hsb set] -yscrollcommand [list $vsb set]</span> . . . <span class="red">ttk::scrollbar $vsb -orient vertical -command [list $tbl yview] ttk::scrollbar $hsb -orient horizontal -command [list $tbl xview]</span> . . . <span class="cmt"># # Manage the widgets within the frame #</span> <span class="red">grid $tbl -row 0 -rowspan 2 -column 0 -columnspan 2 -sticky news if {[tk windowingsystem] eq "win32"} { grid $vsb -row 0 -rowspan 2 -column 2 -sticky ns } else { grid [$tbl cornerpath] -row 0 -column 2 -sticky ew grid $vsb -row 1 -column 2 -sticky ns } grid [$tbl cornerpath -sw] -row 2 -column 0 -sticky ns grid $hsb -row 2 -column 1 -sticky ew grid rowconfigure $frm 1 -weight 1 grid columnconfigure $frm 1 -weight 1</span> <span class="cmt"># # Manage the frame #</span> pack $frm -expand yes -fill both -padx 10 -pady 10 pack $f -expand yes -fill both </pre> </blockquote> <p>The file <code>ScrolledTablelist2.tcl</code> in the <code>demos</code> directory replaces the rather technical code above with just a few lines (shown below in <span class="red">red</span> color), by embedding the tablelist into a scrollarea widget. It requires Tablelist version 6.5, which is needed so the <code><a href= "scrollarea.html#respectheader">-respectheader</a></code> and <code><a href= "scrollarea.html#respecttitlecolumns">-respecttitlecolumns</a></code> scrollarea options can work as expected (for earlier Tablelist versions these options are silently ignored). As a further benefit, the scrollbars created with this method will have the default display mode <code>dynamic</code>.</p> <blockquote> <pre> package require Tk 8.5 package require tablelist_tile 6.5 <span class="red">package require scrollutil_tile</span> source styleUtil.tcl wm title . "Scrolled Tablelist" <span class="cmt"># # Create the tablelist within a scrollarea #</span> set f [ttk::frame .f] <span class="red">set sa [scrollutil::scrollarea $f.sa]</span> set tbl $sa.tbl tablelist::tablelist $tbl ... . . . <span class="red">$sa setwidget $tbl</span> . . . <span class="cmt"># # Manage the scrollarea #</span> pack $sa -expand yes -fill both -padx 10 -pady 10 pack $f -expand yes -fill both </pre> </blockquote> <h3 id="ex_ScrolledText">A Scrolled text Widget</h3> <p>The file <code>ScrolledText.tcl</code> in the <code>demos</code> directory shows how the <a href="scrollarea.html">scrollarea</a> widget circumvents the potential shimmering effect in connection with text widgets.</p> <blockquote> <img src="ScrolledText.png" alt="ScrolledText" width="401" height="338"> </blockquote> <p>Here is the relevant code, in which the lines related to the scrollarea widget are shown in <span class="red">red</span> color:</p> <blockquote> <pre> <span class="red">package require scrollutil_tile</span> source styleUtil.tcl wm title . "Scrolled Text" <span class="cmt"># # Create a text widget within a scrollarea #</span> set f [ttk::frame .f] <span class="red">set sa [scrollutil::scrollarea $f.sa -lockinterval 10]</span> set txt [text $sa.txt -font TkFixedFont -width 49 -height 12 \ -spacing1 2 -spacing3 2 -wrap none] <span class="red">$sa setwidget $txt</span> <span class="cmt"># # Populate the text widget and set the background color of line #25 to red #</span> for {set i 1} {$i <= 30} {incr i} { set j [expr {2*$i}] $txt insert end [string repeat x $j]\n } $txt delete 30.end $txt tag configure bgRed -background red $txt tag add bgRed 25.0 25.end . . . <span class="cmt"># # Manage the scrollarea #</span> pack $sa -expand yes -fill both -padx 10 -pady 10 pack $f -expand yes -fill both <span class="cmt"># # Adjust the vertical view in the text window # so that line #25 becomes the bottom line #</span> tkwait visibility $txt after 100 [list $txt yview 14.0] </pre> </blockquote> <p>The script creates a text widget <code>$txt</code> embedded into a scrollarea, populates it with 30 lines, and adjusts the vertical view in the text window so that line #25 becomes the bottom line. This line has 50 characters, hence it doesn't fit completely into the window, whose width is 49 characters. Consequently, the command <code>$txt xview</code> will return the list <code>{0.0 0.98}</code>, hence the scrollarea's horizontal scrollbar will be mapped and will obscure most part of the bottom line. Since this line has <code>red</code> background, it is easy to see how much of it sticks out above the upper edge of the scrollbar.</p> <p>Let's analyze what happens if the text widget's height is decreased by dragging the main window's upper or lower edge, just until the red pixels get obscured by the horizontal scrollbar. After performing this action, line #25 is completely out of view and the new bottom line is line #24, which has 48 characters, hence the command <code>$txt xview</code> will return <code>{0.0 1.0}</code>. Normally, this would cause the horizontal scrollbar to be unmapped. However, that would make line #25 to the bottom line, thus causing the horizontal scrollbar to be mapped again. This time the scrollbar would completely obscure this line, which would result in line #24 to become the bottom line, which would cause the scrollbar to be unmapped again, and so on. In other words, the horizontal scrollbar would get mapped and unmapped in an endless loop, giving rise to an annoying flickering effect. The built-in locking mechanism of the scrollarea widget guards against such potential endless loops. To make sure that the locking will work as expected, we have set the <code><a href="scrollarea.html#lockinterval">-lockinterval</a></code> scrollarea option to <code>10</code> (recall that the default value is <code>1</code>).</p> <h3 id="ex_SyncListboxes">Synchronizing Two listbox Widgets</h3> <p>The file <code>SyncListboxes.tcl</code> in the <code>demos</code> directory creates two listboxes within a <a href= "scrollsync.html">scrollsync</a> widget, which in turn is embedded into a <a href="scrollarea.html">scrollarea</a>.</p> <blockquote> <img src="SyncListboxes.png" alt="SyncListboxes" width="320" height="305"> </blockquote> <p>Here is the relevant code, in which the lines related to the scrollarea and scrollsync widgets are shown in <span class="red">red</span> color:</p> <blockquote> <pre> <span class="red">package require scrollutil_tile</span> source styleUtil.tcl wm title . "European Countries" . . . set f [ttk::frame .f] . . . <span class="cmt"># # Create a scrollsync widget within a scrollarea #</span> <span class="red">set sa [scrollutil::scrollarea $f.sa] set ss [scrollutil::scrollsync $sa.ss] $sa setwidget $ss</span> <span class="cmt"># # Populate the scrollsync widget with two listboxes #</span> . . . set lb1 [listbox $ss.lb1 -activestyle none -highlightthickness 0 -width 16] set lb2 [listbox $ss.lb2 -activestyle none -highlightthickness 0 -width 16] <span class="red">$ss setwidgets [list $lb1 $lb2]</span> . . . grid $lb1 $lb2 -sticky news -padx {0 2} grid rowconfigure $ss 0 -weight 1 grid columnconfigure $ss 0 -weight 1 grid columnconfigure $ss 1 -weight 1 . . . pack $sa -side top -expand yes -fill both -padx 10 -pady {2 10} pack $f -expand yes -fill both . . . </pre> </blockquote> <h3 id="ex_SyncTablelists">Synchronizing Three tablelist Widgets</h3> <p>The file <code>SyncTablelists.tcl</code> in the <code>demos</code> directory creates three tablelists within a <a href= "scrollsync.html">scrollsync</a> widget, which in turn is embedded into a <a href="scrollarea.html">scrollarea</a>.</p> <blockquote> <img src="SyncTablelists.png" alt="SyncTablelists" width="548" height= "326"> </blockquote> <p>The relevant code is similar to the one shown in the <a href= "#ex_SyncListboxes">previous example</a>:</p> <blockquote> <pre> package require tablelist_tile <span class="red">package require scrollutil_tile</span> source styleUtil.tcl wm title . "Synchronized Tablelists" . . . set f [ttk::frame .f] . . . <span class="cmt"># # Create a scrollsync widget within a scrollarea #</span> <span class="red">set sa [scrollutil::scrollarea $f.sa] set ss [scrollutil::scrollsync $sa.ss] $sa setwidget $ss</span> <span class="cmt"># # Populate the scrollsync widget with three tablelists #</span> option add *Tablelist.stripeBackground #f0f0f0 for {set n 1; set colWidth 40} {$n <= 3} {incr n; incr colWidth 20} { set tbl [tablelist::tablelist $ss.tbl$n \ -columns [list 0 "Column 0" left $colWidth "Column 1" left]] set tbl$n $tbl for {set i 0} {$i < 40} {incr i} { $tbl insert end [list "cell $i,0" "cell $i,1"] } } <span class="red">$ss setwidgets [list $tbl1 $tbl2 $tbl3]</span> grid $tbl1 $tbl2 $tbl3 -sticky news -padx {0 2} grid rowconfigure $ss 0 -weight 1 grid columnconfigure $ss 0 -weight 1 grid columnconfigure $ss 1 -weight 1 grid columnconfigure $ss 2 -weight 1 . . . pack $sa -side top -expand yes -fill both -padx 10 -pady {2 10} pack $f -expand yes -fill both . . . </pre> </blockquote> <p>Notice that column #1 of the three tablelist widgets is 40, 60, and 80 characters wide, respectively. For this reason, when scrolling horizontally to the right, the left table's view will reach its horizontal end position first, then that of the midde table, and as last one the view of the right table.</p> <h3 id="ex_SuScrollableFrameDemo1">A Script Using a scrollutil::scrollableframe Widget</h3> <p>The file <code>SuScrollableFrmDemo1.tcl</code> in the <code>demos</code> directory creates a <a href= "scrollableframe.html">scrollutil::scrollableframe</a> widget embedded into a <a href="scrollarea.html">scrollarea</a>, creates mouse wheel event bindings for the binding tag <code>"all"</code> with the aid of the <code><a href= "wheelEvent.html#create">scrollutil::createWheelEventBindings</a></code> command, and invokes the <code><a href= "wheelEvent.html#enable">scrollutil::enableScrollingByWheel</a></code> command for this scrollableframe, thus registering the latter for scrolling by these bindings. After that it populates the content frame of the scrollableframe with ttk::label widgets displaying the names of the European countries, ttk::combobox widgets for selecting the corresponding capital cities, and ttk::button widgets of the style <code>Small.Toolbutton</code> (created by using the procedure <code>createToolbutton</code>, implemented in the file <code><a href="#ex_styleUtil">styleUtil.tcl</a></code>) for the less patient users, displaying the text "Resolve".</p> <blockquote> <img src="ScrollableFrmDemo1.png" alt="ScrollableFrmDemo1" width="407" height="373"> </blockquote> <p>Here is the relevant code:</p> <blockquote> <pre> <span class="red">package require scrollutil_tile</span> source styleUtil.tcl wm title . "European Capitals Quiz" <span class="cmt"># # Create a scrollableframe within a scrollarea #</span> set f [ttk::frame .f] <span class="red">set sa [scrollutil::scrollarea $f.sa] set sf [scrollutil::scrollableframe $sa.sf] $sa setwidget $sf</span> <span class="cmt"># # Create mouse wheel event bindings for the binding tag "all" and # register the scrollableframe for scrolling by these bindings #</span> <span class="red">scrollutil::createWheelEventBindings all scrollutil::enableScrollingByWheel $sf</span> <span class="cmt"># # Get the content frame and populate it #</span> <span class="red">set cf [$sf contentframe]</span> set countryList { Albania Andorra Austria Belarus Belgium "Bosnia and Herzegovina" Bulgaria . . . } set capitalList { Tirana "Andorra la Vella" Vienna Minsk Brussels Sarajevo Sofia . . . } . . . set capitalList [lsort $capitalList] . . . set row 0 foreach country $countryList { . . . set w [ttk::combobox $cf.cb$row -state readonly -width 14 \ -values $capitalList] . . . <span class="cmt"># # Make the keyboard navigation more user-friendly #</span> bind $w <<TraverseIn>> [list <span class="red">$sf see %W</span>] <span class="cmt"># # Adapt the handling of the mouse wheel events for the ttk::combobox widget #</span> <span class="red">scrollutil::adaptWheelEventHandling $w</span> . . . incr row } . . . </pre> </blockquote> <p>We make the keyboard navigation more user-friendly with the aid of the <code><a href="scrollableframe.html#see">see</a></code> subcommand of the scrollableframe widget when handling the <code><<TraverseIn>></code> virtual event for the ttk::combobox and (not shown above) ttk::button widgets. In addition, we invoke the <code><a href= "wheelEvent.html#adapt">scrollutil::adaptWheelEventHandling</a></code> command for every ttk::combobox widget, which is needed for a user-friendly event handling, being that this widget has built-in bindings for the mouse wheel events. Due to this command, the mouse wheel events over one of the ttk::combobox widgets will only select the next/previous capital city if the widget has the focus, otherwise they will scroll the scrollableframe.</p> <p>With this script you can also test the scanning in the scrollableframe: If you press mouse button 1 over a free space of the scrollableframe window then the cursor will take on the shape of a pointing hand, and by draggging the mouse, the content frame will drag at high speed through the window, in the direction the mouse moves.</p> <h3 id="ex_BwScrollableFrameDemo1">A Script Using a BWidget ScrollableFrame Widget</h3> <p>The file <code>BwScrollableFrmDemo1.tcl</code> in the <code>demos</code> directory creates a BWidget ScrollableFrame embedded into a <a href= "scrollarea.html">scrollarea</a> widget, creates mouse wheel event bindings for the binding tag <code>"all"</code> with the aid of the <code><a href= "wheelEvent.html#create">scrollutil::createWheelEventBindings</a></code> command, and invokes the <code><a href= "wheelEvent.html#enable">scrollutil::enableScrollingByWheel</a></code> command for this ScrollableFrame, thus registering the latter for scrolling by these bindings. After that it populates the content frame of the ScrollableFrame with the same widgets as <code>SuScrollableFrmDemo1.tcl</code> in the <a href= "#ex_SuScrollableFrameDemo1">previous example</a>.</p> <p>Here is the relevant code:</p> <blockquote> <pre> package require BWidget Widget::theme yes <span class="red">package require scrollutil_tile</span> source styleUtil.tcl wm title . "European Capitals Quiz" <span class="cmt"># # Create a ScrollableFrame within a scrollarea #</span> set f [ttk::frame .f] <span class="red">set sa [scrollutil::scrollarea $f.sa]</span> set sf [ScrollableFrame $sa.sf] <span class="red">$sa setwidget $sf</span> . . . <span class="cmt"># # Create mouse wheel event bindings for the binding tag "all" and # register the ScrollableFrame for scrolling by these bindings #</span> <span class="red">scrollutil::createWheelEventBindings all scrollutil::enableScrollingByWheel $sf</span> <span class="cmt"># # Get the content frame and populate it #</span> set cf [$sf getframe] set countryList { Albania Andorra Austria Belarus Belgium "Bosnia and Herzegovina" Bulgaria . . . } set capitalList { Tirana "Andorra la Vella" Vienna Minsk Brussels Sarajevo Sofia . . . } . . . set capitalList [lsort $capitalList] . . . set row 0 foreach country $countryList { . . . set w [ttk::combobox $cf.cb$row -state readonly -width 14 \ -values $capitalList] . . . <span class="cmt"># # Make the keyboard navigation more user-friendly #</span> bind $w <<TraverseIn>> [list $sf see %W] <span class="cmt"># # Adapt the handling of the mouse wheel events for the ttk::combobox widget #</span> <span class="red">scrollutil::adaptWheelEventHandling $w</span> . . . incr row } . . . </pre> </blockquote> <h3 id="ex_ScrolledFrameDemo1">A Script Using an iwidgets::scrolledframe Widget</h3> <p>The file <code>ScrolledFrmDemo1.tcl</code> in the <code>demos</code> directory creates an iwidgets::scrolledframe widget, creates mouse wheel event bindings for the binding tag <code>"all"</code> with the aid of the <code><a href= "wheelEvent.html#create">scrollutil::createWheelEventBindings</a></code> command, and invokes the <code><a href= "wheelEvent.html#enable">scrollutil::enableScrollingByWheel</a></code> command for this scrolledframe, thus registering the latter for scrolling by these bindings. After that it populates the content frame of the scrolledframe with the same widgets as <code>SuScrollableFrmDemo1.tcl</code> and <code>BwScrollableFrmDemo1.tcl</code> in the two previous examples.</p> <p>Here is the relevant code:</p> <blockquote> <pre> if {[catch {package require iwidgets} result1] != 0 && [catch {package require Iwidgets} result2] != 0} { error "$result1; $result2" } source scrolledwidgetPatch.itk ;<span class="cmt"># adds ttk::scrollbar widgets</span> <span class="red">package require scrollutil_tile</span> source styleUtil.tcl wm title . "European Capitals Quiz" . . . <span class="cmt"># # Create a scrolledframe #</span> set f [ttk::frame .f] set sf [iwidgets::scrolledframe $f.sf -borderwidth 1 -relief sunken \ -scrollmargin 0] . . . <span class="cmt"># # Create mouse wheel event bindings for the binding tag "all" # and register the scrolledframe for scrolling by these bindings #</span> <span class="red">scrollutil::createWheelEventBindings all scrollutil::enableScrollingByWheel $sf</span> <span class="cmt"># # Get the content frame and populate it #</span> set cf [$sf childsite] . . . <i><exactly as in the two previous examples, except the stuff related to keyboard navigation></i> . . . </pre> </blockquote> <p>The code related to keyboard navigation is not present in this example, because the iwidgets::scrolledframe widget doesn't provide a <code>see</code> subcommand.</p> <h3 id="ex_SuScrollableFrameDemo2">A Script Using Two scrollutil::scrollableframe Widgets</h3> <p>The script <code>SuScrollableFrmDemo2.tcl</code> in the <code>demos</code> directory creates a <a href= "scrollableframe.html">scrollutil::scrollableframe</a> widget embedded into a <a href="scrollarea.html">scrollarea</a> and then <code>source</code>s the script <code>SuScrollableFrmContent.tcl</code>, which populates the content frame of the scrollableframe with the following widgets:</p> <ul> <li>a series of ttk::label widgets;</li> <li>a scrolled text widget <code>$txt</code> within a scrollarea;</li> <li>a scrolled listbox widget <code>$lb</code> within a scrollarea;</li> <li>a ttk::combobox widget <code>$cb</code>;</li> <li>a ttk::spinbox widget <code>$sb</code>;</li> <li>a ttk::entry widget <code>$e</code>;</li> <li>a ttk::separator widget;</li> <li>a mentry widget <code>$me</code> of type <code>"Date"</code>;</li> <li>a scrolled tablelist widget <code>$tbl</code> within a scrollarea;</li> <li>a scrolled ttk::treeview widget <code>$tv</code> within a scrollarea.</li> </ul> <p>With the exception of ttk::label, ttk::entry, and ttk::separator, all these widgets have bult-in mouse wheel event bindings.</p> <blockquote> <img src="ScrollableFrmDemo2.png" alt="ScrollableFrmDemo2" width="605" height="516"> </blockquote> <p>Here is the relevant code:</p> <blockquote> <pre> package require Tk 8.5.9 ;<span class= "cmt"># for ttk::spinbox</span> package require mentry_tile 3.2 ;<span class= "cmt"># for mouse wheel support</span> package require tablelist_tile 6.5 ;<span class= "cmt"># for -(x|y)mousewheelwindow</span> ;<span class= "cmt"># and scrollutil::scrollarea</span> <span class="red">package require scrollutil_tile</span> source styleUtil.tcl wm title . "Scrollutil Demo" <span class="cmt"># # Create a scrollableframe within a scrollarea #</span> set tf [ttk::frame .tf] <span class="red">set sa [scrollutil::scrollarea $tf.sa] set sf [scrollutil::scrollableframe $sa.sf] $sa setwidget $sf</span> <span class="cmt"># # Get the content frame and populate it #</span> <span class="red">set cf [$sf contentframe]</span> source SuScrollableFrmContent.tcl <span class="cmt"># # Make the keyboard navigation more user-friendly #</span> foreach w [list $cb $sb $e $me] { bind $w <<TraverseIn>> [list <span class="red">$sf see %W</span>] } foreach w [list $txt $lb $tbl $tv] { bind $w <<TraverseIn>> [list seeScrollarea $sf %W] } proc seeScrollarea {sf w} { <span class="red">$sf see [scrollutil::getscrollarea $w]</span> } </pre> </blockquote> <p>Whenever the <code><<TraverseIn>></code> virtual event is sent to one of the four widgets created within scrollareas, we query the path name of the corresponding scrollarea via <code><a href= "scrollarea.html#getscrollarea">scrollutil::getscrollarea</a></code> and bring that scrollarea (including the scrollbars and the border) into view rather than just the widget in question. While <i>in this script</i> we could have used <code>[winfo parent]</code> instead, the command <code>scrollutil::getscrollarea</code> is the recommended one, being that it works also for widgets that are no children of the corresponding scrollareas.</p> <p>Here is the additional stuff related to the mouse wheel events, using the Scrollutil commands described in the <a href="#ov_what">What Is Scrollutil?</a> section:</p> <blockquote> <pre> <span class="cmt"># # Create mouse wheel event bindings for the binding tag "all" and # register the scrollableframe for scrolling by these bindings #</span> <span class="red">scrollutil::createWheelEventBindings all scrollutil::enableScrollingByWheel $sf</span> <span class="cmt"># # Adapt the handling of the mouse wheel events for the text, listbox, # ttk::combobox, ttk::spinbox, tablelist, and ttk::treeview widgets, as # well as for the entry components of the mentry widget of type "Date" #</span> set entryList [$me entries] <span class="red">scrollutil::adaptWheelEventHandling $txt $lb $cb $sb $tbl $tv {*}$entryList</span> <span class="cmt"># # For the entry components of the mentry widget # set the "focus check window" to the mentry #</span> <span class="red">scrollutil::setFocusCheckWindow {*}$entryList $me</span> </pre> </blockquote> <p>Notice that we have passed, among others, the tablelist widget to the <code><a href= "wheelEvent.html#adapt">scrollutil::adaptWheelEventHandling</a></code> command. This will only work for Tablelist versions 6.4 and later, because the command handles tablelist widgets by setting their <code>-xmousewheelwindow</code> and <code>-ymousewheelwindow</code> options to the path name of the containing toplevel window, and these options were introduced in Tablelist version 6.4. (For earlier Tablelist versions the command silently ignores any tablelist widget passed to it as argument.)</p> <p>As already mentioned, in the file <code>SuScrollableFrmContent.tcl</code> the scrolled text, listbox, tablelist, and ttk::treeview widgets are created within <a href="scrollarea.html">scrollarea</a> widgets:</p> <blockquote> <pre> <span class="red">set _sa [scrollutil::scrollarea ...]</span> set txt [text $_sa.txt -font TkFixedFont -width 73] <span class="red">scrollutil::addMouseWheelSupport $txt $_sa setwidget $txt</span> grid $_sa ... . . . <span class="red">set _sa [scrollutil::scrollarea ...]</span> set lb [listbox $_sa.lb -width 0] <span class="red">$_sa setwidget $lb</span> grid $_sa ... . . . <span class="red">set _sa [scrollutil::scrollarea ...]</span> set tbl [tablelist::tablelist $_sa.tbl ...] . . . <span class="red">$_sa setwidget $tbl</span> grid $_sa ... . . . <span class="red">set _sa [scrollutil::scrollarea ... -borderwidth 0]</span> set tv [ttk::treeview $_sa.tv ...] . . . <span class="red">$_sa setwidget $tv</span> grid $_sa ... </pre> </blockquote> <p>In the case of the text, listbox, and tablelist widgets we use scrollarea widgets with their default <code>-borderwidth 1 -relief sunken</code> settings, which will cause the <code><a href= "scrollarea.html#setwidget">setwidget</a></code> subcommand of the associated Tcl commands to set the <code>-borderwidth</code> option of the text, listbox, and tablelist widgets to <code>0</code>. On the other hand, for the ttk::treeview we use a scrollarea widget with <code>-borderwidth 0</code>, because the ttk::treeview has a border of width <code>1</code> and doesn't support the <code>-borderwidth</code> configuration option.</p> <p>For our text widget we prefer a mouse wheel event handling that scrolls the widget by lines rather than pixels, as done by the <code>Text</code> class bindings in Tk 8.5 and later; we achieve this by passing the path name <code>$txt</code> to the <code><a href= "wheelEvent.html#add">scrollutil::addMouseWeelSupport</a></code> command.</p> <p>The file <code>SuScrollableFrmContent.tcl</code> contains also the implementation of the procedure <code>configTablelist</code>, associated with the "Configure Tablelist Widget" button as the value of its <code>-command</code> option. This procedure opens a toplevel window that contains a <a href= "scrollableframe.html">scrollutil::scrollableframe</a> widget created with the <code><a href= "scrollableframe.html#fitcontentwidth">-fitcontentwidth</a> yes</code> setting within a <a href="scrollarea.html">scrollarea</a> and invokes the <code><a href= "wheelEvent.html#enable">scrollutil::enableScrollingByWheel</a></code> command for this scrollableframe, thus registering the latter for scrolling by the already created mouse wheel event bindings for the binding tag <code>"all"</code>. After that it populates the content frame of the scrollableframe with ttk::label, ttk::combobox, ttk::spinbox, ttk::entry, and ttk::checkbutton widgets used to display and edit the configuration options of the tablelist widget. The procedure handles the <code><<TraverseIn>></code> virtual event sent to one of these widgets with the aid of the scrollableframe's <code><a href= "scrollableframe.html#see">see</a></code> subcommand. Whenever a ttk::combobox or ttk::spinbox is created, the <code><a href= "wheelEvent.html#adapt">scrollutil::adaptWheelEventHandling</a></code> command is invoked for it, being that these widgets have built-in bindings for the mouse wheel events.</p> <p>The widgets populating the content frame are managed using <code>grid</code>. In case of the ttk::entry widgets we invoke <code>grid</code> with <code>-sticky we</code>. Due to this and the <code>-fitcontentwidth yes</code> scrollableframe setting, the ttk::entry widgets will stretch or shrink whenever the width of the scrollableframe changes as a result of resizing the toplevel window.</p> <blockquote> <img src="TablelistConfig.png" alt="TablelistConfig" width="382" height="403"> </blockquote> <h3 id="ex_BwScrollableFrameDemo2">A Script Using Two BWidget ScrollableFrame Widgets</h3> <p>The script <code>BwScrollableFrmDemo2.tcl</code> in the <code>demos</code> directory creates a BWidget ScrollableFrame embedded into a <a href= "scrollarea.html">scrollarea</a> widget and then <code>source</code>s the script <code>BwScrollableFrmContent.tcl</code>, which populates the content frame of the ScrollableFrame with the same widgets as <code>SuScrollableFrmContent.tcl</code> in the <a href= "#ex_SuScrollableFrameDemo2">previous example</a>.</p> <p>Here is the relevant code:</p> <blockquote> <pre> package require Tk 8.5.9 ;<span class= "cmt"># for ttk::spinbox</span> package require BWidget Widget::theme yes package require mentry_tile 3.2 ;<span class= "cmt"># for mouse wheel support</span> package require tablelist_tile 6.5 ;<span class= "cmt"># for -(x|y)mousewheelwindow</span> ;<span class= "cmt"># and scrollutil::scrollarea</span> <span class="red">package require scrollutil_tile</span> source styleUtil.tcl wm title . "Scrollutil Demo" <span class="cmt"># # Create a ScrollableFrame within a scrollarea #</span> set tf [ttk::frame .tf] <span class="red">set sa [scrollutil::scrollarea $tf.sa]</span> set sf [ScrollableFrame $sa.sf] <span class="red">$sa setwidget $sf</span> . . . <span class="cmt"># # Get the content frame and populate it #</span> set cf [$sf getframe] source BwScrollableFrmContent.tcl <span class="cmt"># # Make the keyboard navigation more user-friendly #</span> foreach w [list $cb $sb $e $me] { bind $w <<TraverseIn>> [list $sf see %W] } foreach w [list $txt $lb $tbl $tv] { bind $w <<TraverseIn>> [list seeScrollarea $sf %W] } proc seeScrollarea {sf w} { $sf see [<span class="red">scrollutil::getscrollarea $w</span>] } </pre> </blockquote> <p>The additional stuff related to the mouse wheel events contains exactly the same Scrollutil command invocations as the one in the previous example.</p> <p>The file <code>BwScrollableFrmContent.tcl</code> contains also the implementation of the procedure <code>configTablelist</code>, associated with the "Configure Tablelist Widget" button as the value of its <code>-command</code> option. This procedure opens a toplevel window that contains a BWidget ScrollableFrame created with the <code>-constrainedwidth yes</code> setting within a <a href= "scrollarea.html">scrollarea</a> widget and invokes the <code><a href= "wheelEvent.html#enable">scrollutil::enableScrollingByWheel</a></code> command for this ScrollableFrame, thus registering the latter for scrolling by the already created mouse wheel event bindings for the binding tag <code>"all"</code>. After that it populates the content frame of the ScrollableFrame with ttk::label, ttk::combobox, ttk::spinbox, ttk::entry, and ttk::checkbutton widgets used to display and edit the configuration options of the tablelist widget. The procedure handles the <code><<TraverseIn>></code> virtual event sent to one of these widgets with the aid of the ScrollableFrame's <code>see</code> subcommand. Whenever a ttk::combobox or ttk::spinbox is created, the <code><a href= "wheelEvent.html#adapt">scrollutil::adaptWheelEventHandling</a></code> command is invoked for it, being that these widgets have built-in bindings for the mouse wheel events.</p> <p>Again, all this is nearly identical to what we did in the previous example.</p> <h3 id="ex_ScrolledFrameDemo2">A Script Using Two iwidgets::scrolledframe Widgets</h3> <p>The script <code>ScrolledFrmDemo2.tcl</code> in the <code>demos</code> directory creates an iwidgets::scrolledframe widget and then <code>source</code>s the file <code>ScrolledFrmContent.tcl</code>, which populates the content frame of the scrolledframe with the same widgets as <code>SuScrollableFrmContent.tcl</code> and <code>BwScrollableFrmContent.tcl</code> in the two previous examples.</p> <p>Here is the relevant code:</p> <blockquote> <pre> package require Tk 8.5.9 ;<span class= "cmt"># for ttk::spinbox</span> if {[catch {package require iwidgets} result1] != 0 && [catch {package require Iwidgets} result2] != 0} { error "$result1; $result2" } source scrolledwidgetPatch.itk ;<span class= "cmt"># adds ttk::scrollbar widgets</span> package require mentry_tile 3.2 ;<span class= "cmt"># for mouse wheel support</span> package require tablelist_tile 6.5 ;<span class= "cmt"># for -(x|y)mousewheelwindow</span> ;<span class= "cmt"># and scrollutil::scrollarea</span> <span class="red">package require scrollutil_tile</span> source styleUtil.tcl wm title . "Scrollutil Demo" . . . <span class="cmt"># # Create a scrolledframe #</span> set tf [ttk::frame .tf] set sf [iwidgets::scrolledframe $tf.sf -borderwidth 1 -relief sunken \ -scrollmargin 0] . . . <span class="cmt"># # Get the content frame and populate it #</span> set cf [$sf childsite] . . . source ScrolledFrmContent.tcl </pre> </blockquote> <p>The additional stuff related to the mouse wheel events contains exactly the same Scrollutil command invocations as the one in the two previous examples.</p> <p>The file <code>ScrolledFrmContent.tcl</code> contains also the implementation of the procedure <code>configTablelist</code>, associated with the "Configure Tablelist Widget" button as the value of its <code>-command</code> option. This procedure opens a toplevel window that contains an iwidgets::scrolledframe widget with a manually implemented equivalent of the <code><a href= "scrollableframe.html#fitcontentwidth">-fitcontentwidth</a> yes</code> <a href="scrollableframe.html">scrollutil::scrollableframe</a> and <code>-constrainedwidth yes</code> BWidget ScrollableFrame settings and invokes the <code><a href= "wheelEvent.html#enable">scrollutil::enableScrollingByWheel</a></code> command for this scrolledframe, thus registering the latter for scrolling by the already created mouse wheel event bindings for the binding tag <code>"all"</code>. After that it populates the content frame of the scrolledframe with ttk::label, ttk::combobox, ttk::spinbox, ttk::entry, and ttk::checkbutton widgets used to display and edit the configuration options of the tablelist widget. Whenever a ttk::combobox or ttk::spinbox is created, the <code><a href= "wheelEvent.html#adapt">scrollutil::adaptWheelEventHandling</a></code> command is invoked for it, being that these widgets have built-in bindings for the mouse wheel events.</p> <p>Again, all this is nearly identical to what we did in the two previous examples.</p> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/scrollutil/stylesheet.css.
> > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 |
/* generic class defining a top margin whose height equals the font size */ .tm {margin-top: 1em} /* background, border, and padding for the <pre> tag */ pre {background: #F7F7F7; border: silver solid 1px; padding: 1px} /* background for the <body> tag */ body {background: #FFFFFF} /* color for the <span> tag */ span.red {color: #E00000} span.cmt {color: #36648b} |
Added embedded/www/tklib/files/modules/scrollutil/wheelEvent.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 |
<!DOCTYPE html> <html> <head> <title>Commands Related to Mouse Wheel Event Handling</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content= "mouse wheel event, binding, event handling, scrolling, scrollable widget container, focus"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Commands Related to Mouse Wheel Event Handling</h1> <h2>For Scrollutil Version 1.5</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#add">The <code><b>scrollutil::addMouseWheelSupport</b></code> Command</a></li> <li><a href="#create">The <code><b>scrollutil::createWheelEventBindings</b></code> Command</a></li> <li><a href="#enable">The <code><b>scrollutil::enableScrollingByWheel</b></code> Command</a></li> <li><a href="#adapt">The <code><b>scrollutil::adaptWheelEventHandling</b></code> Command</a></li> <li><a href="#setFocusCkWin">The <code><b>scrollutil::setFocusCheckWindow</b></code> Command</a></li> <li><a href="#focusCkWin">The <code><b>scrollutil::focusCheckWindow</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="add">The <code><b>scrollutil::addMouseWheelSupport</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>scrollutil::addMouseWheelSupport</code> – Add mouse wheel support</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>scrollutil::addMouseWheelSupport</b> <i>tag</i> ?<i>axes</i>? </pre> </dd> <dt><b>REQUIRED TK VERSION</b></dt> <dd>8.4 or higher. <dt class="tm"><b>DESCRIPTION</b></dt> <dd>Adds mouse wheel support to the widgets having the specified binding tag by creating bindings for the mouse wheel events along the axes given by the optional <code><i>axes</i></code> argument, which must be <code>xy</code> (the default, meaning both the x and y axis), <code>x</code> (meaning the x axis only), or <code>y</code> (meaning the y axis only). The binding scripts created by this command will scroll the window given by the <code><b>%W</b></code> event field with the aid of the <code><b>xview scroll</b> <i>number</i> <b>units</b></code> and <code><b>yview scroll</b> <i>number</i> <b>units</b></code> subcommands of the associated Tcl command.</dd> <dd class="tm"><b>REMARK 1:</b> If <code><i>tag</i></code> is the path name of a window then the binding scripts created by this command are terminated by an invocation of the <code><b>break</b></code> command, in order to prevent the processing of the mouse wheel events by further binding scripts. For example, if <code><i>tag</i></code> is the path name of a text widget then the terminating <code><b>break</b></code> command makes sure that the mouse wheel events will not <i>additionally</i> be processed by the class bindings (associated with the binding tag <code><b>Text</b></code>), which in Tk 8.5 and later trigger a scrolling by <i>pixels</i>, unlike the bindings created by this command, which scroll the widget by <i>units</i> (i.e., lines and characters).</dd> <dd class="tm"><b>REMARK 2:</b> The canvas widget has no built-in bindings, but you can use this command to add mouse wheel support to the widget class <code><b>Canvas</b></code> or individual canvas widgets.</dd> <dd class="tm"><b>REMARK 3:</b> The mouse wheel events along the vertical axis are <code><b><MouseWheel></b></code> on Windows, <code><b><MouseWheel></b></code> and <code><b><Option-MouseWheel></b></code> on Mac OS X, and <code><b><MouseWheel></b></code>, <code><b><Button-4></b></code> and <code><b><Button-5></b></code> on X11 (where <code><b><MouseWheel></b></code> is not triggered by the X server, but can be produced using <code><b>event generate</b></code>). The mouse wheel events along the horizontal axis are <code><b><Shift-MouseWheel></b></code> on Windows, <code><b><Shift-MouseWheel></b></code> and <code><b><Shift-Option-MouseWheel></b></code> on Mac OS X, and <code><b><Shift-MouseWheel></b></code>, <code><b><Shift-Button-4></b></code> and <code><b><Shift-Button-5></b></code> on X11 (where <code><b><Shift-MouseWheel></b></code> is not triggered by the X server, but can be produced using <code><b>event generate</b></code>). On X11, when using Tk 8.7a3 or later, there are two more mouse wheel events along the horizontal axis: <code><b><Button-6></b></code> and <code><b><Button-7></b></code>, which are handled just like <code><b><Shift-Button-4></b></code> and <code><b><Shift-Button-5></b></code>, respectively. These events are commonly triggered by left/right tilting the scroll wheel of a mouse having one or two additional (thumb) buttons. (In Tk versions 8.6.x, with x >= 10, left/right tilting the scroll wheel of such a mouse gives rise to <code><b><Shift-MouseWheel></b></code> events on Windows and Mac OS X Aqua, and to <code><b><Shift-Button-4></b></code> and <code><b><Shift-Button-5></b></code> events on X11.)</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mouse wheel event, binding, scrolling</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="create">The <code><b>scrollutil::createWheelEventBindings</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>scrollutil::createWheelEventBindings</code> – Create mouse wheel event bindings</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>scrollutil::createWheelEventBindings</b> ?<i>tag</i> <i>tag</i> ...? </pre> </dd> <dt><b>REQUIRED TK VERSION</b></dt> <dd>8.4 or higher on X11 and Mac OS X; 8.6b2 or later on Windows. <dt class="tm"><b>DESCRIPTION</b></dt> <dd>Creates mouse wheel event bindings for the specified binding tags such that if the widget under the pointer is (a descendant of) one of the scrollable widget containers having the same toplevel as the widget and registered via <code><b><a href= "#enable">scrollutil::enableScrollingByWheel</a></b></code> then these events will trigger a scrolling of that widget container. In case of several nested registered scrollable widget containers fulfilling these conditions the innermost one will be scrolled. Each <code><i>tag</i></code> argument must be <code><b>all</b></code> or the path name of an existing toplevel widget (including <code><b>.</b></code>).</dd> <dd class="tm"><b>REMARK:</b> The reason for restricting the <code><i>tag</i></code> arguments to <code><b>all</b></code> and path names of existing toplevel widgets rather than supporting also tags like <code>"Scrollableframe"</code> (for scrollutil::scrollableframe), <code>"BwScrollableFrame"</code> (for BWidget ScrollableFrame) or <code>"Scrolledframe"</code> (for iwidgets::scrolledframe) is that the mouse wheel events should trigger a scrolling of the widget container under the pointer not only if the widget under the pointer is the widget container itself but also if it is a descendant of the latter (recall that for each window, the path name of its nearest toplevel ancestor and the tag <code><b>all</b></code> are contained in the window's default list of binding tags).</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mouse wheel event, binding, scrolling, scrollable widget container</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="enable">The <code><b>scrollutil::enableScrollingByWheel</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>scrollutil::enableScrollingByWheel</code> – Register scrollable widget containers for scrolling by the mouse wheel</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>scrollutil::enableScrollingByWheel</b> ?<i>scrollableWidgetContainer</i> <i>scrollableWidgetContainer</i> ...? </pre> </dd> <dt><b>REQUIRED TK VERSION</b></dt> <dd>8.4 or higher on X11 and Mac OS X; 8.6b2 or later on Windows. <dt class="tm"><b>DESCRIPTION</b></dt> <dd>Adds the specified scrollable widget containers to the internal list of widget containers that are registered for scrolling by the mouse wheel event bindings created by the <code><b><a href= "#create">scrollutil::createWheelEventBindings</a></b></code> command.</dd> <dd class="tm"><b>REMARK:</b> When a scrollable widget container whose path name was passed to this command gets destroyed, it is automatically removed from the above-mentioned internal list of registered widget containers.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mouse wheel event, binding, scrolling, scrollable widget container</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="adapt">The <code><b>scrollutil::adaptWheelEventHandling</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>scrollutil::adaptWheelEventHandling</code> – Adapt mouse wheel event handling</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>scrollutil::adaptWheelEventHandling</b> ?<i>widget</i> <i>widget</i> ...? </pre> </dd> <dt><b>REQUIRED TK VERSION</b></dt> <dd>8.4 or higher on X11 and Mac OS X; 8.6b2 or later on Windows. <dt class="tm"><b>DESCRIPTION</b></dt> <dd>For each <code><i>widget</i></code> argument, the command performs the following actions:</dd> <dd class="tm"> <ul> <li> If <code><i>widget</i></code> is the path name of a <a href= "https://www.nemethi.de/tablelist/">tablelist</a> widget then it sets the latter's <code><b>-xmousewheelwindow</b></code> and <code><b>-ymousewheelwindow</b></code> options to the path name of the containing toplevel window, provided that the Tablelist version is 6.4 or later (for earlier Tablelist versions the command silently ignores any tablelist widget passed to it as argument). As a result, a mouse wheel event over the tablelist's body or edit window (more precisely, a mouse wheel event sent to any component of the tablelist having the binding tag <code><b>TablelistBody</b></code> or <code><b>TablelistEdit</b></code>) will be handled as follows: <ul class="tm"> <li>If the focus is inside the tablelist widget then the event will scroll the tablelist or its edit window and no further processing of the event will take place.</li> <li class="tm">If the focus is outside the tablelist widget then no scrolling of the tablelist's body or edit window will happen. Instead, the event will be redirected to the containing toplevel window via <code><b>event generate</b></code>. This in turn will trigger a scrolling of the (innermost) widget container that is an ancestor of <code><i>widget</i></code> and has the same toplevel (if there is such a scrollable widget container), provided that the path name of the containing toplevel widget or the binding tag <code><b>all</b></code> was passed to the <code><b><a href= "#create">scrollutil::createWheelEventBindings</a></b></code> command and this widget container was registered for scrolling via <code><b><a href= "#enable">scrollutil::enableScrollingByWheel</a></b></code>.</li> </ul> </li> <li class="tm"> Otherwise it locates the (first) binding tag that has mouse wheel event bindings and is different from both the path name of the containing toplevel window and <code><b>all</b></code>. If the search for this tag was successful then the command modifies the widget's list of binding tags by prepending the tag <code><b>WheeleventRedir</b></code> and appending the tag <code><b>WheeleventBreak</b></code> to this binding tag. As a result, a mouse wheel event sent to this widget will be handled as follows: <ul class="tm"> <li>If the focus is on or inside the window <code>[<b><a href="#focusCkWin">focusCheckWindow</a></b> <i>widget</i>]</code> then the event will be handled by the binding script associated with this tag and no further processing of the event will take place.</li> <li class="tm">If the focus is outside the window <code>[<b>focusCheckWindow</b> <i>widget</i>]</code> then the event will be redirected to the containing toplevel window via <code><b>event generate</b></code> rather than being handled by the binding script associated with the above-mentioned tag. This in turn will trigger a scrolling of the (innermost) widget container that is an ancestor of <code><i>widget</i></code> and has the same toplevel (if there is such a scrollable widget container), provided that the path name of the containing toplevel widget or the binding tag <code><b>all</b></code> was passed to the <code><b><a href= "#create">scrollutil::createWheelEventBindings</a></b></code> command and this widget container was registered for scrolling via <code><b><a href= "#enable">scrollutil::enableScrollingByWheel</a></b></code>.</li> </ul> </li> </ul> </dd> <dd class="tm"><b>REMARK 1:</b> This command is designed to be invoked for widgets that have mouse wheel event bindings and are descendants of a scrollable widget container (although it does no harm if it is called for other widgets, too). The Tk and tile widgets having class bindings for mouse wheel events are: listbox, text, Tk core scrollbar, ttk::scrollbar, ttk::combobox, ttk::spinbox, and ttk::treeview. Examples of widgets with binding tags other than their class names that have mouse wheel event bindings are tablelist widgets as well as the entry components of <a href= "https://www.nemethi.de/mentry/">mentry</a> widgets of type <code>"Date"</code>, <code>"Time"</code>, <code>"DateTime"</code>, <code>"IPAddr"</code>, and <code>"IPv6Addr"</code> (for Mentry versions 3.2 and above).</dd> <dd class="tm"><b>REMARK 2:</b> The mouse wheel event class bindings for the Tk core scrollbar on Windows and X11 were added in Tk 8.6. Prior to this Tk version there were such bindings only for the windowing systems <code><b>classic</b></code> and <code><b>aqua</b></code> on the Macintosh. Scrollutil eliminates this discrepancy by automatically creating the <code><b>Scrollbar</b></code> class bindings for mouse wheel events on Windows and X11. Note also that the ttk::scrollbar widget has no <i>built-in</i> class bindings for mouse wheel events, but Scrollutil automatically creates the missing bindings by copying the mouse wheel event bindings of the widget class <code><b>Scrollbar</b></code> to the binding tag <code><b>TScrollbar</b></code>.</dd> <dd class="tm"><b>REMARK 3:</b> As mentioned above, Tk core scrollbar and ttk::scrollbar widgets have class bindings for mouse wheel events, hence this command should be invoked for them in case they are descendants of a scrollable widget container. Since this task can become tedious, Scrollutil makes sure that if you pass a widget to this command and that widget is embedded into a <a href="scrollarea.html">scrollarea</a> via the latter's <code><b><a href= "scrollarea.html#setwidget">setwidget</a></b></code> subcommand, then this command will automatically be invoked for the scrollbars of that scrollarea, too.</dd> <dd class="tm"><b>REMARK 4:</b> When handling a mouse wheel event sent to a Tk core or tile scrollbar whose path name was passed to this command, if the focus is on or inside the associated widget then the event will be processed by the scrollbar rather than being redirected to the containing toplevel, just as if the focus were on the scrollbar itself.</dd> <dd class="tm"><b>REMARK 5:</b> Invoking this command for widgets that have mouse wheel event bindings and are descendants of a scrollable widget container is essential for a user-friendly mouse wheel event handling in scrollable widget containers. Without this step the mouse wheel events would scroll both the listbox, text, ttk::treeview, or tablelist widget under the pointer <i>and</i> the widget container to whose descendants the latter belongs, or they would select the next/previous value in the ttk::combobox or ttk::spinbox under the pointer <i>in addition to</i> scrolling the widget container. After invoking this command, e.g, for a listbox within a scrollable widget container, the mouse wheel events over that widget will only scroll the listbox if it has the focus. Likewise, after invoking this command for a ttk::combobox or ttk::spinbox within a scrollable widget container, the mouse wheel events over that widget will only select its next/previous value if it has the focus. In both examples, if the focus is outside the widget in question then the mouse wheel events will scroll the widget container instead.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>mouse wheel event, binding, event handling, scrolling, scrollable widget container, focus</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="setFocusCkWin">The <code><b>scrollutil::setFocusCheckWindow</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>scrollutil::setFocusCheckWindow</code> – Set the "focus check window"</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>scrollutil::setFocusCheckWindow</b> <i>widget</i> ?<i>widget</i> ...? <i>otherWidget</i> </pre> </dd> <dt><b>REQUIRED TK VERSION</b></dt> <dd>8.4 or higher on X11 and Mac OS X; 8.6b2 or later on Windows. <dt class="tm"><b>DESCRIPTION</b></dt> <dd>For each <code><i>widget</i></code> argument, the command sets the associated "focus check window" to <code><i>otherWidget</i></code>. This is the window to be used in the binding scripts for the tag <code><b><a href="#adapt">WheeleventRedir</a></b></code> instead of the widget when checking whether the focus is on/inside or outside that window. For each <code><i>widget</i></code> argument, <code><i>otherWidget</i></code> must be an ancestor of or identical to <code><i>widget</i></code>.</dd> <dd class="tm"><b>REMARK 1:</b> When a widget whose path name was passed to this command as one of its <code><i>widget</i></code> arguments gets destroyed, the association between the widget and its "focus check window" is automatically removed.</dd> <dd class="tm"><b>REMARK 2:</b> This command comes in handy if for some widgets you want to make the focus check within the binding scripts for the tag <code><b>WheeleventRedir</b></code> less restrictive. For example, if the widget under the pointer is an entry component of a <a href="https://www.nemethi.de/mentry/">mentry</a> <code><i>me</i></code> of type <code>"Date"</code>, <code>"Time"</code>, <code>"DateTime"</code>, <code>"IPAddr"</code>, or <code>"IPv6Addr"</code> and the focus is on any of its siblings, then the mouse wheel events sent to this entry should be handled by the entry widget itself rather than scrolling the widget container that is an ascendant of the mentry. You can achieve this by invoking</dd> <dd> <blockquote> <pre> set entryList [$me <a href= "https://www.nemethi.de/mentry/mentryWidget.html#entries">entries</a>] eval <a href="#adapt">scrollutil::adaptWheelEventHandling</a> $entryList eval <span class="red">scrollutil::setFocusCheckWindow</span> $entryList [list $me] </pre> </blockquote> </dd> <dd>With Tcl/Tk 8.5 or above, you can use the more compact form</dd> <dd> <blockquote> <pre> set entryList [$me <a href= "https://www.nemethi.de/mentry/mentryWidget.html#entries">entries</a>] <a href="#adapt">scrollutil::adaptWheelEventHandling</a> {*}$entryList <span class="red">scrollutil::setFocusCheckWindow</span> {*}$entryList $me </pre> </blockquote> </dd> <dd class="tm"><b>REMARK 3:</b> As a similar example, suppose that <code><i>ss</i></code> is a <a href="scrollsync.html">scrollsync</a> widget that was populated via its <code><b><a href= "scrollsync.html#setwidgets">setwidgets</a></b></code> subcommand with child widgets. Then, if the widget under the pointer is one of these children and the focus is on any of the other children passed to that subcommand, then the mouse wheel events sent to the child under the pointer should be handled by that child widget itself rather than scrolling the widget container that is an ascendant of the scrollsync. You can achieve this with the following code:</dd> <dd> <blockquote> <pre> set widgetList [$ss <a href="scrollsync.html#widgets">widgets</a>] eval <a href="#adapt">scrollutil::adaptWheelEventHandling</a> $widgetList eval <span class="red">scrollutil::setFocusCheckWindow</span> $widgetList [list $ss] </pre> </blockquote> </dd> <dd>Again, with Tcl/Tk 8.5 or above, you can use the more compact form</dd> <dd> <blockquote> <pre> set widgetList [$ss <a href="scrollsync.html#widgets">widgets</a>] <a href="#adapt">scrollutil::adaptWheelEventHandling</a> {*}$widgetList <span class="red">scrollutil::setFocusCheckWindow</span> {*}$widgetList $ss </pre> </blockquote> </dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>binding, focus, "focus check window"</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="focusCkWin">The <code><b>scrollutil::focusCheckWindow</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>scrollutil::focusCheckWindow</code> – Query the "focus check window"</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>scrollutil::focusCheckWindow</b> <i>widget</i> </pre> </dd> <dt><b>REQUIRED TK VERSION</b></dt> <dd>8.4 or higher on X11 and Mac OS X; 8.6b2 or later on Windows. <dt class="tm"><b>DESCRIPTION</b></dt> <dd>Returns the path name of the "focus check window" associated with the <code><i>widget</i></code> argument. This is the window that is used in the binding scripts for the tag <code><b><a href= "#adapt">WheeleventRedir</a></b></code> instead of the widget when checking whether the focus is on/inside or outside that window. If the command <code><b><a href= "#setFocusCkWin">scrollutil::setFocusCheckWindow</a></b></code> was not invoked for <code><i>widget</i></code> then the return value is <code><i>widget</i></code> itself.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>binding, focus, "focus check window"</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> </body> </html> |
Added embedded/www/tklib/files/modules/tablelist/adwaita.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/ambiance.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/aqua.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/arc.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/arrowStyles.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/arrowStyles_vista.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/baghira.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/bicolor1.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/bicolor2.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/bicolor3.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/bicolor4.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/blueMenta.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/browse.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/browseTree.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/bwidget.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/classic1.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/classic2.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/classic3.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/classic4.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/config.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/dirViewer.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/dust.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/dustSand.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/embeddedWindows.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/embeddedWindows_tile.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/gtk.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/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 |
<!DOCTYPE html> <html> <head> <title>The Multi-Column Listbox and Tree Widget Package Tablelist 6.8</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content= "tablelist, multi-column, listbox, tree, widget, tile"> </head> <body> <div align="center"> <h1>The Multi-Column Listbox and Tree Widget Package Tablelist 6.8</h1> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2>Contents</h2> <p><a href="tablelist.html">Tablelist Programmer's Guide</a></p> <p><a href="tablelistWidget.html">The <code>tablelist::tablelist</code> Command</a></p> <p><a href="tablelistColSort.html">Commands for Interactive Sorting by One or More Columns</a></p> <p><a href="tablelistBinding.html">Commands Related to Binding Scripts</a></p> <p><a href="tablelistThemes.html">Commands Related to Tile Themes</a></p> <p><a href="tablelistTkCore.html">Interactive Tablelist Cell Editing Using Tk Core Widgets</a></p> <p><a href="tablelistTile.html">Interactive Tablelist Cell Editing Using Tile Widgets</a></p> <p><a href="tablelistBWidget.html">Interactive Tablelist Cell Editing Using the BWidget Package</a></p> <p><a href="tablelistIwidgets.html">Interactive Tablelist Cell Editing Using the Iwidgets Package</a></p> <p><a href="tablelistCombobox.html">Interactive Tablelist Cell Editing Using the combobox Package</a></p> <p><a href="tablelistCtext.html">Interactive Tablelist Cell Editing Using the ctext Package</a></p> <p><a href="tablelistMentry.html">Interactive Tablelist Cell Editing Using the Mentry Package</a></p> </body> </html> |
Added embedded/www/tklib/files/modules/tablelist/klearlooks.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/mate.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/menta.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/mint.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/mint2.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/newWave.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/oxygen1.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/oxygen2.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/phase.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/plain1.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/plain2.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/plain3.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/plain4.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/plastik.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/plastique.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/radiance.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/scrollbars.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/styles.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/stylesheet.css.
> > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 |
/* generic class defining a top margin whose height equals the font size */ .tm {margin-top: 1em} /* background, border, and padding for the <pre> tag */ pre {background: #F7F7F7; border: silver solid 1px; padding: 1px} /* background for the <body> tag */ body {background: #FFFFFF} /* color for the <span> tag */ span.red {color: #E00000} span.cmt {color: #36648b} |
Added embedded/www/tklib/files/modules/tablelist/tablelist.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 |
<!DOCTYPE html> <html> <head> <title>Tablelist Programmer's Guide</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content= "tablelist, multi-column, listbox, tree, widget, tile"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Tablelist Programmer's Guide</h1> <h2>For Tablelist Version 6.8</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <h4><a href="#overview">Overview</a></h4> <ul> <li><a href="#ov_what">What Is Tablelist?</a></li> <li><a href="#ov_get">How to Get It?</a></li> <li><a href="#ov_install">How to Install It?</a></li> <li><a href="#ov_use">How to Use It?</a></li> <li><a href="#ov_tile">More on Tablelist_tile</a></li> </ul> <h4><a href="#examples">Examples</a></h4> <ul> <li><a href="#ex_config">A tablelist Widget for Displaying and Editing Configuration Options</a></li> <li><a href="#ex_browse">Two Widget Browsers Based on a tablelist</a></li> <li><a href="#ex_dirViewer">A Directory Viewer Based on a tablelist</a></li> <li><a href="#ex_styles">Improving the Look & Feel of a tablelist Widget</a></li> <li><a href="#ex_editing">Advanced Interactive tablelist Cell Editing</a></li> <li><a href="#ex_windows">A tablelist Widget Containing Embedded Windows</a></li> <li><a href="#ex_tile">Tile-Based Demo Scripts</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="overview">Overview</h2> <h3 id="ov_what">What Is Tablelist?</h3> <p>Tablelist is a library package for Tcl/Tk versions 8.0 or higher, written in pure Tcl/Tk code. It contains:</p> <ul> <li>the implementation of the <a href= "tablelistWidget.html"><b>tablelist</b> mega-widget</a>, including a general utility module for mega-widgets;</li> <li>a demo script containing a useful procedure that displays the configuration options of an arbitrary widget in a tablelist and enables you to edit their values interactively;</li> <li>a demo script implementing a widget browser based on a tablelist used as multi-column listbox;</li> <li>a demo script implementing a widget browser based on a tablelist used as multi-column tree widget;</li> <li>a demo script implementing a directory viewer based on a tablelist used as multi-column tree widget;</li> <li>a demo script showing several ways to improve the appearance of a tablelist widget;</li> <li>four further demo scripts, illustrating the interactive cell editing with the aid of various widgets from the Tk core and from the packages tile, BWidget, Iwidgets, combobox (by Bryan Oakley), and Mentry;</li> <li>one further demo script, with a tablelist widget containing embedded windows;</li> <li>tile-based counterparts of the above-mentioned demo scripts;</li> <li>this tutorial;</li> <li>reference pages in HTML format.</li> </ul> <p>A tablelist is a multi-column listbox and tree widget. The width of each column can be dynamic (i.e., just large enough to hold all its elements, including the header) or static (specified in characters or pixels). The columns are, per default, resizable. The alignment of each column can be specified as <code>left</code>, <code>right</code>, or <code>center</code>.</p> <p>The columns, rows, and cells can be configured individually. Several of the global and column-specific options refer to the header titles, implemented as label widgets. For instance, the <code>-labelcommand</code> option specifies a Tcl command to be invoked when mouse button 1 is released over a header label. The most common value of this option sorts the items based on the respective column.</p> <p>The Tablelist package provides a great variety of tree styles controlling the look & feel of the column that displays the tree hierarchy with the aid of indentations and expand/collapse controls.</p> <p>Interactive editing of the elements of a tablelist widget can be enabled for individual cells and for entire columns. A great variety of widgets from the Tk core and from the packages tile, BWidget, Iwidgets, combobox, ctext, and Mentry (or Mentry_tile) is supported for being used as embedded edit window. In addition, a rich set of keyboard bindings is provided for a comfortable navigation between the editable cells.</p> <p>The Tcl command corresponding to a tablelist widget is very similar to the one associated with a normal listbox. There are column-, row-, and cell-specific counterparts of the <code>configure</code> and <code>cget</code> subcommands (<code>columnconfigure</code>, <code>rowconfigure</code>, <code>cellconfigure</code>, ...). They can be used, among others, to insert images into the cells and the header labels, or to insert embedded windows into the cells. The <code>index</code>, <code>nearest</code>, and <code>see</code> command options refer to the rows, but similar subcommands are provided for the columns and cells (<code>columnindex</code>, <code>cellindex</code>, ...). The items can be sorted with the <code>sort</code>, <code>sortbycolumn</code>, and <code>sortbycolumnlist</code> command options.</p> <p>The bindings defined for the body of a tablelist widget make it behave just like a normal listbox. This includes the support for the virtual event <code><<ListboxSelect>></code> (which is equivalent to <code><<TablelistSelect>></code>). In addition, versions 2.3 or higher of the widget callback package Wcb (written in pure Tcl/Tk code as well) can be used to define callbacks for the <code>activate</code>, <code>selection set</code>, and <code>selection clear</code> commands, and Wcb versions 3.0 or higher also support callbacks for the <code>activatecell</code>, <code>cellselection set</code>, and <code>cellselection clear</code> commands. The download location of Wcb is</p> <blockquote> <address> <a href="https://www.nemethi.de">https://www.nemethi.de</a> </address> </blockquote> <h3 id="ov_get">How to Get It?</h3> <p>Tablelist is available for free download from the same URL as Wcb. The distribution file is <code>tablelist6.8.tar.gz</code> for UNIX and <code>tablelist6_8.zip</code> 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.</p> <p>Tablelist is also included in tklib, which has the address</p> <blockquote> <address> <a href="https://core.tcl.tk/tklib">https://core.tcl.tk/tklib</a> </address> </blockquote> <h3 id="ov_install">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. For example, you can install it as a directory at the same level as the Tcl and Tk script libraries. The locations of these library directories are given by the <code>tcl_library</code> and <code>tk_library</code> variables, respectively.</p> <p>To install Tablelist <i>on UNIX</i>, <code>cd</code> to the desired directory and unpack the distribution file <code>tablelist6.8.tar.gz</code>:</p> <blockquote> <pre> gunzip -c tablelist6.8.tar.gz | tar -xf - </pre> </blockquote> <p>On most UNIX systems this can be replaced with</p> <blockquote> <pre> tar -zxf tablelist6.8.tar.gz </pre> </blockquote> <p>Both commands will create a directory named <code>tablelist6.8</code>, with the subdirectories <code>demos</code>, <code>doc</code>, and <code>scripts</code>.</p> <p><i>On Windows</i>, use WinZip or some other program capable of unpacking the distribution file <code>tablelist6_8.zip</code> into the directory <code>tablelist6.8</code>, with the subdirectories <code>demos</code>, <code>doc</code>, and <code>scripts</code>.</p> <p>The file <code>tablelistEdit.tcl</code> in the <code>scripts</code> directory is only needed for applications making use of interactive cell editing. Similarly, the file <code>tablelistMove.tcl</code> in the same directory is only required for scripts invoking the <code>move</code> or <code>movecolumn</code> command. Finally, the file <code>tablelistThemes.tcl</code> is only needed for applications using the package Tablelist_tile (see next section).</p> <p>Next, you should check the exact version number of your Tcl/Tk distribution, given by the <code>tcl_patchLevel</code> and <code>tk_patchLevel</code> variables. If you are using Tcl/Tk version 8.2.X, 8.3.0 - 8.3.2, or 8.4a1, then you should upgrade your Tcl/Tk distribution to a higher release. This is because a bug in these Tcl versions (fixed in Tcl 8.3.3 and 8.4a2) causes excessive memory use when calling <code>info exists</code> on non-existent array elements, and Tablelist makes a lot of invocations of this command.</p> <p>If for some reason you cannot upgrade your Tcl/Tk version, then you should execute the Tcl script <code>repair.tcl</code> in the directory <code>scripts</code>. This script makes backup copies of several files contained in this directory, and then creates new versions of them by replacing all invocations of <code>info exists</code> for array elements with a call to the helper procedure <code>arrElemExists</code>. The patched files work with all Tcl/Tk releases starting with 8.0, but the original ones have a much better performance.</p> <p>Notice that in tklib the Tablelist <code>demos</code> directory is replaced with the subdirectory <code>tablelist</code> of the <code>examples</code> directory. Please take this into account when reading the <a href="#examples">examples</a> below.</p> <h3 id="ov_use">How to Use It?</h3> <p>The Tablelist distribution provides two packages, called <b>Tablelist</b> and <b>Tablelist_tile</b>. The main difference between the two is that Tablelist_tile enables the tile-based, theme-specific appearance of tablelist widgets; this package requires Tcl/Tk 8.4 or higher and tile 0.6 or higher. It is not possible to use both packages in one and the same application, because both are implemented in the same <code>tablelist</code> namespace and provide identical commands.</p> <p>To be able to access the commands and variables defined in the package Tablelist, your scripts must contain one of the lines</p> <blockquote> <pre> package require tablelist ?<i>version</i>? package require Tablelist ?<i>version</i>? </pre> </blockquote> <p>You can use either one of the two statements above because the file <code>tablelist.tcl</code> contains both lines</p> <blockquote> <pre> package provide tablelist ... package provide Tablelist ... </pre> </blockquote> <p>Likewise, to be able to access the commands and variables defined in the package Tablelist_tile, your scripts must contain one of the lines</p> <blockquote> <pre> package require tablelist_tile ?<i>version</i>? package require Tablelist_tile ?<i>version</i>? </pre> </blockquote> <p>Again, you can use either one of the two statements above because the file <code>tablelist_tile.tcl</code> contains both lines</p> <blockquote> <pre> package provide tablelist_tile ... package provide Tablelist_tile ... </pre> </blockquote> <p>You are free to remove one of the above lines from <code>tablelist.tcl</code> and <code>tablelist_tile.tcl</code>, respectively, if you want to prevent the corresponding packages from making themselves known under two different names each. Of course, by doing so you restrict the argument of <code>package require</code> to a single name per package.</p> <p>Please note that <b>ActiveTcl versions 8.5 and later use a modified package mechanism, which only exports the all-lowercase names <code>tablelist</code> and <code>tablelist_tile</code></b>.</p> <p><b>REMARK:</b> If you have an earlier Tablelist version as part of ActiveTcl 8.5 or above and the new Tablelist release 6.8, then it is highly recommended to specify the version number <code>6.8</code> in the <code>package require</code> command, because otherwise the interpreter will load the old Tablelist version included in ActiveTcl as Tcl Module. The <a href="#examples">examples</a> below use the statement <code>package require tablelist 6.8</code>, and their tile-based counterparts invoke the command <code>package require tablelist_tile 6.8</code>.</p> <p>Since the packages Tablelist and Tablelist_tile are implemented in the <code>tablelist</code> namespace, you must either invoke the</p> <blockquote> <pre> namespace import tablelist::<i>pattern</i> ?tablelist::<i>pattern ...</i>? </pre> </blockquote> <p>command to import the <i>procedures</i> you need, or use qualified names like <code>tablelist::tablelist</code>. In the examples below we have chosen the latter approach.</p> <p>To access Tablelist <i>variables</i>, you <i>must</i> use qualified names. There are only 5 Tablelist variables (and one more when using Tablelist_tile) that are designed to be accessed outside the namespace <code>tablelist</code>:</p> <ul> <li>The variable <code>tablelist::version</code> holds the current version number of the Tablelist and Tablelist_tile packages.</li> <li>The variable <code>tablelist::library</code> holds the location of the Tablelist installation directory.</li> <li>The variable <code>tablelist::scalingpct</code> holds the scaling percentage used by Tablelist when adapting the sizes of the tree styles <code>vistaAero</code>, <code>vistaClassic</code>, <code>win7Aero</code>, <code>win7Classic</code>, and <code>win10</code> to the display's DPI scaling level. The currently supported values are <code>100</code>, <code>125</code>, <code>150</code>, and <code>200</code>. You can use the value of this variable, e.g., if you want to create images of different sizes, depending on the DPI scaling factor. For example, if your application uses images of size 16 x 16 on an unscaled display and <code>tablelist::scalingpct</code> has the value <code>150</code>, then the image size for this display should be 24 x 24.</li> <li>The boolean variable <code>tablelist::strictTk</code> (having the default value <code>0</code>) controls the strict listbox-compatibility of the default bindings.</li> <li>The read-only boolean variable <code>tablelist::usingTile</code> has the value <code>0</code> in the package Tablelist and the value <code>1</code> in Tablelist_tile.</li> <li>In Tablelist_tile the array <code>tablelist::themeDefaults</code> holds the theme-specific default values of a series of Tablelist configuration options.</li> </ul> <h3 id="ov_tile">More on Tablelist_tile</h3> <p>A tablelist widget consists of a body (containing the items) and a header (displaying the column titles and optional header items). Both components are contained in a hull, implemented as a frame. The header has a rather complex structure, consisting, among others, of frame and label widgets. While in the Tablelist package all of these components are Tk widgets, the Tablelist_tile package uses both Tk and tile frame and label widgets. Due to several incompatibilities between Tk and tile, it is currently not possible to replace all Tk widgets making up a tablelist with their tile counterparts.</p> <p>From the above it follows that <b>the package Tablelist_tile will only work as expected if the Tk <code>frame</code> and <code>label</code> commands haven't been overridden by using <code>namespace import -force ttk::*</code> at global scope</b>. While earlier tile releases suggested using this command at global scope for the really adventurous, in newer tile versions this is considered a Really Bad Idea, causing many things to break. Instead, <b>you should explicitly invoke <code>ttk::frame</code>, <code>ttk::label</code>, etc. whenever you want to use a tile widget</b>.</p> <p><b>Overriding some other Tk widgets at global scope may be equally dangerous when using various widgets from the Tk core and from the packages BWidget, Iwidgets, combobox (by Bryan Oakley), ctext, and Mentry for interactive cell editing</b>, because these packages expect Tk widgets, which may not always be replaced by their tile counterparts.</p> <p>Another restriction to be taken into account is due to the fact that in earlier tile versions the <code>(ttk::)style theme use</code> command could only be used to set the current theme, but not to retrieve it. For this reason, the package Tablelist_tile makes use of the variable <code>ttk::currentTheme</code> or <code>tile::currentTheme</code> (depending on the tile version), which is set by the <code>ttk::setTheme</code> or <code>tile::setTheme</code> procedure. From this it follows that <b>the tile-based tablelist widgets will only have the expected appearance if the platform-specific default theme is either left unchanged or replaced with another theme by invoking the procedure <code>ttk::setTheme</code> or <code>tile::setTheme</code>, depending on the current tile version</b>. (See also the <code><a href= "tablelistThemes.html#setTheme">tablelist::setTheme</a></code> command.)</p> <p>After these cautions concerning the use of tile, the rest of this section describes the differences between the packages Tablelist and Tablelist_tile.</p> <p>The Tablelist_tile package checks whether the required Tk and tile versions are present, by executing the commands</p> <blockquote> <pre> package require Tk 8.4 if {$::tk_version < 8.5 || [regexp {^8\.5a[1-5]$} $::tk_patchLevel]} { package require tile 0.6 } </pre> </blockquote> <p>The second command above reflects the fact that, beginning with Tk 8.5a6, tile is integrated into the Tk core and therefore it should only be loaded explicitly when using an earlier Tk version.</p> <p>Apart from this and the <code>_tile</code> suffix in the <code>package require</code> command, the only difference (from the programmer's point of view) between the packages Tablelist and Tablelist_tile is related to the supported configuration options: The <code>-highlightbackground</code>, <code>-highlightcolor</code>, <code>-highlightthickness</code>, <code>-labelbackground</code>, <code>-labelactivebackground</code>, <code>-labelactiveforeground</code>, <code>-labeldisabledforeground</code>, and <code>-labelheight</code> options (the latter at both widget and column levels), present in the Tablelist package, are not supported by Tablelist_tile. The first three are standard Tk widget options that are not available for tile widgets. The <code>-labelbackground</code> option stands for the <code>-background</code> option of the column labels, and current versions of the tile engine don't support setting the background color for these widgets with a special header layout. The remaining options stand for the <code>-activebackground</code>, <code>-activeforeground</code>, <code>-disabledforeground</code>, and <code>-height</code> options of the column labels, and these configuration options are not supported for tile label widgets.</p> <p>Also, take into account that in some themes, setting the <code>-labelborderwidth</code> option (at widget or column level) to a value other than the default might be ignored by tile and thus could cause alignment problems. This is because the border of tile widgets is drawn with theme-specific methods, which will not always produce the results known from Tk widgets.</p> <p>Finally, notice that, when using the <code>tileqt</code> theme, the version number of the <code>tile::theme::tileqt</code> package must be 0.4 or higher, and <code>tileqt</code> itself won't work with tile versions earlier than 0.7.</p> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="examples">Examples</h2> <h3 id="ex_config">A tablelist Widget for Displaying and Editing Configuration Options</h3> <p>The file <code>config.tcl</code> in the <code>demos</code> directory contains a procedure <code>demo::displayConfig</code> that displays the configuration options of an arbitrary widget in a tablelist contained in a newly created toplevel widget and allows you to edit these options. This procedure can prove to be quite useful during interactive GUI development. To test it, start <code>wish</code> and evaluate the file by using the <code>source</code> command as follows:</p> <ul> <li> If <code>wish</code> was started in the <code>demos</code> directory then it is sufficient to enter <blockquote> <pre> source config.tcl </pre> </blockquote> </li> <li> If <code>wish</code> was started in some other directory then you can use the <code>tablelist::library</code> variable to find the location of the file. For example, assuming that your Tablelist installation has the directory structure described in the <a href="#ov_install">How to install it?</a> section, the required commands are: <blockquote> <pre> package require tablelist 6.8 source [file join $tablelist::library demos config.tcl] </pre> </blockquote> </li> </ul> <p>In both cases, the script will print the following message to <code>stdout</code>:</p> <blockquote> <pre> To display the configuration options of an arbitrary widget, enter demo::displayConfig <widgetName> </pre> </blockquote> <p><code><widgetName></code> can be the path name of any already existing widget. For example, if you enter</p> <blockquote> <pre> demo::displayConfig . </pre> </blockquote> <p>then you will see that a tablelist widget <code>.configTop.tf.tbl</code> in a new toplevel window is created and its name is printed to <code>stdout</code>. If you then enter</p> <blockquote> <pre> demo::displayConfig .configTop.tf.tbl </pre> </blockquote> <p>then another toplevel window containing the tablelist widget <code>.configTop2.tf.tbl</code> will pop up. The latter looks like in the following figure:</p> <blockquote> <img src="config.png" alt="Configuration Options" width="835" height="402"> </blockquote> <p>It is assumed that the Tcl command associated with the widget specified by <code><widgetName></code> has a <code>configure</code> subcommand which, when invoked without any argument, returns a list describing all of the available configuration options for the widget, in the common format known from the standard Tk widgets. The <code>demo::displayConfig</code> procedure inserts the items of this list into a scrolled tablelist with 5 dynamic-width columns and interactive sort capability, and returns the name of the newly created tablelist widget:</p> <blockquote> <pre> package require tablelist 6.8 namespace eval demo { <span class="cmt"># # Get the current windowing system ("x11", "win32", "classic", or "aqua") # and add some entries to the Tk option database for the following # widget hierarchy within a toplevel widget of the class DemoTop: # # Name Class # ----------------------------- # tf Frame # tbl Tabellist # vsb, hsb Scrollbar # bf Frame # b1, b2, b3 Button #</span> variable winSys if {[catch {tk windowingsystem} winSys] != 0} { switch $::tcl_platform(platform) { unix { set winSys x11 } windows { set winSys win32 } macintosh { set winSys classic } } } if {[string compare $winSys "x11"] == 0} { <span class="cmt"># # Create the font TkDefaultFont if not yet present #</span> catch {font create TkDefaultFont -family Helvetica -size -12} option add *DemoTop*Font TkDefaultFont option add *DemoTop*selectBackground #5294e2 option add *DemoTop*selectForeground white } option add *DemoTop.tf.borderWidth 1 option add *DemoTop.tf.relief sunken option add *DemoTop.tf.tbl.borderWidth 0 option add *DemoTop.tf.tbl.highlightThickness 0 option add *DemoTop.tf.tbl.background white option add *DemoTop.tf.tbl.stripeBackground #f0f0f0 option add *DemoTop.tf.tbl.setGrid yes option add *DemoTop.tf.tbl*Entry.background white option add *DemoTop.bf.Button.width 10 } <span class="cmt">#------------------------------------------------------------------------------ # demo::displayConfig # # Displays the configuration options of the widget w in a tablelist widget # contained in a newly created toplevel widget. Returns the name of the # tablelist widget. #------------------------------------------------------------------------------</span> proc demo::displayConfig w { if {![winfo exists $w]} { bell tk_messageBox -title "Error" -icon error -message \ "Bad window path name \"$w\"" return "" } <span class="cmt"># # Create a toplevel widget of the class DemoTop #</span> set top .configTop for {set n 2} {[winfo exists $top]} {incr n} { set top .configTop$n } toplevel $top -class DemoTop wm title $top "Configuration Options of the [winfo class $w] Widget \"$w\"" <span class="cmt"># # Create a scrolled tablelist widget with 5 dynamic-width # columns and interactive sort capability within the toplevel #</span> set tf $top.tf frame $tf set tbl $tf.tbl set vsb $tf.vsb set hsb $tf.hsb tablelist::tablelist $tbl \ -columns {0 "Command-Line Name" 0 "Database/Alias Name" 0 "Database Class" 0 "Default Value" 0 "Current Value"} \ -labelcommand tablelist::sortByColumn -sortcommand demo::compareAsSet \ -editendcommand demo::applyValue -height 15 -width 100 -stretch all \ -xscrollcommand [list $hsb set] -yscrollcommand [list $vsb set] if {[$tbl cget -selectborderwidth] == 0} { $tbl configure -spacing 1 } $tbl columnconfigure 3 -maxwidth 30 $tbl columnconfigure 4 -maxwidth 30 -editable yes scrollbar $vsb -orient vertical -command [list $tbl yview] scrollbar $hsb -orient horizontal -command [list $tbl xview] <span class="cmt"># # Create three buttons within a frame child of the toplevel widget #</span> set bf $top.bf frame $bf set b1 $bf.b1 set b2 $bf.b2 set b3 $bf.b3 button $b1 -text "Refresh" -command [list demo::putConfig $w $tbl] button $b2 -text "Sort as Set" -command [list $tbl sort] button $b3 -text "Close" -command [list destroy $top] <span class="cmt"># # Manage the widgets #</span> grid $tbl -row 0 -rowspan 2 -column 0 -sticky news variable winSys if {[string compare $winSys "win32"] == 0} { grid $vsb -row 0 -rowspan 2 -column 1 -sticky ns } else { grid [$tbl cornerpath] -row 0 -column 1 -sticky ew grid $vsb -row 1 -column 1 -sticky ns } grid $hsb -row 2 -column 0 -sticky ew grid rowconfigure $tf 1 -weight 1 grid columnconfigure $tf 0 -weight 1 pack $b1 $b2 $b3 -side left -expand yes -pady 10 pack $bf -side bottom -fill x pack $tf -side top -expand yes -fill both <span class="cmt"># # Populate the tablelist with the configuration options of the given widget #</span> putConfig $w $tbl return $tbl } </pre> </blockquote> <p>The procedure invokes the <code><a href= "tablelistWidget.html">tablelist::tablelist</a></code> command to create a tablelist widget. The value of the <code><a href= "tablelistWidget.html#columns">-columns</a></code> option passed to this command specifies the widths, titles, and alignments of the 5 columns. The width of each column is given as <code>0</code>, specifying that the column's width is to be made just large enough to hold all the elements in the column, including its title, which is the string following the width. We have omitted the alignment specifications (which can optionally follow the titles), because the columns shall all be left-justified.</p> <p>Since all columns are of dynamic width and left-aligned, instead of <code>-columns</code> we could have used the <code><a href= "tablelistWidget.html#columntitles">-columntitles</a></code> option as follows:</p> <blockquote> <pre> tablelist::tablelist $tbl \ -columntitles {"Command-Line Name" "Database/Alias Name" "Database Class" "Default Value" "Current Value"} \ . . . </pre> </blockquote> <p>The command <code><a href= "tablelistColSort.html#sortByColumn">tablelist::sortByColumn</a></code>, specified as the value of the <code><a href= "tablelistWidget.html#labelcommand">-labelcommand</a></code> option, will be invoked whenever mouse button 1 is released over one of the labels. This command sorts the items based on the column corresponding to that label, in the right order, by invoking the <code><a href= "tablelistWidget.html#sortbycolumn">sortbycolumn</a></code> subcommand of the Tcl command associated with the tablelist widget.</p> <p>As seen from the creation of the button displaying the text <code>"Sort as Set"</code>, the items will also be sorted by invoking the <code><a href="tablelistWidget.html#sort">sort</a></code> subcommand. This makes it necessary to specify a command to be used for the comparison of the items, as the value of the <code><a href= "tablelistWidget.html#sortcommand">-sortcommand</a></code> option. In our example this is the <code>demo::compareAsSet</code> procedure shown below.</p> <p>The <code><a href= "tablelistWidget.html#editendcommand">-editendcommand</a></code> option specifies the command to be invoked automatically whenever the interactive editing of a cell's content is finished and the final content of the temporary embedded entry widget used for the editing are different from its original one. Per default, the elements of a tablelist widget can only be edited programmatically, but we enable the interactive editing for the cells of the last column with the aid of the <code><a href= "tablelistWidget.html#col_editable">-editable</a></code> column configuration option.</p> <p>By specifying the value <code>all</code> for the <code><a href= "tablelistWidget.html#stretch">-stretch</a></code> configuration option we make sure that all of the columns will be stretched to eliminate the blank space that might appear at the right of the table.</p> <p>If the default value of the <code>-selectborderwidth</code> option is <code>0</code> (this is the case on the Windows and Macintosh platforms, and also in an X11 envronment with Tk 8.5 or above) then we use the <code><a href="tablelistWidget.html#spacing">-spacing</a></code> option to provide some additional space above and below the rows.</p> <p>For the last two columns of the tablelist we use the <code><a href= "tablelistWidget.html#col_maxwidth">-maxwidth</a></code> column configuration option, to make sure that the dynamic widths of these columns won't exceed 30 average-width characters.</p> <p>Besides the options given on the command line, our tablelist widget will automatically inherit the ones contained in the Tk option database entries specified in the namespace initialization preceding the <code>demo::displayConfig</code> procedure. The database name <code>stripeBackground</code> corresponds to the <code><a href= "tablelistWidget.html#stripebackground">-stripebackground</a></code> configuration option. According to this entry, every other row of the tablelist widget will be displayed in the background color <code>#f0f0f0</code>, which improves the readability of the items and gives the widget a nice appearance.</p> <p>The option database entries for <code>*DemoTop.tf.borderWidth</code>, <code>*DemoTop.tf.relief</code>, <code>*DemoTop.tf.tbl.borderWidth</code>, and <code>*DemoTop.tf.tbl.highlightThickness</code> are implicitly used when managing the tablelist widget and the two scrollbars with the aid of <code>grid</code>. Notice how the <code><a href= "tablelistWidget.html#cornerpath">cornerpath</a></code> subcommand enables us to achieve a native look & feel with respect to the vertical scrollbar on the windowing systems other than <code>win32</code> (i.e., <code>aqua</code> and <code>x11</code>).</p> <p>We populate the tablelist by invoking the <code>demo::putConfig</code> procedure discussed below. The same script is associated with the <b>Refresh</b> button, as the value of its <code>-command</code> configuration option. This procedure is implemented as follows:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # demo::putConfig # # Outputs the configuration options of the widget w into the tablelist widget # tbl. #------------------------------------------------------------------------------</span> proc demo::putConfig {w tbl} { if {![winfo exists $w]} { bell tk_messageBox -title "Error" -icon error -message \ "Bad window path name \"$w\"" -parent [winfo toplevel $tbl] return "" } <span class="cmt"># # Display the configuration options of w in the tablelist widget tbl #</span> $tbl delete 0 end foreach configSet [$w configure] { <span class="cmt"># # Insert the list configSet into the tablelist widget #</span> $tbl insert end $configSet if {[llength $configSet] == 2} { $tbl rowconfigure end -foreground gray50 -selectforeground gray75 $tbl cellconfigure end -editable no } else { <span class="cmt"># # Change the colors of the first and last cell of the row # if the current value is different from the default one #</span> set default [lindex $configSet 3] set current [lindex $configSet 4] if {[string compare $default $current] != 0} { foreach col {0 4} { $tbl cellconfigure end,$col \ -foreground red -selectforeground yellow } } } } $tbl sortbycolumn 0 $tbl activate 0 $tbl attrib widget $w } </pre> </blockquote> <p>After deleting the current items of the tablelist widget <code>tbl</code>, the procedure inserts the items of the list returned by the <code>configure</code> subcommand of the Tcl command associated with the widget <code>w</code>. For each option that is merely an abbreviated form of some other one, we use the <code><a href= "tablelistWidget.html#rowconfigure">rowconfigure</a></code> tablelist subcommand to change the normal and selection foreground colors of the item just appended, and we disable the interactive editing in the last inserted cell by using the <code><a href= "tablelistWidget.html#cell_editable">-editable</a></code> cell configuration option. The <code><a href= "tablelistWidget.html#cellconfigure">cellconfigure</a></code> tablelist operation is also invoked for each real option whose current value is different from the default one, to change the values of the <code>-foreground</code> and <code>-selectforeground</code> options of the cells no. 0 and 4, containing the command-line name of the option and its current value.</p> <p>Each tablelist widget may have any number of private <b>attributes</b>, which can be set and retrieved with the aid of the <code><a href= "tablelistWidget.html#attrib">attrib</a></code> subcommand of the Tcl command corresponding to the widget. The <code>demo::putConfig</code> procedure sets the <code>widget</code> attribute to the name of the widget whose options are displayed in the tablelist.</p> <p>The implementation of the comparison command <code>demo::compareAsSet</code> mentioned above is quite simple:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # demo::compareAsSet # # Compares two items of a tablelist widget used to display the configuration # options of an arbitrary widget. The item in which the current value is # different from the default one is considered to be less than the other; if # both items fulfil this condition or its negation then string comparison is # applied to the two option names. #------------------------------------------------------------------------------</span> proc demo::compareAsSet {item1 item2} { foreach {opt1 dbName1 dbClass1 default1 current1} $item1 \ {opt2 dbName2 dbClass2 default2 current2} $item2 { set changed1 [expr {[string compare $default1 $current1] != 0}] set changed2 [expr {[string compare $default2 $current2] != 0}] if {$changed1 == $changed2} { return [string compare $opt1 $opt2] } elseif {$changed1} { return -1 } else { return 1 } } } </pre> </blockquote> <p>Finally, here is the implementation of the <code>demo::applyValue</code> procedure, specified as the value of the <code>-editendcommand</code> option:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # demo::applyValue # # Applies the new value of the configuraton option contained in the given row # of the tablelist widget tbl to the widget whose options are displayed in it, # and updates the colors of the first and last cell of the row. #------------------------------------------------------------------------------</span> proc demo::applyValue {tbl row col text} { <span class="cmt"># # Try to apply the new value of the option contained in # the given row to the widget whose options are displayed # in the tablelist; reject the value if the attempt fails #</span> set w [$tbl attrib widget] set opt [$tbl cellcget $row,0 -text] if {[catch {$w configure $opt $text} result] != 0} { bell tk_messageBox -title "Error" -icon error -message $result \ -parent [winfo toplevel $tbl] $tbl rejectinput return "" } <span class="cmt"># # Replace the new option value with its canonical form and # update the colors of the first and last cell of the row #</span> set text [$w cget $opt] set default [$tbl cellcget $row,3 -text] if {[string compare $default $text] == 0} { foreach col {0 4} { $tbl cellconfigure $row,$col \ -foreground "" -selectforeground "" } } else { foreach col {0 4} { $tbl cellconfigure $row,$col \ -foreground red -selectforeground yellow } } return $text } </pre> </blockquote> <p>The procedure retrieves the name of the widget whose options are displayed in the tablelist, as the value of its <code>widget</code> attribute, and invokes the <code><a href="tablelistWidget.html#cellcget">cellcget</a></code> tablelist subcommand to get the name of the option specified in the first cell of the row whose last element was just edited. Next, it tries to apply the new value of the option to the widget, and invokes the <code><a href="tablelistWidget.html#rejectinput">rejectinput</a></code> subcommand if the attempt fails. Otherwise it replaces the new option value with its canonical form and updates the normal and selection foreground colors of the cells no. 0 and 4. The canonical form of the option value is given by the <code>cget</code> subcommand of the Tcl command associated with that widget. For example, a boolean value will always be replaced with <code>1</code> or <code>0</code>, even if the entry contains the string <code>yes</code> or <code>no</code>. The procedure returns this canonical option value, thus making sure that the latter will become the new content of the cell that was just edited.</p> <h3 id="ex_browse">Two Widget Browsers Based on a tablelist</h3> <p>The files <code>browse.tcl</code> and <code>browseTree.tcl</code> in the <code>demos</code> directory contain a procedure <code>demo::displayChildren</code> that displays information about the children of an arbitrary widget in a tablelist contained in a newly created toplevel widget. To test it, start <code>wish</code> and evaluate the chosen file by using the <code>source</code> command, in a similar way as in the case of the <a href="#ex_config">previous example</a>.</p> <p>Both scripts will print the following message to <code>stdout</code>:</p> <blockquote> <pre> To display information about the children of an arbitrary widget, enter demo::displayChildren <widgetName> </pre> </blockquote> <p><code><widgetName></code> can be the path name of any already existing widget. For example, if you enter</p> <blockquote> <pre> demo::displayChildren . </pre> </blockquote> <p>then you will see that a tablelist widget <code>.browseTop.tf.tbl</code> in a new toplevel window is created and its name is printed to <code>stdout</code>.</p> <p>The tablelist created by the procedure <code>demo::displayChildren</code> in the file <code>browse.tcl</code> is a multi-column listbox:</p> <blockquote> <img src="browse.png" alt="Widget Browser" width="605" height="299"> </blockquote> <p>The tablelist created by the procedure of the same name in the file <code>browseTree.tcl</code> is a multi-column tree widget:</p> <blockquote> <img src="browseTree.png" alt="Widget Browser" width="619" height="299"> </blockquote> <p>The <code>demo::displayChildren</code> command inserts some data of the children of the widget specified by <code><widgetName></code> into a vertically scrolled tablelist with 9 dynamic-width columns and interactive sort capability, and returns the name of the newly created tablelist widget. By double-clicking an item (e.g., the one containing the path name <code>.browseTop</code> in <code>browse.tcl</code> and the name <code>browseTop</code> in <code>browseTree.tcl</code>) or invoking the first entry of a pop-up menu within the body of the tablelist, you can display the data of the children of the widget corresponding to the selected item, and with the second menu entry you can display its configuration options (see the <a href="#ex_config">previous example</a> for details). To go one level up, click on the <b>Parent</b> button.</p> <p>There is a lot of code common to the scripts <code>browse.tcl</code> and <code>browseTree.tcl</code>. We will restrict the description below to the second one, which requires Tk 8.3 or later, due to the use of several tree-related tablelist options and subcommands.</p> <blockquote> <pre> package require Tk 8.3 package require tablelist 6.8 namespace eval demo { variable dir [file dirname [info script]] <span class="cmt"># # Create two images, needed in the procedure putChildren #</span> variable leafImg [image create bitmap -file [file join $dir leaf.xbm] \ -background coral -foreground gray50] variable compImg [image create bitmap -file [file join $dir comp.xbm] \ -background yellow -foreground gray50] } source [file join $demo::dir config.tcl] <span class="cmt">#------------------------------------------------------------------------------ # demo::displayChildren # # Displays information on the children of the widget w in a tablelist widget # contained in a newly created toplevel widget. Returns the name of the # tablelist widget. #------------------------------------------------------------------------------</span> proc demo::displayChildren w { if {![winfo exists $w]} { bell tk_messageBox -title "Error" -icon error -message \ "Bad window path name \"$w\"" return "" } <span class="cmt"># # Create a toplevel widget of the class DemoTop #</span> set top .browseTop for {set n 2} {[winfo exists $top]} {incr n} { set top .browseTop$n } toplevel $top -class DemoTop <span class="cmt"># # Create a vertically scrolled tablelist widget with 9 dynamic-width # columns and interactive sort capability within the toplevel #</span> set tf $top.tf frame $tf set tbl $tf.tbl set vsb $tf.vsb tablelist::tablelist $tbl \ -columns {0 "Name" left 0 "Class" left 0 "X" right 0 "Y" right 0 "Width" right 0 "Height" right 0 "Mapped" center 0 "Viewable" center 0 "Manager" left} \ -expandcommand demo::expandCmd -labelcommand demo::labelCmd \ -yscrollcommand [list $vsb set] -setgrid no -width 0 if {[$tbl cget -selectborderwidth] == 0} { $tbl configure -spacing 1 } foreach col {2 3 4 5} { $tbl columnconfigure $col -sortmode integer } foreach col {6 7} { $tbl columnconfigure $col -formatcommand demo::formatBoolean } scrollbar $vsb -orient vertical -command [list $tbl yview] <span class="cmt"># # When displaying the information about the children of any # ancestor of the label widgets, the widths of some of the # labels and thus also the widths and x coordinates of some # children may change. For this reason, make sure the items # will be updated after any change in the sizes of the labels #</span> foreach l [$tbl labels] { bind $l <Configure> [list demo::updateItemsDelayed $tbl] } bind $tbl <Configure> [list demo::updateItemsDelayed $tbl] <span class="cmt"># # Create a pop-up menu with two command entries; bind the script # associated with its first entry to the <Double-1> event, too #</span> set menu $top.menu menu $menu -tearoff no $menu add command -label "Display Children" \ -command [list demo::putChildrenOfSelWidget $tbl] $menu add command -label "Display Config" \ -command [list demo::dispConfigOfSelWidget $tbl] set bodyTag [$tbl bodytag] bind $bodyTag <Double-1> [list demo::putChildrenOfSelWidget $tbl] bind $bodyTag <<Button3>> [bind TablelistBody <Button-1>] bind $bodyTag <<Button3>> +[bind TablelistBody <ButtonRelease-1>] bind $bodyTag <<Button3>> +[list demo::postPopupMenu $top %X %Y] <span class="cmt"># # Create three buttons within a frame child of the toplevel widget #</span> set bf $top.bf frame $bf set b1 $bf.b1 set b2 $bf.b2 set b3 $bf.b3 button $b1 -text "Refresh" button $b2 -text "Parent" button $b3 -text "Close" -command [list destroy $top] <span class="cmt"># # Manage the widgets #</span> . . . <span class="cmt"># # Populate the tablelist with the data of the given widget's children #</span> putChildren $w $tbl root return $tbl } </pre> </blockquote> <p>The procedure invokes the <code><a href= "tablelistWidget.html">tablelist::tablelist</a></code> command to create a tablelist widget. The value of the <code><a href= "tablelistWidget.html#columns">-columns</a></code> option passed to this command specifies the widths, titles, and alignments of the 9 columns. The width of each column is given as <code>0</code>, specifying that the column's width is to be made just large enough to hold all the elements in the column, including its title, which is the string following the width. Each of the titles is followed by an alignment, which indicates how to justify both the elements and the title of the respective column.</p> <p>We want to display not only the data of the given widget's children, but also those of its further descendants. To this end, we need a command to be invoked whenever an item corresponding to a widget with children gets expanded. This command is specified as the value of the <code><a href= "tablelistWidget.html#expandcommand">-expandcommand</a></code> option. As discussed later, the <code>demo::expandCmd</code> procedure will insert the children of the row that is about to be expanded, if it has no children yet.</p> <p>The command <code>demo::labelCmd</code>, specified as the value of the <code><a href="tablelistWidget.html#labelcommand">-labelcommand</a></code> option, will be invoked whenever mouse button 1 is released over one of the labels. We will discuss this procedure later.</p> <p>We specify the value <code>0</code> for the widget's <code><a href= "tablelistWidget.html#width">-width</a></code> option, meaning that the tablelist's width shall be made just large enough to hold all its columns.</p> <p>After creating the tablelist widget, we make sure that the elements of its columns 2, 3, 4, and 5 (displaying the x and y coordinates as well as the widths and heights of the children) will be compared as integers when sorting the items based on one of these columns. We do this with the aid of the <code><a href= "tablelistWidget.html#columnconfigure">columnconfigure</a></code> tablelist operation.</p> <p>The same <code>columnconfigure</code> subcommand enables us to specify that, when displaying the elements of columns 6 and 7 (having the titles <code>"Mapped"</code> and <code>"Viewable"</code>, respectively), the boolean values <code>1</code> and <code>0</code> will be replaced with the strings <code>"yes"</code> and <code>"no"</code>, returned by the <code>demo::formatBoolean</code> command shown below.</p> <p>After creating the vertical scrollbar, we iterate over the elements of the list containing the path names of all header labels of the tablelist widget, returned by the <code><a href="tablelistWidget.html#labels">labels</a></code> subcommand of the Tcl command corresponding to the widget. For each element of the list, we bind the procedure <code>demo::updateItemsDelayed</code> to the <code><Configure></code> event. In this way we make sure the procedure will be invoked whenever the header label indicated by that list element changes size.</p> <p>The four invocations of the <code>bind</code> command following the creation of the pop-up menu make use of a binding tag whose name depends on the path name of the tablelist widget and is returned by the <code><a href= "tablelistWidget.html#bodytag">bodytag</a></code> subcommand of the Tcl command associated with the tablelist widget. The advantage of using this tag instead of the path name of the tablelist's body is that this binding tag is associated not only with the body but also with the separator frames and with the labels displaying embedded images. This is important in our example because we want to make sure the <code><<Button3>></code> and <code><Double-1></code> events will be handled in the same way within a label containing an embedded image as in the rest of the tablelist's body. Both the <code><a href= "tablelistWidget.html#button3"><<Button3>></a></code> virtual event (used in the first three <code>bind</code> commands) and the <code><a href="tablelistWidget.html#body_bindings">TablelistBody</a></code> binding tag (used in the first binding script) are created by the Tablelist package. The first three <code>bind</code> commands make sure that a <code><<Button3>></code> virtual event will select and activate the nearest item and will post a pop-up menu with two command entries that refer to the widget described by that item.</p> <p>We populate the tablelist by invoking the <code>demo::putChildren</code> procedure, implemented as follows:</p> <blockquote id="putChildren"> <pre> <span class="cmt">#------------------------------------------------------------------------------ # demo::putChildren # # Outputs the data of the children of the widget w into the tablelist widget # tbl, as child items of the one identified by nodeIdx. #------------------------------------------------------------------------------</span> proc demo::putChildren {w tbl nodeIdx} { . . . if {[string compare $nodeIdx "root"] == 0} { set top [winfo toplevel $tbl] wm title $top "Children of the [winfo class $w] Widget \"$w\"" $tbl resetsortinfo $tbl delete 0 end set row 0 } else { set row [expr {$nodeIdx + 1}] } <span class="cmt"># # Display the data of the children of the # widget w in the tablelist widget tbl #</span> variable leafImg variable compImg foreach c [winfo children $w] { <span class="cmt"># # Insert the data of the current child into the tablelist widget #</span> set item {} lappend item \ [winfo name $c] [winfo class $c] [winfo x $c] [winfo y $c] \ [winfo width $c] [winfo height $c] [winfo ismapped $c] \ [winfo viewable $c] [winfo manager $c] $tbl insertchild $nodeIdx end $item <span class="cmt"># # Insert an image into the first cell of the row; mark the # row as collapsed if the child widget has children itself #</span> if {[llength [winfo children $c]] == 0} { $tbl cellconfigure end,0 -image $leafImg } else { $tbl cellconfigure end,0 -image $compImg $tbl collapse $row } $tbl rowattrib $row pathName $c incr row } if {[string compare $nodeIdx "root"] == 0} { <span class="cmt"># # Configure the "Refresh" and "Parent" buttons #</span> $top.bf.b1 configure -command [list demo::refreshView $w $tbl] set b2 $top.bf.b2 set p [winfo parent $w] if {[string compare $p ""] == 0} { $b2 configure -state disabled } else { $b2 configure -state normal -command \ [list demo::putChildren $p $tbl root] } } } </pre> </blockquote> <p>The last argument of this procedure indicates the tree node to become the parent of the items displaying the data of the children of the widget passed as first argument. If this parent is the invisible <code>root</code> node then we first reset the sorting information by invoking the <code><a href="tablelistWidget.html#resetsortinfo">resetsortinfo</a></code> tablelist subcommand and delete the current items of the tablelist widget <code>tbl</code>. The procedure then iterates over the children of the specified widget and inserts the items built from some data retrieved by using the <code>winfo</code> command. Each new item is added to the end of the parent node's list of children with the aid of the <code><a href= "tablelistWidget.html#insertchildren">insertchild(ren)</a></code> subcommand.</p> <p>For each child widget, we invoke the <code><a href= "tablelistWidget.html#cellconfigure">cellconfigure</a></code> tablelist operation to set the value of the <code>-image</code> option of the corresponding row's first cell, containing the leaf name of the child. In this way, the procedure inserts the image <code>$leafImg</code> or <code>$compImg</code> into the first cell, depending on whether the child in question is a leaf or a composite widget. (Remember that both images were created outside this procedure, within the initialization of the <code>demo</code> namespace.)</p> <p>We mark every newly created row corresponding to a child widget that has children itself as collapsed by invoking the <code><a href= "tablelistWidget.html#collapse">collapse</a></code> subcommand. This will prepend an expand/collapse control to the content of the first column, whose column index <code>0</code> is the default value of the <code><a href= "tablelistWidget.html#treecolumn">-treecolumn</a></code> configuration option.</p> <p>We use the <code><a href= "tablelistWidget.html#rowattrib">rowattrib</a></code> tablelist subcommand to remember the full path name of every child widget as a private attribute associated with the corresponding tablelist row, because it will be needed at several places later on.</p> <p>As mentioned above, the <code>demo::expandCmd</code> procedure will be invoked automatically when expanding a row that contains an expand/collapse control:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # demo::expandCmd # # Outputs the data of the children of the widget whose leaf name is displayed # in the first cell of the specified row of the tablelist widget tbl, as child # items of the one identified by row. #------------------------------------------------------------------------------</span> proc demo::expandCmd {tbl row} { if {[$tbl childcount $row] == 0} { set w [$tbl rowattrib $row pathName] putChildren $w $tbl $row <span class="cmt"># # Apply the last sorting (if any) to the new items #</span> $tbl refreshsorting $row } } </pre> </blockquote> <p>The procedure invokes the <code><a href= "tablelistWidget.html#childcount">childcount</a></code> subcommand to check whether the children of the row that is about to be expanded have already been inserted into the tablelist widget, and inserts them if this is not the case. It also makes sure that the child items will be displayed in the order corresponding to the last sorting (if any), with the aid of the <code><a href="tablelistWidget.html#refreshsorting">refreshsorting</a></code> tablelist subcommand. Any sorting (if needed) will only be performed on the child items just inserted into the tablelist widget.</p> <p>The <code>demo::formatBoolean</code> and <code>demo::labelCmd</code> procedures mentioned above are trivial:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # demo::formatBoolean # # Returns "yes" or "no", according to the specified boolean value. #------------------------------------------------------------------------------</span> proc demo::formatBoolean val { return [expr {$val ? "yes" : "no"}] } <span class="cmt">#------------------------------------------------------------------------------ # demo::labelCmd # # Sorts the content of the tablelist widget tbl by its col'th column and makes # sure the items will be updated 500 ms later (because one of the items might # refer to a canvas containing the arrow that displays the sorting order). #------------------------------------------------------------------------------</span> proc demo::labelCmd {tbl col} { tablelist::sortByColumn $tbl $col updateItemsDelayed $tbl } </pre> </blockquote> <p>The command <code><a href= "tablelistColSort.html#sortByColumn">tablelist::sortByColumn</a></code> sorts the items of the tablelist widget by the specified column in the right order, by invoking the <code><a href= "tablelistWidget.html#sortbycolumn">sortbycolumn</a></code> subcommand of the Tcl command associated with the tablelist widget.</p> <p>The implementation of the <code>demo::updateItemsDelayed</code> command, invoked in this procedure and already encountered in the <code>demo::displayChildren</code> procedure above, is quite simple:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # demo::updateItemsDelayed # # Arranges for the items of the tablelist widget tbl to be updated 500 ms later. #------------------------------------------------------------------------------</span> proc demo::updateItemsDelayed tbl { <span class="cmt"># # Schedule the demo::updateItems command for execution # 500 ms later, but only if it is not yet pending #</span> if {[string compare [$tbl attrib afterId] ""] == 0} { $tbl attrib afterId [after 500 [list demo::updateItems $tbl]] } } <span class="cmt">#------------------------------------------------------------------------------ # demo::updateItems # # Updates the items of the tablelist widget tbl. #------------------------------------------------------------------------------</span> proc demo::updateItems tbl { <span class="cmt"># # Reset the tablelist's "afterId" attribute #</span> $tbl attrib afterId "" <span class="cmt"># # Update the items #</span> set rowCount [$tbl size] for {set row 0} {$row < $rowCount} {incr row} { set c [$tbl cellcget $row,0 -text] if {![winfo exists $c]} { continue } set item {} lappend item \ [winfo name $c] [winfo class $c] [winfo x $c] [winfo y $c] \ [winfo width $c] [winfo height $c] [winfo ismapped $c] \ [winfo viewable $c] [winfo manager $c] $tbl rowconfigure $row -text $item } <span class="cmt"># # Repeat the last sort operation (if any) #</span> $tbl refreshsorting } </pre> </blockquote> <p>As already mentioned in the <a href="#ex_config">previous example</a>, each tablelist widget may have any number of private attributes, which can be set and retrieved with the aid of the <code><a href= "tablelistWidget.html#attrib">attrib</a></code> subcommand of the Tcl command corresponding to the widget. The <code>afterId</code> attribute is set by the <code>demo::updateItemsDelayed</code> procedure when sheduling the <code>demo::updateItems</code> command for execution 500 ms later, but only if its value is an empty string. For this reason, the <code>demo::updateItems</code> procedure resets this attribute. It also makes use of the <code><a href= "tablelistWidget.html#cellcget">cellcget</a></code> tablelist subcommand to get the path names contained in the first cell of each row, and updates the data of the children with the aid of the <code><a href= "tablelistWidget.html#rowconfigure">rowconfigure</a></code> subcommand. After updating the items, the procedure repeats the most recent sorting based on a column (if there was one), with the aid of the <code><a href= "tablelistWidget.html#refreshsorting">refreshsorting</a></code> subcommand.</p> <p>The procedures <code>demo::putChildrenOfSelWidget</code>, <code>demo::dispConfigOfSelWidget</code>, and <code>demo::postPopupMenu</code> (see <code>demo::displayChildren</code>) are also straight-forward. For example, the <code>demo::putChildrenOfSelWidget</code> command shown below makes use of the <code><a href="tablelistWidget.html#curselection">curselection</a></code> subcommand to get the index of the selected row. More precisely, <code>curselection</code> returns a list, but in our case this list will have exactly one element, hence it can be used directly as the first component of a cell index.</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # demo::putChildrenOfSelWidget # # Outputs the data of the children of the selected widget into the tablelist # widget tbl. #------------------------------------------------------------------------------</span> proc demo::putChildrenOfSelWidget tbl { set w [$tbl cellcget [$tbl curselection],0 -text] if {![winfo exists $w]} { bell tk_messageBox -title "Error" -icon error -message \ "Bad window path name \"$w\"" -parent [winfo toplevel $tbl] return "" } if {[llength [winfo children $w]] == 0} { bell } else { putChildren $w $tbl } } </pre> </blockquote> <p>The procedure <code>demo::refreshView</code>, associated with the <b>Refresh</b> button, is implemented as follows:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # demo::refreshView # # Redisplays the data of the children of the widget w in the tablelist widget # tbl and restores the expanded states of the items as well as the vertical # view. #------------------------------------------------------------------------------</span> proc demo::refreshView {w tbl} { <span class="cmt"># # Save the vertical view and get the path names of # the child widgets displayed in the expanded rows #</span> set yView [$tbl yview] foreach key [$tbl expandedkeys] { set pathName [$tbl rowattrib $key pathName] set expandedWidgets($pathName) 1 } <span class="cmt"># # Redisplay the data of the widget's (possibly changed) children and # restore the expanded states of the children, along with the vertical view #</span> putChildren $w $tbl root restoreExpandedStates $tbl root expandedWidgets $tbl yview moveto [lindex $yView 0] } </pre> </blockquote> <p>Before redisplaying the tablelist's content via <code>demo::putChildren</code>, we get the full keys of the currently expanded items with the aid of the <code><a href= "tablelistWidget.html#expandedkeys">expandedkeys</a></code> tablelist subcommand and insert the correspondig widget paths into the array <code>expandedWidgets</code>. After redisplaying the data of the (possibly changed) children of the widget given as first argument, we pass this array to the <code>demo::restoreExpandedStates</code> procedure shown below:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # restoreExpandedStates # # Expands those children of the parent identified by nodeIdx that display the # data of child widgets whose path names are the names of the elements of the # array specified by the last argument. #------------------------------------------------------------------------------</span> proc demo::restoreExpandedStates {tbl nodeIdx expandedWidgetsName} { upvar $expandedWidgetsName expandedWidgets foreach key [$tbl childkeys $nodeIdx] { set pathName [$tbl rowattrib $key pathName] if {[info exists expandedWidgets($pathName)]} { $tbl expand $key -partly restoreExpandedStates $tbl $key expandedWidgets } } } </pre> </blockquote> <p>The procedure retrieves the list of full keys of the children of the parent node indicated by <code>nodeIdx</code>, by means of the <code><a href= "tablelistWidget.html#childkeys">childkeys</a></code> tablelist subcommand. It then loops over this list, and for each key for which the corresponding row was previously expanded, it invokes the <code><a href= "tablelistWidget.html#expand">expand</a></code> tablelist subcommand and then calls itself recursively to restore the expanded states of that row's children.</p> <h3 id="ex_dirViewer">A Directory Viewer Based on a tablelist</h3> <p>The script <code>dirViewer.tcl</code> in the <code>demos</code> directory displays the contents of the volumes mounted on the system (e.g., the root <code>/</code> on UNIX and the local drives on Windows) in a tablelist used as multi-column tree widget:</p> <blockquote> <img src="dirViewer.png" alt="Directory Viewer" width="675" height="456"> </blockquote> <p>By double-clicking an item or invoking the single entry of a pop-up menu within the body of the tablelist, you can display the content of the folder corresponding to the selected item. To go one level up, click on the <b>Parent</b> button.</p> <p>There are a lot of similarities between this script and the one discussed in the <a href="#ex_browse">previous section</a>. In the following we will only present a few procedures that invoke tablelist commands not encountered in the examples above:</p> <blockquote> <pre> package require Tk 8.3 package require tablelist 6.8 <span class="cmt"># # Add some entries to the Tk option database #</span> set dir [file dirname [info script]] source [file join $dir option.tcl] <span class="cmt"># # Create three images #</span> image create photo clsdFolderImg -file [file join $dir clsdFolder.gif] image create photo openFolderImg -file [file join $dir openFolder.gif] image create photo fileImg -file [file join $dir file.gif] <span class="cmt">#------------------------------------------------------------------------------ # displayContents # # Displays the content of the directory dir in a tablelist widget. #------------------------------------------------------------------------------</span> proc displayContents dir { <span class="cmt"># # Create a scrolled tablelist widget with 3 dynamic- # width columns and interactive sort capability #</span> set tf .tf frame $tf -class ScrollArea set tbl $tf.tbl set vsb $tf.vsb set hsb $tf.hsb tablelist::tablelist $tbl \ -columns {0 "Name" left 0 "Size" right 0 "Date Modified" left} \ -expandcommand expandCmd -collapsecommand collapseCmd \ -xscrollcommand [list $hsb set] -yscrollcommand [list $vsb set] \ -movablecolumns no -setgrid no -showseparators yes -height 20 -width 80 if {[$tbl cget -selectborderwidth] == 0} { $tbl configure -spacing 1 } $tbl columnconfigure 0 -formatcommand formatString -sortmode dictionary $tbl columnconfigure 1 -formatcommand formatSize -sortmode integer $tbl columnconfigure 2 -formatcommand formatString scrollbar $vsb -orient vertical -command [list $tbl yview] scrollbar $hsb -orient horizontal -command [list $tbl xview] . . . <span class="cmt"># # Populate the tablelist with the content of the given directory #</span> $tbl sortbycolumn 0 putContents $dir $tbl root } </pre> </blockquote> <p>The procedure <code>displayContents</code> creates the tablelist widget and the two scrollbars as children of a frame of class <code>ScrollArea</code>. For this class, the file <code>option.tcl</code>, <code>source</code>d into the main script, contains some look & feel related settings similar to the ones encountered in our <a href="#ex_config">first example</a>:</p> <blockquote> <pre> option add *ScrollArea.borderWidth 1 option add *ScrollArea.relief sunken option add *ScrollArea.Tablelist.borderWidth 0 option add *ScrollArea.Tablelist.highlightThickness 0 </pre> </blockquote> <p>The procedure specifies a value not only for the <code><a href= "tablelistWidget.html#expandcommand">-expandcommand</a></code> option of the tablelist it creates, but also for its <code><a href= "tablelistWidget.html#collapsecommand">-collapsecommand</a></code> option. The latter will merely restore the image shown in the first column to the one displaying a closed folder (see below).</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # putContents # # Outputs the content of the directory dir into the tablelist widget tbl, as # child items of the one identified by nodeIdx. #------------------------------------------------------------------------------</span> proc putContents {dir tbl nodeIdx} { . . . if {[string compare $nodeIdx "root"] == 0} { if {[string compare $dir ""] == 0} { if {[llength [file volumes]] == 1} { wm title . "Contents of the File System" } else { wm title . "Contents of the File Systems" } } else { wm title . "Contents of the Directory \"[file nativename $dir]\"" } $tbl delete 0 end set row 0 } else { set row [expr {$nodeIdx + 1}] } <span class="cmt"># # Build a list from the data of the subdirectories and # files of the directory dir. Prepend a "D" or "F" to # each entry's name and modification date & time, for # sorting purposes (it will be removed by formatString). #</span> set itemList {} if {[string compare $dir ""] == 0} { foreach volume [file volumes] { lappend itemList [list D[file nativename $volume] -1 D $volume] } } else { foreach entry [glob -nocomplain -types {d f} -directory $dir *] { if {[catch {file mtime $entry} modTime] != 0} { continue } if {[file isdirectory $entry]} { lappend itemList [list D[file tail $entry] -1 \ D[clock format $modTime -format "%Y-%m-%d %H:%M"] $entry] } else { lappend itemList [list F[file tail $entry] [file size $entry] \ F[clock format $modTime -format "%Y-%m-%d %H:%M"] ""] } } } <span class="cmt"># # Sort the above list and insert it into the tablelist widget # tbl as list of children of the row identified by nodeIdx #</span> set itemList [$tbl applysorting $itemList] $tbl insertchildlist $nodeIdx end $itemList <span class="cmt"># # Insert an image into the first cell of each newly inserted row #</span> foreach item $itemList { set name [lindex $item end] if {[string compare $name ""] == 0} { ;<span class="cmt"># file</span> $tbl cellconfigure $row,0 -image fileImg } else { ;<span class="cmt"># directory</span> $tbl cellconfigure $row,0 -image clsdFolderImg $tbl rowattrib $row pathName $name <span class="cmt"># # Mark the row as collapsed if the directory is non-empty #</span> if {[file readable $name] && [llength \ [glob -nocomplain -types {d f} -directory $name *]] != 0} { $tbl collapse $row } } incr row } . . . } </pre> </blockquote> <p>The main difference between the procedure <code>putContents</code> above and the procedure <code><a href="#putChildren">demo::putChildren</a></code> described in the <a href="#ex_browse">previous section</a> is related to the way child items are inserted into the tablelist widget. Instead of inserting them individually with the aid of the <code><a href= "tablelistWidget.html#insertchildren">insertchild(ren)</a></code> tablelist subcommand, here we add the relevant data to a list of items and then invoke the much more performant <code><a href= "tablelistWidget.html#insertchildlist">insertchildlist</a></code> subcommand. Also, instead of first inserting the items and then sorting them via <code><a href= "tablelistWidget.html#refreshsorting">refreshsorting</a></code>, we first perform the necessary sortings on the above-mentioned list of items by invoking the <code><a href= "tablelistWidget.html#applysorting">applysorting</a></code> subcommand. Again, this is much faster than sorting the already inserted child items.</p> <p>This procedure also illustrates an effective technique based on the <code><a href= "tablelistWidget.html#col_formatcommand">-formatcommand</a></code> column configuration option: In the tablelist widget's internal list, the names and modification times of the directories and files are preceded by a <code>D</code> and <code>F</code>, respectively. This makes sure that the directories will sort before the files (when sorting in ascending order). When displaying the items, the Tablelist code will automatically invoke the <code>formatString</code> procedure, which removes the first character. Similarly, in the widget's internal list, the size of a directory is set to <code>-1</code>, which sorts before the sizes of the files. The <code>formatSize</code> procedure, invoked automatically when displaying the items, replaces this value with an empty string:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # formatString # # Returns the substring obtained from the specified value by removing its first # character. #------------------------------------------------------------------------------</span> proc formatString val { return [string range $val 1 end] } <span class="cmt">#------------------------------------------------------------------------------ # formatSize # # Returns an empty string if the specified value is negative and the value # itself in user-friendly format otherwise. #------------------------------------------------------------------------------</span> proc formatSize val { if {$val < 0} { return "" } elseif {$val < 1024} { return "$val bytes" } elseif {$val < 1048576} { return [format "%.1f KB" [expr {$val / 1024.0}]] } elseif {$val < 1073741824} { return [format "%.1f MB" [expr {$val / 1048576.0}]] } else { return [format "%.1f GB" [expr {$val / 1073741824.0}]] } } </pre> </blockquote> <p>Besides its common task of inserting the children of the row to be expanded, the <code>expandCmd</code> procedure shown below also changes the image contained in the first column to the one displaying an open folder. The <code>collapseCmd</code> procedure restores the image to the one displaying a closed folder:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # expandCmd # # Outputs the content of the directory whose leaf name is displayed in the # first cell of the specified row of the tablelist widget tbl, as child items # of the one identified by row, and updates the image displayed in that cell. #------------------------------------------------------------------------------</span> proc expandCmd {tbl row} { if {[$tbl childcount $row] == 0} { set dir [$tbl rowattrib $row pathName] putContents $dir $tbl $row } if {[$tbl childcount $row] != 0} { $tbl cellconfigure $row,0 -image openFolderImg } } <span class="cmt">#------------------------------------------------------------------------------ # collapseCmd # # Updates the image displayed in the first cell of the specified row of the # tablelist widget tbl. #------------------------------------------------------------------------------</span> proc collapseCmd {tbl row} { $tbl cellconfigure $row,0 -image clsdFolderImg } . . . displayContents "" </pre> </blockquote> <p>The last line of the script invokes the procedure <code>displayContents</code> with an empty string as argument, i.e., displays the volumes mounted on the system.</p> <h3 id="ex_styles">Improving the Look & Feel of a tablelist Widget</h3> <p>The script <code>styles.tcl</code> in the <code>demos</code> directory demonstrates some ways of making tablelist widgets smarter and improving the readability of their items. It creates 8 tablelist widgets, shown in the following figure:</p> <blockquote> <img src="styles.png" alt="Styles" width="698" height="518"> </blockquote> <p>Here is the relevant code segment:</p> <blockquote> <pre> <span class="cmt"># # Create, configure, and populate 8 tablelist widgets #</span> frame .f for {set n 0} { $n < 8} {incr n} { set tbl .f.tbl$n tablelist::tablelist $tbl \ -columntitles {"Label 0" "Label 1" "Label 2" "Label 3"} \ -background white -height 4 -width 40 -stretch all if {[$tbl cget -selectborderwidth] == 0} { $tbl configure -spacing 1 } switch $n { 1 { $tbl configure -showseparators yes } 2 { $tbl configure -stripebackground #f0f0f0 } 3 { $tbl configure -stripebackground #f0f0f0 -showseparators yes } 4 { $tbl columnconfigure 1 -background LightYellow $tbl columnconfigure 3 -background LightCyan } 5 { $tbl configure -showseparators yes $tbl columnconfigure 1 -background LightYellow $tbl columnconfigure 3 -background LightCyan } 6 { $tbl configure -stripebackground #f0f0f0 $tbl columnconfigure 1 -background LightYellow \ -stripebackground #f0f0d2 $tbl columnconfigure 3 -background LightCyan \ -stripebackground #d2f0f0 } 7 { $tbl configure -stripebackground #f0f0f0 -showseparators yes $tbl columnconfigure 1 -background LightYellow \ -stripebackground #f0f0d2 $tbl columnconfigure 3 -background LightCyan \ -stripebackground #d2f0f0 } } foreach row {0 1 2 3} { $tbl insert end \ [list "Cell $row,0" "Cell $row,1" "Cell $row,2" "Cell $row,3"] } } </pre> </blockquote> <p>The only configuration option used here but not discussed in the first three examples (although already encountered in the <a href= "#ex_dirViewer">previous one</a>) is <code><a href= "tablelistWidget.html#showseparators">-showseparators</a></code>. The visual effect it produces looks nice both by itself and combined with horizontal or vertical stripes, created by using the <code><a href= "tablelistWidget.html#stripebackground">-stripebackground</a></code> option and the <code><a href= "tablelistWidget.html#columnconfigure">columnconfigure</a></code> subcommand, respectively.</p> <h3 id="ex_editing">Advanced Interactive tablelist Cell Editing</h3> <p>The scripts <code>tileWidgets.tcl</code>, <code>bwidget.tcl</code>, <code>iwidgets.tcl</code>, and <code>miscWidgets.tcl</code> in the <code>demos</code> directory create a tablelist widget displaying some parameters of 16 serial lines, and demonstrate how to use various widgets from the Tk core and from the packages tile, BWidget, Iwidgets, combobox (by Bryan Oakley), ctext, and Mentry (or Mentry_tile) for interactive cell editing. The following figure shows the tablelist widget, together with a BWidget ComboBox used to edit the content of one of its cells:</p> <blockquote> <img src="bwidget.png" alt="Serial Line Configuration" width="841" height= "409"> </blockquote> <p>Here is the relevant code segment from the script <code>bwidget.tcl</code> (the scripts <code>tileWidgets.tcl</code>, <code>iwidgets.tcl</code>, and <code>miscWidgets.tcl</code> are similar). A few parts of the code are shown in <span class="red">red</span> color – we will return to this towards the end of the section.</p> <blockquote> <pre> package require Tk 8.4 ;<span class="cmt"># because of "-compound"</span> package require tablelist 6.8 package require BWidget wm title . "Serial Line Configuration" <span class="cmt"># # Add some entries to the Tk option database #</span> set dir [file dirname [info script]] source [file join $dir option.tcl] option add *Tablelist*Entry.background white <span class="cmt"># # Register some widgets from the BWidget package for interactive cell editing #</span> tablelist::addBWidgetEntry tablelist::addBWidgetSpinBox tablelist::addBWidgetComboBox <span class="cmt"># # Create the images "checkedImg" and "uncheckedImg", as well as 16 images of # names like "img#FF0000", displaying colors identified by names like "red" #</span> source [file join $dir images.tcl] <span class="cmt"># # Create a tablelist widget with editable columns (except the first one) #</span> set tbl .tbl tablelist::tablelist $tbl \ -columns {0 "No." right 0 "Available" center 0 "Name" left 0 "Baud Rate" right 0 "Data Bits" center 0 "Parity" left 0 "Stop Bits" center 0 "Handshake" left 0 "Activation Date" center 0 "Activation Time" center 0 "Cable Color" center} \ -editstartcommand editStartCmd -editendcommand editEndCmd \ -height 0 -width 0 if {[$tbl cget -selectborderwidth] == 0} { $tbl configure -spacing 1 } $tbl columnconfigure 0 -sortmode integer $tbl columnconfigure 1 <span class="red">-name available -editable yes -editwindow checkbutton</span> \ -formatcommand emptyStr $tbl columnconfigure 2 -name lineName -editable yes -editwindow Entry \ -sortmode dictionary $tbl columnconfigure 3 -name baudRate -editable yes -editwindow ComboBox \ -sortmode integer $tbl columnconfigure 4 -name dataBits -editable yes -editwindow SpinBox $tbl columnconfigure 5 -name parity -editable yes -editwindow ComboBox $tbl columnconfigure 6 -name stopBits -editable yes -editwindow ComboBox $tbl columnconfigure 7 -name handshake -editable yes -editwindow ComboBox $tbl columnconfigure 8 -name actDate -editable yes -editwindow Entry \ -formatcommand formatDate -sortmode integer $tbl columnconfigure 9 -name actTime -editable yes -editwindow Entry \ -formatcommand formatTime -sortmode integer $tbl columnconfigure 10 -name color -editable yes -editwindow menubutton \ -formatcommand emptyStr proc emptyStr val { return "" } proc formatDate val { return [clock format $val -format "%Y-%m-%d"] } proc formatTime val { return [clock format $val -format "%H:%M:%S"] } <span class="cmt"># # Populate the tablelist widget; set the activation # date & time to 10 minutes past the current clock value #</span> set clock [expr {[clock seconds] + 600}] for {set i 0; set n 1} {$i < 16} {set i $n; incr n} { $tbl insert end [list $n [expr {$i < 8}] "Line $n" 9600 8 None 1 XON/XOFF \ $clock $clock [lindex $colorNames $i]] <span class="red">set availImg [expr {($i < 8) ? "checkedImg" : "uncheckedImg"}] $tbl cellconfigure end,available -image $availImg</span> $tbl cellconfigure end,color -image img[lindex $colorValues $i] } set btn [button .btn -text "Close" -command exit] <span class="cmt"># # Manage the widgets #</span> pack $btn -side bottom -pady 10 pack $tbl -side top -expand yes -fill both </pre> </blockquote> <p>We invoke the <code><a href= "tablelistBWidget.html#Entry">tablelist::addBWidgetEntry</a></code>, <code><a href= "tablelistBWidget.html#SpinBox">tablelist::addBWidgetSpinBox</a></code>, and <code><a href= "tablelistBWidget.html#ComboBox">tablelist::addBWidgetComboBox</a></code> commands to register the Entry, SpinBox, and ComboBox widgets from the BWidget package for interactive cell editing. These commands return the values <code>"Entry"</code>, <code>"SpinBox"</code>, and <code>"ComboBox"</code>, respectively, which we then use in the <code><a href="tablelistWidget.html#col_editwindow">-editwindow</a></code> column configuration option to set the edit window for the columns no. 2, ..., 10. In columns no. 1 and 10 we use the Tk core checkbutton and menubutton widgets, which are automatically registered for interactive cell editing.</p> <p>Notice the use of the <code><a href= "tablelistWidget.html#col_name">-name</a></code> column configuration option, which allows us to access the columns by their names instead of by numerical column indices. This is important, because the file <code>option.tcl</code>, which is <code>source</code>d into the main script, contains the line</p> <blockquote> <pre> option add *Tablelist.movableColumns yes </pre> </blockquote> <p>The <code>editStartCmd</code> and <code>editEndCmd</code> procedures shown below use the <code><a href= "tablelistWidget.html#columncget">columncget</a></code> subcommand to retrieve the name of the column from the numerical column index.</p> <p>By the way, two further option database settings contained in the file <code>option.tcl</code> are:</p> <blockquote> <pre> option add *Tablelist.labelCommand tablelist::sortByColumn option add *Tablelist.labelCommand2 tablelist::addToSortColumns </pre> </blockquote> <p>The <code><a href= "tablelistColSort.html#sortByColumn">tablelist::sortByColumn</a></code> and <code><a href= "tablelistColSort.html#addToSortColumns">tablelist::addToSortColumns</a></code> commands specified in these settings enable the user to sort the items by one or more columns, with the aid of the left mouse button and of the <code>Shift</code> key.</p> <p>The <code>editStartCmd</code> procedure, specified as the value of the <code><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></code> configuration option, needs the path name of the edit window, in order to be able to configure the widget in various ways. This is a common situation, and Tablelist provides the <code><a href= "tablelistWidget.html#editwinpath">editwinpath</a></code> subcommand for this purpose:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # editStartCmd # # Applies some configuration options to the edit window; if the latter is a # ComboBox, the procedure populates it. #------------------------------------------------------------------------------</span> proc editStartCmd {tbl row col text} { set w [$tbl editwinpath] switch [$tbl columncget $col -name] { lineName { <span class="cmt"># # Set an upper limit of 20 for the number of characters #</span> $w configure -invalidcommand bell -validate key \ -validatecommand {expr {[string length %P] <= 20}} } baudRate { <span class="cmt"># # Populate the ComboBox and allow no more # than 6 digits in its Entry component #</span> $w configure -values {50 75 110 300 1200 2400 4800 9600 19200 38400 57600 115200 230400 460800 921600} $w configure -invalidcommand bell -validate key -validatecommand \ {expr {[string length %P] <= 6 && [regexp {^[0-9]*$} %S]}} } dataBits { <span class="cmt"># # Configure the SpinBox #</span> $w configure -range {5 8 1} -editable no } parity { <span class="cmt"># # Populate the ComboBox and make it non-editable #</span> $w configure -values {None Even Odd Mark Space} -editable no } . . . color { <span class="cmt"># # Populate the menu and make sure the menubutton will display the # color name rather than $text, which is "", due to -formatcommand #</span> set menu [$w cget -menu] foreach name $::colorNames { $menu add radiobutton -compound left \ -image img$::colors($name) -label $name } $menu entryconfigure 8 -columnbreak 1 return [$tbl cellcget $row,$col -text] } } return $text } </pre> </blockquote> <p>The <code>editEndCmd</code> procedure, specified as the value of the <code><a href= "tablelistWidget.html#editendcommand">-editendcommand</a></code> configuration option, is responsible for a final validation of the edit window's text. Another purpose of this command is to convert the text contained in the edit window to the cell's new <i>internal</i> content, which is necessary because the internal value of the activation date and time is a clock value in seconds:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # editEndCmd # # Performs a final validation of the text contained in the edit window and gets # the cell's internal content. #------------------------------------------------------------------------------</span> proc editEndCmd {tbl row col text} { switch [$tbl columncget $col -name] { <span class="red">available { <span class="cmt"># # Update the image contained in the cell #</span> set img [expr {$text ? "checkedImg" : "uncheckedImg"}] $tbl cellconfigure $row,$col -image $img }</span> baudRate { <span class="cmt"># # Check whether the baud rate is an integer in the range 50..921600 #</span> if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} { bell tk_messageBox -title "Error" -icon error -message \ "The baud rate must be an integer in the range 50..921600" $tbl rejectinput } } actDate { <span class="cmt"># # Get the activation date in seconds from the last argument #</span> if {[catch {clock scan $text} actDate] != 0} { bell tk_messageBox -title "Error" -icon error -message "Invalid date" $tbl rejectinput return "" } <span class="cmt"># # Check whether the activation clock value is later than the # current one; if this is the case then make sure the cells # "actDate" and "actTime" will have the same internal value #</span> set actTime [$tbl cellcget $row,actTime -text] set actClock [clock scan [formatTime $actTime] -base $actDate] if {$actClock <= [clock seconds]} { bell tk_messageBox -title "Error" -icon error -message \ "The activation date & time must be in the future" $tbl rejectinput } else { $tbl cellconfigure $row,actTime -text $actClock return $actClock } } . . . color { <span class="cmt"># # Update the image contained in the cell #</span> $tbl cellconfigure $row,$col -image img$::colors($text) } } return $text } </pre> </blockquote> <p>Instead of making the <code>"Available"</code> column editable via a <i>temporary</i> checkbutton and displaying the images <code>"checkedImg"</code> and <code>"uncheckedImg"</code> in its cells, we can use the <code><a href= "tablelistWidget.html#embedcheckbuttons">embedcheckbuttons</a></code> subcommand to populate the column with <i>persistently</i> embedded checkbuttons. The necessary changes are as follows:</p> <ul> <li class="tm">Remove those parts of the code above that are shown in <span class="red">red</span> color.</li> <li class="tm"> Invoke <blockquote> <pre> $tbl embedcheckbuttons 1 </pre> </blockquote> after populating the tablelist widget. </li> </ul> <p>As mentioned above, the scripts <code>tileWidgets.tcl</code>, <code>iwidgets.tcl</code>, and <code>miscWidgets.tcl</code> are similar to <code>bwidget.tcl</code>. The first one makes use of the tile entry, spinbox, combobox, checkbutton, and menubutton widgets. The second one uses (besides the Tk core checkbutton and menubutton) the entryfield, spinint, combobox, dateentry, and timeentry widgets from the Iwidgets package and the validation facilities specific to that library. The third script makes use of the entry, spinbox, checkbutton, and menubutton widgets from the Tk core, Bryan Oakley's combobox, and of the mentry widgets of type <code>"Date"</code> and <code>"Time"</code>, and it performs the entry validation with the aid of the Wcb package (which is required anyway for the Mentry library).</p> <h3 id="ex_windows">A tablelist Widget Containing Embedded Windows</h3> <p>The script <code>embeddedWindows.tcl</code> in the <code>demos</code> directory creates a tablelist widget whose items correspond to the Tk library scripts. The size of each file (in bytes) is not only displayed as a number, but is also illustrated with the aid of a frame with red background, created as a child of an embedded frame with ivory background. The files can be viewed by clicking on the corresponding embedded button widgets.</p> <p>The following screenshot shows the tablelist widget with the mouse cursor over the first header label, causing this label to appear in <code>active</code> state:</p> <blockquote> <img src="embeddedWindows.png" alt="Embedded Windows" width="432" height= "310"> </blockquote> <p>First, we create and populate the tablelist widget:</p> <blockquote> <pre> package require tablelist 6.8 wm title . "Tk Library Scripts" <span class="cmt"># # Add some entries to the Tk option database #</span> set dir [file dirname [info script]] source [file join $dir option.tcl] <span class="cmt"># # Create the font TkFixedFont if not yet present #</span> catch {font create TkFixedFont -family Courier -size -12} <span class="cmt"># # Create an image to be displayed in buttons embedded in a tablelist widget #</span> image create photo openImg -file [file join $dir open.gif] <span class="cmt"># # Create a vertically scrolled tablelist widget with 5 # dynamic-width columns and interactive sort capability #</span> set tf .tf frame $tf -class ScrollArea set tbl $tf.tbl set vsb $tf.vsb tablelist::tablelist $tbl \ -columns {0 "File Name" left 0 "Bar Chart" center 0 "File Size" right 0 "View" center 0 "Seen" center} \ -setgrid no -yscrollcommand [list $vsb set] -width 0 if {[$tbl cget -selectborderwidth] == 0} { $tbl configure -spacing 1 } $tbl columnconfigure 0 -name fileName $tbl columnconfigure 1 -formatcommand emptyStr -sortmode integer $tbl columnconfigure 2 -name fileSize -sortmode integer $tbl columnconfigure 4 -name seen scrollbar $vsb -orient vertical -command [list $tbl yview] proc emptyStr val { return "" } <span class="cmt"># # Create a bold font #</span> set tblFont [$tbl cget -font] set size [font actual $tblFont -size] if {$size == 0} { ;<span class="cmt"># e.g., on Ubuntu</span> set size -12 } eval font create BoldFont [font actual $tblFont] -size $size -weight bold <span class="cmt"># # Populate the tablelist widget #</span> cd $tk_library set totalSize 0 set maxSize 0 foreach fileName [lsort [glob *.tcl]] { set fileSize [file size $fileName] $tbl insert end [list $fileName $fileSize $fileSize "" no] incr totalSize $fileSize if {$fileSize > $maxSize} { set maxSize $fileSize } } if {$tk_version >= 8.5} { $tbl header insert 0 [list "[$tbl size] *.tcl files" "" $totalSize "" ""] $tbl header rowconfigure 0 -foreground blue } </pre> </blockquote> <p>We insert the size of each file not only into the column with the title <code>"File Size"</code>, but also into the column <code>"Bar Chart"</code>. Since we configured this column with <code>-formatcommand emptyStr</code>, the text will remain hidden in it. It will, however, be needed when sorting the items by that column.</p> <p>After populating the tablelist's body, we create a header item displaying the total number and size of the library files, by invoking the <code><a href="tablelistWidget.html#hdr_insert">header insert</a></code> subcommand, and change its foreground color with the aid of the <code><a href="tablelistWidget.html#hdr_rowconfigure">header rowconfigure</a></code> subcommand.</p> <p>To be able to create the embedded windows, we have first to implement the creation scripts for them, as specified in the description of the <code><a href="tablelistWidget.html#cell_window">-window</a></code> cell configuration option. Here is the script that creates a frame to be embedded into the column displaying the bar chart:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # createFrame # # Creates a frame widget w to be embedded into the specified cell of the # tablelist widget tbl, as well as a child frame representing the size of the # file whose name is diplayed in the first column of the cell's row. #------------------------------------------------------------------------------</span> proc createFrame {tbl row col w} { <span class="cmt"># # Create the frame and replace the binding tag "Frame" # with "TablelistBody" in the list of its binding tags #</span> frame $w -width 102 -height 14 -background ivory -borderwidth 1 \ -relief solid bindtags $w [lreplace [bindtags $w] 1 1 TablelistBody] <span class="cmt"># # Create the child frame and replace the binding tag "Frame" # with "TablelistBody" in the list of its binding tags #</span> frame $w.f -height 12 -background red -borderwidth 1 -relief raised bindtags $w.f [lreplace [bindtags $w] 1 1 TablelistBody] <span class="cmt"># # Manage the child frame #</span> set fileSize [$tbl cellcget $row,fileSize -text] place $w.f -relwidth [expr {double($fileSize) / $::maxSize}] } </pre> </blockquote> <p>Since the frame will be embedded into the tablelist's body, we want to have the same handling of the mouse events in the frame and in its child frame as in the rest of the tablelist's body. To this end we replace the binding tag <code>Frame</code> (which has no own bindings anyway) with <code><a href="tablelistWidget.html#body_bindings">TablelistBody</a></code>, thus making sure that the default binding scripts associated with that tag will be valid for the parent frame and its child, too.</p> <p>We <code>place</code> the red child frame within its parent using the <code>-relwidth</code> option, to make sure that its width will remain proportional to the size of the corresponding file when resizing the parent frame (which will happen when resizing its column, as seen below).</p> <p>The creation script for the buttons used for viewing the Tk library files is quite simple:</p> <blockquote> <pre> <span class="cmt">#------------------------------------------------------------------------------ # createButton # # Creates a button widget w to be embedded into the specified cell of the # tablelist widget tbl. #------------------------------------------------------------------------------</span> proc createButton {tbl row col w} { set key [$tbl getkeys $row] button $w -image openImg -highlightthickness 0 -takefocus 0 \ -command [list viewFile $tbl $key] } <span class="cmt">#------------------------------------------------------------------------------ # viewFile # # Displays the content of the file whose name is contained in the row with the # given key of the tablelist widget tbl. #------------------------------------------------------------------------------</span> proc viewFile {tbl key} { set top .top$key if {[winfo exists $top]} { raise $top focus $top return "" } toplevel $top set fileName [$tbl cellcget k$key,fileName -text] wm title $top "File \"$fileName\"" <span class="cmt"># # Create a vertically scrolled text widget as a grandchild of the toplevel #</span> set tf $top.tf frame $tf -class ScrollArea set txt $tf.txt set vsb $tf.vsb text $txt -background white -font TkFixedFont -setgrid yes \ -yscrollcommand [list $vsb set] catch {$txt configure -tabstyle wordprocessor} ;<span class="cmt"># for Tk 8.5 and above</span> scrollbar $vsb -orient vertical -command [list $txt yview] <span class="cmt"># # Insert the file's content into the text widget #</span> set chan [open $fileName] $txt insert end [read -nonewline $chan] close $chan . . . <span class="cmt"># # Mark the file as seen #</span> $tbl rowconfigure k$key -font BoldFont $tbl cellconfigure k$key,seen -text yes } </pre> </blockquote> <p>Each file will be displayed in a text widget contained in a toplevel whose name is <code>.top$key</code>, where <code>$key</code> is obtained with the aid of the <code><a href="tablelistWidget.html#getkeys">getkeys</a></code> subcommand. By using the key instead of the row number, we will have a unique name for the toplevel, even if the order of the items changes due to interactive sorting by a column. (Remember that the embedded windows will be destroyed and automatically recreated when sorting the items or moving the columns.)</p> <p>Having implemented the creation scripts for the frames and buttons, we can now use the <code><a href= "tablelistWidget.html#cellconfigure">cellconfigure</a></code> subcommand to effectively create these widgets as embedded windows. Notice the <code><a href= "tablelistWidget.html#cell_stretchwindow">-stretchwindow</a></code> option used for the embedded frames, to make sure that their width will be adapted to that of the containing column when the latter is being resized interactively.</p> <blockquote> <pre> <span class="cmt"># # Create embedded windows in the columns no. 1 and 3 #</span> set rowCount [$tbl size] for {set row 0} {$row < $rowCount} {incr row} { $tbl cellconfigure $row,1 -window createFrame -stretchwindow yes $tbl cellconfigure $row,3 -window createButton } </pre> </blockquote> <h3 id="ex_tile">Tile-Based Demo Scripts</h3> <p>The Tablelist distribution contains also tile-based counterparts of the demo scripts discussed above. As described in the <a href= "#ov_tile">More on Tablelist_tile</a> section of this tutorial, it is quite easy to port an application using the Tablelist package to one based on Tablelist_tile. For example, let's see how to transform the demo script <code><a href="#ex_editing">bwidget.tcl</a></code> into a tile-based one, called <code>bwidget_tile.tcl</code>. The changes are shown below in <span class="red">red</span> color:</p> <p>First, we replace the starting lines</p> <blockquote> <pre> package require Tk 8.3 ;<span class="cmt"># because of entry validation</span> package require tablelist 6.8 </pre> </blockquote> <p>with</p> <blockquote> <pre> package require tablelist<span class="red">_tile</span> 6.8 </pre> </blockquote> <p>and the command</p> <blockquote> <pre> source [file join $dir option.tcl] </pre> </blockquote> <p>with</p> <blockquote> <pre> source [file join $dir option<span class="red">_tile</span>.tcl] </pre> </blockquote> <p>To ensure that the overall appearance of the GUI will conform to the currently used theme, we create a theme-specific container for our widgets:</p> <blockquote> <pre> <span class="red"># # Improve the window's appearance by using a tile # frame as a container for the other widgets # set f [ttk::frame .f]</span> </pre> </blockquote> <p>This implies that we have to replace the statement</p> <blockquote> <pre> set tbl .tbl </pre> </blockquote> <p>defining the path name of our tablelist widget with</p> <blockquote> <pre> set tbl <span class="red">$f</span>.tbl </pre> </blockquote> <p>Similarly, instead of a Tk button created by the command</p> <blockquote> <pre> set btn [button .btn -text "Close" -command exit] </pre> </blockquote> <p>we use a tile button that is a child of the above tile frame:</p> <blockquote> <pre> set btn [<span class="red">ttk::</span>button <span class="red">$f</span>.btn -text "Close" -command exit] </pre> </blockquote> <p>We manage this frame in the usual manner:</p> <blockquote> <pre> <span class="red">pack $f -expand yes -fill both</span> </pre> </blockquote> <p>The script <code>option_tile.tcl</code> is nearly identical to <code>option.tcl</code>. Its tile-specific part uses the values written by the command <code><a href= "tablelistThemes.html#setThemeDefaults">tablelist::setThemeDefaults</a></code> into the array <code>tablelist::themeDefaults</code>, to make sure that the selection will have the same theme-specific look in all the widgets created by the application:</p> <blockquote> <pre> <span class="red">tablelist::setThemeDefaults if {[tablelist::getCurrentTheme] eq "aqua"} { option add *Listbox.selectBackground \ $tablelist::themeDefaults(-selectbackground) option add *Listbox.selectForeground \ $tablelist::themeDefaults(-selectforeground) } else { option add *selectBackground $tablelist::themeDefaults(-selectbackground) option add *selectForeground $tablelist::themeDefaults(-selectforeground) } option add *selectBorderWidth $tablelist::themeDefaults(-selectborderwidth)</span> </pre> </blockquote> <p>The demo script <code>tileWidgets.tcl</code> uses not only the Tablelist_tile package for creating a tablelist widget with a modern theme-specific look & feel, but also the tile entry, spinbox, combobox, checkbutton, and menubutoon widgets for interactive cell editing. The resulting window has a nice theme-specific appearance:</p> <blockquote> <img src="tileWidgets.png" alt="Serial Line Configuration" width="839" height="404"> </blockquote> <p>The tile-based version of the demo script <code><a href= "#ex_windows">embeddedWindows.tcl</a></code> contains a bit more changes, but most of them are not Tablelist-specific. Please take a look at the file <code>embeddedWindows_tile.tcl</code> in the <code>demos</code> directory for the details. Here is a screenshot of the resulting window:</p> <blockquote> <img src="embeddedWindows_tile.png" alt="Embedded Windows" width="432" height="316"> </blockquote> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/tablelist/tablelistBWidget.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 |
<!DOCTYPE html> <html> <head> <title>Interactive Tablelist Cell Editing Using the BWidget Package</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="tablelist, editing, BWidget"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Interactive Tablelist Cell Editing Using the BWidget Package</h1> <h2>For Tablelist Version 6.8</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#overview">Overview</a></li> <li><a href="#Entry">The <code><b>tablelist::addBWidgetEntry</b></code> Command</a></li> <li><a href="#SpinBox">The <code><b>tablelist::addBWidgetSpinBox</b></code> Command</a></li> <li><a href="#ComboBox">The <code><b>tablelist::addBWidgetComboBox</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="overview">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. Its download location is</p> <blockquote> <address> <a href= "https://sourceforge.net/projects/tcllib/files">https://sourceforge.net/projects/tcllib/files</a> </address> </blockquote> <p>Tablelist supports interactive cell editing with the aid of the Entry, SpinBox, and ComboBox widgets from the BWidget package. The steps needed for using one of these widgets for editing the cells of a given column are as follows:</p> <ol> <li>Register the desired widget for interactive cell editing by invoking one of the commands described in this reference page.</li> <li class="tm">Use the tablelist widget's <code><b><a href= "tablelistWidget.html#columnconfigure">columnconfigure</a></b></code> subcommand to set the given column's <code><b><a href= "tablelistWidget.html#col_editable">-editable</a></b></code> option to true and its <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> option to the value returned by the command mentioned above. (These options are supported at cell level, too, with the aid of the <code><b><a href= "tablelistWidget.html#cellconfigure">cellconfigure</a></b></code> subcommand.)</li> </ol> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="Entry">The <code><b>tablelist::addBWidgetEntry</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addBWidgetEntry</code> – Register the Entry widget from the BWidget package for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addBWidgetEntry</b> ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers the Entry widget from the BWidget package for interactive cell editing in tablelist widgets. The optional argument specifies the name to be used for the Entry widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>Entry</b></code>. The command returns its <code><i>name</i></code> argument.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, BWidget, Entry</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="SpinBox">The <code><b>tablelist::addBWidgetSpinBox</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addBWidgetSpinBox</code> – Register the SpinBox widget from the BWidget package for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addBWidgetSpinBox</b> ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers the SpinBox widget from the BWidget package for interactive cell editing in tablelist widgets. The optional argument specifies the name to be used for the SpinBox widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>SpinBox</b></code>. The command returns its <code><i>name</i></code> argument.</dd> <dd class="tm">The temporary embedded SpinBox widget associated with the above <code><i>name</i></code> will be created with its <code><b>-editable</b></code> option set to <code>1</code>. You can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to make the SpinBox non-editable or define validations for it, as well as for setting its (range of) values and its <code><b>-wrap</b></code> option.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, BWidget, SpinBox</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="ComboBox">The <code><b>tablelist::addBWidgetComboBox</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addBWidgetComboBox</code> – Register the ComboBox widget from the BWidget package for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addBWidgetComboBox</b> ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers the ComboBox widget from the BWidget package for interactive cell editing in tablelist widgets. The optional argument specifies the name to be used for the ComboBox widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>ComboBox</b></code>. The command returns its <code><i>name</i></code> argument.</dd> <dd class="tm">The temporary embedded ComboBox widget associated with the above <code><i>name</i></code> will be created with its <code><b>-editable</b></code> option set to <code>1</code>. You can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to make the ComboBox non-editable or define validations for it, as well as for populating its listbox component (with the aid of the ComboBox widget's <code><b>-values</b></code> option).</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, BWidget, ComboBox</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/tablelist/tablelistBinding.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 |
<!DOCTYPE html> <html> <head> <title>Commands Related to Binding Scripts</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="tablelist, binding script"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Commands Related to Binding Scripts</h1> <h2>For Tablelist Version 6.8</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#overview">Overview</a></li> <li><a href="#convEventFields">The <code><b>tablelist::convEventFields</b></code> Command</a></li> <li><a href="#getTablelistPath">The <code><b>tablelist::getTablelistPath</b></code> Command</a></li> <li><a href="#getTablelistColumn">The <code><b>tablelist::getTablelistColumn</b></code> Command</a></li> <li><a href="#delaySashPosUpdates">The <code><b>tablelist::delaySashPosUpdates</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="overview">Overview</h2> <p>The first three commands described in this reference page are designed to be used in binding scripts associated with the binding tags whose names are returned by the <code><b><a href= "tablelistWidget.html#bodytag">bodytag</a></b></code> and <code><b><a href= "tablelistWidget.html#labeltag">labeltag</a></b></code> subcommands of the Tcl command associated with a tablelist widget. The first two of these commands are also used in the default binding scripts associated with the binding tag <code><b>TablelistBody</b></code>. For details and examples see the sections <a href="tablelistWidget.html#body_bindings">DEFAULT AND INDIVIDUAL BINDINGS FOR THE TABLELIST BODY</a> and <a href= "tablelistWidget.html#label_bindings">DEFAULT AND INDIVIDUAL BINDINGS FOR THE HEADER LABELS</a>.</p> <p>The last command is related to the default binding scripts for Tk core panedwindow and ttk::panedwindow widgets. It can be used to control the frequency of the sash position updates, which might be necessary to eliminate some artifacts caused by dragging a sash if one or more of the panes contains a tablelist widget with embedded images.</p> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="convEventFields">The <code><b>tablelist::convEventFields</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::convEventFields</code> – Convert event fields relative to a descendant of a tablelist widget</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::convEventFields</b> <i>descendantPathName</i> <i>x</i> <i>y</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command gets the path name of a tablelist widget and the x and y coordinates relative to the latter from the path name <code><i>descendantPathName</i></code> of one of its descendants and from the x and y coordinates <code><i>x</i></code>, <code><i>y</i></code> relative to this descendant. The command returns these values as the components of a list consisting of three elements.</dd> <dd class="tm"> In a binding script, the descendant widget corresponds to the event field <code><b>%W</b></code>, which can be the tablelist's body, one of the separator frames, a label widget displaying an embedded image, or (a descendant of) an embedded window. It can also be a header label or an additional widget placed by Tablelist into a header label for displaying a header image or a sort arrow. Likewise, the arguments <code><i>x</i></code> and <code><i>y</i></code> correspond to the event fields <code><b>%x</b></code> and <code><b>%y</b></code>. The three elements of the list returned by the command are usually assigned to the help variables <code><b>tablelist::W</b></code>, <code><b>tablelist::x</b></code>, and <code><b>tablelist::y</b></code>, by using the statement <blockquote> <pre> foreach {tablelist::W tablelist::x tablelist::y} \ [<span class="red">tablelist::convEventFields</span> %W %x %y] {} </pre> </blockquote> </dd> <dt><b>KEYWORDS</b></dt> <dd>tablelist, event fields, binding script</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="getTablelistPath">The <code><b>tablelist::getTablelistPath</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::getTablelistPath</code> – Get the path name of a tablelist widget from the path name of one of its descendants</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::getTablelistPath</b> <i>descendantPathName</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command gets the path name of a tablelist widget from the path name <code><i>descendantPathName</i></code> of one of its descendants.</dd> <dd class="tm">In a binding script, the descendant widget corresponds to the event field <code><b>%W</b></code>, which can be the tablelist's body, one of the separator frames, a label widget displaying an embedded image, or (a descendant of) an embedded window. It can also be a header label or an additional widget placed by Tablelist into a header label for displaying a header image or a sort arrow. The return value is often assigned to the help variable <code><b>tablelist::W</b></code>.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, path name, binding script</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="getTablelistColumn">The <code><b>tablelist::getTablelistColumn</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::getTablelistColumn</code> – Get the column number from the path name of a tablelist header label</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::getTablelistColumn</b> <i>headerLabelPathName</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command gets the column number from the path name <code><i>headerLabelPathName</i></code> of a tablelist header label or of an additional widget placed by Tablelist into a header label for displaying a header image or a sort arrow.</dd> <dd class="tm">In a binding script, the command argument corresponds to the event field <code><b>%W</b></code>. The return value is often assigned to the help variable <code><b>tablelist::col</b></code>.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, path name, binding script</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="delaySashPosUpdates">The <code><b>tablelist::delaySashPosUpdates</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::delaySashPosUpdates</code> – Set a delay for the panedwindow sash position updates</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::delaySashPosUpdates</b> <i>panedwindowPathName</i> <i>ms</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command sets a delay for the updates of the sash position caused by dragging a sash of the panedwindow widget specified by the first argument, which must be the path name of a Tk core panedwindow or ttk::panedwindow widget. <code><i>ms</i></code> must be an integer giving the delay in milliseconds. If this number is non-negative then the sash position updates via  <code><b>sash place ...</b></code> (for a Tk core panedwindow widget) or <code><b>sashpos ...</b></code> (for a ttk::panedwindow widget) will be scheduled for execution <code><i>ms</i></code> milliseconds later, in such a way that, until the time for an already scheduled update expires, new drag events won't schedule new update operations (only their data will be remembered). This will reduce the frequency of the sash position updates caused by dragging a sash of the specified widget, depending on the value of <code><i>ms</i></code>. If this number is negative then any dragging of a sash of the specified widget will immediately trigger an update of the sash position, as implemented in the default binding scripts for Tk core panedwindow and ttk::panedwindow widgets.</dd> <dd class="tm">This command can be used to control the frequency of the sash position updates for a given panedwindow widget, which might be necessary to eliminate some artifacts caused by dragging a sash if one or more of the panes contains a tablelist widget with embedded images. The value of <code><i>ms</i></code> (typically a number between 10 and 100) is application- and platform-specific (on Windows and Mac OS X Aqua you will need a higher value than on X11).</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>panedwindow, tablelist, path name, binding script</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/tablelist/tablelistColSort.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 |
<!DOCTYPE html> <html> <head> <title>Commands for Interactive Sorting by One or More Columns</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="tablelist, sort, column, widget"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Commands for Interactive Sorting by One or More Columns</h1> <h2>For Tablelist Version 6.8</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#overview">Overview</a></li> <li><a href="#sortByColumn">The <code><b>tablelist::sortByColumn</b></code> Command</a></li> <li><a href="#addToSortColumns">The <code><b>tablelist::addToSortColumns</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="overview">Overview</h2> <p>The commands described in this reference page enable the user to sort the items of a tablelist widget based on one or more of its columns, with the aid of the left mouse button.</p> <p>If the <code><b><a href= "#sortByColumn">tablelist::sortByColumn</a></b></code> command was specified as the value of the <code><b><a href= "tablelistWidget.html#labelcommand">-labelcommand</a></b></code> configuration option, then by pressing mouse button 1 over one of the header labels and later releasing it over the same label, the items will be sorted based on the elements of the corresponding column.</p> <p>If the <code><b><a href= "#addToSortColumns">tablelist::addToSortColumns</a></b></code> command was specified as the value of the <code><b><a href= "tablelistWidget.html#labelcommand2">-labelcommand2</a></b></code> configuration option, then by pressing mouse button 1 together with the <code>Shift</code> key over one of the header labels and later releasing it over the same label, the corresponding column will be appended to the list of sort columns, or (if it was already contained in that list) the corresponding sort order will be toggled; in both cases, the items will be sorted based on the updated lists of sort columns and sort orders.</p> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="sortByColumn">The <code><b>tablelist::sortByColumn</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::sortByColumn</code> – Sort the items of a tablelist widget based on one of its columns</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::sortByColumn</b> <i>pathName</i> <i>columnIndex</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command sorts the items of the <a href= "tablelistWidget.html">tablelist</a> widget <code><i>pathName</i></code> based on the elements of the column specified by <code><i>columnIndex</i></code>. This is done by invoking the <code><b><a href= "tablelistWidget.html#sortbycolumn">sortbycolumn</a></b></code> subcommand of the Tcl command associated with the given tablelist widget. If the items were last sorted in increasing order, based on the same column given by <code><i>columnIndex</i></code>, and no subsequent invocation of the <code><b><a href= "tablelistWidget.html#resetsortinfo">resetsortinfo</a></b></code> subcommand was made, then the last argument passed to <code><b>sortbycolumn</b></code> will be <code><b>-decreasing</b></code>, otherwise <code><b>-increasing</b></code>.</dd> <dd class="tm">After sorting the items, the virtual event <code><b><<TablelistColumnSorted>></b></code> is generated. For Tk versions 8.5 or higher, this virtual event is generated with its <code><b>-data</b></code> option set to a list consisting of the numerical column index and the sort order (<code><b>decreasing</b></code> or <code><b>increasing</b></code>). The command returns the sort order, as <code><b>decreasing</b></code> or <code><b>increasing</b></code>.</dd> <dd class="tm">If the specified column's <code><b><a href= "tablelistWidget.html#col_showlinenumbers">-showlinenumbers</a></b></code> option has been set to true, then the actions described above are not performed and the return value is an empty string.</dd> <dd class="tm"><code><b>tablelist::sortByColumn</b></code> is usually specified as the value of the <code><b><a href= "tablelistWidget.html#labelcommand">-labelcommand</a></b></code> configuration option for a tablelist widget.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, sort, column, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="addToSortColumns">The <code><b>tablelist::addToSortColumns</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addToSortColumns</code> – Add a column index to the list of sort columns and perform the multi-column sorting</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addToSortColumns</b> <i>pathName</i> <i>columnIndex</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command adds the column index specified by <code><i>columnIndex</i></code> to the list of sort columns of the <a href= "tablelistWidget.html">tablelist</a> widget <code><i>pathName</i></code> and sorts the items based on the elements of the columns indicated by the modified list. This is done by invoking the <code><b><a href= "tablelistWidget.html#sortbycolumnlist">sortbycolumnlist</a></b></code> subcommand of the Tcl command associated with the given tablelist widget. The two arguments passed to <code><b>sortbycolumnlist</b></code> are built as follows: (a) if the given column index is already contained in the widget's list of sort columns (returned by the <code><b><a href= "tablelistWidget.html#sortcolumnlist">sortcolumnlist</a></b></code> subcommand) then this list is left unchanged and the sort order list (returned by the <code><b><a href= "tablelistWidget.html#sortorderlist">sortorderlist</a></b></code> subcommand) is updated by toggling its corresponding element from <code><b>increasing</b></code> to <code><b>decreasing</b></code> and vice-versa; (b) otherwise the column index is appended to the list of sort columns and the value <code><b>increasing</b></code> is appended to the list of sort orders.</dd> <dd class="tm">After sorting the items by passing the two updated lists to the <code><b>sortbycolumnlist</b></code> subcommand, the virtual event <code><b><<TablelistColumnsSorted>></b></code> (note the plural form!) is generated. For Tk versions 8.5 or higher, this virtual event is generated with its <code><b>-data</b></code> option set to a list consisting of the two above-mentioned updated lists passed to <code><b>sortbycolumnlist</b></code> as arguments. The command returns the new sort order corresponding to the given column, as <code><b>decreasing</b></code> or <code><b>increasing</b></code>.</dd> <dd class="tm">If the specified column's <code><b><a href= "tablelistWidget.html#col_showlinenumbers">-showlinenumbers</a></b></code> option has been set to true, then the actions described above are not performed and the return value is an empty string.</dd> <dd class="tm"><code><b>tablelist::addToSortColumns</b></code> is usually specified as the value of the <code><b><a href= "tablelistWidget.html#labelcommand2">-labelcommand2</a></b></code> configuration option for a tablelist widget.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, sort, column list, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/tablelist/tablelistCombobox.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 |
<!DOCTYPE html> <html> <head> <title>Interactive Tablelist Cell Editing Using the combobox Package</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="tablelist, editing, combobox"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Interactive Tablelist Cell Editing Using the combobox Package</h1> <h2>For Tablelist Version 6.8</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#overview">Overview</a></li> <li><a href="#combobox">The <code><b>tablelist::addOakleyCombobox</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="overview">Overview</h2> <p>Bryan Oakley's combobox package is a library extension for Tcl/Tk versions 8.0 or higher, written in pure Tcl/Tk code. Its download location is</p> <blockquote> <address> <a href= "http://www1.clearlight.com/~oakley/tcl/combobox">http://www1.clearlight.com/~oakley/tcl/combobox</a> </address> </blockquote> <p>Tablelist supports interactive cell editing with the aid of the combobox widget implemented in the package mentioned above. The steps needed for using this widget for editing the cells of a given column are as follows:</p> <ol> <li>Register the combobox widget for interactive cell editing by invoking the <code><b><a href= "#combobox">tablelist::addOakleyCombobox</a></b></code> command described below.</li> <li class="tm">Use the tablelist widget's <code><b><a href= "tablelistWidget.html#columnconfigure">columnconfigure</a></b></code> subcommand to set the given column's <code><b><a href= "tablelistWidget.html#col_editable">-editable</a></b></code> option to true and its <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> option to the value returned by the command mentioned above. (These options are supported at cell level, too, with the aid of the <code><b><a href= "tablelistWidget.html#cellconfigure">cellconfigure</a></b></code> subcommand.)</li> </ol> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="combobox">The <code><b>tablelist::addOakleyCombobox</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addOakleyCombobox</code> – Register Bryan Oakley's combobox widget for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addOakleyCombobox</b> ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers Bryan Oakley's combobox widget for interactive cell editing in tablelist widgets. The optional argument specifies the name to be used for the combobox widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>combobox</b></code>. The command returns its <code><i>name</i></code> argument.</dd> <dd class="tm">The temporary embedded combobox widget associated with the above <code><i>name</i></code> will be created with its <code><b>-editable</b></code> option set to <code>1</code>. You can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to make the combobox non-editable or define validations for its entry child (whose path name can be obtained by invoking the tablelist widget's <code><b><a href= "tablelistWidget.html#entrypath">entrypath</a></b></code> subcommand, or by appending <code><b>.entry</b></code> to the path name of the combobox widget, or, if using combobox version 2.3 or later, with the aid of the combobox widget's <code><b>subwidget entry</b></code> subcommand), as well as for populating its listbox component (by using the combobox widget's <code><b>list insert</b></code> subcommand).</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, combobox</dd> </dl> <div align="center"> <p><a href="index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/tablelist/tablelistCtext.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 |
<!DOCTYPE html> <html> <head> <title>Interactive Tablelist Cell Editing Using the ctext Package</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="tablelist, editing, ctext"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Interactive Tablelist Cell Editing Using the ctext Package</h1> <h2>For Tablelist Version 6.8</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#overview">Overview</a></li> <li><a href="#ctext">The <code><b>tablelist::addCtext</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="overview">Overview</h2> <p>George Peter Staplin's ctext package is a library extension for Tcl/Tk versions 8.0 or higher, written in pure Tcl/Tk code. It is part of tklib, which has the address</p> <blockquote> <address> <a href="https://core.tcl.tk/tklib">https://core.tcl.tk/tklib</a> </address> </blockquote> <p>Tablelist supports interactive cell editing with the aid of the ctext widget implemented in the package mentioned above. The steps needed for using this widget for editing the cells of a given column are as follows:</p> <ol> <li>Register the ctext widget for interactive cell editing by invoking the <code><b><a href="#ctext">tablelist::addCtext</a></b></code> command described below.</li> <li class="tm">Use the tablelist widget's <code><b><a href= "tablelistWidget.html#columnconfigure">columnconfigure</a></b></code> subcommand to set the given column's <code><b><a href= "tablelistWidget.html#col_editable">-editable</a></b></code> option to true and its <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> option to the value returned by the command mentioned above. (These options are supported at cell level, too, with the aid of the <code><b><a href= "tablelistWidget.html#cellconfigure">cellconfigure</a></b></code> subcommand.)</li> </ol> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="ctext">The <code><b>tablelist::addCtext</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addCtext</code> – Register the ctext widget for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addCtext</b> ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers the ctext widget for interactive cell editing in tablelist widgets. The optional argument specifies the name to be used for the ctext widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>ctext</b></code>. The command returns its <code><i>name</i></code> argument.</dd> <dd class="tm">The temporary embedded ctext widget used for interactive cell editing will be created with its <code><b>-padx</b></code> and <code><b>-pady</b></code> options set to <code>2</code>, its <code><b>-wrap</b></code> option set to <code><b>none</b></code>, and its initial height set to the number of lines contained in it. There is, however, an exception from this rule: If the <code><b><a href= "tablelistWidget.html#col_wrap">-wrap</a></b></code> option of the cell's column was set to true and Tk version 8.5 or higher is being used, then the ctext widget's <code><b>-wrap</b></code> option will be set to <code><b>word</b></code> and its initial height will equal the number of <i>display</i> lines (taking into account the line wraps) contained in it. You can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to override the initial settings (except the height) according to your needs.</dd> <dd class="tm">If the ctext widget's <code><b>-wrap</b></code> option was set to <code><b>word</b></code> or <code><b>char</b></code> (either by Tablelist or from within the above-mentioned script) and Tk version 8.5 or higher is being used, then, whenever its width changes (e.g., due to interactive column resizing), its height will be set automatically to the number of display lines contained in it. (The number of display lines is retrieved with the aid of the <code><b>count -displaylines</b></code> text widget subcommand, introduced in Tk 8.5.)</dd> <dd class="tm">If the widget callback package Wcb was loaded into the interpreter (via <code><b>package require Wcb</b></code> or <code><b>package require wcb</b></code>) then the ctext widget's height will be updated automatically whenever text is inserted into or deleted from it, which makes the editing much more user-friendly. This is achieved by using an appropriately defined after-<code><b>insert</b></code> and after-<code><b>delete</b></code> callback for the edit window. You can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to define further callbacks for the ctext widget. (The above-mentioned callback is created via <code><b>wcb::cbappend</b></code>, <i>after</i> returning from that script.)</dd> <dd class="tm">The <code>Tab</code> key is reserved for navigation between the editable cells, but the user can insert a tabulator character into the ctext widget by pressing <code>Control-i</code>.</dd> <dd class="tm">Unlike in the case of the other widgets used for interactive cell editing (except the Tk core text widget), the <code>Return</code> and <code>KP_Enter</code> keys insert a newline character into the ctext widget. <code>Control-j</code> can also be used for inserting a newline. <code>Control-Return</code> and <code>Control-KP_Enter</code> terminate the editing and destroy the edit window.</dd> <dd class="tm"><code>Control-Home</code> and <code>Control-End</code> have their well-known text widget-specific bindings, just like <code>Meta-<</code> and <code>Meta-></code> if <code><b>tk_strictMotif</b></code> is false. Again, this is different from the behavior of the other widgets used for interactive cell editing (except the Tk core text widget). For jumping into the first/last editable cell, the user can press <code>Alt-Home</code>/<code>Alt-End</code> or <code>Meta-Home</code>/<code>Meta-End</code> (<code>Command-Home</code>/<code>Command-End</code> on Mac OS Classic and Mac OS X Aqua).</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, ctext</dd> </dl> <div align="center"> <p><a href="index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/tablelist/tablelistIwidgets.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 |
<!DOCTYPE html> <html> <head> <title>Interactive Tablelist Cell Editing Using the Iwidgets Package</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="tablelist, editing, Iwidgets"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Interactive Tablelist Cell Editing Using the Iwidgets Package</h1> <h2>For Tablelist Version 6.8</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#overview">Overview</a></li> <li><a href="#entryfield">The <code><b>tablelist::addIncrEntryfield</b></code> Command</a></li> <li><a href="#dateTime">The <code><b>tablelist::addIncrDateTimeWidget</b></code> Command</a></li> <li><a href="#spinner">The <code><b>tablelist::addIncrSpinner</b></code> Command</a></li> <li><a href="#spinint">The <code><b>tablelist::addIncrSpinint</b></code> Command</a></li> <li><a href="#combobox">The <code><b>tablelist::addIncrCombobox</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="overview">Overview</h2> <p>The Iwidgets package (also known as [incr Widgets]) is a library extension for Tcl/Tk versions 8.0 or higher, written in pure Tcl/Tk code. It requires the compiled packages Itcl and Itk (also known as [incr Tcl] and [incr Tk], respectively). The download location of these three library packages is</p> <blockquote> <address> <a href= "https://sourceforge.net/projects/incrtcl/files">https://sourceforge.net/projects/incrtcl/files</a> </address> </blockquote> <p>Tablelist supports interactive cell editing with the aid of the entryfield, datefield, dateentry, timefield, timeentry, spinner, spinint, and combobox widgets from the Iwidgets package. The steps needed for using one of these widgets for editing the cells of a given column are as follows:</p> <ol> <li>Register the desired widget for interactive cell editing by invoking one of the commands described in this reference page.</li> <li class="tm">Use the tablelist widget's <code><b><a href= "tablelistWidget.html#columnconfigure">columnconfigure</a></b></code> subcommand to set the given column's <code><b><a href= "tablelistWidget.html#col_editable">-editable</a></b></code> option to true and its <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> option to the value returned by the command mentioned above. (These options are supported at cell level, too, with the aid of the <code><b><a href= "tablelistWidget.html#cellconfigure">cellconfigure</a></b></code> subcommand.)</li> </ol> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="entryfield">The <code><b>tablelist::addIncrEntryfield</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addIncrEntryfield</code> – Register the entryfield widget from the Iwidgets package for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addIncrEntryfield</b> ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers the entryfield widget from the Iwidgets package for interactive cell editing in tablelist widgets. The optional argument specifies the name to be used for the entryfield widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>entryfield</b></code>. The command returns its <code><i>name</i></code> argument.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, Iwidgets, entryfield</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="dateTime">The <code><b>tablelist::addIncrDateTimeWidget</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addIncrDateTimeWidget</code> – Register the datefield, dateentry, timefield, or timeentry widget from the Iwidgets package for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addIncrDateTimeWidget</b> <b>datefield</b>|<b>dateentry</b>|<b>timefield</b>|<b>timeentry</b> ?<b>-seconds</b>? ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers the datefield, dateentry, timefield, or timeentry widget from the Iwidgets package for interactive cell editing in tablelist widgets. If the <code><b>-seconds</b></code> argument is present then the <code><b><a href= "tablelistWidget.html#finishediting">finishediting</a></b></code> subcommand of the Tcl command associated with the tablelist widget will retrieve the content of the embedded window used for interactive cell editing as an integer clock value (in seconds), otherwise as a string. Use this option for tablelist widgets whose internal list contains date or time information in seconds (displayed with the aid of commands given by the <code><b><a href= "tablelistWidget.html#col_formatcommand">-formatcommand</a></b></code> column configuration option). The second optional argument specifies the name to be used for the datefield, dateentry, timefield, or timeentry widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>datefield</b></code>, <code><b>dateentry</b></code>, <code><b>timefield</b></code>, or <code><b>timeentry</b></code>, as given by the first argument. The command returns its <code><i>name</i></code> argument.</dd> <dd class="tm">When editing a cell with the aid of the temporary embedded datefield, dateentry, timefield, or timeentry widget associated with the above <code><i>name</i></code>, you can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to set any of the widget's options, like <code><b>-gmt</b></code>, <code><b>-iq</b></code>, <code><b>-int</b></code> ("international" date format, supported by datefield and dateentry widgets), or <code><b>-format</b></code> (for timefield and timeentry widgets, with the values <code><b>civilian</b></code> and <code><b>military</b></code>).</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, Iwidgets, datefield, dateentry, timefield, timeentry</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="spinner">The <code><b>tablelist::addIncrSpinner</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addIncrSpinner</code> – Register the spinner widget from the Iwidgets package for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addIncrSpinner</b> ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers the spinner widget from the Iwidgets package for interactive cell editing in tablelist widgets. The optional argument specifies the name to be used for the spinner widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>spinner</b></code>. The command returns its <code><i>name</i></code> argument.</dd> <dd class="tm">When editing a cell with the aid of the temporary embedded spinner widget associated with the above <code><i>name</i></code>, you can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to define validations for the widget or set any of its other options, like <code><b>-decrement</b></code> and <code><b>-increment</b></code>.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, Iwidgets, spinner</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="spinint">The <code><b>tablelist::addIncrSpinint</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addIncrSpinint</code> – Register the spinint widget from the Iwidgets package for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addIncrSpinint</b> ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers the spinint widget from the Iwidgets package for interactive cell editing in tablelist widgets. The optional argument specifies the name to be used for the spinint widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>spinint</b></code>. The command returns its <code><i>name</i></code> argument.</dd> <dd class="tm">When editing a cell with the aid of the temporary embedded spinint widget associated with the above <code><i>name</i></code>, you can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to define validations for the widget or set any of its other options, like <code><b>-range</b></code>, <code><b>-step</b></code>, and <code><b>-wrap</b></code>.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, Iwidgets, spinint</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="combobox">The <code><b>tablelist::addIncrCombobox</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addIncrCombobox</code> – Register the combobox widget from the Iwidgets package for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addIncrCombobox</b> ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers the dropdown-style combobox widget from the Iwidgets package for interactive cell editing in tablelist widgets. The optional argument specifies the name to be used for the combobox widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>combobox</b></code>. The command returns its <code><i>name</i></code> argument.</dd> <dd class="tm">The temporary embedded combobox widget associated with the above <code><i>name</i></code> will be created with its <code><b>-editable</b></code> option set to <code>1</code> and its <code><b>-grab</b></code> option set to <code><b>global</b></code>. You can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to make the combobox non-editable or define validations for it, as well as for populating its listbox component (by using the combobox widget's <code><b>insert list</b></code> subcommand).</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, Iwidgets, combobox</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/tablelist/tablelistMentry.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 |
<!DOCTYPE html> <html> <head> <title>Interactive Tablelist Cell Editing Using the Mentry Package</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="tablelist, editing, Mentry"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Interactive Tablelist Cell Editing Using the Mentry Package</h1> <h2>For Tablelist Version 6.8</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#overview">Overview</a></li> <li><a href="#Date">The <code><b>tablelist::addDateMentry</b></code> Command</a></li> <li><a href="#Time">The <code><b>tablelist::addTimeMentry</b></code> Command</a></li> <li><a href="#DateTime">The <code><b>tablelist::addDateTimeMentry</b></code> Command</a></li> <li><a href="#FixedPoint">The <code><b>tablelist::addFixedPointMentry</b></code> Command</a></li> <li><a href="#IPAddr">The <code><b>tablelist::addIPAddrMentry</b></code> Command</a></li> <li><a href="#IPv6Addr">The <code><b>tablelist::addIPv6AddrMentry</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="overview">Overview</h2> <p>The multi-entry package Mentry is a library extension for Tcl/Tk versions 8.0 or higher, written in pure Tcl/Tk code. Its download location is</p> <blockquote> <address> <a href="https://www.nemethi.de">https://www.nemethi.de</a> </address> </blockquote> <p>Starting with version 3.0, the Mentry distribution provides not only the package Mentry, but also its tile-based equivalent Mentry_tile, which enables the theme-specific appearance of mentry widgets; this package requires Tcl/Tk 8.4 or higher and tile 0.6 or higher.</p> <p>Tablelist supports interactive cell editing with the aid of the mentry widgets of type <code>"Date"</code>, <code>"Time"</code>, <code>"DateTime</code>, <code>"FixedPoint"</code>, <code>"IPAddr"</code>, and <code>"IPv6Addr"</code>. The steps needed for using one of these widgets for editing the cells of a given column are as follows:</p> <ol> <li>Register the desired widget for interactive cell editing by invoking one of the commands described in this reference page.</li> <li class="tm">Use the tablelist widget's <code><b><a href= "tablelistWidget.html#columnconfigure">columnconfigure</a></b></code> subcommand to set the given column's <code><b><a href= "tablelistWidget.html#col_editable">-editable</a></b></code> option to true and its <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> option to the value returned by the command mentioned above. (These options are supported at cell level, too, with the aid of the <code><b><a href= "tablelistWidget.html#cellconfigure">cellconfigure</a></b></code> subcommand.)</li> </ol> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="Date">The <code><b>tablelist::addDateMentry</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addDateMentry</code> – Register the mentry widget of type <code>"Date"</code> for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addDateMentry</b> <i>format separator</i> ?<b>-gmt</b>? ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers the widget created by the <code><b>mentry::dateMentry</b></code> command from the Mentry (or Mentry_tile) package for interactive cell editing in tablelist widgets. The <code><i>format</i></code> and <code><i>separator</i></code> arguments have the same meanings as in the <code><b>mentry::dateMentry</b></code> command. If the <code><b>-gmt</b></code> argument is present then both the internal clock value and its external date representation in the mentry widget will be viewed as Greenwich Mean Time, otherwise as local time. The second optional argument specifies the name to be used for the mentry widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>dateMentry</b></code>. The command returns its <code><i>name</i></code> argument.</dd> <dd class="tm">A tablelist column having the above <code><i>name</i></code> as the value of its <code><b>-editwindow</b></code> option must contain as internal cell values date information in seconds (displayed with the aid of a command given by the <code><b><a href= "tablelistWidget.html#col_formatcommand">-formatcommand</a></b></code> column configuration option). The <code><b><a href= "tablelistWidget.html#finishediting">finishediting</a></b></code> subcommand of the Tcl command associated with the tablelist widget will retrieve the content of the embedded window used for interactive cell editing by invoking the <code><b>mentry::getClockVal</b></code> command. The value returned by this command (a clock value in seconds or one of the error strings <code>"EMPTY"</code>, <code>"BAD"</code>, <code>"BAD_DATE"</code>, or <code>"BAD_YEAR"</code>) will be passed to the script corresponding to the <code><b><a href= "tablelistWidget.html#editendcommand">-editendcommand</a></b></code> tablelist configuration option (if any), as its last argument. If this value is one of the above error strings then the script should reject the mentry's content by invoking the <code><b><a href= "tablelistWidget.html#rejectinput">rejectinput</a></b></code> subcommand.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, Mentry, date</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="Time">The <code><b>tablelist::addTimeMentry</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addTimeMentry</code> – Register the mentry widget of type <code>"Time"</code> for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addTimeMentry</b> <i>format separator</i> ?<b>-gmt</b>? ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers the widget created by the <code><b>mentry::timeMentry</b></code> command from the Mentry (or Mentry_tile) package for interactive cell editing in tablelist widgets. The <code><i>format</i></code> and <code><i>separator</i></code> arguments have the same meanings as in the <code><b>mentry::timeMentry</b></code> command. If the <code><b>-gmt</b></code> argument is present then both the internal clock value and its external time representation in the mentry widget will be viewed as Greenwich Mean Time, otherwise as local time. The second optional argument specifies the name to be used for the mentry widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>timeMentry</b></code>. The command returns its <code><i>name</i></code> argument.</dd> <dd class="tm">A tablelist column having the above <code><i>name</i></code> as the value of its <code><b>-editwindow</b></code> option must contain as internal cell values time information in seconds (displayed with the aid of a command given by the <code><b><a href= "tablelistWidget.html#col_formatcommand">-formatcommand</a></b></code> column configuration option). The <code><b><a href= "tablelistWidget.html#finishediting">finishediting</a></b></code> subcommand of the Tcl command associated with the tablelist widget will retrieve the content of the embedded window used for interactive cell editing by invoking the <code><b>mentry::getClockVal</b></code> command. The value returned by this command (a clock value in seconds or one of the error strings <code>"EMPTY"</code> or <code>"BAD"</code>) will be passed to the script corresponding to the <code><b><a href= "tablelistWidget.html#editendcommand">-editendcommand</a></b></code> tablelist configuration option (if any), as its last argument. If this value is one of the above error strings then the script should reject the mentry's content by invoking the <code><b><a href= "tablelistWidget.html#rejectinput">rejectinput</a></b></code> subcommand.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, Mentry, time</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="DateTime">The <code><b>tablelist::addDateTimeMentry</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addDateTimeMentry</code> – Register the mentry widget of type <code>"DateTime"</code> for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addDateTimeMentry</b> <i>format dateSeparator timeSeparator</i> ?<b>-gmt</b>? ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers the widget created by the <code><b>mentry::dateTimeMentry</b></code> command from the Mentry (or Mentry_tile) package for interactive cell editing in tablelist widgets. The <code><i>format</i></code>, <code><i>dateSeparator</i></code>, and <code><i>timeSeparator</i></code> arguments have the same meanings as in the <code><b>mentry::dateTimeMentry</b></code> command. If the <code><b>-gmt</b></code> argument is present then both the internal clock value and its external date & time representation in the mentry widget will be viewed as Greenwich Mean Time, otherwise as local time. The second optional argument specifies the name to be used for the mentry widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>dateTimeMentry</b></code>. The command returns its <code><i>name</i></code> argument.</dd> <dd class="tm">A tablelist column having the above <code><i>name</i></code> as the value of its <code><b>-editwindow</b></code> option must contain as internal cell values date & time information in seconds (displayed with the aid of a command given by the <code><b><a href= "tablelistWidget.html#col_formatcommand">-formatcommand</a></b></code> column configuration option). The <code><b><a href= "tablelistWidget.html#finishediting">finishediting</a></b></code> subcommand of the Tcl command associated with the tablelist widget will retrieve the content of the embedded window used for interactive cell editing by invoking the <code><b>mentry::getClockVal</b></code> command. The value returned by this command (a clock value in seconds or one of the error strings <code>"EMPTY"</code>, <code>"BAD"</code>, <code>"BAD_DATE"</code>, or <code>"BAD_YEAR"</code>) will be passed to the script corresponding to the <code><b><a href= "tablelistWidget.html#editendcommand">-editendcommand</a></b></code> tablelist configuration option (if any), as its last argument. If this value is one of the above error strings then the script should reject the mentry's content by invoking the <code><b><a href= "tablelistWidget.html#rejectinput">rejectinput</a></b></code> subcommand.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, Mentry, date, time</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="FixedPoint">The <code><b>tablelist::addFixedPointMentry</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addFixedPointMentry</code> – Register the mentry widget of type <code>"FixedPoint"</code> for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addFixedPointMentry</b> <i>count1 count2</i> ?<b>-comma</b>? ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers the widget created by the <code><b>mentry::fixedPointMentry</b></code> command from the Mentry (or Mentry_tile) package for interactive cell editing in tablelist widgets. The <code><i>count1</i></code>, <code><i>count2</i></code>, and <code><i>-comma</i></code> arguments have the same meanings as in the <code><b>mentry::fixedPointMentry</b></code> command. The second optional argument specifies the name to be used for the mentry widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>fixedPointMentry_</b><i>count1</i><b>.</b><i>count2</i></code> (e.g., <code><b>fixedPointMentry_6.2</b></code>) or <code><b>fixedPointMentry_</b><i>count1</i><b>,</b><i>count2</i></code> (e.g., <code><b>fixedPointMentry_6,2</b></code>), depending on the presence of the optional <code><b>-comma</b></code> argument. The command returns its <code><i>name</i></code> argument.</dd> <dd class="tm">A tablelist column having the above <code><i>name</i></code> as the value of its <code><b>-editwindow</b></code> option must contain real numbers as internal cell values. The <code><b><a href= "tablelistWidget.html#finishediting">finishediting</a></b></code> subcommand of the Tcl command associated with the tablelist widget will retrieve the content of the embedded window used for interactive cell editing by invoking the <code><b>mentry::getReal</b></code> command. The value returned by this command (a real number or the error string <code>"EMPTY"</code>) will be passed to the script corresponding to the <code><b><a href= "tablelistWidget.html#editendcommand">-editendcommand</a></b></code> tablelist configuration option (if any), as its last argument. If this value is the above error string then the script should reject the mentry's content by invoking the <code><b><a href= "tablelistWidget.html#rejectinput">rejectinput</a></b></code> subcommand.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, Mentry, real number</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="IPAddr">The <code><b>tablelist::addIPAddrMentry</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addIPAddrMentry</code> – Register the mentry widget of type <code>"IPAddr"</code> for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addIPAddrMentry</b> ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers the widget created by the <code><b>mentry::ipAddrMentry</b></code> command from the Mentry (or Mentry_tile) package for interactive cell editing in tablelist widgets. The optional argument specifies the name to be used for the mentry widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>ipAddrMentry</b></code>. The command returns its <code><i>name</i></code> argument.</dd> <dd class="tm">A tablelist column having the above <code><i>name</i></code> as the value of its <code><b>-editwindow</b></code> option must contain IP addresses as internal cell values. The <code><b><a href= "tablelistWidget.html#finishediting">finishediting</a></b></code> subcommand of the Tcl command associated with the tablelist widget will retrieve the content of the embedded window used for interactive cell editing by invoking the <code><b>mentry::getIPAddr</b></code> command. The value returned by this command (an IP address or the error string <code>"EMPTY"</code>) will be passed to the script corresponding to the <code><b><a href= "tablelistWidget.html#editendcommand">-editendcommand</a></b></code> tablelist configuration option (if any), as its last argument. If this value is the above error string then the script should reject the mentry's content by invoking the <code><b><a href= "tablelistWidget.html#rejectinput">rejectinput</a></b></code> subcommand.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, Mentry, IP address</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="IPv6Addr">The <code><b>tablelist::addIPv6AddrMentry</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::addIPv6AddrMentry</code> – Register the mentry widget of type <code>"IPv6Addr"</code> for interactive cell editing</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::addIPv6AddrMentry</b> ?<i>name</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command registers the widget created by the <code><b>mentry::ipv6AddrMentry</b></code> command from the Mentry (or Mentry_tile) package for interactive cell editing in tablelist widgets. The optional argument specifies the name to be used for the mentry widget as the value of the <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> column or cell configuration option. It may be any string that is different from the <a href="tablelistTkCore.html">Tk core</a> and <a href= "tablelistTile.html">tile</a> edit window names. The default is <code><b>ipv6AddrMentry</b></code>. The command returns its <code><i>name</i></code> argument.</dd> <dd class="tm">A tablelist column having the above <code><i>name</i></code> as the value of its <code><b>-editwindow</b></code> option must contain IPv6 addresses as internal cell values. The <code><b><a href= "tablelistWidget.html#finishediting">finishediting</a></b></code> subcommand of the Tcl command associated with the tablelist widget will retrieve the content of the embedded window used for interactive cell editing by invoking the <code><b>mentry::getIPv6Addr</b></code> command. The value returned by this command (an IPv6 address or the error string <code>"EMPTY"</code>) will be passed to the script corresponding to the <code><b><a href= "tablelistWidget.html#editendcommand">-editendcommand</a></b></code> tablelist configuration option (if any), as its last argument. If this value is the above error string then the script should reject the mentry's content by invoking the <code><b><a href= "tablelistWidget.html#rejectinput">rejectinput</a></b></code> subcommand.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, Mentry, IPv6 address</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/tablelist/tablelistThemes.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 |
<!DOCTYPE html> <html> <head> <title>Commands Related to Tile Themes</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="tablelist, theme, tile"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Commands Related to Tile Themes</h1> <h2>For Tablelist Version 6.8</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#overview">Overview</a></li> <li><a href="#setTheme">The <code><b>tablelist::setTheme</b></code> Command</a></li> <li><a href="#getCurrentTheme">The <code><b>tablelist::getCurrentTheme</b></code> Command</a></li> <li><a href="#getThemes">The <code><b>tablelist::getThemes</b></code> Command</a></li> <li><a href="#setThemeDefaults">The <code><b>tablelist::setThemeDefaults</b></code> Command</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="overview">Overview</h2> <p>The commands described in this reference page should only be invoked when using the package Tablelist_tile. They enable you to set and query the current theme, to retrieve a list of the available themes, and to make sure that your widgets will have a theme-specific appearance.</p> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="setTheme">The <code><b>tablelist::setTheme</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::setTheme</code> – Set the current theme</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::setTheme</b> <i>theme</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command sets the current theme to <code><i>theme</i></code>, loading it if necessary. It is simply an alias for <code><b>ttk::setTheme</b></code> or <code><b>tile::setTheme</b></code>, depending on the tile version loaded into the interpreter. (The <code><b>tile::setTheme</b></code> command was renamed to <code><b>ttk::setTheme</b></code> in tile version 0.8.)</dd> <dd class="tm">Being just an alias for a tile library procedure, the <code><b>tablelist::setTheme</b></code> command does exactly the same as the original one: It loads the package implementing the given theme if needed, sets the theme to the specified one, and saves the latter in the variable <code><b>ttk::currentTheme</b></code> or <code><b>tile::currentTheme</b></code>, depending on the current tile version.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, theme, tile</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="getCurrentTheme">The <code><b>tablelist::getCurrentTheme</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::getCurrentTheme</code> – Get the current theme</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::getCurrentTheme</b> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command returns the value of the variable <code><b>ttk::currentTheme</b></code> or <code><b>tile::currentTheme</b></code>, depending on the tile version loaded into the interpreter. (The namespace containing the variable <code><b>currentTheme</b></code> was changed in tile version 0.8 from <code><b>tile</b></code> to <code><b>ttk</b></code>.)</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, theme, tile</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="getThemes">The <code><b>tablelist::getThemes</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::getThemes</code> – Get the themes registered in the package database</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::getThemes</b> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command returns a list of the themes registered in the package database. It is simply an alias for <code><b>ttk::themes</b></code> or <code><b>tile::availableThemes</b></code>, depending on the tile version loaded into the interpreter. (The <code><b>tile::availableThemes</b></code> command was renamed to <code><b>ttk::themes</b></code> in tile version 0.8.)</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, theme, tile</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="setThemeDefaults"><code><b>tablelist::setThemeDefaults</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>tablelist::setThemeDefaults</code> – Set theme-specific default values of some tablelist configuration options</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>tablelist::setThemeDefaults</b> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command populates the array <code><b>tablelist::themeDefaults</b></code> with theme-specific default values of a series of Tablelist configuration options. The array names are the command-line names of the options, and the corresponding array values are the default values of these configuration options for the currently set tile theme.</dd> <dd class="tm">The options whose names and values are written into the array <code><b>tablelist::themeDefaults</b></code> are: <code><b>-background</b></code>, <code><b>-foreground</b></code>, <code><b>-disabledforeground</b></code>, <code><b>-stripebackground</b></code>, <code><b>-selectbackground</b></code>, <code><b>-selectforeground</b></code>, <code><b>-selectborderwidth</b></code>, <code><b>-font</b></code>, <code><b>-labelforeground</b></code>, <code><b>-labelfont</b></code>, <code><b>-labelborderwidth</b></code>, <code><b>-labelpady</b></code>, <code><b>-arrowcolor</b></code>, <code><b>-arrowdisabledcolor</b></code>, <code><b>-arrowstyle</b></code>, and <code><b>-treestyle</b></code>. In addition, the command sets some other array elements to theme-specific default values of the background and foreground colors of the column labels in <code><b>normal</b></code>, <code><b>disabled</b></code>, <code><b>active</b></code>, and <code><b>pressed</b></code> states. (Tablelist needs the label colors for handling sort arrows and images with transparent background in the column labels.)</dd> <dd class="tm">The <code><b>tablelist::setThemeDefaults</b></code> command is invoked by Tablelist_tile automatically whenever a tablelist widget is createad or the <code><b><<ThemeChanged>></b></code> virtual event is received by a tablelist widget. In the latter case, the widget is reconfigured, using the new default values of those options that were not set explicitly to values different from the corresponding defaults.</dd> <dd class="tm">Besides being used by the Tablelist_tile code, this command can also be invoked in Tcl scripts, still before creating any tile-based tablelist widget. By calling it explicitly and using the values written by it into the array <code><b>tablelist::themeDefaults</b></code>, you can make sure that classical Tk widgets, e.g., listbox and text, will have a theme-specific appearance, just like the tile widgets. For example, you can add some common configuration options to the option database as follows:</dd> <dd> <blockquote> <pre> <span class="red">tablelist::setThemeDefaults</span> if {$tile::currentTheme eq "aqua"} { option add *Listbox.selectBackground \ $tablelist::themeDefaults(-selectbackground) option add *Listbox.selectForeground \ $tablelist::themeDefaults(-selectforeground) } else { option add *selectBackground $tablelist::themeDefaults(-selectbackground) option add *selectForeground $tablelist::themeDefaults(-selectforeground) } option add *selectBorderWidth $tablelist::themeDefaults(-selectborderwidth) </pre> </blockquote> </dd> <dt><b>KEYWORDS</b></dt> <dd>tablelist, theme, tile</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/tablelist/tablelistTile.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 |
<!DOCTYPE html> <html> <head> <title>Interactive Tablelist Cell Editing Using Tile Widgets</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="tablelist, editing, tile"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Interactive Tablelist Cell Editing Using Tile Widgets</h1> <h2>For Tablelist Version 6.8</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#overview">Overview</a></li> <li><a href="#entry">Interactive Cell Editing Using the tile entry Widget</a></li> <li><a href="#spinbox">Interactive Cell Editing Using the tile spinbox Widget</a></li> <li><a href="#combobox">Interactive Cell Editing Using the tile combobox Widget</a></li> <li><a href="#checkbutton">Interactive Cell Editing Using the tile checkbutton Widget</a></li> <li><a href="#menubutton">Interactive Cell Editing Using the tile menubutton Widget</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="overview">Overview</h2> <p>The tile theme engine is a compiled library extension for Tcl/Tk versions 8.4 or higher. Beginning with Tk 8.5a6, tile is integrated into the Tk core. For earlier Tk versions it can be downloaded from the address</p> <blockquote> <address> <a href= "https://sourceforge.net/projects/tktable/files/tile/">https://sourceforge.net/projects/tktable//files/tile</a> </address> </blockquote> <p>Tablelist supports interactive cell editing with the aid of the tile entry, spinbox, combobox, checkbutton, and menubutton widgets, accessed as <code><b>ttk::entry</b></code>, <code><b>ttk::spinbox</b></code>, <code><b>ttk::combobox</b></code>, <code><b>ttk::checkbutton</b></code>, and <code><b>ttk::menubutton</b></code>, respectively. The fully-qualified names <code><b>::ttk::entry</b></code>, <code><b>::ttk::spinbox</b></code>, <code><b>::ttk::combobox</b></code>, <code><b>::ttk::checkbutton</b></code>, and <code><b>::ttk::menubutton</b></code> are also supported. The version of the tile package must be 0.6 or higher (the tile spinbox requires even tile 0.8.3 or later, or, alternatively, Tk 8.5.9 or later). These widgets are automatically registered for cell editing, hence the only action needed for using one of them for editing the cells of a given column is as follows:</p> <p>Use the tablelist widget's <code><b><a href= "tablelistWidget.html#columnconfigure">columnconfigure</a></b></code> subcommand to set the given column's <code><b><a href= "tablelistWidget.html#col_editable">-editable</a></b></code> option to true and its <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> option to <code><b>ttk::entry</b></code>, <code><b>ttk::spinbox</b></code>, <code><b>ttk::combobox</b></code>, <code><b>ttk::checkbutton</b></code>, or <code><b>ttk::menubutton</b></code> (or to the corresponding fully-qualified name), respectively. (These options are supported at cell level, too, with the aid of the <code><b><a href= "tablelistWidget.html#cellconfigure">cellconfigure</a></b></code> subcommand.)</p> <p>One known limitation of earlier tile versions was that the <code><b>(ttk::)style theme use</b></code> command could only be used to set the current theme, but not to retrieve it. For this reason, Tablelist makes use of the variable <code><b>ttk::currentTheme</b></code> or <code><b>tile::currentTheme</b></code> (depending on the tile version), which is set by the <code><b>ttk::setTheme</b></code> or <code><b>tile::setTheme</b></code> procedure. From this it follows that the tile widgets used for interactive cell editing will only be managed as expected if the platform-specific default theme is either left unchanged or replaced with another theme by invoking the procedure <code><b>ttk::setTheme</b></code> or <code><b>tile::setTheme</b></code>, depending on the current tile version. (See also the <code><b><a href= "tablelistThemes.html#setTheme">tablelist::setTheme</a></b></code> command.)</p> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="entry">Interactive Cell Editing Using the tile entry Widget</h2> <dl> <dt><b>DESCRIPTION</b></dt> <dd>The temporary embedded tile entry widget used for interactive cell editing will be created with an explicitly set value for its <code><b>-style</b></code> option. Apart from its theme-specific appearance, it behaves just like its Tk core counterpart.</dd> <dd class="tm">If an application uses the tile entry widget for interactive cell editing and also the Wcb package (even if not for that widget), then the version of Wcb must be 3.1 or higher (because earlier Wcb releases didn't support any tile widgets).</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, tile, entry</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="spinbox">Interactive Cell Editing Using the tile spinbox Widget</h2> <dl> <dt><b>DESCRIPTION</b></dt> <dd>The temporary embedded tile spinbox widget used for interactive cell editing will be created with an explicitly set value for its <code><b>-style</b></code> option and with its <code><b>-state</b></code> option set to <code><b>normal</b></code>, which makes the widget editable. You can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to set the state of the spinbox to <code><b>readonly</b></code> or define validations for it, as well as for setting its (range of) values and its <code><b>-wrap</b></code> option. Apart from its theme-specific appearance, it behaves just like its Tk core counterpart.</dd> <dd class="tm">If an application uses the tile spinbox widget for interactive cell editing and also the Wcb package (even if not for that widget), then the version of Wcb must be 3.2 or higher (because the support for the new tile spinbox widget was added to Wcb in its version 3.2).</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, tile, spinbox</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="combobox">Interactive Cell Editing Using the tile combobox Widget</h2> <dl> <dt><b>DESCRIPTION</b></dt> <dd>The temporary embedded tile combobox widget used for interactive cell editing will be created with an explicitly set value for its <code><b>-style</b></code> option and with its <code><b>-state</b></code> option set to <code><b>normal</b></code>, which makes the widget editable. You can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to set the state of the combobox to <code><b>readonly</b></code> or define validations for it, as well as for populating its listbox component (with the aid of the combobox widget's <code><b>-values</b></code> option).</dd> <dd class="tm">If an application uses the tile combobox widget for interactive cell editing and also the Wcb package (even if not for that widget), then the version of Wcb must be 3.1 or higher (because earlier Wcb releases didn't support any tile widgets).</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, tile, combobox</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="checkbutton">Interactive Cell Editing Using the tile checkbutton Widget.</h2> <dl> <dt><b>DESCRIPTION</b></dt> <dd>The temporary embedded tile checkbutton widget used for interactive cell editing will be created with explicitly set values for its <code><b>-style</b></code> and <code><b>-variable</b></code> options. You can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to set any other configuration options, like <code><b>-offvalue</b></code> and <code><b>-onvalue</b></code>, according to the <i>internal</i> values of the cells. Since the default values of the <code><b>-offvalue</b></code> and <code><b>-onvalue</b></code> tile checkbutton options are <code>0</code> and <code>1</code>, you don't need to change these options if the cells have the same internal values <code>0</code> and <code>1</code>.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, tile, checkbutton</dd> </dl> <hr> <h2 id="menubutton">Interactive Cell Editing Using the tile menubutton Widget.</h2> <dl> <dt><b>DESCRIPTION</b></dt> <dd>The temporary embedded tile menubutton widget used for interactive cell editing will be created with explicitly set values for its <code><b>-style</b></code> and <code><b>-textvariable</b></code> options. In addition, a menu with its <code><b>-tearoff</b></code> option set to <code>0</code> and an appropriate script as the value of its <code><b>-postcommand</b></code> option is created and set as the value of the menubutton's <code><b>-menu</b></code> option. In an X11 environment, the menu's appearance is adapted to that of the tablelist widget by setting its <code><b>-background</b></code>, <code><b>-foreground</b></code>, <code><b>-activebackground</b></code>, <code><b>-activeforeground</b></code>, and <code><b>-activeborderwidth</b></code> options to appropriate values. You can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to set any other options of the menubutton and/or its associated menu. You will, however, need this script in the first place for populating the menu, preferably with radiobutton entries. For every radiobutton entry added to the menu, the Tablelist implementation will make sure that its value (which can be specified by setting the entry's <code><b>-value</b></code> or <code><b>-label</b></code> option) will be displayed in the menubutton as its text when the entry is selected. (Tablelist achieves this by setting the menu entry's <code><b>-variable</b></code> option to the value of the menubutton's <code><b>-textvariable</b></code> option.) For menu entries of types other than radiobutton (e.g., for command entries) it is the responsibility of the application to make sure that the selected entry's text will be shown in the menubutton (for example, with the aid of the menu entry's <code><b>-command</b></code> option).</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, tile, menubutton</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/tablelist/tablelistTkCore.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 |
<!DOCTYPE html> <html> <head> <title>Interactive Tablelist Cell Editing Using Tk Core Widgets</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content="tablelist, editing, Tk core"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body> <div align="center"> <h1>Interactive Tablelist Cell Editing Using Tk Core Widgets</h1> <h2>For Tablelist Version 6.8</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#overview">Overview</a></li> <li><a href="#entry">Interactive Cell Editing Using the entry Widget</a></li> <li><a href="#text">Interactive Cell Editing Using the text Widget</a></li> <li><a href="#spinbox">Interactive Cell Editing Using the spinbox Widget</a></li> <li><a href="#checkbutton">Interactive Cell Editing Using the checkbutton Widget</a></li> <li><a href="#menubutton">Interactive Cell Editing Using the menubutton Widget</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="overview">Overview</h2> <p>Tablelist supports interactive cell editing with the aid of the Tk core entry, text, spinbox, checkbutton, and menubutton widgets. These widgets are automatically registered for cell editing, hence the only action needed for using one of them for editing the cells of a given column is as follows:</p> <p>Use the tablelist widget's <code><b><a href= "tablelistWidget.html#columnconfigure">columnconfigure</a></b></code> subcommand to set the given column's <code><b><a href= "tablelistWidget.html#col_editable">-editable</a></b></code> option to true and its <code><b><a href= "tablelistWidget.html#col_editwindow">-editwindow</a></b></code> option to <code><b>entry</b></code>, <code><b>text</b></code>, <code><b>spinbox</b></code>, <code><b>checkbutton</b></code>, or <code><b>menubutton</b></code>, respectively. (These options are supported at cell level, too, with the aid of the <code><b><a href= "tablelistWidget.html#cellconfigure">cellconfigure</a></b></code> subcommand.) Since the default value of the <code><b>-editwindow</b></code> column configuration option is <code><b>entry</b></code>, it is not necessary to set it explicitly if the editing should take place with the aid of an embedded entry widget.</p> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="entry">Interactive Cell Editing Using the entry Widget</h2> <dl> <dt><b>DESCRIPTION</b></dt> <dd>As mentioned above, the interactive cell editing in a tablelist widget takes place per default with the aid of an embedded entry widget. Refer to the <a href="tablelistWidget.html#cell_editing">INTERACTIVE CELL EDITING</a> section of the reference page describing the <code><b>tablelist::tablelist</b></code> command for details on the editing process.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, entry</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="text">Interactive Cell Editing Using the text Widget</h2> <dl> <dt><b>DESCRIPTION</b></dt> <dd>The temporary embedded text widget used for interactive cell editing will be created with its <code><b>-padx</b></code> and <code><b>-pady</b></code> options set to <code>2</code>, its <code><b>-wrap</b></code> option set to <code><b>none</b></code>, and its initial height set to the number of lines contained in it. There is, however, an exception from this rule: If the <code><b><a href= "tablelistWidget.html#col_wrap">-wrap</a></b></code> option of the cell's column was set to true and Tk version 8.5 or higher is being used, then the text widget's <code><b>-wrap</b></code> option will be set to <code><b>word</b></code> and its initial height will equal the number of <i>display</i> lines (taking into account the line wraps) contained in it. You can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to override the initial settings (except the height) according to your needs.</dd> <dd class="tm">If the text widget's <code><b>-wrap</b></code> option was set to <code><b>word</b></code> or <code><b>char</b></code> (either by Tablelist or from within the above-mentioned script) and Tk version 8.5 or higher is being used, then, whenever its width changes (e.g., due to interactive column resizing), its height will be set automatically to the number of display lines contained in it. (The number of display lines is retrieved with the aid of the <code><b>count -displaylines</b></code> text widget subcommand, introduced in Tk 8.5.)</dd> <dd class="tm">If the widget callback package Wcb was loaded into the interpreter (via <code><b>package require Wcb</b></code> or <code><b>package require wcb</b></code>) then the text widget's height will be updated automatically whenever text is inserted into or deleted from it, which makes the editing much more user-friendly. This is achieved by using an appropriately defined after-<code><b>insert</b></code> and after-<code><b>delete</b></code> callback for the edit window. You can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to define further callbacks for the text widget. (The above-mentioned callback is created via <code><b>wcb::cbappend</b></code>, <i>after</i> returning from that script.)</dd> <dd class="tm">The <code>Tab</code> key is reserved for navigation between the editable cells, but the user can insert a tabulator character into the text widget by pressing <code>Control-i</code>.</dd> <dd class="tm">Unlike in the case of the other widgets used for interactive cell editing, the <code>Return</code> and <code>KP_Enter</code> keys insert a newline character into the text widget. <code>Control-j</code> can also be used for inserting a newline. <code>Control-Return</code> and <code>Control-KP_Enter</code> terminate the editing and destroy the edit window.</dd> <dd class="tm"><code>Control-Home</code> and <code>Control-End</code> have their well-known text widget-specific bindings, just like <code>Meta-<</code> and <code>Meta-></code> if <code><b>tk_strictMotif</b></code> is false. Again, this is different from the behavior of the other widgets used for interactive cell editing. For jumping into the first/last editable cell, the user can press <code>Alt-Home</code>/<code>Alt-End</code> or <code>Meta-Home</code>/<code>Meta-End</code> (<code>Command-Home</code>/<code>Command-End</code> on Mac OS Classic and Mac OS X Aqua).</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, text</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="spinbox">Interactive Cell Editing Using the spinbox Widget</h2> <dl> <dt><b>DESCRIPTION</b></dt> <dd>The temporary embedded spinbox widget used for interactive cell editing will be created with its <code><b>-state</b></code> option set to <code><b>normal</b></code>, which makes the widget editable. You can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to set the state of the spinbox to <code><b>readonly</b></code> or define validations for it, as well as for setting its (range of) values and its <code><b>-wrap</b></code> option.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, spinbox</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="checkbutton">Interactive Cell Editing Using the checkbutton Widget</h2> <dl> <dt><b>DESCRIPTION</b></dt> <dd>On Windows, Mac OS Classic, and Mac OS X Aqua the temporary embedded checkbutton widget used for interactive cell editing will be created with explicitly set values for its <code><b>-borderwidth</b></code>, <code><b>-font</b></code>, <code><b>-padx</b></code>, <code><b>-pady</b></code>, and <code><b>-variable</b></code> options. In an X11 environment it will be created with explicitly set values for its <code><b>-borderwidth</b></code>, <code><b>-indicatoron</b></code>, <code><b>-image</b></code>, <code><b>-selectimage</b></code>, <code><b>-selectcolor</b></code>, and <code><b>-variable</b></code> options. You can use the script corresponding to the <code><b><a href="tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to set any other options, like <code><b>-offvalue</b></code> and <code><b>-onvalue</b></code>, according to the <i>internal</i> values of the cells. Since the default values of the <code><b>-offvalue</b></code> and <code><b>-onvalue</b></code> checkbutton options are <code>0</code> and <code>1</code>, you don't need to change these options if the cells have the same internal values <code>0</code> and <code>1</code>.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, checkbutton</dd> </dl> <hr> <h2 id="menubutton">Interactive Cell Editing Using the menubutton Widget</h2> <dl> <dt><b>DESCRIPTION</b></dt> <dd>The temporary embedded menubutton widget used for interactive cell editing will be created with explicitly set values for its <code><b>-anchor</b></code>, <code><b>-indicatoron</b></code>, <code><b>-justify</b></code>, <code><b>-padx</b></code>, <code><b>-pady</b></code>, <code><b>-relief</b></code>, and <code><b>-textvariable</b></code> options. In addition, a menu with its <code><b>-tearoff</b></code> option set to <code>0</code> and an appropriate script as the value of its <code><b>-postcommand</b></code> option is created and set as the value of the menubutton's <code><b>-menu</b></code> option. In an X11 environment, the menu's appearance is adapted to that of the tablelist widget by setting its <code><b>-background</b></code>, <code><b>-foreground</b></code>, <code><b>-activebackground</b></code>, <code><b>-activeforeground</b></code>, and <code><b>-activeborderwidth</b></code> options to appropriate values. You can use the script corresponding to the <code><b><a href= "tablelistWidget.html#editstartcommand">-editstartcommand</a></b></code> tablelist configuration option to set any other options of the menubutton and/or its associated menu. You will, however, need this script in the first place for populating the menu, preferably with radiobutton entries. For every radiobutton entry added to the menu, the Tablelist implementation will make sure that its value (which can be specified by setting the entry's <code><b>-value</b></code> or <code><b>-label</b></code> option) will be displayed in the menubutton as its text when the entry is selected. (Tablelist achieves this by setting the menu entry's <code><b>-variable</b></code> option to the value of the menubutton's <code><b>-textvariable</b></code> option.) For menu entries of types other than radiobutton (e.g., for command entries) it is the responsibility of the application to make sure that the selected entry's text will be shown in the menubutton (for example, with the aid of the menu entry's <code><b>-command</b></code> option).</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>tablelist, editing, menubutton</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/tablelist/tablelistWidget.html.
more than 10,000 changes
Added embedded/www/tklib/files/modules/tablelist/tileWidgets.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/ubuntu.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/ubuntu2.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/ubuntu3.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/ubuntuMate.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/vistaAero.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/vistaClassic.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/win10.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/win7Aero.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/win7Classic.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/winnative.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/winxpBlue.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/winxpOlive.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/winxpSilver.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/tablelist/yuyo.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/wcb/entrytest.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/wcb/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 |
<html> <head> <title>The Widget Callback Package Wcb 3.6</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content= "callback, widget, entry, spinbox, listbox, tablelist, text"> </head> <body bgcolor="#FFFFFF"> <div align="center"> <h1>The Widget Callback Package Wcb 3.6</h1> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2>Contents</h2> <p><a href="wcb.html">Wcb Programmer's Guide</a></p> <p><a href="wcbRef.html">Wcb Command Reference</a></p> </body> </html> |
Added embedded/www/tklib/files/modules/wcb/listboxtest1.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/wcb/listboxtest2.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/wcb/stylesheet.css.
> > > > > |
1 2 3 4 5 |
/* generic class defining a top margin whose height equals the font size */ .tm {margin-top: 1em} /* background and border for the <pre> tag */ pre {background: #F7F7F7; border: silver solid 1px} |
Added embedded/www/tklib/files/modules/wcb/texttest1.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/wcb/texttest2.png.
cannot compute difference between binary files
Added embedded/www/tklib/files/modules/wcb/wcb.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 |
<html> <head> <title>Wcb Programmer's Guide</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content= "callback, widget, Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, listbox, tablelist, tile treeview, text, ctext"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body bgcolor="#FFFFFF"> <div align="center"> <h1>Wcb Programmer's Guide</h1> <h2>For Wcb Version 3.6</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <h4><a href="#overview">Overview</a></h4> <ul> <li><a href="#ov_problems">Some Common Problems</a></li> <li><a href="#ov_wcb">The Wcb Package</a></li> <li><a href="#ov_get">How to Get It?</a></li> <li><a href="#ov_install">How to Install It?</a></li> <li><a href="#ov_use">How to Use It?</a></li> </ul> <h4><a href="#examples">Examples</a></h4> <ul> <li><a href="#ex_entry">Some before-<code>insert</code> Callbacks for entry Widgets</a></li> <li><a href="#ex_listbox1">A <code>selset</code> Callback for a listbox Widget</a></li> <li><a href="#ex_listbox2">An <code>activate</code> Callback for a listbox Widget</a></li> <li><a href="#ex_text">Seven Callbacks for a text Widget</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="overview">Overview</h2> <h3 id="ov_problems">Some Common Problems</h3> <p>Many Tcl/Tk programmers are confronted with questions like the following:</p> <ul> <li>How to restrict the set of characters that the user can type or paste into a Tk or tile entry, BWidget Entry, Tk or tile spinbox, tile combobox, text, or ctext widget?</li> <li>How to manipulate the user input characters before they are inserted into one of these widgets? In the case of a text or ctext widget: How to change the font, colors, or other attributes of the input characters?</li> <li>How to set a limit for the number of characters that can be typed or pasted into a Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget?</li> <li>How to protect some parts of the text contained in a Tk or tile entry, BWidget Entry, Tk or tile spinbox, tile combobox, text, or ctext widget from being changed by the user?</li> <li>How to define notifications to be triggered automatically after text is inserted into or deleted from one of these widgets?</li> <li>How to define some actions to be invoked automatically whenever the insertion cursor in a Tk or tile entry, BWidget Entry, Tk or tile spinbox, tile combobox, text, or ctext widget is moved?</li> <li>How to define a command to be called automatically when selecting a listbox element, a tablelist row or cell, a tile treeview item, or a range of characters in a text or ctext widget?</li> <li>How to protect any or all items/elements of a listbox, tablelist, or tile treeview, or a range of characters in a text or ctext widget from being selected?</li> </ul> <p>In most books, FAQs, newsgroup articles, and widget sets, you can find <i>individual</i> solutions to some of the above problems by means of widget bindings. This approach is based on adding new binding tags or modifying some of the existing ones, which quite often proves to be incomplete.</p> <p>The Tk core addresses just a few of the above problems: In Tk 8.1 the <code><<ListboxSelect>></code> virtual event for listbox widgets was introduced, Tk versions 8.3 and higher support widget options for entry validation, and the spinbox widget (introduced in Tk 8.4) provides the same validation facility. Finally, Tk versions 8.4 and higher support the <code>disabled</code> state for listbox widgets, as well as the <code>modified</code> flag, the <code><<Modified>></code> and <code><<Selection>></code> virtual events, and an undo/redo mechanism for text widgets. However, also these improvements are of <i>individual</i> nature.</p> <h3 id="ov_wcb">The Wcb Package</h3> <p>The <b>W</b>idget <b>c</b>all<b>b</b>ack package Wcb provides a completely different, <i>general</i> solution to the above problems: Based on redefining the Tcl command corresponding to a widget, the main Wcb procedure <code><a href="wcbRef.html#callback">wcb::callback</a></code> enables you to associate arbitrary commands with some Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, listbox, tablelist, tile treeview, text, and ctext widget operations. These commands will be invoked automatically in the global scope whenever the respective widget operation is executed. You can request that these commands be called either before or after executing the respective widget operation, i.e., you can define both <b>before-</b> and <b>after-callbacks</b>. From within a before-callback, you can cancel the respective widget command by invoking the procedure <code><a href="wcbRef.html#cancel">wcb::cancel</a></code>, or modify its arguments by calling <code><a href= "wcbRef.html#extend">wcb::extend</a></code> or <code><a href= "wcbRef.html#replace">wcb::replace</a></code>.</p> <p>Besides these (and four other) general-purpose commands, the Wcb package exports four utility procedures for Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, and tile combobox widgets, as well as some before-<code>insert</code> callbacks for <a href="wcbRef.html#entrycb">Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox</a>, <a href="wcbRef.html#textcb">text, and ctext</a> widgets, which you can use unchanged or modify to suit your needs. To learn how to do this, have a look at the <a href="#examples">Examples</a> section below.</p> <p>The Wcb package is implemented in pure Tcl/Tk code, which makes it completely platform-independent and very easy to install. It requires version 8.0 or higher of both Tcl and Tk.</p> <h3 id="ov_get">How to Get It?</h3> <p>Wcb is available for free download from the Web page</p> <blockquote> <address> <a href="http://www.nemethi.de">http://www.nemethi.de</a> </address> </blockquote> <p>The distribution file is <code>wcb3.6.tar.gz</code> for UNIX and <code>wcb3_6.zip</code> 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.</p> <p>Wcb is also included in tklib, which has the address</p> <blockquote> <address> <a href="http://core.tcl.tk/tklib">http://core.tcl.tk/tklib</a> </address> </blockquote> <h3 id="ov_install">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. For example, you can install it as a directory at the same level as the Tcl and Tk script libraries. The locations of these library directories are given by the <code>tcl_library</code> and <code>tk_library</code> variables, respectively.</p> <p>To install Wcb <i>on UNIX</i>, <code>cd</code> to the desired directory and unpack the distribution file <code>wcb3.6.tar.gz</code>:</p> <blockquote> <pre> gunzip -c wcb3.6.tar.gz | tar -xf - </pre> </blockquote> <p>This command will create a directory named <code>wcb3.6</code>, with the subdirectories <code>demos</code>, <code>doc</code>, and <code>scripts</code>.</p> <p><i>On Windows</i>, use WinZip or some other program capable of unpacking the distribution file <code>wcb3_6.zip</code> into the directory <code>wcb3.6</code>, with the subdirectories <code>demos</code>, <code>doc</code>, and <code>scripts</code>.</p> <p>Notice that in tklib the Wcb <code>demos</code> directory is replaced with the subdirectory <code>wcb</code> of the <code>examples</code> directory. Please take this into account when reading the <a href= "#examples">examples</a> below.</p> <h3 id="ov_use">How to Use It?</h3> <p>To be able to access the commands and variables defined in the package Wcb, your scripts must contain one of the lines</p> <blockquote> <pre> package require wcb ?<i>version</i>? package require Wcb ?<i>version</i>? </pre> </blockquote> <p>You can use either one of the two statements above because the file <code>wcb.tcl</code> contains both lines</p> <blockquote> <pre> package provide wcb ... package provide Wcb ... </pre> </blockquote> <p>You are free to remove one of these two lines from <code>wcb.tcl</code> if you want to prevent the package from making itself known under two different names. Of course, by doing so you restrict the argument of <code>package require</code> to a single name.</p> <p>Please note that <b>ActiveTcl versions 8.5 and later use a modified package mechanism, which only exports the all-lowercase name <code>wcb</code></b>. For this reason, the <a href= "#examples">examples</a> below use the statement <code>package require wcb</code>.</p> <p>Since the package Wcb is implemented in its own namespace called <code>wcb</code>, you must either invoke the</p> <blockquote> <pre> namespace import wcb::<i>pattern</i> ?wcb::<i>pattern ...</i>? </pre> </blockquote> <p>command to import the <i>procedures</i> you need, or use qualified names like <code>wcb::callback</code>. In the examples below we have chosen the latter approach.</p> <p>To access Wcb <i>variables</i>, you <i>must</i> use qualified names. There are only two Wcb variables that are designed to be accessed outside the namespace <code>wcb</code>:</p> <ul> <li>The variable <code>wcb::version</code> holds the current version number of the Wcb package.</li> <li>The variable <code>wcb::library</code> holds the location of the Wcb installation directory.</li> </ul> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="examples">Examples</h2> <h3 id="ex_entry">Some before-<code>insert</code> Callbacks for entry Widgets</h3> <p>The script <code>entrytest.tcl</code> in the <code>demos</code> directory creates three entry widgets with the constraints shown in the following figure:</p> <blockquote> <img src="entrytest.png" alt="entrytest" width="367" height="287"> </blockquote> <p>For the topmost entry <code>.e1</code> we define two before-<code>insert</code> callbacks contained in the Wcb package:</p> <blockquote> <pre> wcb::callback .e1 before insert wcb::checkStrForAlnum \ wcb::convStrToUpper </pre> </blockquote> <p>To force the second entry <code>.e2</code> to accept only integers of maximal length 10, we use again two before-<code>insert</code> callbacks from Wcb:</p> <blockquote> <pre> wcb::callback .e2 before insert {wcb::checkEntryLen 10} \ wcb::checkEntryForInt </pre> </blockquote> <p>And finally, here are the two callbacks for the third entry widget <code>.e3</code>:</p> <blockquote> <pre> wcb::callback .e3 before insert {wcb::checkEntryLen 10} \ checkNumber # # Callback procedure checkNumber # proc checkNumber {w idx str} { set newText [wcb::postInsertEntryText $w $idx $str] if {![regexp {^[0-9]*\.?[0-9]?[0-9]?$} $newText]} { wcb::cancel } } </pre> </blockquote> <p>This last example also shows the arguments of the callbacks declared with the <code><a href="wcbRef.html#callback">wcb::callback</a></code> command: Whenever a callback is invoked, the name of the original Tcl command for the widget as well as the arguments of the respective widget operation are automatically appended to it as parameters. Since we defined <code>checkNumber</code> as a before-callback for the <code>insert</code> subcommand, its last three arguments must be: the name of the original entry widget command (<code>w</code>), the index (<code>idx</code>), and the string (<code>str</code>) to be inserted just before the character indicated by the index.</p> <p>Notice that in the argument list of a Wcb callback, the name of the original Tcl widget command can be be preceded by any number of additional arguments. The procedure <code><a href= "wcbRef.html#entrycb">wcb::checkEntryLen</a></code> is an example of such a callback.</p> <p>The command <code><a href= "wcbRef.html#postInsertEntryText">wcb::postInsertEntryText</a></code> invoked in the procedure <code>checkNumber</code> returns the text that would be contained in the entry widget <code>w</code> after inserting the string <code>str</code> before the character indicated by the index <code>idx</code>. If this text is not (the starting part of) an unsigned real number with at most two digits after the decimal point, then we call the procedure <code><a href="wcbRef.html#cancel">wcb::cancel</a></code>, which aborts the <code>insert</code> command.</p> <p>Without the constraint that the content of the third entry must not start with a sign, we could have used the callback procedure <code><a href= "wcbRef.html#entrycb">wcb::checkEntryForFixed</a></code> instead of <code>checkNumber</code>:</p> <blockquote> <pre> wcb::callback .e3 before insert {wcb::checkEntryLen 10} \ {wcb::checkEntryForFixed 2} </pre> </blockquote> <h3 id="ex_listbox1">A <code>selset</code> Callback for a listbox Widget</h3> <p>In the case of a listbox, you will probably most often want to define a callback for the <code>selection set</code> widget subcommand. In most cases it does not matter whether this is a before- or after-callback. Please note that the <code><a href= "wcbRef.html#callback">wcb::callback</a></code> command expects the abbreviated form <code>selset</code> as parameter. Similarly, you must pass <code>selclear</code> to this command when defining a callback for the <code>selection clear</code> listbox operation.</p> <p>In the following example we build a listbox <code>.lb</code> containing the names of the bitmap files in the subdirectory <code>images</code> of the directory <code>demos</code> in the Tk library directory. Whenever an item is selected, the callback procedure <code>showBitmap</code> will display the corresponding bitmap in the label <code>.picture</code>.</p> <blockquote> <img src="listboxtest1.png" alt="listboxtest1" width="201" height="169"> </blockquote> <p>Here is the relevant code fragment from the script <code>listboxtest1.tcl</code>, contained in the <code>demos</code> directory:</p> <blockquote> <pre> set dirName [file join $tk_library demos images] # # Frame .spacer and listbox .lb # frame .spacer -width 10 listbox .lb -height 0 -width 0 -background gray98 if {$tk_version < 8.5} { set pattern [file join $dirName *.bmp] } else { set pattern [file join $dirName *.xbm] } foreach pathName [lsort [glob $pattern]] { .lb insert end [file tail $pathName] } # # Label .picture # label .picture -relief sunken # # Define a before-selset callback for .lb # wcb::callback .lb before selset showBitmap # # Callback procedure showBitmap # proc showBitmap {w first args} { global dirName set pathName [file join $dirName [$w get $first]] .picture configure -bitmap @$pathName } </pre> </blockquote> <p>Recall that the <code>selection set</code> listbox operation takes as arguments one or two indices, which will be passed automatically to the callback as parameters, along with the name of the original Tcl command associated with the listbox widget. For this reason, the arguments of the callback procedure <code>showBitmap</code> are: the name of the original listbox widget command (<code>w</code>), the first index (<code>first</code>), as well as the <code>args</code> keyword representing the empty list or the optional second index passed to the <code>selection set</code> command.</p> <h3 id="ex_listbox2">An <code>activate</code> Callback for a listbox Widget</h3> <p>The listbox used in the preceding example has the default selection mode <code>browse</code>, hence the before-<code>selset</code> callback <code>showBitmap</code> will be fired every time the mouse is dragged from one element to another, with button 1 down. But what happens if we want to display not only the bitmaps but also the photo images contained in the subdirectory <code>images</code> of the directory <code>demos</code> in the Tk library directory? Loading a photo image is a much more complex operation than loading a bitmap, which can have the effect that some images cannot be displayed quickly enough to follow the mouse when browsing with it within the listbox.</p> <blockquote> <img src="listboxtest2.png" alt="listboxtest2" width="212" height="249"> </blockquote> <p>To solve this problem, we can either change the selection mode to have the less common value <code>single</code>, or arrange for the images not to be displayed when browsing with the mouse but when releasing its button 1. The second method can be implemented with the aid of an <code>activate</code> callback, as shown in the following code fragment taken from the script <code>listboxtest2.tcl</code>, contained in the <code>demos</code> directory:</p> <blockquote> <pre> set dirName [file join $tk_library demos images] image create photo photoImage # # Frame .spacer and listbox .lb # frame .spacer -width 10 listbox .lb -height 0 -width 0 -background gray98 set pattern [file join $dirName *] foreach pathName [lsort [glob $pattern]] { .lb insert end [file tail $pathName] } # # Label .picture # label .picture -relief sunken # # Define a before-activate callback for .lb # wcb::callback .lb before activate showPicture # # Callback procedure showPicture # proc showPicture {w idx} { set leafName [$w get $idx] # # When traversing the listbox with the arrow keys, the value # of idx can become -1 or the number of listbox elements, # hence the value of leafName can be an empty string: # if {[string compare $leafName ""] == 0} { return "" } global dirName set pathName [file join $dirName $leafName] if {[regexp {^\.(bmp|xbm)$} [file extension $pathName]]} { .picture configure -bitmap @$pathName -image "" } else { photoImage configure -file $pathName .picture configure -bitmap "" -image photoImage } } </pre> </blockquote> <h3 id="ex_text">Seven Callbacks for a text Widget</h3> <p>The script <code>texttest1.tcl</code> in the <code>demos</code> directory creates the text widget shown in the following figure:</p> <blockquote> <img src="texttest1.png" alt="texttest1" width="376" height="291"> </blockquote> <p>Here is the relevant code fragment:</p> <blockquote> <pre> # # Text .txt # set width 50 text .txt -width $width -height 12 -setgrid true -wrap none -background white \ -font "Courier -12" .txt tag configure prog -foreground red .txt tag configure user -foreground DarkGreen .txt insert end "Everything you type or paste into this window will\n" prog .txt insert end "be displayed in dark green. You cannot make any\n" prog .txt insert end "changes or selections in this red area, and will\n" prog .txt insert end "not be able to send the message as long as any\n" prog .txt insert end "line contains more than $width characters.\n" prog .txt insert end "--------------------------------------------------\n" prog set limit [.txt index insert] # # Label .pos displaying the current cursor position # label .pos -textvariable pos # # Button .send (actually, it does not send anything) # button .send -text Send -command exit # # Define 5 before- and 2 after-callbacks for .txt # wcb::callback .txt before insert protectRedArea changeColor wcb::callback .txt before delete protectRedArea wcb::callback .txt before selset protectRedArea wcb::callback .txt before motion displayPos wcb::callback .txt after insert "checkLines $width" wcb::callback .txt after delete "checkLines $width" # # Callback procedure protectRedArea # # The parameters following w can be interpreted either as # "index string ?tagList string tagList ...?" (for an insert # callback), or as "from ?to?" (for a delete callback), # or as "from ?to from to ...?" (for a selset callback). # proc protectRedArea {w idx args} { global limit if {[$w compare $idx < $limit]} { wcb::cancel } } # # Callback procedure changeColor # proc changeColor {w args} { wcb::extend user } # # Callback procedure displayPos # proc displayPos {w idx} { set index [$w index $idx] scan $index "%d.%d" line column incr column global pos set pos [format "Line: %d Column: %d" $line $column] } # # Callback procedure checkLines # # The parameter args can be interpreted both as "index # string ?tagList string tagList ...?" (for an insert # callback) and as "from ?to?" (for a delete callback). # proc checkLines {maxCharsPerLine w args} { # # Display the new cursor position # displayPos $w insert # # Disable or enable the .send button # scan [$w index end] "%d" lastLine for {set line 1} {$line < $lastLine} {incr line} { scan [$w index $line.end] "%d.%d" dummy charsInLine if {$charsInLine > $maxCharsPerLine} { .send configure -state disabled return "" } } .send configure -state normal } . . . displayPos .txt insert focus .txt </pre> </blockquote> <p>The procedure <code>protectRedArea</code> is a before-<code>insert</code>, before-<code>delete</code>, and before-<code>selset</code> callback. It checks whether the attempted change would affect the text area displayed in red; if this is the case, it calls the procedure <code><a href= "wcbRef.html#cancel">wcb::cancel</a></code>, which aborts the <code>insert</code>, <code>delete</code>, or <code>tag add sel</code> command, respectively.</p> <p>The before-<code>insert</code> callback <code>changeColor</code> invokes the <code><a href="wcbRef.html#extend">wcb::extend</a></code> command to append the <code>user</code> tag to the argument list of the <code>insert</code> command, thus changing the foreground color of the characters entered by the user to <code>DarkGreen</code>.</p> <p>The procedure <code>displayPos</code> displays the line and column corresponding to the index passed to it as its second argument. This index will be the target position of the insertion cursor when the procedure is triggered automatically as a before-<code>motion</code> callback. As seen in the <code>checkLines</code> procedure discussed below, it is also invoked after performing an <code>insert</code> or <code>delete</code> operation; in that case, its second argument will be the new position of the insertion cursor after the execution of <code>insert</code> or <code>delete</code>. In this way, we are able to keep track completely of the position of the insertion cursor.</p> <p>It is interesting to see what happens if we register <code>displayPos</code> as an after- instead of before-<code>motion</code> callback. Well, in that case the procedure would have to ignore its second argument and we would have to replace the line</p> <blockquote> <pre> set index [$w index $idx] </pre> </blockquote> <p>with</p> <blockquote> <pre> set index [$w index insert] </pre> </blockquote> <p>The reason is that the value of the <code>idx</code> argument passed to <code>displayPos</code> can be, for instance, <code>insert+1c</code>, where <code>insert</code> means the position of the insertion cursor <i>before</i> moving it forward by one character. The after-<code>motion</code> callback is, however, triggered <i>after</i> the insertion cursor has been moved, and at that time the <code>insert</code> mark already points to the new cursor position. For this reason, <code>[$w index $idx]</code> is not adequate to retrieve the position of the insertion cursor within an after-<code>motion</code> callback.</p> <p>Our last procedure <code>checkLines</code> is both an after-<code>insert</code> and after-<code>delete</code> callback. After calling <code>displayPos</code> to display the new cursor position, it disables or enables the <code>.send</code> button, depending upon whether any line of the text widget contains more than <code>$maxCharsPerLine</code> characters.</p> <p>Notice that we could also have defined before-<code>replace</code> and after-<code>replace</code> callbacks for the <code>replace</code> text widget subcommand, introduced in Tk version 8.6. There is, however, no need for it, because the default text widget bindings currently don't make use of this subcommand.</p> <p>Instead of just disabling the <code>.send</code> button if any line has more than <code>$maxCharsPerLine</code> characters, we can even prevent the user from entering lines that are longer than allowed. The script <code>texttest2.tcl</code> in the <code>demos</code> directory shows how this can be achieved by combining widget callbacks with the undo mechanism for text widgets, introduced in Tk 8.4. This script creates the text widget shown in the following figure:</p> <blockquote> <img src="texttest2.png" alt="texttest2" width= "376" height="291"> </blockquote> <p>Most of the code contained in the script <code>texttest2.tcl</code> is identical to the one in the previous example. The main difference is a new line activating the undo mechanism for the text widget <code>.txt</code> and a new version of the callback procedure <code>checkLines</code>:</p> <blockquote> <pre> . . . .txt configure -undo yes . . . proc checkLines {maxCharsPerLine w args} { # # Undo the last insert or delete action if necessary # scan [$w index end] "%d" lastLine for {set line 1} {$line < $lastLine} {incr line} { scan [$w index $line.end] "%d.%d" dummy charsInLine if {$charsInLine > $maxCharsPerLine} { $w edit undo bell break } } # # Clear the undo and redo stacks, and display the new cursor position # $w edit reset displayPos $w insert } . . . </pre> </blockquote> <p>This version of the callback <code>checkLines</code> undoes the last edit action if any text line contains more characters than the allowed maximum. For this reason, we had to move the invocation of the <code>displayPos</code> procedure to the end of the callback, because the <code>edit undo</code> command might change the position of the insertion cursor.</p> <p>Note that we could have implemented this example also without making use of the undo mechanism for text widgets, by saving the last accepted contents of the widget, along with the cursor position, and restoring them in case any line gets longer than allowed. The resulting script would then run with Tk versions earlier than 8.4, too.</p> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Added embedded/www/tklib/files/modules/wcb/wcbRef.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 |
<html> <head> <title>Wcb Command Reference</title> <meta name="Author" content="Csaba Nemethi"> <meta name="Keywords" content= "callback, widget, Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, listbox, tablelist, tile treeview, text, ctext"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> </head> <body bgcolor="#FFFFFF"> <div align="center"> <h1>Wcb Command Reference</h1> <h2>For Wcb Version 3.6</h2> <h3>by</h3> <h2>Csaba Nemethi</h2> <address> <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a> </address> </div> <hr> <h2 id="contents">Contents</h2> <ul> <li><a href="#callback">The <code><b>wcb::callback</b></code> Command</a></li> <li><a href="#cbappend">The <code><b>wcb::cbappend</b></code> Command</a></li> <li><a href="#cbprepend">The <code><b>wcb::cbprepend</b></code> Command</a></li> <li><a href="#cancel">The <code><b>wcb::cancel</b></code> Command</a></li> <li><a href="#canceled">The <code><b>wcb::canceled</b></code> Command</a></li> <li><a href="#extend">The <code><b>wcb::extend</b></code> Command</a></li> <li><a href="#replace">The <code><b>wcb::replace</b></code> Command</a></li> <li><a href="#pathname">The <code><b>wcb::pathname</b></code> Command</a></li> <li><a href="#changeEntryText">The <code><b>wcb::changeEntryText</b></code> Command</a></li> <li><a href="#postInsertEntryLen">The <code><b>wcb::postInsertEntryLen</b></code> Command</a></li> <li><a href="#postInsertEntryText">The <code><b>wcb::postInsertEntryText</b></code> Command</a></li> <li><a href="#postDeleteEntryText">The <code><b>wcb::postDeleteEntryText</b></code> Command</a></li> <li><a href="#entrycb">Before-<code><b>insert</b></code> Callbacks for entry, spinbox, and combobox Widgets</a></li> <li><a href="#textcb">Before-<code><b>insert</b></code> Callbacks for text and ctext Widgets</a></li> </ul> <div align="center"> <p><a href="index.html">Start page</a></p> </div> <hr> <h2 id="callback">The <code><b>wcb::callback</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::callback</code> – Retrieve, set, and remove widget callbacks</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::callback</b> <i>widgetName</i> <b>before</b>|<b>after</b> <i>option</i> ?<i>callback</i> <i>callback</i> ...? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>Retrieves, sets, or removes the callbacks for the Tk or tile entry, BWidget Entry, Tk or tile spinbox, tile combobox, listbox, tablelist, tile treeview, text, or ctext widget <code><i>widgetName</i></code>, the argument <code><b>before</b></code> or <code><b>after</b></code>, and the command corresponding to <code><i>option</i></code>. The values of the <code><i>option</i></code> argument can be:</dd> <dd class="tm"> <ul> <li><code><b>insert</b></code>, <code><b>delete</b></code>, or <code><b>motion</b></code>, for a Tk or tile entry, BWidget Entry, Tk or tile spinbox, tile combobox, text, or ctext widget;</li> <li><code><b>replace</b></code>, for a text or ctext widget;</li> <li><code><b>activate</b></code>, for a listbox, tablelist, or tile treeview widget;</li> <li><code><b>selset</b></code> or <code><b>selclear</b></code>, for a listbox, tablelist, tile treeview, text, or ctext widget;</li> <li><code><b>seladd</b></code> or <code><b>seltoggle</b></code>, for a tile treeview widget;</li> <li><code><b>activatecell</b></code>, <code><b>cellselset</b></code>, or <code><b>cellselclear</b></code>, for a tablelist widget.</li> </ul> </dd> <dd class="tm">If no arguments after the <code><i>option</i></code> parameter are specified, then the procedure just returns the current before- or after-callback list, respectively, for the given widget operation.</dd> <dd class="tm">Otherwise:</dd> <dd> <ul> <li> <p>If at least one of the arguments following the <code><i>option</i></code> parameter is a nonempty string, then:</p> <ul> <li>if called for the first time for this widget with at least one nonempty argument following the <code><i>option</i></code> parameter, then the procedure renames the Tcl command <code><i>widgetName</i></code> to <code>_<i>widgetName</i></code> and builds a new procedure <code><i>widgetName</i></code>, in which the execution of the widget operations associated with the above values of <code><i>option</i></code> is preceded by invocations of the corresponding before-callbacks and followed by calls to the corresponding after-callbacks, in the global scope;</li> <li class="tm">it sets the callback list to the one built from these arguments and returns the new list.</li> </ul> </li> <li class="tm">If all arguments following the <code><i>option</i></code> parameter are empty, then the procedure unregisters all the corresponding before- or after-callbacks for the given widget and returns an empty string.</li> </ul> </dd> <dd class="tm">When a callback is invoked, the name of the original Tcl command for the widget <code><i>widgetName</i></code> as well as the command arguments are automatically appended to it as parameters.</dd> <dd class="tm">The following table shows the widget subcommands corresponding to the above values of <code><i>option</i></code>, together with the arguments of these subcommands:</dd> <dd class="tm" id="callback_table"> <table border="2" cellspacing="0" cellpadding="3"> <tr bgcolor="#FFFFE0"> <th align="left">Widget</th> <th align="left"><code><i>option</i></code></th> <th align="left">Subcommand</th> <th align="left">Arguments</th> </tr> <tr> <td rowspan="3">Tk entry, ttk::entry,<br> BWidget Entry,<br> Tk spinbox, ttk::spinbox,<br> or ttk::combobox</td> <td><code><b>insert</b></code></td> <td><code><b>insert</b></code></td> <td><code><i>index</i> <i>string</i></code></td> </tr> <tr> <td><code><b>delete</b></code></td> <td><code><b>delete</b></code></td> <td><code><i>from</i> ?<i>to</i>?</code></td> </tr> <tr> <td><code><b>motion</b></code></td> <td><code><b>icursor</b></code></td> <td><code><i>index</i></code></td> </tr> <tr> <td rowspan="3">listbox</td> <td><code><b>activate</b></code></td> <td><code><b>activate</b></code></td> <td><code><i>index</i></code></td> </tr> <tr> <td><code><b>selset</b></code></td> <td><code><b>selection set</b></code></td> <td><code><i>first</i> ?<i>last</i>?</code></td> </tr> <tr> <td><code><b>selclear</b></code></td> <td><code><b>selection clear</b></code></td> <td><code><i>first</i> ?<i>last</i>?</code></td> </tr> <tr> <td rowspan="6">tablelist::tablelist</td> <td><code><b>activate</b></code></td> <td><code><b>activate</b></code></td> <td><code><i>index</i></code></td> </tr> <tr> <td><code><b>selset</b></code></td> <td><code><b>selection set</b></code></td> <td><code><i>first</i> ?<i>last</i>?</code></td> </tr> <tr> <td><code><b>selclear</b></code></td> <td><code><b>selection clear</b></code></td> <td><code><i>first</i> ?<i>last</i>?</code></td> </tr> <tr> <td><code><b>activatecell</b></code></td> <td><code><b>activatecell</b></code></td> <td><code><i>cellIndex</i></code></td> </tr> <tr> <td><code><b>cellselset</b></code></td> <td><code><b>cellselection set</b></code></td> <td><code><i>first</i> ?<i>last</i>?</code></td> </tr> <tr> <td><code><b>cellselclear</b></code></td> <td><code><b>cellselection clear</b></code></td> <td><code><i>first</i> ?<i>last</i>?</code></td> </tr> <tr> <td rowspan="5">ttk::treeview</td> <td><code><b>activate</b></code></td> <td><code><b>focus</b></code></td> <td><code><i>item</i></code></td> </tr> <tr> <td><code><b>selset</b></code></td> <td><code><b>selection set</b></code></td> <td><code><i>itemList</i></code></td> </tr> <tr> <td><code><b>seladd</b></code></td> <td><code><b>selection add</b></code></td> <td><code><i>itemList</i></code></td> </tr> <tr> <td><code><b>selclear</b></code></td> <td><code><b>selection remove</b></code></td> <td><code><i>itemList</i></code></td> </tr> <tr> <td><code><b>seltoggle</b></code></td> <td><code><b>selection toggle</b></code></td> <td><code><i>itemList</i></code></td> </tr> <tr> <td rowspan="6">text or ctext</td> <td><code><b>insert</b></code></td> <td><code><b>insert</b></code></td> <td><code><i>index</i> <i>string</i> ?<i>tagList</i> <i>string</i> <i>tagList</i> ...?</code></td> </tr> <tr> <td><code><b>delete</b></code></td> <td><code><b>delete</b></code></td> <td><code><i>from</i> ?<i>to</i>?</code></td> </tr> <tr> <td><code><b>replace</b></code></td> <td><code><b>replace</b></code></td> <td><code><i>from</i> <i>to</i> <i>string</i> ?<i>tagList</i> <i>string</i> <i>tagList</i> ...?</code></td> </tr> <tr> <td><code><b>motion</b></code></td> <td><code><b>mark set insert</b></code></td> <td><code><i>index</i></code></td> </tr> <tr> <td><code><b>selset</b></code></td> <td><code><b>tag add sel</b></code></td> <td><code><i>from</i> ?<i>to</i> <i>from</i> <i>to</i> ...?</code></td> </tr> <tr> <td><code><b>selclear</b></code></td> <td><code><b>tag remove sel</b></code></td> <td><code><i>from</i> ?<i>to</i> <i>from</i> <i>to</i> ...?</code></td> </tr> </table> </dd> <dd class="tm"><b>REMARKS:</b></dd> <dd class="tm"> <ol> <li>You may abbreviate the words <code><b>before</b></code>, <code><b>after</b></code>, <code><b>insert</b></code>, <code><b>delete</b></code>, <code><b>replace</b></code>, <code><b>motion</b></code>, and <code><b>activate</b></code> (the latter not for tablelist widgets) to a minimum of one character. Similarly, the first four characters of the words <code><b>selset</b></code>, <code><b>selclear</b></code>, <code><b>seladd</b></code>, and <code><b>seltoggle</b></code>, the first eight characters of <code><b>cellselset</b></code> and <code><b>cellselclear</b></code>, and the first nine characters of <code><b>activatecell</b></code> are sufficient for Wcb to recognize these options.</li> <li class="tm">After a successful invocation of this command with at least one nonempty callback following the <code><i>option</i></code> argument, you can use either the new procedure <code><i>widgetName</i></code> or the original Tcl command <code>_<i>widgetName</i></code> to perform any valid operation on the widget <code><i>widgetName</i></code>. Use the old Tcl command <code>_<i>widgetName</i></code> if you want to prevent the callbacks from being invoked when executing the respective widget subcommand.</li> <li class="tm">When destroying a widget <code><i>widgetName</i></code> for which <code><b>wcb::callback</b></code> has replaced the corresponding Tcl command with a new procedure, the original command <code>_<i>widgetName</i></code> is deleted automatically by the Tcl interpreter (this is not true in the case of a BWidget Entry, tablelist, or ctext widget). The new widget procedure <code><i>widgetName</i></code> would persist, but Wcb arranges for it to be deleted from within a cleanup script bound to the <code><b><Destroy></b></code> event. This cleanup script is associated with a binding tag called <code><b>WcbCleanup</b></code>, which is appended to the list of binding tags of the widget the first time when registering some callbacks for it. (In the case of a BWidget Entry, tablelist, or ctext widget, this script also deletes the original Tcl command <code>_<i>widgetName</i></code>.)</li> <li class="tm">The cleanup script mentioned above also unregisters all callbacks defined for <code><i>widgetName</i></code>, thus ensuring that a widget with the same path created later will not inherit them from the widget just deleted (this can be important in some applications). For this reason, you should be careful not to remove <code><b>WcbCleanup</b></code> from the list of binding tags of the given widget!</li> </ol> </dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>callback, widget, Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, listbox, tablelist, tile treeview, text, ctext</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="cbappend">The <code><b>wcb::cbappend</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::cbappend</code> – Append to a callback list</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::cbappend</b> <i>widgetName</i> <b>before</b>|<b>after</b> <i>option</i> ?<i>callback</i> <i>callback</i> ...? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command is almost identical to <code><b><a href= "#callback">wcb::callback</a></b></code>. The only difference is that <code><b>wcb::cbappend</b></code> <i>appends</i> the arguments specified after the <code><i>option</i></code> parameter to the current callback list (if present), while <code><b>wcb::callback</b></code> <i>replaces</i> the old callbacks with these arguments.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>callback, append, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="cbprepend">The <code><b>wcb::cbprepend</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::cbprepend</code> – Prepend to a callback list</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::cbprepend</b> <i>widgetName</i> <b>before</b>|<b>after</b> <i>option</i> ?<i>callback</i> <i>callback</i> ...? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This command is almost identical to <code><b><a href= "#callback">wcb::callback</a></b></code>. The only difference is that <code><b>wcb::cbprepend</b></code> <i>prepends</i> the arguments specified after the <code><i>option</i></code> parameter to the current callback list (if present), while <code><b>wcb::callback</b></code> <i>replaces</i> the old callbacks with these arguments.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>callback, prepend, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="cancel">The <code><b>wcb::cancel</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::cancel</code> – Cancel a widget command</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::cancel</b> ?<i>script</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This procedure is designed to be invoked from a before-callback for a widget command. It cancels the execution of that command and of the remaining callbacks, and evaluates the <code><i>script</i></code> argument in the global scope. If this argument is not specified, it defaults to the <code><b>bell</b></code> command.</dd> <dd class="tm">The return value is the one obtained from <code><i>script</i></code> if this argument is specified and nonempty. Otherwise, the command returns an empty string.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>cancel, command, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="canceled">The <code><b>wcb::canceled</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::canceled</code> – Query the canceled status of a widget command</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::canceled</b> <i>widgetName</i> <i>option</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>Returns the value <code>1</code> if the most recent invocation of the widget operation corresponding to <code><i>widgetName</i></code> and <code><i>option</i></code> has been aborted by some before-callback by invoking <code><b><a href="#cancel">wcb::cancel</a></b></code>; otherwise, the return value is <code>0</code>. The arguments must fulfil the same restrictions as in the case of the <code><b><a href= "#callback">wcb::callback</a></b></code> command.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>cancel, command, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="extend">The <code><b>wcb::extend</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::extend</code> – Extend the argument list of a widget command</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::extend</b> ?<i>arg</i> <i>arg</i> ...? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This procedure is designed to be invoked from a before-callback for a widget command. It appends the values given in the optional <code><i>arg</i></code> parameters to the argument list of that command. The new argument list will be passed to the remaining callbacks for that command, too.</dd> <dd class="tm">This procedure simply passes its parameters to the <code><b>lappend</b></code> command, called for the argument list of the respective widget operation.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>extend, argument, command, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="replace">The <code><b>wcb::replace</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::replace</code> – Replace arguments of a widget command with new ones</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::replace</b> <i>first</i> <i>last</i> ?<i>arg</i> <i>arg</i> ...? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This procedure is designed to be invoked from a before-callback for a widget command. It replaces the arguments having the indices <code><i>first</i></code> through <code><i>last</i></code> of that command with the optional <code><i>arg</i></code> parameters. The new argument list will be passed to the remaining callbacks for that command, too. The arguments are numbered from <code>0</code> (see the <a href= "#callback_table">table</a> in the description of the <code><b><a href= "#callback">wcb::callback</a></b></code> command).</dd> <dd class="tm">This procedure simply passes its parameters to the <code><b>lreplace</b></code> command, called for the argument list of the respective widget operation.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>replace, argument, command, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="pathname">The <code><b>wcb::pathname</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::pathname</code> – Query the path name of the widget corresponding to a Tcl command name</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::pathname</b> <i>origCmd</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>This procedure returns the path name of the widget corresponding to the Tcl command name <code><i>origCmd</i></code> passed to a callback.</dd> <dd class="tm">When a before- or after-callback for a widget is invoked, the name of the original Tcl command associated with that widget is automatically appended to it as parameter. This procedure can be used within a callback to derive the path name of the widget from the command name passed to the callback as argument. It simply returns the string range obtained from <code><i>origCmd</i></code> by removing the <code>"::_"</code> prefix.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>path name, command, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="changeEntryText">The <code><b>wcb::changeEntryText</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::changeEntryText</code> – Change the text of a Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::changeEntryText</b> <i>widgetName string</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>Replaces the text of the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>widgetName</i></code> with <code><i>string</i></code>, by using the <code><b>delete</b></code> and <code><b>insert</b></code> operations. If the first subcommand is canceled by some before-<code><b>delete</b></code> callback then the procedure returns without inserting the new text; if the second operation is canceled by some before-<code><b>insert</b></code> callback then the command restores the original contents of the widget.</dd> <dd class="tm">The procedure keeps the position of the insertion cursor. The return value is <code>1</code> on success and <code>0</code> on failure, i.e., if one of the attempted operations was canceled by some before-callback.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="postInsertEntryLen">The <code><b>wcb::postInsertEntryLen</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::postInsertEntryLen</code> – Query the would-be length of the text in a Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget after text insertion</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::postInsertEntryLen</b> <i>widgetName string</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>Returns the length of the text that would be contained in the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>widgetName</i></code> after inserting <code><i>string</i></code>.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>insert, Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="postInsertEntryText">The <code><b>wcb::postInsertEntryText</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::postInsertEntryText</code> – Query the would-be text of a Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget after text insertion</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::postInsertEntryText</b> <i>widgetName index string</i> </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>Returns the text that would be contained in the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>widgetName</i></code> after inserting <code><i>string</i></code> before the character indicated by <code><i>index</i></code>.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>insert, Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="postDeleteEntryText">The <code><b>wcb::postDeleteEntryText</b></code> Command</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::postDeleteEntryText</code> – Query the would-be text of a Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget after text deletion</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::postDeleteEntryText</b> <i>widgetName from</i> ?<i>to</i>? </pre> </dd> <dt><b>DESCRIPTION</b></dt> <dd>Returns the text that would be contained in the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>widgetName</i></code> after deleting the characters starting with the one indicated by the index <code><i>from</i></code> and stopping just before <code><i>to</i></code>. If <code><i>to</i></code> is not specified then the return value is the text that would be contained in the widget after deleting the single character given by <code><i>from</i></code>.</dd> <dd class="tm"><b>REMARK:</b> This command has a variable number (2 or 3) of arguments, because the <code><b>delete</b></code> subcommand of the Tcl command associated with <code><i>widgetName</i></code> expects either one or two indices as arguments. For this reason, the correct way to invoke this command from within a before-<code><b>delete</b></code> callback is as shown in the following example:</dd> <dd> <blockquote> <pre> proc myBeforeDeleteCallback {w args} { # # Get the text that would be contained in the widget after # deleting the characters specified by $args, which stands # for the one or two arguments passed to delete; pass these # arguments to wcb::postDeleteEntryText by expanding $args # set newText [eval [list wcb::postDeleteEntryText $w] $args] if {!<i>some_condition_on_</i>$newText} { wcb::cancel } } </pre> </blockquote> </dd> <dd>The following alternative, more elegant solution requires Tcl/Tk 8.5 or later:</dd> <dd> <blockquote> <pre> proc myBeforeDeleteCallback {w args} { # . . . set newText [wcb::postDeleteEntryText $w {*}$args] . . . } </pre> </blockquote> </dd> <dt><b>KEYWORDS</b></dt> <dd>delete, Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="entrycb">Before-<code><b>insert</b></code> Callbacks for entry, spinbox, and combobox Widgets</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::checkStrFor*</code>, <code>wcb::convStrTo*</code>, <code>wcb::checkEntryFor*</code>, <code>wcb::checkEntryLen</code> – Before-<code><b>insert</b></code> callbacks for Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, and tile combobox widgets</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::checkStrForRegExp</b> <i>exp w idx str</i> <b>wcb::checkStrForAlpha</b> <i> w idx str</i> <b>wcb::checkStrForNum</b> <i> w idx str</i> <b>wcb::checkStrForAlnum</b> <i> w idx str</i> <b>wcb::convStrToUpper</b> <i> w idx str</i> <b>wcb::convStrToLower</b> <i> w idx str</i> <b>wcb::checkEntryForInt</b> <i> w idx str</i> <b>wcb::checkEntryForUInt</b> <i>max w idx str</i> <b>wcb::checkEntryForReal</b> <i> w idx str</i> <b>wcb::checkEntryForFixed</b> <i>cnt w idx str</i> <b>wcb::checkEntryLen</b> <i>len w idx str</i> </pre> </dd> <dt class="tm"><b>DESCRIPTION</b></dt> <dd>The <code><b>wcb::checkStrForRegExp</b></code> callback checks whether the string <code><i>str</i></code> to be inserted into the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>w</i></code> is matched by the regular expression <code><i>exp</i></code>; if not, it cancels the <code><b>insert</b></code> operation.</dd> <dd class="tm">The three other <code><b>wcb::checkStrFor*</b></code> callbacks check whether the string <code><i>str</i></code> to be inserted into the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>w</i></code> is alphabetic, numeric, or alphanumeric, respectively; if not, they cancel the <code><b>insert</b></code> operation. These procedures just invoke the callback <code><b>wcb::checkStrForRegExp</b></code>, passing to it the Unicode-based patterns <code>{^[[:alpha:]]*$}</code>, <code>{^[[:digit:]]*$}</code>, and <code>{^[[:alnum:]]*$}</code> for Tk versions 8.1 or higher, and the ASCII patterns <code>{^[A-Za-z]*$}</code>, <code>{^[0-9]*$}</code>, and <code>{^[A-Za-z0-9]*$}</code> if Tk version 8.0 is being used.</dd> <dd class="tm">The <code><b>wcb::convStrTo*</b></code> callbacks replace the string <code><i>str</i></code> to be inserted into the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>w</i></code> with its uppercase or lowercase equivalent, respectively.</dd> <dd class="tm">The <code><b>wcb::checkEntryFor*</b></code> callbacks check whether the text contained in the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>w</i></code> after inserting the string <code><i>str</i></code> before the character indicated by the index <code><i>idx</i></code> would represent (the starting part of) an integer number, unsigned integer no greater than <code><i>max</i></code>, real number, or real number in fixed-point format with at most <code><i>cnt</i></code> digits after the decimal point, respectively; if not, they cancel the <code><b>insert</b></code> operation. <code><i>max</i></code> and <code><i>cnt</i></code> should be nonnegative numbers or <code><b>*</b></code>; <code><i>max</i> = <b>*</b></code> means: no upper bound for the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox value, while <code><i>cnt</i> = <b>*</b></code> stands for an unlimited number of digits after the decimal point.</dd> <dd class="tm">The <code><b>wcb::checkEntryLen</b></code> callback checks whether the length of the text contained in the Tk or tile entry, BWidget Entry, Tk or tile spinbox, or tile combobox widget <code><i>w</i></code> after inserting the string <code><i>str</i></code> would be greater than <code><i>len</i></code>; if yes, it cancels the <code><b>insert</b></code> operation.</dd> <dd class="tm">These callback procedures are implemented in the file <code><b>wcbEntry.tcl</b></code>, contained in the <code><b>scripts</b></code> directory. They return an empty string.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>callback, insert, Tk entry, tile entry, BWidget Entry, Tk spinbox, tile spinbox, tile combobox, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> <hr> <h2 id="textcb">Before-<code><b>insert</b></code> Callbacks for text and ctext Widgets</h2> <dl> <dt><b>NAME</b></dt> <dd><code>wcb::checkStrsFor*</code>, <code>wcb::convStrsTo*</code> – Before-<code><b>insert</b></code> callbacks for text and ctext widgets</dd> <dt class="tm"><b>SYNOPSIS</b></dt> <dd> <pre> <b>wcb::checkStrsForRegExp</b> <i>exp w idx args</i> <b>wcb::checkStrsForAlpha</b> <i> w idx args</i> <b>wcb::checkStrsForNum</b> <i> w idx args</i> <b>wcb::checkStrsForAlnum</b> <i> w idx args</i> <b>wcb::convStrsToUpper</b> <i> w idx args</i> <b>wcb::convStrsToLower</b> <i> w idx args</i> </pre> </dd> <dt class="tm"><b>DESCRIPTION</b></dt> <dd>The <code><b>wcb::checkStrsForRegExp</b></code> callback checks whether the strings to be inserted into the text or ctext widget <code><i>w</i></code>, contained in the list <code><i>args</i></code> of the form <code><i>string</i> ?<i>tagList</i> <i>string</i> <i>tagList</i> ...?</code>, are matched by the regular expression <code><i>exp</i></code>; if not, it cancels the <code><b>insert</b></code> operation.</dd> <dd class="tm">The three other <code><b>wcb::checkStrsFor*</b></code> callbacks check whether the strings to be inserted into the text or ctext widget <code><i>w</i></code>, contained in the list <code><i>args</i></code> of the form <code><i>string</i> ?<i>tagList</i> <i>string</i> <i>tagList</i> ...?</code>, are alphabetic, numeric, or alphanumeric, respectively; if not, they cancel the <code><b>insert</b></code> operation. These procedures just invoke the callback <code><b>wcb::checkStrsForRegExp</b></code>, passing to it the Unicode-based patterns <code>{^[[:alpha:]\n]*$}</code>, <code>{^[[:digit:]\n]*$}</code>, and <code>{^[[:alnum:]\n]*$}</code> for Tk versions 8.1 or higher, and the ASCII patterns <code>"^\[A-Za-z\n]*$"</code>, <code>"^\[0-9\n]*$"</code>, and <code>"^\[A-Za-z0-9\n]*$"</code> if Tk version 8.0 is being used (in this case, the presence of the <code>"\n"</code> makes the regular expressions a bit ugly).</dd> <dd class="tm">The <code><b>wcb::convStrsTo*</b></code> callbacks replace the strings to be inserted into the text or ctext widget <code><i>w</i></code>, contained in the list <code><i>args</i></code> of the form <code><i>string</i> ?<i>tagList</i> <i>string</i> <i>tagList</i> ...?</code>, with their uppercase or lowercase equivalents, respectively.</dd> <dd class="tm">These callback procedures are implemented in the file <code><b>wcbText.tcl</b></code>, contained in the <code><b>scripts</b></code> directory. They return an empty string.</dd> <dt class="tm"><b>KEYWORDS</b></dt> <dd>callback, insert, text, ctext, widget</dd> </dl> <div align="center"> <p><a href="#contents">Contents</a> <a href= "index.html">Start page</a></p> </div> </body> </html> |
Changes to embedded/www/tklib/files/modules/widgetPlus/widgetPlus.html.
134
135
136
137
138
139
140
141
142
143
144
145
146
147
...
395
396
397
398
399
400
401
402
403
404
405
406
|
<li class="doctools_subsection"><a href="#subsection8">combobox (by Bryan Oakley)</a></li>
<li class="doctools_subsection"><a href="#subsection9">ComboBox (BWidget)</a></li>
</ul>
</li>
<li class="doctools_section"><a href="#section8">TO DO</a></li>
<li class="doctools_section"><a href="#section9">BUGS</a></li>
<li class="doctools_section"><a href="#section10">EXAMPLES</a></li>
<li class="doctools_section"><a href="#see-also">See Also</a></li>
</ul>
</div>
<div id="synopsis" class="doctools_section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="doctools_synopsis">
<ul class="doctools_requirements">
<li>package require <b class="pkgname">Tcl 8.5</b></li>
................................................................................
.
.
package require widgetPlus
::widgetPlus::EnableBWidget
namespace import widgetPlus::*
entryPlus .cb.e -undo 1 -maxundo 0
</pre>
</div>
<div id="see-also" class="doctools_section"><h2><a name="see-also">See Also</a></h2>
<p>BWidget, ComboBox, <a href="../../../../index.html#key32">Entry</a>, <a href="../../../../index.html#key32">entry</a>, <a href="../persistentSelection/persistentSelection.html">persistentSelection</a>, spinbox, <a href="../../../../index.html#key21">text</a>, <a href="../../../../index.html#key102">ttk::combobox</a>, <a href="../../../../index.html#key103">ttk::entry</a>, ttk::spinbox</p>
</div>
</div></body></html>
|
>
>
>
>
>
>
>
>
>
|
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
...
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
|
<li class="doctools_subsection"><a href="#subsection8">combobox (by Bryan Oakley)</a></li> <li class="doctools_subsection"><a href="#subsection9">ComboBox (BWidget)</a></li> </ul> </li> <li class="doctools_section"><a href="#section8">TO DO</a></li> <li class="doctools_section"><a href="#section9">BUGS</a></li> <li class="doctools_section"><a href="#section10">EXAMPLES</a></li> <li class="doctools_section"><a href="#section11">Bugs, Ideas, Feedback</a></li> <li class="doctools_section"><a href="#see-also">See Also</a></li> </ul> </div> <div id="synopsis" class="doctools_section"><h2><a name="synopsis">Synopsis</a></h2> <div class="doctools_synopsis"> <ul class="doctools_requirements"> <li>package require <b class="pkgname">Tcl 8.5</b></li> ................................................................................ . . package require widgetPlus ::widgetPlus::EnableBWidget namespace import widgetPlus::* entryPlus .cb.e -undo 1 -maxundo 0 </pre> </div> <div id="section11" class="doctools_section"><h2><a name="section11">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>widgetPlus</em> of the <a href="http://core.tcl.tk/tklib/reportlist">Tklib Trackers</a>. Please also report any ideas for enhancements you may have for either package and/or documentation.</p> </div> <div id="see-also" class="doctools_section"><h2><a name="see-also">See Also</a></h2> <p>BWidget, ComboBox, <a href="../../../../index.html#key32">Entry</a>, <a href="../../../../index.html#key32">entry</a>, <a href="../persistentSelection/persistentSelection.html">persistentSelection</a>, spinbox, <a href="../../../../index.html#key21">text</a>, <a href="../../../../index.html#key102">ttk::combobox</a>, <a href="../../../../index.html#key103">ttk::entry</a>, ttk::spinbox</p> </div> </div></body></html> |
Changes to embedded/www/tklib/toc.html.
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 |
<td class="#doctools_tocright">An IP address entry widget</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='khim'><a href="files/modules/khim/khim.html">khim</a></td> <td class="#doctools_tocright">Provides key bindings for entering international characters on a keyboard that does not support them</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='menubar'><a href="files/modules/menubar/menubar.html">menubar</a></td> <td class="#doctools_tocright">Creates an instance of the Class.</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='notifywindow'><a href="files/modules/notifywindow/notifywindow.html">notifywindow</a></td> <td class="#doctools_tocright">Provides unobtrusive window for alerts/notifications from Tk applications</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='ntext'><a href="files/modules/ntext/ntext.html">ntext</a></td> <td class="#doctools_tocright">Alternative Bindings for the Text Widget</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='ntextbindings'><a href="files/modules/ntext/ntextBindings.html">ntextBindings</a></td> <td class="#doctools_tocright">Alternative Bindings for the Text Widget</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='ntextindent'><a href="files/modules/ntext/ntextIndent.html">ntextIndent</a></td> <td class="#doctools_tocright">ntext Indentation for the Text Widget</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='ntextwordbreak'><a href="files/modules/ntext/ntextWordBreak.html">ntextWordBreak</a></td> <td class="#doctools_tocright">ntext Word Boundary Detection for the Text Widget</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='persistentselection'><a href="files/modules/persistentSelection/persistentSelection.html">persistentSelection</a></td> <td class="#doctools_tocright">Enhanced PRIMARY selection</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='pie'><a href="files/modules/tkpiechart/pie.html">pie</a></td> <td class="#doctools_tocright">2D or 3D pie chart object in a canvas</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='pieboxlabeler'><a href="files/modules/tkpiechart/pieboxlabeler.html">pieBoxLabeler</a></td> <td class="#doctools_tocright">tkpiechart pie box style labeler class</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='pieperipherallabeler'><a href="files/modules/tkpiechart/pieperipherallabeler.html">piePeripheralLabeler</a></td> <td class="#doctools_tocright">tkpiechart pie peripheral style labeler class</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='plotchart'><a href="files/modules/plotchart/plotchart.html">Plotchart</a></td> <td class="#doctools_tocright">Simple plotting and charting package</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='swaplist'><a href="files/modules/swaplist/swaplist.html">swaplist</a></td> <td class="#doctools_tocright">A dialog which allows a user to move options between two lists</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='tooltip'><a href="files/modules/tooltip/tooltip.html">tooltip</a></td> <td class="#doctools_tocright">Tooltip management</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='widget'><a href="files/modules/widget/widget.html">widget</a></td> <td class="#doctools_tocright">Megawidget bundle</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='widget_calendar'><a href="files/modules/widget/widget_calendar.html">widget_calendar</a></td> <td class="#doctools_tocright">Calendar Megawidget</td> |
> > > > | | < < < < > > > > | | | | | | > > > > > > > > > > > > |
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 |
<td class="#doctools_tocright">An IP address entry widget</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='khim'><a href="files/modules/khim/khim.html">khim</a></td> <td class="#doctools_tocright">Provides key bindings for entering international characters on a keyboard that does not support them</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='mentry'><a href="files/modules/mentry/index.html">mentry</a></td> <td class="#doctools_tocright">The Multi-Entry Widget Package</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='menubar'><a href="files/modules/menubar/menubar.html">menubar</a></td> <td class="#doctools_tocright">Creates an instance of the Class.</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='notifywindow'><a href="files/modules/notifywindow/notifywindow.html">notifywindow</a></td> <td class="#doctools_tocright">Provides unobtrusive window for alerts/notifications from Tk applications</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='ntext'><a href="files/modules/ntext/ntext.html">ntext</a></td> <td class="#doctools_tocright">Alternative Bindings for the Text Widget</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='ntextbindings'><a href="files/modules/ntext/ntextBindings.html">ntextBindings</a></td> <td class="#doctools_tocright">Alternative Bindings for the Text Widget</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='ntextindent'><a href="files/modules/ntext/ntextIndent.html">ntextIndent</a></td> <td class="#doctools_tocright">ntext Indentation for the Text Widget</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='ntextwordbreak'><a href="files/modules/ntext/ntextWordBreak.html">ntextWordBreak</a></td> <td class="#doctools_tocright">ntext Word Boundary Detection for the Text Widget</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='persistentselection'><a href="files/modules/persistentSelection/persistentSelection.html">persistentSelection</a></td> <td class="#doctools_tocright">Enhanced PRIMARY selection</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='pie'><a href="files/modules/tkpiechart/pie.html">pie</a></td> <td class="#doctools_tocright">2D or 3D pie chart object in a canvas</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='pieboxlabeler'><a href="files/modules/tkpiechart/pieboxlabeler.html">pieBoxLabeler</a></td> <td class="#doctools_tocright">tkpiechart pie box style labeler class</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='pieperipherallabeler'><a href="files/modules/tkpiechart/pieperipherallabeler.html">piePeripheralLabeler</a></td> <td class="#doctools_tocright">tkpiechart pie peripheral style labeler class</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='plotchart'><a href="files/modules/plotchart/plotchart.html">Plotchart</a></td> <td class="#doctools_tocright">Simple plotting and charting package</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='scrollutil'><a href="files/modules/scrollutil/index.html">scrollutil</a></td> <td class="#doctools_tocright">The Scrolling Utilities Package</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='swaplist'><a href="files/modules/swaplist/swaplist.html">swaplist</a></td> <td class="#doctools_tocright">A dialog which allows a user to move options between two lists</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='tablelist'><a href="files/modules/tablelist/index.html">tablelist</a></td> <td class="#doctools_tocright">The Multi-Column Listbox and Tree Widget Package</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='tooltip'><a href="files/modules/tooltip/tooltip.html">tooltip</a></td> <td class="#doctools_tocright">Tooltip management</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='wcb'><a href="files/modules/wcb/index.html">wcb</a></td> <td class="#doctools_tocright">The Widget Callback Package</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='widget'><a href="files/modules/widget/widget.html">widget</a></td> <td class="#doctools_tocright">Megawidget bundle</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='widget_calendar'><a href="files/modules/widget/widget_calendar.html">widget_calendar</a></td> <td class="#doctools_tocright">Calendar Megawidget</td> |
Changes to embedded/www/toc.html.
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
<td class="#doctools_tocleft" ><a name='datefield'><a href="tklib/files/modules/datefield/datefield.html">datefield</a></td> <td class="#doctools_tocright">Tk datefield widget</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='ipentry'><a href="tklib/files/modules/ipentry/ipentry.html">ipentry</a></td> <td class="#doctools_tocright">An IP address entry widget</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='swaplist'><a href="tklib/files/modules/swaplist/swaplist.html">swaplist</a></td> <td class="#doctools_tocright">A dialog which allows a user to move options between two lists</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='widget'><a href="tklib/files/modules/widget/widget.html">widget</a></td> <td class="#doctools_tocright">Megawidget bundle</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='widget_calendar'><a href="tklib/files/modules/widget/widget_calendar.html">widget_calendar</a></td> <td class="#doctools_tocright">Calendar Megawidget</td> |
> > > > > > > > > > > > > > > > |
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 |
<td class="#doctools_tocleft" ><a name='datefield'><a href="tklib/files/modules/datefield/datefield.html">datefield</a></td> <td class="#doctools_tocright">Tk datefield widget</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='ipentry'><a href="tklib/files/modules/ipentry/ipentry.html">ipentry</a></td> <td class="#doctools_tocright">An IP address entry widget</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='mentry'><a href="tklib/files/modules/mentry/index.html">mentry</a></td> <td class="#doctools_tocright">The Multi-Entry Widget Package</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='scrollutil'><a href="tklib/files/modules/scrollutil/index.html">scrollutil</a></td> <td class="#doctools_tocright">The Scrolling Utilities Package</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='swaplist'><a href="tklib/files/modules/swaplist/swaplist.html">swaplist</a></td> <td class="#doctools_tocright">A dialog which allows a user to move options between two lists</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='tablelist'><a href="tklib/files/modules/tablelist/index.html">tablelist</a></td> <td class="#doctools_tocright">The Multi-Column Listbox and Tree Widget Package</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='wcb'><a href="tklib/files/modules/wcb/index.html">wcb</a></td> <td class="#doctools_tocright">The Widget Callback Package</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='widget'><a href="tklib/files/modules/widget/widget.html">widget</a></td> <td class="#doctools_tocright">Megawidget bundle</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='widget_calendar'><a href="tklib/files/modules/widget/widget_calendar.html">widget_calendar</a></td> <td class="#doctools_tocright">Calendar Megawidget</td> |
Changes to embedded/www/toc0.html.
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
<td class="#doctools_tocleft" ><a name='datefield'><a href="tklib/files/modules/datefield/datefield.html">datefield</a></td> <td class="#doctools_tocright">Tk datefield widget</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='ipentry'><a href="tklib/files/modules/ipentry/ipentry.html">ipentry</a></td> <td class="#doctools_tocright">An IP address entry widget</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='swaplist'><a href="tklib/files/modules/swaplist/swaplist.html">swaplist</a></td> <td class="#doctools_tocright">A dialog which allows a user to move options between two lists</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='widget'><a href="tklib/files/modules/widget/widget.html">widget</a></td> <td class="#doctools_tocright">Megawidget bundle</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='widget_calendar'><a href="tklib/files/modules/widget/widget_calendar.html">widget_calendar</a></td> <td class="#doctools_tocright">Calendar Megawidget</td> |
> > > > > > > > > > > > > > > > |
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 |
<td class="#doctools_tocleft" ><a name='datefield'><a href="tklib/files/modules/datefield/datefield.html">datefield</a></td> <td class="#doctools_tocright">Tk datefield widget</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='ipentry'><a href="tklib/files/modules/ipentry/ipentry.html">ipentry</a></td> <td class="#doctools_tocright">An IP address entry widget</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='mentry'><a href="tklib/files/modules/mentry/index.html">mentry</a></td> <td class="#doctools_tocright">The Multi-Entry Widget Package</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='scrollutil'><a href="tklib/files/modules/scrollutil/index.html">scrollutil</a></td> <td class="#doctools_tocright">The Scrolling Utilities Package</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='swaplist'><a href="tklib/files/modules/swaplist/swaplist.html">swaplist</a></td> <td class="#doctools_tocright">A dialog which allows a user to move options between two lists</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='tablelist'><a href="tklib/files/modules/tablelist/index.html">tablelist</a></td> <td class="#doctools_tocright">The Multi-Column Listbox and Tree Widget Package</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='wcb'><a href="tklib/files/modules/wcb/index.html">wcb</a></td> <td class="#doctools_tocright">The Widget Callback Package</td> </tr> <tr class="#doctools_tocodd" > <td class="#doctools_tocleft" ><a name='widget'><a href="tklib/files/modules/widget/widget.html">widget</a></td> <td class="#doctools_tocright">Megawidget bundle</td> </tr> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='widget_calendar'><a href="tklib/files/modules/widget/widget_calendar.html">widget_calendar</a></td> <td class="#doctools_tocright">Calendar Megawidget</td> |
Changes to embedded/www/toc1.html.
153 154 155 156 157 158 159 160 161 162 163 164 165 166 ... 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 ... 233 234 235 236 237 238 239 240 241 242 243 244 245 246 |
</table></dl> <dl><dt><a name='khim'>khim</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='khim'><a href="tklib/files/modules/khim/khim.html">khim</a></td> <td class="#doctools_tocright">Provides key bindings for entering international characters on a keyboard that does not support them</td> </tr> </table></dl> <dl><dt><a name='menubar'>menubar</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='menubar'><a href="tklib/files/modules/menubar/menubar.html">menubar</a></td> <td class="#doctools_tocright">Creates an instance of the Class.</td> </tr> ................................................................................ </table></dl> <dl><dt><a name='plotchart'>plotchart</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='plotchart'><a href="tklib/files/modules/plotchart/plotchart.html">Plotchart</a></td> <td class="#doctools_tocright">Simple plotting and charting package</td> </tr> </table></dl> <dl><dt><a name='swaplist'>swaplist</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='swaplist'><a href="tklib/files/modules/swaplist/swaplist.html">swaplist</a></td> <td class="#doctools_tocright">A dialog which allows a user to move options between two lists</td> </tr> </table></dl> <dl><dt><a name='tkpiechart'>tkpiechart</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='canvaslabel'><a href="tklib/files/modules/tkpiechart/canvaslabel.html">canvasLabel</a></td> <td class="#doctools_tocright">tkpiechart canvas label class</td> </tr> ................................................................................ </table></dl> <dl><dt><a name='tooltip'>tooltip</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='tooltip'><a href="tklib/files/modules/tooltip/tooltip.html">tooltip</a></td> <td class="#doctools_tocright">Tooltip management</td> </tr> </table></dl> <dl><dt><a name='widget'>widget</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='widget'><a href="tklib/files/modules/widget/widget.html">widget</a></td> <td class="#doctools_tocright">Megawidget bundle</td> </tr> |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > |
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 ... 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 ... 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 |
</table></dl> <dl><dt><a name='khim'>khim</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='khim'><a href="tklib/files/modules/khim/khim.html">khim</a></td> <td class="#doctools_tocright">Provides key bindings for entering international characters on a keyboard that does not support them</td> </tr> </table></dl> <dl><dt><a name='mentry'>mentry</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='mentry'><a href="tklib/files/modules/mentry/index.html">mentry</a></td> <td class="#doctools_tocright">The Multi-Entry Widget Package</td> </tr> </table></dl> <dl><dt><a name='menubar'>menubar</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='menubar'><a href="tklib/files/modules/menubar/menubar.html">menubar</a></td> <td class="#doctools_tocright">Creates an instance of the Class.</td> </tr> ................................................................................ </table></dl> <dl><dt><a name='plotchart'>plotchart</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='plotchart'><a href="tklib/files/modules/plotchart/plotchart.html">Plotchart</a></td> <td class="#doctools_tocright">Simple plotting and charting package</td> </tr> </table></dl> <dl><dt><a name='scrollutil'>scrollutil</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='scrollutil'><a href="tklib/files/modules/scrollutil/index.html">scrollutil</a></td> <td class="#doctools_tocright">The Scrolling Utilities Package</td> </tr> </table></dl> <dl><dt><a name='swaplist'>swaplist</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='swaplist'><a href="tklib/files/modules/swaplist/swaplist.html">swaplist</a></td> <td class="#doctools_tocright">A dialog which allows a user to move options between two lists</td> </tr> </table></dl> <dl><dt><a name='tablelist'>tablelist</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='tablelist'><a href="tklib/files/modules/tablelist/index.html">tablelist</a></td> <td class="#doctools_tocright">The Multi-Column Listbox and Tree Widget Package</td> </tr> </table></dl> <dl><dt><a name='tkpiechart'>tkpiechart</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='canvaslabel'><a href="tklib/files/modules/tkpiechart/canvaslabel.html">canvasLabel</a></td> <td class="#doctools_tocright">tkpiechart canvas label class</td> </tr> ................................................................................ </table></dl> <dl><dt><a name='tooltip'>tooltip</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='tooltip'><a href="tklib/files/modules/tooltip/tooltip.html">tooltip</a></td> <td class="#doctools_tocright">Tooltip management</td> </tr> </table></dl> <dl><dt><a name='wcb'>wcb</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='wcb'><a href="tklib/files/modules/wcb/index.html">wcb</a></td> <td class="#doctools_tocright">The Widget Callback Package</td> </tr> </table></dl> <dl><dt><a name='widget'>widget</dt><dd> <table class="#doctools_toc"> <tr class="#doctools_toceven" > <td class="#doctools_tocleft" ><a name='widget'><a href="tklib/files/modules/widget/widget.html">widget</a></td> <td class="#doctools_tocright">Megawidget bundle</td> </tr> |
Changes to installer.tcl.
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 |
set index [open [file join $outdir pkgIndex.tcl] w] puts $index "# Tcl package index file, version 1.1" puts $index "# Do NOT edit by hand. Let $package install generate this file." puts $index "# Generated by $package installer for version $version" puts $index { # All tklib packages need Tcl 8 (use [namespace]) if {![package vsatisfies [package provide Tcl] 8]} {return} # Extend the auto_path to make tklib packages available if {[lsearch -exact $::auto_path $dir] == -1} { lappend ::auto_path $dir } # For Tcl 8.3.1 and later, that's all we need if {[package vsatisfies [package provide Tcl] 8.4]} {return} if {(0 == [catch { package vcompare [info patchlevel] [info patchlevel] }]) && ( [package vcompare [info patchlevel] 8.3.1] >= 0 )} {return} # For older Tcl releases, here are equivalent contents # of the pkgIndex.tcl files of all the modules if {![package vsatisfies [package provide Tcl] 8.0]} {return} } puts $index "" puts $index "set maindir \$dir" foreach pi [lsort [glob -nocomplain [file join $outdir * pkgIndex.tcl]]] { set subdir [file tail [file dirname $pi]] puts $index "set dir \[file join \$maindir [list $subdir]\] ;\t source \[file join \$dir pkgIndex.tcl\]" } |
| | | | | | | | | | | < | < | | | | |
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 |
set index [open [file join $outdir pkgIndex.tcl] w] puts $index "# Tcl package index file, version 1.1" puts $index "# Do NOT edit by hand. Let $package install generate this file." puts $index "# Generated by $package installer for version $version" puts $index [string map [list \n\t {} "\n " \n \t {}] { # All tklib packages need Tcl 8 (use [namespace]) if {![package vsatisfies [package provide Tcl] 8]} {return} # Extend the auto_path to make tklib packages available if {[lsearch -exact $::auto_path $dir] == -1} { lappend ::auto_path $dir } # For Tcl 8.3.1 and later, that's all we need if {[package vsatisfies [package provide Tcl] 8.4]} {return} if {(0 == [catch { package vcompare [info patchlevel] [info patchlevel] }]) && ([package vcompare [info patchlevel] 8.3.1] >= 0)} {return} # For older Tcl releases, here are equivalent contents # of the pkgIndex.tcl files of all the modules if {![package vsatisfies [package provide Tcl] 8.0]} {return} }] puts $index "" puts $index "set maindir \$dir" foreach pi [lsort [glob -nocomplain [file join $outdir * pkgIndex.tcl]]] { set subdir [file tail [file dirname $pi]] puts $index "set dir \[file join \$maindir [list $subdir]\] ;\t source \[file join \$dir pkgIndex.tcl\]" } |
Changes to modules/autoscroll/ChangeLog.
1 2 3 4 5 6 7 |
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> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 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> |
Changes to modules/canvas/ChangeLog.
1 2 3 4 5 6 7 |
2013-10-30 Andreas Kupries <andreask@activestate.com> * canvas_gradient.man: [Ticket [3dee7d95ca]] Lower the * canvas_gradient.tcl: canvas items of the gradient to make * pkgIndex.tcl: them background instead of having them obscuring other items. Version bumped to 0.2. |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2013-10-30 Andreas Kupries <andreask@activestate.com> * canvas_gradient.man: [Ticket [3dee7d95ca]] Lower the * canvas_gradient.tcl: canvas items of the gradient to make * pkgIndex.tcl: them background instead of having them obscuring other items. Version bumped to 0.2. |
Changes to modules/chatwidget/ChangeLog.
1 2 3 4 5 6 7 |
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> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 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> |
Changes to modules/controlwidget/ChangeLog.
1 2 3 4 5 6 7 |
2017-05-22 Arjen Markus <arjenmarkus@users.sourceforge.net> * demo-rdial.tcl: Updated demo for the rdial widget * rdial.tcl: Added support for mousewheel * pkgIndex.tcl: Bumped verion of rdial to 0.7 * controlwidget.man: Added description of new options and support of mousewheel 2010-10-06 Arjen Markus <arjenmarkus@users.sourceforge.net> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2017-05-22 Arjen Markus <arjenmarkus@users.sourceforge.net> * demo-rdial.tcl: Updated demo for the rdial widget * rdial.tcl: Added support for mousewheel * pkgIndex.tcl: Bumped verion of rdial to 0.7 * controlwidget.man: Added description of new options and support of mousewheel 2010-10-06 Arjen Markus <arjenmarkus@users.sourceforge.net> |
Changes to modules/crosshair/ChangeLog.
1 2 3 4 5 6 7 |
2013-07-04 Andreas Kupries <andreask@activestate.com> * crosshair.tcl: [Bug 7bb539fa97]: (::crosshair::off): Fixed various issues in the command. Thanks to <o.colin@tkfab.fr> for the report and fixes. 2013-04-26 Andreas Kupries <andreask@activestate.com> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2013-07-04 Andreas Kupries <andreask@activestate.com> * crosshair.tcl: [Bug 7bb539fa97]: (::crosshair::off): Fixed various issues in the command. Thanks to <o.colin@tkfab.fr> for the report and fixes. 2013-04-26 Andreas Kupries <andreask@activestate.com> |
Changes to modules/ctext/ChangeLog.
1 2 3 4 5 6 7 |
2013-03-25 Andreas Kupries <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.6 ======================== * 2011-04-18 Andreas Kupries <andreask@activestate.com> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2013-03-25 Andreas Kupries <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.6 ======================== * 2011-04-18 Andreas Kupries <andreask@activestate.com> |
Changes to modules/cursor/ChangeLog.
1 2 3 4 5 6 7 |
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> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 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> |
Changes to modules/datefield/ChangeLog.
1 2 3 4 5 6 7 |
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> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 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> |
Changes to modules/datefield/datefield.man.
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 |
[see_also clock(n)] [see_also entry(n)] [keywords clock] [keywords date] [keywords dateentry] [keywords entry] [keywords widget] [copyright {Keith Vetter <keith@ebook.gemstar.com>} and {Thomas Wunderlich <tcl.tk@blindenfreizeiten.de>}] [moddesc {Tk datefield widget}] [titledesc {Tk datefield widget}] [category Widget] [require Tk] [require datefield [opt 0.3]] [description] The [package datefield] package provides the datefield widget which is an enhanced text entry widget for the purpose of date entry. There are three valid formats for the dates which can be entered: [list_begin [enum]] [enum] English form MM/DD/YYYY using [arg {-format "%m/%d/%Y"}] (default) [enum] German form DD.MM.YYYY using [arg {-format "%d.%m.%Y"}] [enum] ISO form YYYY-MM-DD using [arg {-format "%Y-%m-%d"}] [list_end] [para] |
| | | |
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 |
[see_also clock(n)] [see_also entry(n)] [keywords clock] [keywords date] [keywords dateentry] [keywords entry] [keywords widget] [copyright {Keith Vetter <keith@ebook.gemstar.com>}] [copyright {Thomas Wunderlich <tcl.tk@blindenfreizeiten.de>}] [moddesc {Tk datefield widget}] [titledesc {Tk datefield widget}] [category Widget] [require Tk] [require datefield [opt 0.3]] [description] The [package datefield] package provides the datefield widget which is an enhanced text entry widget for the purpose of date entry. There are three valid formats for the dates which can be entered: [list_begin enumerated] [enum] English form MM/DD/YYYY using [arg {-format "%m/%d/%Y"}] (default) [enum] German form DD.MM.YYYY using [arg {-format "%d.%m.%Y"}] [enum] ISO form YYYY-MM-DD using [arg {-format "%Y-%m-%d"}] [list_end] [para] |
Changes to modules/diagrams/ChangeLog.
1 2 3 4 5 6 7 |
2013-03-25 Andreas Kupries <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.6 ======================== * 2012-10-05 Andreas Kupries <andreask@activestate.com> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2013-03-25 Andreas Kupries <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.6 ======================== * 2012-10-05 Andreas Kupries <andreask@activestate.com> |
Changes to modules/getstring/ChangeLog.
1 2 3 4 5 6 7 |
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> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 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> |
Changes to modules/history/ChangeLog.
1 2 3 4 5 6 7 |
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> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 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> |
Changes to modules/ico/ChangeLog.
1 2 3 4 5 6 7 |
2013-03-25 Andreas Kupries <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.6 ======================== * 2011-10-04 Jeff Hobbs <jeffh@ActiveState.com> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2013-03-25 Andreas Kupries <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.6 ======================== * 2011-10-04 Jeff Hobbs <jeffh@ActiveState.com> |
Changes to modules/ipentry/ChangeLog.
1 2 3 4 5 6 7 |
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> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 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> |
Changes to modules/khim/ChangeLog.
1 2 3 4 5 6 7 |
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> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 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> |
Changes to modules/mentry/ChangeLog.
1 2 3 4 5 6 7 |
2019-10-21 Csaba Nemethi <csaba.nemethi@t-online.de> * pkgIndex.tcl: Bumped the version number to 3.10. * mentry.tcl: * mentry_tile.tcl: * COPYRIGHT.txt: * README.txt: |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2019-10-21 Csaba Nemethi <csaba.nemethi@t-online.de> * pkgIndex.tcl: Bumped the version number to 3.10. * mentry.tcl: * mentry_tile.tcl: * COPYRIGHT.txt: * README.txt: |
Changes to modules/menubar/ChangeLog.
1 2 3 4 5 6 7 |
2013-03-25 Andreas Kupries <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.6 ======================== * # ------------------------------------------------------------ |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2013-03-25 Andreas Kupries <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.6 ======================== * # ------------------------------------------------------------ |
Changes to modules/ntext/ChangeLog.
1 2 3 4 5 6 7 |
2018-02-17 Keith Nash <kjnash@users.sourceforge.net> * Bugfix - generate <<Selection>> for Tk < 8.6.9 in the corner case in which the CLIPBOARD is <<Paste>>d into the PRIMARY selection. * Increase version to 1.0b3 2018-01-26 Keith Nash <kjnash@users.sourceforge.net> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2018-02-17 Keith Nash <kjnash@users.sourceforge.net> * Bugfix - generate <<Selection>> for Tk < 8.6.9 in the corner case in which the CLIPBOARD is <<Paste>>d into the PRIMARY selection. * Increase version to 1.0b3 2018-01-26 Keith Nash <kjnash@users.sourceforge.net> |
Changes to modules/ntext/pkgIndex.tcl.
1 |
package ifneeded ntext 1.0b3 [list source [file join $dir ntext.tcl]] |
> |
1 2 |
if {![package vsatisfies [package provide Tcl] 8.5]} {return}
package ifneeded ntext 1.0b3 [list source [file join $dir ntext.tcl]]
|
Changes to modules/persistentSelection/persistentSelection.tcl.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR # MODIFICATIONS. # # ------------------------------------------------------------------------------ # 80 columns # Conventional use of namespace/package names. # ------------------------------------------------------------------------------ # Module persistentSelection # ------------------------------------------------------------------------------ # Module to retain a non-empty PRIMARY selection. # The same persistent store is shared by all windows on the same display. # A state diagram is provided in an OpenOffice document. |
> > > |
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR # MODIFICATIONS. # # ------------------------------------------------------------------------------ # 80 columns # Conventional use of namespace/package names. package require Tcl 8.5 package require Tk 8.5 # ------------------------------------------------------------------------------ # Module persistentSelection # ------------------------------------------------------------------------------ # Module to retain a non-empty PRIMARY selection. # The same persistent store is shared by all windows on the same display. # A state diagram is provided in an OpenOffice document. |
Changes to modules/persistentSelection/pkgIndex.tcl.
1 |
package ifneeded persistentSelection 1.0b1 [list source [file join $dir persistentSelection.tcl]] |
> |
1 2 |
if {![package vsatisfies [package provide Tcl] 8.5]} {return}
package ifneeded persistentSelection 1.0b1 [list source [file join $dir persistentSelection.tcl]]
|
Changes to modules/plotchart/ChangeLog.
1 2 3 4 5 6 7 |
2018-12-27 Arjen Markus <arjenmarkus@users,sourceforge.net> * plotchart.tcl: Add missing method definitions for binding events to log(x)-y, x-log(y) and log(x)-log(y) plots, as reported by Alexandru * plotbind.tcl: Apply the patch provided by Alexandru 2017-09-16 Arjen Markus <arjenmarkus@users,sourceforge.net> * plotchart.man: Added description of the normal plot and associated commands. The implementation was |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2018-12-27 Arjen Markus <arjenmarkus@users,sourceforge.net> * plotchart.tcl: Add missing method definitions for binding events to log(x)-y, x-log(y) and log(x)-log(y) plots, as reported by Alexandru * plotbind.tcl: Apply the patch provided by Alexandru 2017-09-16 Arjen Markus <arjenmarkus@users,sourceforge.net> * plotchart.man: Added description of the normal plot and associated commands. The implementation was |
Changes to modules/plotchart/plotchart.man.
1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 |
[list_end]
[call [cmd \$xyplot] minmax [arg series] [arg xcrd] [arg ymin] [arg ymax]]
Draw a filled strip representing a minimum and a maximum. The configuration of the series influences the polygon as follows:
[term -fillcolour] is used to fill the polygon, [term -colour] is used for the boundary (set it to {} if
no boundary is required and [term -width] determines the width of the boundary.
[nl]
The arguments [term ymin] and [term ymax] may be empty to get an extra vertex in the strip. If both
are empty, a new strip is started. For best results, the x-coordinate should be specified in ascending
order.
[list_begin arguments]
[arg_def string series in]
Name of the data series the new min/max strip belongs to.
|
| |
1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 |
[list_end]
[call [cmd \$xyplot] minmax [arg series] [arg xcrd] [arg ymin] [arg ymax]]
Draw a filled strip representing a minimum and a maximum. The configuration of the series influences the polygon as follows:
[term -fillcolour] is used to fill the polygon, [term -colour] is used for the boundary (set it to {} if
no boundary is required and [term -width] determines the width of the boundary.
[para]
The arguments [term ymin] and [term ymax] may be empty to get an extra vertex in the strip. If both
are empty, a new strip is started. For best results, the x-coordinate should be specified in ascending
order.
[list_begin arguments]
[arg_def string series in]
Name of the data series the new min/max strip belongs to.
|
Changes to modules/scrollutil/ChangeLog.
1 2 3 4 5 6 7 |
2020-02-06 Csaba Nemethi <csaba.nemethi@t-online.de> * doc/scrollutil.html: Minor improvements. 2020-02-05 Csaba Nemethi <csaba.nemethi@t-online.de> * *.tcl: Bumped the version number to 1.5. |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2020-02-06 Csaba Nemethi <csaba.nemethi@t-online.de> * doc/scrollutil.html: Minor improvements. 2020-02-05 Csaba Nemethi <csaba.nemethi@t-online.de> * *.tcl: Bumped the version number to 1.5. |
Changes to modules/style/ChangeLog.
1 2 3 4 5 6 7 |
2013-03-25 Andreas Kupries <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.6 ======================== * 2011-05-02 Jeff Hobbs <jeffh@ActiveState.com> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2013-03-25 Andreas Kupries <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.6 ======================== * 2011-05-02 Jeff Hobbs <jeffh@ActiveState.com> |
Changes to modules/swaplist/ChangeLog.
1 2 3 4 5 6 7 |
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> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 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> |
Changes to modules/tablelist/ChangeLog.
1 2 3 4 5 6 7 |
2019-12-12 Csaba Nemethi <csaba.nemethi@t-online.de> * scripts/tablelistBind.tcl: Improvements related to the "aqua" theme. * scripts/tablelistThemes.tcl: * scripts/tablelistUtil.tcl: * scripts/tablelistWidget.tcl: |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2019-12-12 Csaba Nemethi <csaba.nemethi@t-online.de> * scripts/tablelistBind.tcl: Improvements related to the "aqua" theme. * scripts/tablelistThemes.tcl: * scripts/tablelistUtil.tcl: * scripts/tablelistWidget.tcl: |
Changes to modules/tkpiechart/ChangeLog.
1 2 3 4 5 6 7 |
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> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 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> |
Changes to modules/tooltip/ChangeLog.
1 2 3 4 5 6 7 |
2016-11-24 Arjen Markus <arjenmarkus@users.sourceforge.net> * tooltip.tcl: Updated one of the error messages (the new option -- was missing) 2016-11-24 Arjen Markus <arjenmarkus@users.sourceforge.net> * tooltip.man, pkgIndex.tcl: Increment to 1.4.6 * tooltip.tcl, tooltip.man: Apply patch by stwo to allow tooltips starting with a minus sign (ticket 3106443) |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2016-11-24 Arjen Markus <arjenmarkus@users.sourceforge.net> * tooltip.tcl: Updated one of the error messages (the new option -- was missing) 2016-11-24 Arjen Markus <arjenmarkus@users.sourceforge.net> * tooltip.man, pkgIndex.tcl: Increment to 1.4.6 * tooltip.tcl, tooltip.man: Apply patch by stwo to allow tooltips starting with a minus sign (ticket 3106443) |
Changes to modules/wcb/ChangeLog.
1 2 3 4 5 6 7 |
2018-10-08 Csaba Nemethi <csaba.nemethi@t-online.de> * *.tcl: Bumped the version number to 3.6; adapted to some changes in future Tcl and Tk releases (TIP 278, independent Tcl and Tk versions); updated the copyright information. * COPYRIGHT.txt: Bumped the version number to 3.6. |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2018-10-08 Csaba Nemethi <csaba.nemethi@t-online.de> * *.tcl: Bumped the version number to 3.6; adapted to some changes in future Tcl and Tk releases (TIP 278, independent Tcl and Tk versions); updated the copyright information. * COPYRIGHT.txt: Bumped the version number to 3.6. |
Changes to modules/widget/ChangeLog.
1 2 3 4 5 6 7 |
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> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 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> |
Changes to modules/widgetPlus/entryExtras.test.
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 |
# This file is a Tcl script to test entry widgets in Tk. It is # organized in the standard fashion for Tcl tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. package require widgetPlus namespace import ::widgetPlus::entryPlus # ------------------------------------------------------------ # Tests for entryPlus, in addition to those in file # entryPlus.test which is copied with mods from Tk entry.test. # ------------------------------------------------------------ package require tcltest 2.2 namespace import ::tcltest::* eval tcltest::configure $argv tcltest::loadTestedCommands # ------------------------------------------------------------ # First test the entry widget when changing its -textvariable. # Cf. entry.test 5.* and 22.* # ------------------------------------------------------------ |
> > > > > > > > > > > > > > > > | |
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 |
# -*- tcl -*- # This file is a Tcl script to test entry widgets in Tk. It is # organized in the standard fashion for Tcl tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. if {![package vsatisfies [package provide Tcl] 8.5]} { puts " Aborting the tests found in \"[file tail [info script]]\"." puts " Requiring Tcl 8.5, have [package present Tcl]" return } # Future: put all tests under constraint tk and set constraint properly if {[catch { package require Tk 8.5 } msg]} { puts " Aborting the tests found in \"[file tail [info script]]\"." puts " Requiring Tk 8.5, $msg" return } ::tcltest::testConstraint tk 1 package require widgetPlus namespace import ::widgetPlus::entryPlus # ------------------------------------------------------------ # Tests for entryPlus, in addition to those in file # entryPlus.test which is copied with mods from Tk entry.test. # ------------------------------------------------------------ package require tcltest 2.2 namespace import ::tcltest::* catch { tcltest::configure {*}$::argv } tcltest::loadTestedCommands # ------------------------------------------------------------ # First test the entry widget when changing its -textvariable. # Cf. entry.test 5.* and 22.* # ------------------------------------------------------------ |
Changes to modules/widgetPlus/entryPlus.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 .. 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 ... 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 |
# This file is a Tcl script to test entry widgets in Tk. It is # organized in the standard fashion for Tcl tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. package require widgetPlus namespace import ::widgetPlus::entryPlus # ------------------------------------------------------------------------------ # This file is copied from entry.test, with addition of the two lines above, # application of "s/entry/entryPlus/g" to the code (but not to comments, ................................................................................ # Copies of the same tests without the ".entry" suffix or the added constraints # have the test result modified to reflect the (valid but different) value # obtained when using "entryPlus" instead of "entry". # ------------------------------------------------------------------------------ package require tcltest 2.2 namespace import ::tcltest::* eval tcltest::configure $argv tcltest::loadTestedCommands # For xscrollcommand proc scroll args { global scrollInfo set scrollInfo $args } # For trace variable proc override args { global x set x 12345 } # Procedures used in widget VALIDATION tests proc doval {W d i P s S v V} { set ::vVals [list $W $d $i $P $s $S $v $V] return 1 } proc doval2 {W d i P s S v V} { set ::vVals [list $W $d $i $P $s $S $v $V] set ::e mydata return 1 } proc doval3 {W d i P s S v V} { set ::vVals [list $W $d $i $P $s $S $v $V] return 0 } set cy [font metrics {Courier -12} -linespace] test entry-1.1 {configuration option: "background" for entry} -setup { entryPlus .e -borderwidth 2 -highlightthickness 2 -font {Helvetica -12 bold} ................................................................................ pack .e update } -body { .e } -cleanup { destroy .e } -returnCodes error -result {wrong # args: should be ".e option ?arg ...?"} test entry-3.1 {EntryWidgetCmd procedure} -setup { entryPlus .e pack .e update } -body { .e } -cleanup { destroy .e } -returnCodes error -result {wrong # args: should be ".e subcommand ?arg ...?"} test entry-3.2 {EntryWidgetCmd procedure, "bbox" widget command} -setup { entryPlus .e -font {Courier -12} -borderwidth 2 -highlightthickness 2 pack .e update } -body { .e bbox } -cleanup { |
> > > > > > > > > > > > > > > > | > > > > | | | | | | | | | | | > | > > > > |
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 .. 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 ... 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 |
# -*- tcl -*- # This file is a Tcl script to test entry widgets in Tk. It is # organized in the standard fashion for Tcl tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. if {![package vsatisfies [package provide Tcl] 8.5]} { puts " Aborting the tests found in \"[file tail [info script]]\"." puts " Requiring Tcl 8.5, have [package present Tcl]" return } # Future: put all tests under constraint tk and set constraint properly if {[catch { package require Tk 8.5 } msg]} { puts " Aborting the tests found in \"[file tail [info script]]\"." puts " Requiring Tk 8.5, $msg" return } ::tcltest::testConstraint tk 1 package require widgetPlus namespace import ::widgetPlus::entryPlus # ------------------------------------------------------------------------------ # This file is copied from entry.test, with addition of the two lines above, # application of "s/entry/entryPlus/g" to the code (but not to comments, ................................................................................ # Copies of the same tests without the ".entry" suffix or the added constraints # have the test result modified to reflect the (valid but different) value # obtained when using "entryPlus" instead of "entry". # ------------------------------------------------------------------------------ package require tcltest 2.2 namespace import ::tcltest::* catch { tcltest::configure {*}$::argv } tcltest::loadTestedCommands # Initialize set scrollInfo {Inf Inf} set x {} # For xscrollcommand proc scroll args { global scrollInfo set scrollInfo $args } # For trace variable proc override args { global x set x 12345 } # Procedures used in widget VALIDATION tests proc doval {W d i P s S v V} { set ::vVals [list $W $d $i $P $s $S $v $V] return 1 } proc doval2 {W d i P s S v V} { set ::vVals [list $W $d $i $P $s $S $v $V] set ::e mydata return 1 } proc doval3 {W d i P s S v V} { set ::vVals [list $W $d $i $P $s $S $v $V] return 0 } set cy [font metrics {Courier -12} -linespace] test entry-1.1 {configuration option: "background" for entry} -setup { entryPlus .e -borderwidth 2 -highlightthickness 2 -font {Helvetica -12 bold} ................................................................................ pack .e update } -body { .e } -cleanup { destroy .e } -returnCodes error -result {wrong # args: should be ".e option ?arg ...?"} test entry-3.1 {EntryWidgetCmd procedure} -setup { entryPlus .e pack .e update } -body { .e } -cleanup { destroy .e } -returnCodes error \ -result [expr {[package vsatisfies [package present Tcl] 8.6] ? "wrong # args: should be \".e subcommand ?arg ...?\"" : "wrong # args: should be \".e subcommand ?argument ...?\""}] test entry-3.2 {EntryWidgetCmd procedure, "bbox" widget command} -setup { entryPlus .e -font {Courier -12} -borderwidth 2 -highlightthickness 2 pack .e update } -body { .e bbox } -cleanup { |
Changes to modules/widgetPlus/pkgIndex.tcl.
1 |
package ifneeded widgetPlus 1.0b2 [list source [file join $dir widgetPlus.tcl]] |
> |
1 2 |
if {![package vsatisfies [package provide Tcl] 8.5]} {return}
package ifneeded widgetPlus 1.0b2 [list source [file join $dir widgetPlus.tcl]]
|
Changes to modules/widgetPlus/spinboxPlus.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 .. 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 .... 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 |
# This file is a Tcl script to test spinbox widgets in Tk. It is # organized in the standard fashion for Tcl tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. package require tcltest 2.2 namespace import ::tcltest::* eval tcltest::configure $argv tcltest::loadTestedCommands package require widgetPlus namespace import ::widgetPlus::spinboxPlus # ------------------------------------------------------------------------------ # This file is copied from spinbox.test, with addition of the two lines above, ................................................................................ # names have ".spinbox" appended. # # Copies of the same tests without the ".spinbox" suffix or the added constraints # have the test result modified to reflect the (valid but different) value # obtained when using "spinboxPlus" instead of "spinbox". # ------------------------------------------------------------------------------ # For xscrollcommand proc scroll args { global scrollInfo set scrollInfo $args } # For trace variable proc override args { global x set x 12345 } # Procedures used in widget VALIDATION tests proc doval {W d i P s S v V} { set ::vVals [list $W $d $i $P $s $S $v $V] return 1 } proc doval2 {W d i P s S v V} { set ::vVals [list $W $d $i $P $s $S $v $V] set ::e mydata return 1 } proc doval3 {W d i P s S v V} { set ::vVals [list $W $d $i $P $s $S $v $V] return 0 } set cy [font metrics {Courier -12} -linespace] test spinbox-1.1 {configuration option: "activebackground"} -setup { spinboxPlus .e -borderwidth 2 -highlightthickness 2 -font {Helvetica -12} \ -relief sunken ................................................................................ destroy .e } -result {0 {}} test spinbox-2.5 {Tk_SpinboxCmd procedure} -body { spinboxPlus .e } -cleanup { destroy .e } -result {.e} test spinbox-3.1.spinbox {SpinboxWidgetCmd procedure} -constraints { spinboxErrorMsgDifferent } -setup { spinboxPlus .e pack .e update } -body { .e } -cleanup { destroy .e } -returnCodes error -result {wrong # args: should be ".e option ?arg ...?"} test spinbox-3.1 {SpinboxWidgetCmd procedure} -setup { spinboxPlus .e pack .e update } -body { .e } -cleanup { destroy .e } -returnCodes error -result {wrong # args: should be ".e subcommand ?arg ...?"} test spinbox-3.2 {SpinboxWidgetCmd procedure, "bbox" widget command} -setup { spinboxPlus .e -font {Courier -12} -borderwidth 2 -highlightthickness 2 pack .e update } -body { .e bbox } -cleanup { |
> > > > > > > > > > > > > > > > | > > > > | | | | | | | | | | | < < > | > > > > |
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 .. 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 .... 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 |
# -*- tcl -*- # This file is a Tcl script to test spinbox widgets in Tk. It is # organized in the standard fashion for Tcl tests. # # Copyright (c) 1994 The Regents of the University of California. # Copyright (c) 1994-1997 Sun Microsystems, Inc. # Copyright (c) 1998-1999 by Scriptics Corporation. # All rights reserved. if {![package vsatisfies [package provide Tcl] 8.5]} { puts " Aborting the tests found in \"[file tail [info script]]\"." puts " Requiring Tcl 8.5, have [package present Tcl]" return } # Future: put all tests under constraint tk and set constraint properly if {[catch { package require Tk 8.5 } msg]} { puts " Aborting the tests found in \"[file tail [info script]]\"." puts " Requiring Tk 8.5, $msg" return } ::tcltest::testConstraint tk 1 package require tcltest 2.2 namespace import ::tcltest::* catch { tcltest::configure {*}$::argv } tcltest::loadTestedCommands package require widgetPlus namespace import ::widgetPlus::spinboxPlus # ------------------------------------------------------------------------------ # This file is copied from spinbox.test, with addition of the two lines above, ................................................................................ # names have ".spinbox" appended. # # Copies of the same tests without the ".spinbox" suffix or the added constraints # have the test result modified to reflect the (valid but different) value # obtained when using "spinboxPlus" instead of "spinbox". # ------------------------------------------------------------------------------ # Initialize set scrollInfo {Inf Inf} set x {} # For xscrollcommand proc scroll args { global scrollInfo set scrollInfo $args } # For trace variable proc override args { global x set x 12345 } # Procedures used in widget VALIDATION tests proc doval {W d i P s S v V} { set ::vVals [list $W $d $i $P $s $S $v $V] return 1 } proc doval2 {W d i P s S v V} { set ::vVals [list $W $d $i $P $s $S $v $V] set ::e mydata return 1 } proc doval3 {W d i P s S v V} { set ::vVals [list $W $d $i $P $s $S $v $V] return 0 } set cy [font metrics {Courier -12} -linespace] test spinbox-1.1 {configuration option: "activebackground"} -setup { spinboxPlus .e -borderwidth 2 -highlightthickness 2 -font {Helvetica -12} \ -relief sunken ................................................................................ destroy .e } -result {0 {}} test spinbox-2.5 {Tk_SpinboxCmd procedure} -body { spinboxPlus .e } -cleanup { destroy .e } -result {.e} test spinbox-3.1.spinbox {SpinboxWidgetCmd procedure} -constraints { spinboxErrorMsgDifferent } -setup { spinboxPlus .e pack .e update } -body { .e } -cleanup { destroy .e } -returnCodes error -result {wrong # args: should be ".e option ?arg ...?"} test spinbox-3.1 {SpinboxWidgetCmd procedure} -setup { spinboxPlus .e pack .e update } -body { .e } -cleanup { destroy .e } -returnCodes error \ -result [expr {[package vsatisfies [package present Tcl] 8.6] ? "wrong # args: should be \".e subcommand ?arg ...?\"" : "wrong # args: should be \".e subcommand ?argument ...?\""}] test spinbox-3.2 {SpinboxWidgetCmd procedure, "bbox" widget command} -setup { spinboxPlus .e -font {Courier -12} -borderwidth 2 -highlightthickness 2 pack .e update } -body { .e bbox } -cleanup { |
Changes to modules/widgetPlus/ttkComboboxPlus.test.
1 2 3 4 5 6 7 |
# # ttk::combobox widget tests # package require Tk 8.5 package require tcltest ; namespace import -force tcltest::* loadTestedCommands |
> > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# -*- tcl -*- if {![package vsatisfies [package provide Tcl] 8.5]} { puts " Aborting the tests found in \"[file tail [info script]]\"." puts " Requiring Tcl 8.5, have [package present Tcl]" return } # Future: put all tests under constraint tk and set constraint properly if {[catch { package require Tk 8.5 } msg]} { puts " Aborting the tests found in \"[file tail [info script]]\"." puts " Requiring Tk 8.5, $msg" return } ::tcltest::testConstraint tk 1 # # ttk::combobox widget tests # package require Tk 8.5 package require tcltest ; namespace import -force tcltest::* loadTestedCommands |
Changes to modules/widgetPlus/ttkEntryPlus.test.
1
2
3
4
5
6
7
..
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# # Tile package: entry widget tests # package require Tk 8.5 package require tcltest ; namespace import -force tcltest::* loadTestedCommands ................................................................................ # # The purpose is to check that "ttkEntryPlus" does not break any features of # "ttk::entry", including important matters such as validation. # # All tests pass. # ------------------------------------------------------------------------------ variable scrollInfo proc scroll args { global scrollInfo set scrollInfo $args } # Some of the tests raise background errors; # override default bgerror to catch them. # variable bgerror "" proc bgerror {error} { variable bgerror $error variable bgerrorInfo $::errorInfo variable bgerrorCode $::errorCode } # |
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
<
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
..
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
|
# -*- tcl -*- if {![package vsatisfies [package provide Tcl] 8.5]} { puts " Aborting the tests found in \"[file tail [info script]]\"." puts " Requiring Tcl 8.5, have [package present Tcl]" return } # Future: put all tests under constraint tk and set constraint properly if {[catch { package require Tk 8.5 } msg]} { puts " Aborting the tests found in \"[file tail [info script]]\"." puts " Requiring Tk 8.5, $msg" return } ::tcltest::testConstraint tk 1 # # Tile package: entry widget tests # package require Tk 8.5 package require tcltest ; namespace import -force tcltest::* loadTestedCommands ................................................................................ # # The purpose is to check that "ttkEntryPlus" does not break any features of # "ttk::entry", including important matters such as validation. # # All tests pass. # ------------------------------------------------------------------------------ # Initialize set scrollInfo {Inf Inf} set bgerror {} proc scroll args { global scrollInfo set scrollInfo $args } # Some of the tests raise background errors; # override default bgerror to catch them. # proc bgerror {error} { variable bgerror $error variable bgerrorInfo $::errorInfo variable bgerrorCode $::errorCode } # |
Changes to modules/widgetPlus/ttkSpinboxPlus.test.
1 2 3 4 5 6 7 |
# # ttk::spinbox widget tests # package require widgetPlus namespace import ::widgetPlus::ttkSpinboxPlus |
> > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# -*- tcl -*- if {![package vsatisfies [package provide Tcl] 8.5]} { puts " Aborting the tests found in \"[file tail [info script]]\"." puts " Requiring Tcl 8.5, have [package present Tcl]" return } # Future: put all tests under constraint tk and set constraint properly if {[catch { package require Tk 8.5 } msg]} { puts " Aborting the tests found in \"[file tail [info script]]\"." puts " Requiring Tk 8.5, $msg" return } ::tcltest::testConstraint tk 1 # # ttk::spinbox widget tests # package require widgetPlus namespace import ::widgetPlus::ttkSpinboxPlus |
Changes to modules/widgetPlus/widgetPlus.man.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
331
332
333
334
335
336
337
338
339
|
[comment {-*- tcl -*- widgetPlus manpage}] [manpage_begin widgetPlus n 1.0] [moddesc {Enhanced Entry, Spinbox, and Combobox Widgets with Undo/Redo and other useful features}] [titledesc {Enhanced Entry, Spinbox, and Combobox Widgets with Undo/Redo and other useful features}] [require Tcl 8.5] [require Tk 8.5] [require snit] [require widgetPlus [opt 1.0]] [description] The [package widgetPlus] package adds new features to the widgets [syscmd [widget entry]], [syscmd [widget spinbox]], [syscmd [widget ttk::entry]], [syscmd [widget ttk::spinbox]], and [syscmd [widget ttk::combobox]]. [para] The new features are Undo and Redo operations, a [const <<Selection>>] event, and for the [const Tk] (unthemed) widgets an [option -inactiveselectbackground] option, and some minor fixes to bindings. The new facilities closely follow those of the [syscmd [widget text]] widget. ................................................................................ package require widgetPlus ::widgetPlus::EnableBWidget namespace import widgetPlus::* entryPlus .cb.e -undo 1 -maxundo 0 }] [see_also entry spinbox ttk::entry ttk::spinbox ttk::combobox text persistentSelection BWidget ComboBox Entry] [manpage_end] |
>
|
|
|
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
332
333
334
335
336
337
338
339
340
341
342
343
344
|
[vset VERSION 1.0] [comment {-*- tcl -*- widgetPlus manpage}] [manpage_begin widgetPlus n [vset VERSION]] [moddesc {Enhanced Entry, Spinbox, and Combobox Widgets with Undo/Redo and other useful features}] [titledesc {Enhanced Entry, Spinbox, and Combobox Widgets with Undo/Redo and other useful features}] [require Tcl 8.5] [require Tk 8.5] [require snit] [require widgetPlus [opt [vset VERSION]]] [description] The [package widgetPlus] package adds new features to the widgets [syscmd [widget entry]], [syscmd [widget spinbox]], [syscmd [widget ttk::entry]], [syscmd [widget ttk::spinbox]], and [syscmd [widget ttk::combobox]]. [para] The new features are Undo and Redo operations, a [const <<Selection>>] event, and for the [const Tk] (unthemed) widgets an [option -inactiveselectbackground] option, and some minor fixes to bindings. The new facilities closely follow those of the [syscmd [widget text]] widget. ................................................................................ package require widgetPlus ::widgetPlus::EnableBWidget namespace import widgetPlus::* entryPlus .cb.e -undo 1 -maxundo 0 }] [see_also entry spinbox ttk::entry ttk::spinbox ttk::combobox] [see_also text persistentSelection BWidget ComboBox Entry] [vset CATEGORY widgetPlus] [include ../../support/devel/doc/feedback.inc] [manpage_end] |
Changes to modules/widgetPlus/widgetPlus.tcl.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# ------------------------------------------------------------------------------ # One line exceeds 80 columns, for clarity. # Conventional use of namespace/package names. # Defines bindtags EntryPlus, SpinboxPlus, TEntryPlus, TSpinboxPlus, # TComboboxPlus, and BwEntryPlus. # Docs are in "man n widgetPlus". package require Tk package require snit namespace eval ::widgetPlus { variable BWidgetEnabled 0 namespace export entryPlus spinboxPlus namespace export ttkEntryPlus ttkSpinboxPlus ttkComboboxPlus } |
> | |
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# ------------------------------------------------------------------------------ # One line exceeds 80 columns, for clarity. # Conventional use of namespace/package names. # Defines bindtags EntryPlus, SpinboxPlus, TEntryPlus, TSpinboxPlus, # TComboboxPlus, and BwEntryPlus. # Docs are in "man n widgetPlus". package require Tcl 8.5 package require Tk 8.5 package require snit namespace eval ::widgetPlus { variable BWidgetEnabled 0 namespace export entryPlus spinboxPlus namespace export ttkEntryPlus ttkSpinboxPlus ttkComboboxPlus } |
Changes to modules/widgetl/ChangeLog.
1 2 3 4 5 6 7 |
2013-07-04 Andreas Kupries <andreask@activestate.com> * msgs/de.msg: [Bug 6af0aca06c]: Removed superfluous closing brace. Thanks to gregor.ebbing@gmx.de for the report. 2013-03-25 Andreas Kupries <andreas_kupries@users.sourceforge.net> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2013-07-04 Andreas Kupries <andreask@activestate.com> * msgs/de.msg: [Bug 6af0aca06c]: Removed superfluous closing brace. Thanks to gregor.ebbing@gmx.de for the report. 2013-03-25 Andreas Kupries <andreas_kupries@users.sourceforge.net> |
Changes to modules/widgetv/ChangeLog.
1 2 3 4 5 6 7 |
2013-03-25 Andreas Kupries <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.6 ======================== * 2012-08-28 Andreas Kupries <andreask@activestate.com> |
> > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
2020-02-09 0.7 <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.7 ======================== * 2013-03-25 Andreas Kupries <andreas_kupries@users.sourceforge.net> * * Released and tagged Tklib 0.6 ======================== * 2012-08-28 Andreas Kupries <andreask@activestate.com> |
Changes to support/devel/sak/localdoc/localdoc.tcl.
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
-post+toc Applications $apps \ -exclude {*/doctools/tests/*} \ -exclude {*/support/*} \ -merge \ -o embedded/www \ html .] return } # ### ### ### ######### ######### ######### package provide sak::localdoc 1.0 ## # ### |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
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 |
-post+toc Applications $apps \ -exclude {*/doctools/tests/*} \ -exclude {*/support/*} \ -merge \ -o embedded/www \ html .] # Special docs, pre-made HTML. Integrate into the docs made above. puts "Special HTML..." set base embedded/www set dst [lindex [glob $base/*/files/modules] 0] set xbase [file dirname [file dirname $dst]] foreach special [glob -nocomplain modules/*/doc/index.html] { set src [file dirname $special] set mod [file tail [file dirname $src]] set desc [xdesc $special] puts "\t$mod @ $src... ($desc)" # Base assembly file copy $src $dst/$mod # Toc integration. write $xbase/toc.html [xbasetoc [cat $xbase/toc.html] $mod $desc] write $base/toc.html [basetoc [cat $base/toc.html] $mod $desc] write $base/toc0.html [basetoc0 [cat $base/toc0.html] $mod $desc] write $base/toc1.html [basetoc1 [cat $base/toc1.html] $mod $desc] } return } proc sak::localdoc::xdesc {path} { set index [cat $path] regexp {<title>(.*)</title>} $index -> desc return [join [lrange [split $desc] 0 end-2] { }] } proc sak::localdoc::basetoc {toc mod mdesc} { regexp {^(.*>Widget</dt><dd>\n<table class="#doctools_toc">)(.*)(</table></dl>\n</dl>\n<dl><dt><a name='by_type'>.*)$} $toc -> h t f set tn [xtable $t $mod $mdesc tklib/] return $h\n$tn$f } proc sak::localdoc::basetoc0 {toc mod mdesc} { regexp {^(.*>Widget</dt><dd>\n<table class="#doctools_toc">)(.*)(</table>.*)$} $toc -> h t f set tn [xtable $t $mod $mdesc tklib/] return $h\n$tn$f } proc sak::localdoc::basetoc1 {toc mod mdesc} { regexp {^(.*<dl><dt><a name='modules'>Modules</dt><dd>)(.*)(</dl>\n</dd>.*)$} $toc -> h t f set tn [xdd $t $mod $mdesc tklib/] return $h\n$tn$f } proc sak::localdoc::xbasetoc {toc mod mdesc} { regexp {^(.*<table class="#doctools_toc">)(.*)(</table>.*)$} $toc -> h t f set tn [xtable $t $mod $mdesc] return $h\n$tn$f } proc sak::localdoc::xdd {t mod mdesc {prefix {}}} { set check 1 set tn "" foreach line [split [string trim $t] \n] { if {!$check} { append tn $line \n continue } if {[regexp {<dl><dt><a name='(.*)'>.*</dt><dd>} $line -> name]} { if {$check && ([string compare $name $mod] > 0)} { # Insert before first entry just lexicographically after the new module. set check 0 append tn "<dl><dt><a name='$mod'>$mod</dt><dd>" \n append tn "<table class=\"#doctools_toc\">" \n append tn "<tr class=\"#doctools_toceven\" >" \n append tn "<td class=\"#doctools_tocleft\" ><a name='$mod'><a href=\"${prefix}files/modules/$mod/index.html\">$mod</a></td>" \n append tn "<td class=\"#doctools_tocright\">$mdesc</td>" \n append tn "</tr>" \n append tn "</table></dl>" \n } } append tn $line \n } return $tn } proc sak::localdoc::xtable {t mod mdesc {prefix {}}} { set check 1 set even 1 set tn "" foreach {__ link desc post} [split [string trim $t] \n] { #puts |$__|\n|$link|\n|$desc|\n|$post| regexp {<a name='(.*)'>} $link -> name if {$check && ([string compare $name $mod] > 0)} { # Insert before first entry just lexicographically after the new module. set check 0 append tn "<tr class=\"#doctools_toc[expr {$even ? "even\"" : "odd\" "}] >" \n append tn "<td class=\"#doctools_tocleft\" ><a name='$mod'><a href=\"${prefix}files/modules/$mod/index.html\">$mod</a></td>" \n append tn "<td class=\"#doctools_tocright\">$mdesc</td>" \n append tn "</tr>" \n set even [expr {1-$even}] } append tn "<tr class=\"#doctools_toc[expr {$even ? "even\"" : "odd\" "}] >" \n append tn $link \n append tn $desc \n append tn $post \n set even [expr {1-$even}] } return $tn } proc sak::localdoc::cat {path} { set c [open $path r] set d [read $c] close $c return $d } proc sak::localdoc::write {path d} { puts "\t\tRewriting $path" set c [open $path w] puts -nonewline $c $d close $c return } # ### ### ### ######### ######### ######### package provide sak::localdoc 1.0 ## # ### |
Changes to support/devel/sak/old/help.txt.
91 92 93 94 95 96 97 98 99 100 101 102 |
/=========================================================== gendist - Generate distribution from CVS snapshot rpmspec - Generate a RPM spec file for the bundle. 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 |
> |
91 92 93 94 95 96 97 98 99 100 101 102 103 |
/===========================================================
gendist - Generate distribution from CVS snapshot
rpmspec - Generate a RPM spec file for the bundle.
gentip55 - Generate a TIP55-style DESCRIPTION.txt file.
yml - Generate a YAML description file.
tap - Generate TDK .tap 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
|
Changes to support/devel/sak/util/registry.tcl.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
Setup
return
}
namespace eval ::sak::registry {
variable _here [file dirname [info script]]
variable statedir [file join ~ .Tcllib]
variable state [file join $statedir Registry]
variable _local {}
}
##
# ###
|
| |
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
Setup
return
}
namespace eval ::sak::registry {
variable _here [file dirname [info script]]
variable statedir [file join ~ .Tklib]
variable state [file join $statedir Registry]
variable _local {}
}
##
# ###
|
Changes to support/installation/version.tcl.
1 2 |
package_version 0.6
package_name tklib
|
| |
1 2 |
package_version 0.7
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
33
34
35
36
..
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 ................................................................................ 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 |
|
|
|
|
>
>
|
|
|
>
|
|
|
|
|
>
|
>
|
>
>
>
|
|
|
|
|
|
|
>
|
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
..
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
|
@@ RELEASE 0.7 $bundle $bundlev $pkg $ver Mentry 3.10 Mentry_tile 3.10 Plotchart 2.4.1 Scrollutil 1.5 Scrollutil_tile 1.5 Tablelist 6.8 Tablelist_tile 6.8 Wcb 3.6 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::gradient 0.2 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.2 ctext 3.3 cursor 0.3.1 datefield 0.3 diagram 1 diagram::application 1.2 diagram::attribute 1 diagram::basic 1.0.1 diagram::core 1 diagram::direction 1 diagram::element 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.10 mentry::common 3.10 mentry_tile 3.10 menubar 0.5 menubar::debug 0.5 menubar::node 0.5 menubar::tree 0.5 meter 1.0 notifywindow 1.0 ntext 1.0b3 persistentSelection 1.0b1 plotanim 0.2 radioMatrix 1.0 rdial 0.7 scrollutil 1.5 scrollutil::common 1.5 scrollutil_tile 1.5 style 0.3 style::as 1.4.1 style::lobster 0.2 swaplist 0.2 tablelist 6.8 tablelist::common 6.8 tablelist_tile 6.8 tachometer 0.1 tipstack 1.0.1 tkpiechart 6.6 tooltip 1.4.6 voltmeter 0.1 wcb 3.6 widget::listentry 0.1.2 widget::listsimple 0.1.2 widget::validator 0.1 widgetPlus 1.0b2 xyplot 1.0.1 |
Added support/releases/history/README-0.7.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 |
Overview ======== 5 new packages in 5 modules 11 changed packages in 9 modules 2 internally changed packages in 1 modules 47 unchanged packages in 19 modules 79 packages, total in 31 modules, total New in tklib 0.7 ================ Module Package New Version Comments --------------------- --------------------- ------------- ---------- canvas canvas::gradient 0.2 notifywindow notifywindow 1.0 persistentSelection persistentSelection 1.0b1 scrollutil scrollutil::common 1.5 widgetPlus widgetPlus 1.0b2 --------------------- --------------------- ------------- ---------- Changes from tklib 0.6 to 0.7 ============================= tklib 0.6 tklib 0.7 Module Package Old Version New Version Comments --------------- -------------------- ------------- ------------- ---------------- controlwidget rdial 0.3 0.7 D EF EX crosshair crosshair 1.1 1.2 B EF EX datefield datefield 0.2 0.3 D EF mentry mentry::common 3.6 3.10 B D EF I plotchart Plotchart 2.1.0 2.4.1 B D EF I --------------- -------------------- ------------- ------------- ---------------- tablelist tablelist::common 5.7 API B D EF I P tablelist::common 6.8 API B D EF I P --------------- -------------------- ------------- ------------- ---------------- tooltip tooltip 1.4.4 1.4.6 B D EF --------------- -------------------- ------------- ------------- ---------------- wcb Wcb 3.4 3.6 B D EF I P wcb 3.4 3.6 B D EF I P --------------- -------------------- ------------- ------------- ---------------- widgetl widget::listentry 0.1.1 0.1.2 D I widget::listsimple 0.1.1 0.1.2 D I --------------- -------------------- ------------- ------------- ---------------- Invisible changes (documentation, testsuites) ============================================= tklib 0.6 tklib 0.7 Module Package Old Version New Version Comments --------------- --------------- ------------- ------------- ---------- controlwidget controlwidget 0.1 0.1 D meter 1.0 1.0 EX --------------- --------------- ------------- ------------- ---------- Unchanged ========= autoscroll, bindDown, canvas::drag, canvas::edit::points, canvas::edit::polyline, canvas::edit::quadrilateral, canvas::highlight, canvas::mvg, canvas::snap, canvas::sqmap, canvas::tag, canvas::track::lines, canvas::zoom, chatwidget, ctext, cursor, diagram, diagram::application, diagram::attribute, diagram::basic, diagram::core, diagram::direction, diagram::element, diagram::navigation, diagram::point, getstring, history, ico, ipentry, khim, led, menubar, menubar::debug, menubar::node, menubar::tree, plotanim, radioMatrix, style, style::as, style::lobster, swaplist, tachometer, tipstack, tkpiechart, voltmeter, widget::validator, xyplot 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 tklib.spec.
1 2 3 4 5 6 7 8 9 10 |
# $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
|
| |
1 2 3 4 5 6 7 8 9 10 |
# $Id: package_rpm.txt,v 1.1 2009/02/07 05:18:22 andreas_kupries Exp $
%define version 0.7
%define directory /usr
Summary: The standard Tk library
Name: tklib
Version: %{version}
Release: 2
Copyright: BSD
|
Changes to 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 .. 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 .. 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 ... 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 ... 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 ... 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 ... 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 ... 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 ... 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 ... 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 ... 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 ... 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 ... 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 ... 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 ... 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 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) # -------+ ................................................................................ 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} # ................................................................................ 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) # -------+ ................................................................................ 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} ................................................................................ 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 * ................................................................................ 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} ................................................................................ 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 ................................................................................ # # ############### # ################ # 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 ................................................................................ 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 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) # -------+ ................................................................................ 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 ................................................................................ # ################### # 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 ................................................................................ # # ################### # ################ # 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 ................................................................................ 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 # # ################ # ## ### ##### ######## |
| | | | > > > > | | | | | | | | | > | > | | | | | | | | < < < < < < < < < < | > > > > > | | < > > > > > > > > > > > | | | > > > > > | < < < < < | | | | | | | | | | | < < < < < | | > > > > > | | | | > > > > > < < < < < < | < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | > < < < < < > > > > > | > > > > > > > > > > > > > > > > > > > > > > > | | > | | | | | | | > | | < | | > | | | | | < < < < < > > > > > | | < < < < < | > > > > > | | | < < < < < | > > > > | > > > > > > > > > > > > > > > > | |
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 .. 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 .. 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 ... 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 ... 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 ... 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 ... 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 ... 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 ... 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 ... 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 ... 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 ... 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 ... 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 ... 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 ... 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 |
format {TclDevKit Project File} fmtver 2.0 fmttool {TclDevKit TclApp PackageDefinition} 2.5 ## Saved at : Sun Feb 09 12:43:25 PST 2020 ## By : aku ## ## Generated by "sak.tcl tap" ## of tklib 0.7 ######## ##### ### ## # # ############### # Complete bundle Package {tklib 0.7} Base @TAP_DIR@ Platform * Desc {Tklib: Bundle of all packages} Path pkgIndex.tcl Path autoscroll Path canvas Path chatwidget ................................................................................ Path history Path ico Path ipentry Path khim Path mentry Path menubar Path ntext Path notifywindow Path persistentSelection Path plotchart Path scrollutil Path style Path swaplist Path tablelist Path tkpiechart Path tooltip Path wcb Path widget Path widgetl Path widgetPlus Path widgetv # ################### # Module "autoscroll" # [1] | "autoscroll" (1.1) # -------+ ................................................................................ Path pkgIndex.tcl # # ################### # ############### # Module "canvas" # [1] | "canvas::sqmap" (0.3.1) # [2] | "canvas::snap" (1.0.1) # [3] | "canvas::track::lines" (0.1) # [4] | "canvas::tag" (0.1) # [5] | "canvas::drag" (0.1) # [6] | "canvas::edit::polyline" (0.1) # [7] | "canvas::gradient" (0.2) # [8] | "canvas::highlight" (0.1) # [9] | "canvas::mvg" (1) # [10] | "canvas::zoom" (0.2.1) # [11] | "canvas::edit::quadrilateral" (0.1) # [12] | "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_gradient.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::sqmap 0.3.1} See __canvas Platform * Desc {Canvas with map background based on square tiles} Package {canvas::snap 1.0.1} See __canvas Platform * Desc {Canvas snapshot to Tk photo image} Package {canvas::track::lines 0.1} See __canvas Platform * Desc {Tklib package} Package {canvas::tag 0.1} See __canvas Platform * Desc {Manage a group of rubber band lines} Package {canvas::drag 0.1} See __canvas Platform * Desc {Manage the dragging of canvas items or item groups} Package {canvas::edit::polyline 0.1} See __canvas Platform * Desc {Editing a polyline on a canvas} Package {canvas::gradient 0.2} See __canvas Platform * Desc {Canvas with a gradient background} Package {canvas::highlight 0.1} See __canvas Platform * Desc {Manage the highlighting of canvas items or item groups} Package {canvas::mvg 1} See __canvas Platform * Desc {Canvas to ImageMagick MVG vector format} Package {canvas::zoom 0.2.1} See __canvas Platform * Desc {Zoom control for canvas::sqmap} Package {canvas::edit::quadrilateral 0.1} See __canvas Platform * Desc {Editing a quadrilateral on a canvas} Package {canvas::edit::points 0.1} See __canvas Platform * Desc {Editing a cloud of points on a canvas} # ................................................................................ Path pkgIndex.tcl # # ################### # ###################### # Module "controlwidget" # [1] | "tachometer" (0.1) # [2] | "rdial" (0.7) # [3] | "radioMatrix" (1.0) # [4] | "controlwidget" (0.1) # [5] | "meter" (1.0) # [6] | "bindDown" (1.0) # [7] | "led" (1.0) # [8] | "voltmeter" (0.1) # -------+ ................................................................................ Path pkgIndex.tcl Path radioMatrix.tcl Path rdial.tcl Path tachometer.tcl Path vertical_meter.tcl Path voltmeter.tcl Package {tachometer 0.1} See __controlwidget Platform * Desc {Tklib package} Package {rdial 0.7} See __controlwidget Platform * Desc {Tklib package} Package {radioMatrix 1.0} See __controlwidget Platform * Desc {Tklib package} Package {controlwidget 0.1} See __controlwidget Platform * Desc {Collection of widgets for displaying and controlling numerical values} ................................................................................ Path pkgIndex.tcl # # ############### # ################## # Module "crosshair" # [1] | "crosshair" (1.2) # -------+ Package {crosshair 1.2} Platform * Desc {Crosshairs for Tk canvas} Base @TAP_DIR@/crosshair Path crosshair.tcl Path pkgIndex.tcl # # ################## # ################## # Module "datefield" # [1] | "datefield" (0.3) # -------+ Package {datefield 0.3} Platform * Desc {Tk datefield widget} Base @TAP_DIR@/datefield Path datefield.tcl Path pkgIndex.tcl # # ################## # ################# # Module "diagrams" # [1] | "diagram::attribute" (1) # [2] | "diagram" (1) # [3] | "diagram::application" (1.2) # [4] | "diagram::navigation" (1) # [5] | "diagram::core" (1) # [6] | "diagram::direction" (1) # [7] | "diagram::element" (1) # [8] | "diagram::point" (1) # [9] | "diagram::basic" (1.0.1) # -------+ Package {__diagrams 0.0} Platform * ................................................................................ Path diagram.tcl Path direction.tcl Path element.tcl Path navigation.tcl Path pkgIndex.tcl Path point.tcl Package {diagram::attribute 1} See __diagrams Platform * Desc {Tklib package} Package {diagram 1} See __diagrams Platform * Desc {Diagram drawing} Package {diagram::application 1.2} See __diagrams Platform * Desc {Tklib package} Package {diagram::navigation 1} See __diagrams Platform * Desc {Tklib package} Package {diagram::core 1} See __diagrams Platform * Desc {Tklib package} Package {diagram::direction 1} See __diagrams Platform * Desc {Tklib package} Package {diagram::element 1} See __diagrams Platform * Desc {Tklib package} ................................................................................ Path uk.msg # # ############# # ############### # Module "mentry" # [1] | "mentry::common" (3.10) # -------+ Package {mentry::common 3.10} Platform * Desc {Tklib package} Base @TAP_DIR@/mentry Path mentry.tcl Path mentry_tile.tcl Path mentryPublic.tcl Path pkgIndex.tcl ................................................................................ # # ############### # ################ # Module "menubar" # [1] | "menubar::node" (0.5) # [2] | "menubar::debug" (0.5) # [3] | "menubar::tree" (0.5) # [4] | "menubar" (0.5) # -------+ Package {__menubar 0.0} Platform * Desc {Create and manipulate menubars} Hidden Base @TAP_DIR@/menubar ................................................................................ Desc {Tklib package} Package {menubar::debug 0.5} See __menubar Platform * Desc {Tklib package} Package {menubar::tree 0.5} See __menubar Platform * Desc {Tklib package} Package {menubar 0.5} See __menubar Platform * Desc {Creates an instance of the Class.} # # ################ # ############## # Module "ntext" # -------+ Package {menubar 0.5} Platform * Desc {Creates an instance of the Class.} Base @TAP_DIR@/ntext Path ntext.tcl Path pkgIndex.tcl # # ############## # ##################### # Module "notifywindow" # [1] | "notifywindow" (1.0) # -------+ Package {notifywindow 1.0} Platform * Desc {Provides unobtrusive window for alerts/notifications from Tk applications} Base @TAP_DIR@/notifywindow Path notifywindow.tcl Path pkgIndex.tcl # # ##################### # ############################ # Module "persistentSelection" # [1] | "persistentSelection" (1.0b1) # -------+ Package {persistentSelection 1.0} Platform * Desc {Enhanced PRIMARY selection} Base @TAP_DIR@/persistentSelection Path persistentSelection.tcl Path pkgIndex.tcl # # ############################ # ################## # Module "plotchart" # [1] | "xyplot" (1.0.1) # [2] | "plotanim" (0.2) # [3] | "Plotchart" (2.4.1) # -------+ Package {__plotchart 0.0} Platform * Desc {Plotchart} Hidden Base @TAP_DIR@/plotchart ................................................................................ Path plotcontour.tcl Path plotgantt.tcl Path plotobject.tcl Path plotpack.tcl Path plotpriv.tcl Path plotscada.tcl Path plotspecial.tcl Path plotstatustimeline.tcl Path plottable.tcl Path scaling.tcl Path xyplot.tcl Package {xyplot 1.0.1} See __plotchart Platform * Desc {Tklib package} Package {plotanim 0.2} See __plotchart Platform * Desc {Tklib package} Package {Plotchart 2.4.1} See __plotchart Platform * Desc {Simple plotting and charting package} # # ################## # ################### # Module "scrollutil" # [1] | "scrollutil::common" (1.5) # -------+ Package {scrollutil::common 1.5} Platform * Desc {Tklib package} Base @TAP_DIR@/scrollutil Path pkgIndex.tcl Path scripts/mwutil.tcl Path scripts/scrollableframe.tcl Path scripts/scrollarea.tcl Path scripts/scrollsync.tcl Path scripts/tclIndex Path scripts/wheelEvent.tcl Path scrollutil.tcl Path scrollutil_tile.tcl Path scrollutilCommon.tcl # # ################### # ############## # Module "style" # [1] | "style::lobster" (0.2) # [2] | "style" (0.3) # [3] | "style::as" (1.4.1) # -------+ ................................................................................ Path swaplist.tcl # # ################# # ################## # Module "tablelist" # [1] | "tablelist::common" (6.8) # -------+ Package {tablelist::common 6.8} Platform * Desc {Tklib package} Base @TAP_DIR@/tablelist Path pkgIndex.tcl Path scripts/mwutil.tcl Path scripts/pencil.cur 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 ................................................................................ # ################### # Module "tkpiechart" # [1] | "tkpiechart" (6.6) # -------+ Package {tkpiechart 6.6} Platform * Desc {tkpiechart canvas label class} Base @TAP_DIR@/tkpiechart Path boxlabel.tcl Path canlabel.tcl Path labarray.tcl Path objselec.tcl Path perilabel.tcl Path pie.tcl ................................................................................ # # ################### # ################ # Module "tooltip" # [1] | "tipstack" (1.0.1) # [2] | "tooltip" (1.4.6) # -------+ Package {__tooltip 0.0} Platform * Desc {widget::listsimple widget} 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.6} See __tooltip Platform * Desc {widget::listsimple widget} # # ################ # ############ # Module "wcb" # [1] | "Wcb" (3.6) # [2] | "wcb" (3.6) # -------+ 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 scripts/wcbTreeview.tcl Path wcb.tcl Package {Wcb 3.6} See __wcb Platform * Desc {Tklib package} Package {wcb 3.6} See __wcb Platform * Desc {Tklib package} # # ############ # ############### # Module "widget" # [1] | "widget::statusbar" (1.2.1) # [2] | "widget::superframe" (1.0.1) # [3] | "widget::ruler" (1.1) # [4] | "widget::screenruler" (1.2) # [5] | "widget::calendar" (1.0.1) # [6] | "widget" (3.1) # [7] | "widget::scrolledtext" (1.0) # [8] | "widget::dateentry" (0.96) # [9] | "widget::dialog" (1.3.1) # [10] | "widget::scrolledwindow" (1.2.1) # [11] | "widget::toolbar" (1.2.1) # [12] | "widget::panelframe" (1.1) # [13] | "widget::arrowbutton" (1) # [14] | "widget::menuentry" (1.0.1) # -------+ Package {__widget 0.0} Platform * Desc {widget::listsimple widget, Various megawidgets} Hidden Base @TAP_DIR@/widget ................................................................................ Desc {Tklib package} Package {widget::superframe 1.0.1} See __widget Platform * Desc {Tklib package} Package {widget::ruler 1.1} See __widget Platform * Desc {Tklib package} Package {widget::screenruler 1.2} See __widget Platform * Desc {Tklib package} Package {widget::calendar 1.0.1} See __widget Platform * Desc {Calendar Megawidget} Package {widget 3.1} See __widget Platform * Desc {Toolbar Megawidget} Package {widget::scrolledtext 1.0} See __widget Platform * Desc {Tklib package} Package {widget::dateentry 0.96} 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::toolbar 1.2.1} See __widget Platform * Desc {Toolbar Megawidget} Package {widget::panelframe 1.1} See __widget Platform * Desc {Tklib package} Package {widget::arrowbutton 1} See __widget Platform * Desc {Tklib package} Package {widget::menuentry 1.0.1} See __widget Platform * Desc {Tklib package} # # ############### # ################ # Module "widgetl" # [1] | "widget::listentry" (0.1.2) # [2] | "widget::listsimple" (0.1.2) # -------+ Package {__widgetl 0.0} Platform * Desc {widget::listsimple widget, widget::listentry widget} Hidden Base @TAP_DIR@/widgetl Path listentry.tcl Path listsimple.tcl Path pkgIndex.tcl Package {widget::listentry 0.1.2} See __widgetl Platform * Desc {widget::listentry widget} Package {widget::listsimple 0.1.2} See __widgetl Platform * Desc {widget::listsimple widget} # # ################ # ################### # Module "widgetPlus" # [1] | "widgetPlus" (1.0b2) # -------+ Package {widgetPlus 1.0} Platform * Desc {Enhanced Entry, Spinbox, and Combobox Widgets with Undo/Redo and other useful features} Base @TAP_DIR@/widgetPlus Path pkgIndex.tcl Path widgetPlus.tcl # # ################### # ################ # Module "widgetv" # [1] | "widget::validator" (0.1) # -------+ Package {widget::validator 0.1} Platform * Desc {widget::validator behaviour} Base @TAP_DIR@/widgetv Path pkgIndex.tcl Path validator.tcl # # ################ # ## ### ##### ######## |
Changes to tklib.yml.
1
2
3
4
5
6
7
8
9
..
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 ................................................................................ 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/ |
|
|
|
1
2
3
4
5
6
7
8
9
..
11
12
13
14
15
16
17
18
|
dist_id: tklib version: 0.7 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 ................................................................................ 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.7/ |