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

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

Overview
Comment: * doc/*.html: Added a "Virtual Events" section to the reference manual; updated to reflect the changes.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1:2f912ce0410c5726a0e4017effeaab807c710935
User & Date: csaba 2013-04-13 18:39:17
Context
2013-04-13
18:40
* ../../examples/*.tcl: Bumped the version number to 5.8. check-in: e1ee5b45d2 user: csaba tags: trunk
18:39
* doc/*.html: Added a "Virtual Events" section to the reference manual; updated to reflect the changes. check-in: 2f912ce041 user: csaba tags: trunk
18:36
* CHANGES.txt: Updated to reflect the changes. check-in: ac6d4297ea user: csaba tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to modules/tablelist/doc/index.html.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
..
45
46
47
48
49
50
51



52
53
54
55
56
57
58
<html>
<head>
  <title>The Multi-Column Listbox and Tree Widget Package Tablelist 5.7</title>

  <meta name="Author" content="Csaba Nemethi">
  <meta name="Keywords" content=
  "tablelist, multi-column, listbox, tree, widget, tile">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>The Multi-Column Listbox and Tree Widget Package Tablelist 5.7</h1>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>
................................................................................
  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="tablelistMentry.html">Interactive Tablelist Cell Editing Using
  the Mentry Package</a></p>

  <p><a href="tablelistThemes.html">Commands Related to Tile Themes</a></p>
</body>
</html>


|








|







 







>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
..
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<html>
<head>
  <title>The Multi-Column Listbox and Tree Widget Package Tablelist 5.8</title>

  <meta name="Author" content="Csaba Nemethi">
  <meta name="Keywords" content=
  "tablelist, multi-column, listbox, tree, widget, tile">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>The Multi-Column Listbox and Tree Widget Package Tablelist 5.8</h1>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>
................................................................................
  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>

  <p><a href="tablelistThemes.html">Commands Related to Tile Themes</a></p>
</body>
</html>

Changes to modules/tablelist/doc/tablelist.html.

14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
...
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
...
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
...
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
...
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
...
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
...
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
...
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
....
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
....
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
....
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
....
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
  </style>
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Tablelist Programmer's Guide</h1>

    <h2>For Tablelist Version 5.7</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>
................................................................................

  <p>The Tablelist package provides a great variety of tree styles controlling
  the look &amp; 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.&nbsp; A great variety of widgets
  from the Tk core and from the packages tile, BWidget, Iwidgets, combobox, and
  Mentry (or Mentry_tile) is supported for being used as embedded edit
  window.&nbsp; 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.&nbsp; 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>, ...).&nbsp; They can
  be used, among others, to insert images into the cells and the header labels,
................................................................................
      <a href="http://www.nemethi.de">http://www.nemethi.de</a>
    </address>
  </blockquote>

  <h3><a name="ov_get"></a>How to get it?</h3>

  <p>Tablelist is available for free download from the same URL as Wcb.&nbsp;
  The distribution file is <code>tablelist5.7.tar.gz</code> for UNIX and
  <code>tablelist5_7.zip</code> for Windows.&nbsp; 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 hosted on SourceForge, as part of tklib, which in turn
  is contained in the tcllib project, having the address</p>

  <blockquote>
    <address>
      <a href=
      "http://core.tcl.tk/tklib">http://core.tcl.tk/tklib</a>
    </address>
  </blockquote>

  <h3><a name="ov_install"></a>How to install it?</h3>

  <p>Install the package as a subdirectory of one of the directories given by
  the <code>auto_path</code> variable.&nbsp; For example, you can install it as
................................................................................
  a directory at the same level as the Tcl and Tk script libraries.&nbsp; 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>tablelist5.7.tar.gz</code>:</p>

  <blockquote>
    <pre>
gunzip -c tablelist5.7.tar.gz | tar -xf -
</pre>
  </blockquote>

  <p>This command will create a directory named <code>tablelist5.7</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>tablelist5_7.zip</code> into the directory
  <code>tablelist5.7</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.&nbsp; 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.&nbsp; Finally, the file
................................................................................
  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>&nbsp; If you have an earlier Tablelist version as part of
  ActiveTcl 8.5 or above and the new Tablelist release 5.7, then it is highly
  recommended to specify the version number <code>5.7</code> in the&nbsp;
  <code>package require</code>&nbsp; command, because otherwise the interpreter
  will load the old Tablelist version included in ActiveTcl as Tcl
  Module.&nbsp; The <a href="#examples">examples</a> below use the
  statement&nbsp; <code>package require tablelist 5.7</code>,&nbsp; and their
  tile-based counterparts invoke the command&nbsp; <code>package require
  tablelist_tile 5.7</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>?
................................................................................
  newer tile versions this is considered a Really Bad Idea, causing many things
  to break.&nbsp; 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), 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 (as of tile version 0.8) is
  due to the fact that the&nbsp; <code>(ttk::)style theme use</code>&nbsp;
  command can only be used to set the current theme, but not to retrieve
  it.&nbsp; 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
................................................................................
    use the <code>tablelist::library</code> variable to find the location of
    the file.&nbsp; 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 5.7
source [file join $tablelist::library demos config.tcl]
</pre>
      </blockquote>
    </li>
  </ul>

  <p>In both cases, the script will print the following message to
................................................................................
  known from the standard Tk widgets.&nbsp; 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 5.7

namespace eval demo {
    #
    # 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 top-level widget of the class DemoTop:
    #
................................................................................
  <code>browseTree.tcl</code>.&nbsp; 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 5.7

namespace eval demo {
    variable dir [file dirname [info script]]

    #
    # Create two images, needed in the procedure putChildren
    #
................................................................................
  in the <a href="#ex_browse">previous section</a>.&nbsp; 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 5.7

#
# Add some entries to the Tk option database
#
set dir [file dirname [info script]]
source [file join $dir option.tcl]

................................................................................
  <h3><a name="ex_editing"></a>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), and Mentry (or Mentry_tile) for interactive cell
  editing.&nbsp; The following figure shows the tablelist widget, together with
  a BWidget ComboBox used to edit the contents of one of its cells:</p>

  <p><img src="bwidget.png" alt="Serial Line Configuration" width="757" height=
  "369"></p>

  <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):</p>

  <blockquote>
    <pre>
package require Tk 8.4                          ;# because of "-compound"
package require tablelist 5.7
package require BWidget

wm title . "Serial Line Configuration"

#
# Add some entries to the Tk option database
#
................................................................................
  <p><img src="embeddedWindows.png" alt="Embedded Windows" width="399" height=
  "268"></p>

  <p>First, we create and populate the tablelist widget:</p>

  <blockquote>
    <pre>
package require tablelist 5.7

wm title . "Tk Library Scripts"

#
# Add some entries to the Tk option database
#
set dir [file dirname [info script]]
................................................................................
  red color:</p>

  <p>First, we replace the starting lines</p>

  <blockquote>
    <pre>
package require Tk 8.3                          ;# because of entry validation
package require tablelist 5.7
</pre>
  </blockquote>

  <p>with</p>

  <blockquote>
    <pre>
package require tablelist<span>_tile</span> 5.7
</pre>
  </blockquote>

  <p>and the command</p>

  <blockquote>
    <pre>







|







 







|
|
|
|







 







|
|









|







 







|



|



|




|
|







 







|
|



|

|







 







|
|
|







 







|







 







|







 







|







 







|







 







|













|







 







|







 







|







|







14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
...
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
...
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
...
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
...
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
...
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
...
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
...
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
....
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
....
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
....
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
....
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
  </style>
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Tablelist Programmer's Guide</h1>

    <h2>For Tablelist Version 5.8</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>
................................................................................

  <p>The Tablelist package provides a great variety of tree styles controlling
  the look &amp; 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.&nbsp; 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.&nbsp; 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.&nbsp; 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>, ...).&nbsp; They can
  be used, among others, to insert images into the cells and the header labels,
................................................................................
      <a href="http://www.nemethi.de">http://www.nemethi.de</a>
    </address>
  </blockquote>

  <h3><a name="ov_get"></a>How to get it?</h3>

  <p>Tablelist is available for free download from the same URL as Wcb.&nbsp;
  The distribution file is <code>tablelist5.8.tar.gz</code> for UNIX and
  <code>tablelist5_8.zip</code> for Windows.&nbsp; 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 hosted on SourceForge, as part of tklib, which in turn
  is contained in the tcllib project, having the address</p>

  <blockquote>
    <address>
      <a href=
      "http://sourceforge.net/projects/tcllib">http://sourceforge.net/projects/tcllib</a>
    </address>
  </blockquote>

  <h3><a name="ov_install"></a>How to install it?</h3>

  <p>Install the package as a subdirectory of one of the directories given by
  the <code>auto_path</code> variable.&nbsp; For example, you can install it as
................................................................................
  a directory at the same level as the Tcl and Tk script libraries.&nbsp; 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>tablelist5.8.tar.gz</code>:</p>

  <blockquote>
    <pre>
gunzip -c tablelist5.8.tar.gz | tar -xf -
</pre>
  </blockquote>

  <p>This command will create a directory named <code>tablelist5.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>tablelist5_8.zip</code> into the directory
  <code>tablelist5.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.&nbsp; 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.&nbsp; Finally, the file
................................................................................
  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>&nbsp; If you have an earlier Tablelist version as part of
  ActiveTcl 8.5 or above and the new Tablelist release 5.8, then it is highly
  recommended to specify the version number <code>5.8</code> in the&nbsp;
  <code>package require</code>&nbsp; command, because otherwise the interpreter
  will load the old Tablelist version included in ActiveTcl as Tcl
  Module.&nbsp; The <a href="#examples">examples</a> below use the
  statement&nbsp; <code>package require tablelist 5.8</code>,&nbsp; and their
  tile-based counterparts invoke the command&nbsp; <code>package require
  tablelist_tile 5.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>?
................................................................................
  newer tile versions this is considered a Really Bad Idea, causing many things
  to break.&nbsp; 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 (as of tile version 0.8) is
  due to the fact that the&nbsp; <code>(ttk::)style theme use</code>&nbsp;
  command can only be used to set the current theme, but not to retrieve
  it.&nbsp; 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
................................................................................
    use the <code>tablelist::library</code> variable to find the location of
    the file.&nbsp; 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 5.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
................................................................................
  known from the standard Tk widgets.&nbsp; 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 5.8

namespace eval demo {
    #
    # 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 top-level widget of the class DemoTop:
    #
................................................................................
  <code>browseTree.tcl</code>.&nbsp; 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 5.8

namespace eval demo {
    variable dir [file dirname [info script]]

    #
    # Create two images, needed in the procedure putChildren
    #
................................................................................
  in the <a href="#ex_browse">previous section</a>.&nbsp; 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 5.8

#
# Add some entries to the Tk option database
#
set dir [file dirname [info script]]
source [file join $dir option.tcl]

................................................................................
  <h3><a name="ex_editing"></a>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.&nbsp; The following figure shows the tablelist widget, together with
  a BWidget ComboBox used to edit the contents of one of its cells:</p>

  <p><img src="bwidget.png" alt="Serial Line Configuration" width="757" height=
  "369"></p>

  <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):</p>

  <blockquote>
    <pre>
package require Tk 8.4                          ;# because of "-compound"
package require tablelist 5.8
package require BWidget

wm title . "Serial Line Configuration"

#
# Add some entries to the Tk option database
#
................................................................................
  <p><img src="embeddedWindows.png" alt="Embedded Windows" width="399" height=
  "268"></p>

  <p>First, we create and populate the tablelist widget:</p>

  <blockquote>
    <pre>
package require tablelist 5.8

wm title . "Tk Library Scripts"

#
# Add some entries to the Tk option database
#
set dir [file dirname [info script]]
................................................................................
  red color:</p>

  <p>First, we replace the starting lines</p>

  <blockquote>
    <pre>
package require Tk 8.3                          ;# because of entry validation
package require tablelist 5.8
</pre>
  </blockquote>

  <p>with</p>

  <blockquote>
    <pre>
package require tablelist<span>_tile</span> 5.8
</pre>
  </blockquote>

  <p>and the command</p>

  <blockquote>
    <pre>

Changes to modules/tablelist/doc/tablelistBWidget.html.

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
..
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  <meta name="Keywords" content="tablelist, editing, BWidget">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Interactive Tablelist Cell Editing Using the BWidget Package</h1>

    <h2>For Tablelist Version 5.7</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>
................................................................................
  <h2><a name="overview"></a>Overview</h2>

  <p>The BWidget package is a library extension for Tcl/Tk versions 8.1.1 or
  higher, written in pure Tcl/Tk code.&nbsp; Its download location is</p>

  <blockquote>
    <address>
      <a href="http://core.tcl.tk/bwidget">http://core.tcl.tk/bwidget</a>
    </address>
  </blockquote>

  <p>Tablelist supports interactive cell editing with the aid of the Entry,
  SpinBox, and ComboBox widgets from the BWidget package.&nbsp; The steps
  needed for using one of these widgets for editing the cells of a given column
  are as follows:</p>







|







 







|







6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
..
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  <meta name="Keywords" content="tablelist, editing, BWidget">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Interactive Tablelist Cell Editing Using the BWidget Package</h1>

    <h2>For Tablelist Version 5.8</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>
................................................................................
  <h2><a name="overview"></a>Overview</h2>

  <p>The BWidget package is a library extension for Tcl/Tk versions 8.1.1 or
  higher, written in pure Tcl/Tk code.&nbsp; Its download location is</p>

  <blockquote>
    <address>
      <a href="http://tcllib.sourceforge.net">http://tcllib.sourceforge.net</a>
    </address>
  </blockquote>

  <p>Tablelist supports interactive cell editing with the aid of the Entry,
  SpinBox, and ComboBox widgets from the BWidget package.&nbsp; The steps
  needed for using one of these widgets for editing the cells of a given column
  are as follows:</p>

Changes to modules/tablelist/doc/tablelistBinding.html.

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <meta name="Keywords" content="tablelist, binding script">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Helper Commands Used in Tablelist Binding Scripts</h1>

    <h2>For Tablelist Version 5.7</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>







|







6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <meta name="Keywords" content="tablelist, binding script">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Helper Commands Used in Tablelist Binding Scripts</h1>

    <h2>For Tablelist Version 5.8</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>

Changes to modules/tablelist/doc/tablelistColSort.html.

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
...
107
108
109
110
111
112
113
114


115


116
117
118
119
120
121
122
...
179
180
181
182
183
184
185
186



187
188

189
190
191
192
193
194
195
  <meta name="Keywords" content="tablelist, sort, column, widget">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Commands for Interactive Sorting by One or More Columns</h1>

    <h2>For Tablelist Version 5.7</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>
................................................................................
      "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>.

      <p>After sorting the items, the virtual event
      <code><b>&lt;&lt;TablelistColumnSorted&gt;&gt;</b></code> is
      generated.&nbsp; The command returns the corresponding sort order, as


      <code><b>decreasing</b></code> or <code><b>increasing</b></code>.</p>



      <p>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.</p>

      <p><code><b>tablelist::sortByColumn</b></code> is usually specified as
................................................................................
      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.

      <p>After sorting the items by passing the two updated lists to the
      <code><b>sortbycolumnlist</b></code> subcommand, the virtual event
      <code><b>&lt;&lt;TablelistColumnsSorted&gt;&gt;</b></code> (note the
      plural form!) is generated.&nbsp; The command returns the new sort order



      corresponding to the given column, as <code><b>decreasing</b></code> or
      <code><b>increasing</b></code>.</p>


      <p>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.</p>

      <p><code><b>tablelist::addToSortColumns</b></code> is usually specified







|







 







|
>
>
|
>
>







 







|
>
>
>
|
<
>







6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
...
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
...
183
184
185
186
187
188
189
190
191
192
193
194

195
196
197
198
199
200
201
202
  <meta name="Keywords" content="tablelist, sort, column, widget">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Commands for Interactive Sorting by One or More Columns</h1>

    <h2>For Tablelist Version 5.8</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>
................................................................................
      "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>.

      <p>After sorting the items, the virtual event
      <code><b>&lt;&lt;TablelistColumnSorted&gt;&gt;</b></code> is
      generated.&nbsp; 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>).&nbsp;
      The command returns the sort order, as <code><b>decreasing</b></code> or
      <code><b>increasing</b></code>.</p>

      <p>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.</p>

      <p><code><b>tablelist::sortByColumn</b></code> is usually specified as
................................................................................
      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.

      <p>After sorting the items by passing the two updated lists to the
      <code><b>sortbycolumnlist</b></code> subcommand, the virtual event
      <code><b>&lt;&lt;TablelistColumnsSorted&gt;&gt;</b></code> (note the
      plural form!) is generated.&nbsp; 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.&nbsp; The command
      returns the new sort order corresponding to the given column, as

      <code><b>decreasing</b></code> or <code><b>increasing</b></code>.</p>

      <p>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.</p>

      <p><code><b>tablelist::addToSortColumns</b></code> is usually specified

Changes to modules/tablelist/doc/tablelistCombobox.html.

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <meta name="Keywords" content="tablelist, editing, combobox">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Interactive Tablelist Cell Editing Using the combobox Package</h1>

    <h2>For Tablelist Version 5.7</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>







|







6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <meta name="Keywords" content="tablelist, editing, combobox">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Interactive Tablelist Cell Editing Using the combobox Package</h1>

    <h2>For Tablelist Version 5.8</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>

Added modules/tablelist/doc/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
187
188
189
190
191
192
193
194
<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">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Interactive Tablelist Cell Editing Using the ctext Package</h1>

    <h2>For Tablelist Version 5.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><a name="contents"></a>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><a name="overview"></a>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.&nbsp; It is part of
  tklib, which in turn is contained in the tcllib project, having the
  address</p>

  <blockquote>
    <address>
      <a href=
      "http://sourceforge.net/projects/tcllib">http://sourceforge.net/projects/tcllib</a>
    </address>
  </blockquote>

  <p>Tablelist supports interactive cell editing with the aid of the ctext
  widget implemented in the package mentioned above.&nbsp; 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.<br>
    &nbsp;</li>

    <li>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.&nbsp; (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>&nbsp;&nbsp;&nbsp;&nbsp; <a href=
    "index.html">Start page</a></p>
  </div>

  <hr>

  <h2><a name="ctext"></a>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><br>
    <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.&nbsp; 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.&nbsp; 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.&nbsp; The default is
    <code><b>ctext</b></code>.&nbsp; The command returns its
    <code><i>name</i></code> argument.</dd>

    <dd><br>
    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.&nbsp; There is, however, an exception from this
    rule:&nbsp; 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.&nbsp; 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 according
    to your needs.</dd>

    <dd><br>
    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.&nbsp; (The number of display lines is
    retrieved with the aid of the&nbsp;
    <code><b>count -displaylines</b></code>&nbsp; ctext widget subcommand,
    introduced in Tk 8.5.)</dd>
    
    <dd><br>
    If the widget callback package Wcb was loaded into the interpreter
    (via&nbsp; <code><b>package require Wcb</b></code>&nbsp; or&nbsp;
    <code><b>package require wcb</b></code>)&nbsp; 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.&nbsp;
    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.&nbsp; 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.&nbsp (The above-mentioned callback is created via
    <code><b>wcb::cbappend</b></code>, <i>after</i> returning from that
    script.)</dd>

    <dd><br>
    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><br>
    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.&nbsp; <code>Control-j</code> can also be used for inserting a
    newline.&nbsp; <code>Control-Return</code> and
    <code>Control-KP_Enter</code> terminate the editing and destroy the edit
    window.</dd>

    <dd><br>
    <code>Control-Home</code> and <code>Control-End</code> have their
    well-known text widget-specific bindings, just like <code>Meta-&lt;</code>
    and <code>Meta-&gt;</code> if <code><b>tk_strictMotif</b></code> is
    false.&nbsp; Again, this is different from the behavior of the other
    widgets used for interactive cell editing (except the Tk core text
    widget).&nbsp; 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><br>
    <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>

Changes to modules/tablelist/doc/tablelistIwidgets.html.

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <meta name="Keywords" content="tablelist, editing, Iwidgets">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Interactive Tablelist Cell Editing Using the Iwidgets Package</h1>

    <h2>For Tablelist Version 5.7</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>







|







6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <meta name="Keywords" content="tablelist, editing, Iwidgets">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Interactive Tablelist Cell Editing Using the Iwidgets Package</h1>

    <h2>For Tablelist Version 5.8</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>

Changes to modules/tablelist/doc/tablelistMentry.html.

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <meta name="Keywords" content="tablelist, editing, Mentry">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Interactive Tablelist Cell Editing Using the Mentry Package</h1>

    <h2>For Tablelist Version 5.7</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>







|







6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <meta name="Keywords" content="tablelist, editing, Mentry">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Interactive Tablelist Cell Editing Using the Mentry Package</h1>

    <h2>For Tablelist Version 5.8</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>

Changes to modules/tablelist/doc/tablelistThemes.html.

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <meta name="Keywords" content="tablelist, theme, tile">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Commands Related to Tile Themes</h1>

    <h2>For Tablelist Version 5.7</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>







|







6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <meta name="Keywords" content="tablelist, theme, tile">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Commands Related to Tile Themes</h1>

    <h2>For Tablelist Version 5.8</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>

Changes to modules/tablelist/doc/tablelistTile.html.

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <meta name="Keywords" content="tablelist, editing, tile">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Interactive Tablelist Cell Editing Using Tile Widgets</h1>

    <h2>For Tablelist Version 5.7</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>







|







6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <meta name="Keywords" content="tablelist, editing, tile">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Interactive Tablelist Cell Editing Using Tile Widgets</h1>

    <h2>For Tablelist Version 5.8</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>

Changes to modules/tablelist/doc/tablelistTkCore.html.

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <meta name="Keywords" content="tablelist, editing, Tk core">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Interactive Tablelist Cell Editing Using Tk Core Widgets</h1>

    <h2>For Tablelist Version 5.7</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>







|







6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  <meta name="Keywords" content="tablelist, editing, Tk core">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>Interactive Tablelist Cell Editing Using Tk Core Widgets</h1>

    <h2>For Tablelist Version 5.8</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>

Changes to modules/tablelist/doc/tablelistWidget.html.

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
...
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
...
443
444
445
446
447
448
449






450
451
452
453
454
455
456



457
458
459
460
461
462
463
...
508
509
510
511
512
513
514



515
516
517
518
519
520
521
....
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
....
4040
4041
4042
4043
4044
4045
4046
4047

4048
4049
4050
4051
4052
4053
4054
....
4158
4159
4160
4161
4162
4163
4164
4165

4166
4167
4168
4169
4170
4171
4172
....
4537
4538
4539
4540
4541
4542
4543
4544

4545
4546
4547
4548
4549
4550
4551
....
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
....
4856
4857
4858
4859
4860
4861
4862




















































































































4863

4864
4865
4866
4867
4868
4869
4870
....
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927

4928
4929
4930
4931
4932
4933
4934
....
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
....
5020
5021
5022
5023
5024
5025
5026



































































































































5027
5028
5029
5030
5031
5032
5033
....
5476
5477
5478
5479
5480
5481
5482



















5483
5484
5485
5486
5487
5488
5489
5490
....
5492
5493
5494
5495
5496
5497
5498
5499



5500
5501

5502
5503
5504
5505
5506
5507
5508
....
6350
6351
6352
6353
6354
6355
6356
6357



6358
6359

6360
6361
6362
6363
6364
6365
6366

6367
6368
6369
6370
6371
6372
6373
....
7649
7650
7651
7652
7653
7654
7655
7656



7657
7658
7659
7660
7661
7662
7663
7664
....
7671
7672
7673
7674
7675
7676
7677
7678



7679
7680
7681
7682
7683
7684
7685
7686
7687
....
8059
8060
8061
8062
8063
8064
8065
8066








8067
8068
8069
8070
8071
8072
8073
....
8138
8139
8140
8141
8142
8143
8144
8145

8146
8147
8148
8149
8150
8151
8152
....
8157
8158
8159
8160
8161
8162
8163
8164





8165
8166
8167
8168
8169
8170
8171
....
8194
8195
8196
8197
8198
8199
8200


8201
8202
8203
8204
8205
8206
8207
8208
8209
....
8210
8211
8212
8213
8214
8215
8216


8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
....
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
....
8309
8310
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
....
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357

8358
8359
8360
8361
8362

8363
8364
8365

8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377

8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401

8402
8403
8404
8405
8406
8407
8408
  "tablelist, multi-column, listbox, tree, widget">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>The <code><b>tablelist::tablelist</b></code> Command</h1>

    <h2>For Tablelist Version 5.7</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>
................................................................................
    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gtk</b>|<b>klearlooks</b>|<b>mint</b>|<b>newWave</b>|<b>oxygen1</b>|<b>oxygen2</b>|<br>
    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phase</b>|<b>plastik</b>|<b>plastique</b>|<b>radiance</b>|<b>ubuntu</b>|<br>
    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vistaAero</b>|<b>vistaClassic</b>|<b>win7Aero</b>|<b>win7Classic</b>|<br>
    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;winnative</b>|<b>winxpBlue</b>|<b>winxpOlive</b>|<b>winxpSilver</b></code></dd>

    <dd><code><b><a href="#width">-width</a></b> <i>characters</i></code></dd>

    <dt><br>
    <a href="#description">DESCRIPTION</a></dt>

    <dt><br>
    <a href="#colors_and_fonts">COLORS AND FONTS</a></dt>

    <dt><br>
    <a href="#col_options">COLUMN CONFIGURATION OPTIONS</a></dt>

    <dd><code><b><a href="#col_align">-align</a></b>
    <b>left</b>|<b>right</b>|<b>center</b></code></dd>

    <dd><code><b><a href="#col_background">-background</a></b>
................................................................................

    <dd><code><b><a href="#cell_windowdestroy">-windowdestroy</a></b>
    <i>command</i></code></dd>

    <dd><code><b><a href="#cell_windowupdate">-windowupdate</a></b>
    <i>command</i></code></dd>







    <dt><br>
    <a href="#tree_widget">USING A TABLELIST AS MULTI-COLUMN TREE
    WIDGET</a></dt>

    <dt><br>
    <a href="#cell_editing">INTERACTIVE CELL EDITING</a></dt>




    <dt><br>
    <a href="#row_indices">ROW INDICES</a></dt>

    <dd>
      <pre>
<i>number</i>  <b>k</b><i>number</i>  <b>active</b>  <b>anchor</b>  <b>end</b>  <b>top</b>  <b>bottom</b>  <b>@</b><i>x</i><b>,</b><i>y</i>  <i>name</i>
</pre>
................................................................................
    <i>index</i></code></dd>

    <dd><code><i>pathName</i> <b><a href=
    "#bodypath">bodypath</a></b></code></dd>

    <dd><code><i>pathName</i> <b><a href="#bodytag">bodytag</a></b></code></dd>




    <dd><code><i>pathName</i> <b><a href=
    "#cancelediting">cancelediting</a></b></code></dd>

    <dd><code><i>pathName</i> <b><a href="#cellattrib">cellattrib</a></b>
    <i>cellIndex</i> ?<i>name</i>? ?<i>value</i> <i>name</i> <i>value</i>
    ...?</code></dd>

................................................................................
        <p>Specifies the desired width for the window, in average-size
        characters of the widget's font.&nbsp; If zero or less then the desired
        width for the window is made just large enough to hold all the columns
        in the tablelist widget.</p>
      </blockquote>
    </dd>

    <dt><a name="description"></a><b>DESCRIPTION</b></dt>

    <dd>The <code><b>tablelist::tablelist</b></code> command creates a new
    window named <code><i>pathName</i></code> and of the class
    <code><b>Tablelist</b></code>, and makes it into a <b>tablelist</b>
    widget.&nbsp; Additional options, described above, may be specified on the
    command line or in the option database to configure aspects of the
    tablelist such as its colors, font, and columns.&nbsp; The
    <code><b>tablelist::tablelist</b></code> command returns its
    <code><i>pathName</i></code> argument.&nbsp; 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><br>
    A tablelist is a multi-column listbox and tree widget, implemented as a
    mega-widget, consisting of a <b>body</b> and a <b>header</b>.&nbsp; The
    body displays a list of <b>items</b>, one per line.&nbsp; Each item is a
    list of <b>elements</b>, which are aligned in columns.&nbsp; In other
    words, an item is the contents of a row, and an element is the text
    contained in a cell.&nbsp; The header consists of label widgets displaying
    the column titles.&nbsp; The labels can be used, among others, for
    interactive column resizing and column-based sorting of the items, as
    described below.</dd>

    <dd><br>
    Each cell and each header label of a tablelist widget can also contain an
    image, which is placed to the left or right of the text, depending on the
    column's alignment.&nbsp; Instead of an image, a tablelist cell can also
    contain an embedded window, placed to the left or right of the text, just
    like an embedded image.</dd>

    <dd><br>
    When a tablelist is used as a tree widget, one of its columns will display
    the tree hierarchy with the aid of indentations and expand/collapse
    controls.&nbsp; The Tablelist package provides a great variety of tree
    styles controlling the look &amp; feel of that column, and chooses the
    correct default style depending on the windowing system, operating system
    version, and tile theme.&nbsp; In a tablelist used as a multi-column tree
    widget, every row is at the same time a tree <b>node</b>, having exactly
    one <b>parent</b> node and any number of <b>child</b> nodes.&nbsp; The
    tree's origin is the invisible <b>root</b> node, which has no parent itself
    and whose children are the <b>top-level</b> nodes.</dd>

    <dd><br>
    The elements of a tablelist widget can, per default, be only edited
    programmatically.&nbsp; However, interactive editing can be enabled for
    individual cells and for entire columns.&nbsp; Per default, the interactive
    cell editing uses a temporary embedded entry widget, thus making sure that
    all the validation facilities available for entry widgets can be used
    during the editing process.&nbsp; A great variety of widgets from the
    packages BWidget, Iwidgets, combobox (by Bryan Oakley), and Mentry (or
    Mentry_tile), as well as Tk core text, spinbox, checkbutton, and menubutton
    widgets, along with tile entry, spinbox, combobox, checkbutton, and
    menubutton widgets are also supported as temporary embedded widgets used
    for cell editing.&nbsp; In addition, a rich set of keyboard bindings is
    provided for a comfortable navigation between the editable cells.</dd>

    <dd><br>
    When first created, a new tablelist widget has no items.&nbsp; Items may be
    added, deleted, or updated using widget commands described below.&nbsp; In
    addition, one or more items or elements may be selected.&nbsp; If a
    tablelist widget is exporting its selection (see the
    <code><b>-exportselection</b></code> option), then it will observe the
    standard X11 protocols for handling the selection.&nbsp; Tablelist widget
    selections are available as types <code><b>STRING</b></code> and
    <code><b>UTF8_STRING</b></code>; the value of the selection will be a text
    built by taking all of the rows having at least one non-hidden selected
    element, joining these elements together with tabs, and the resulting
    strings in turn with newlines.&nbsp; If a tablelist widget that is
    exporting its selection is the selection owner and some other window claims
    ownership of the selection away from it, then the virtual event
    <code><b>&lt;&lt;TablelistSelectionLost&gt;&gt;</b></code> is
    generated.</dd>

    <dd><br>
    It is not necessary for all the elements to be displayed in the tablelist
    widget at once; commands described below may be used to change the view in
    the window.&nbsp; Tablelist widgets allow scrolling in both directions
    using the standard <code><b>-xscrollcommand</b></code> and
    <code><b>-yscrollcommand</b></code> options.&nbsp; They also support
    scanning, as described below.</dd>

    <dd><br>
    Each tablelist widget, as well as each tablelist column, row, and cell may
    have any number of <b>attributes</b>, which can be used in commands that
    create or manipulate tablelist widgets for particular purposes.</dd>

    <dt><br>
    <a name="colors_and_fonts"></a><b>COLORS AND FONTS</b></dt>

    <dd>
      The <code><b>-background</b></code>, <code><b>-font</b></code>,
      <code><b>-foreground</b></code>, <code><b>-selectbackground</b></code>,
      and <code><b>-selectforeground</b></code> options can also be specified
      at column, row, and cell level, by using the <code><b><a href=
      "#columnconfigure">columnconfigure</a></b></code> (or <code><b><a href=
      "#configcolumnlist">configcolumnlist</a></b></code>, or <code><b><a href=
      "#configcolumns">configcolumns</a></b></code>), <code><b><a href=
      "#rowconfigure">rowconfigure</a></b></code> (or <code><b><a href=
      "#configrowlist">configrowlist</a></b></code>, or <code><b><a href=
      "#configrows">configrows</a></b></code>), and <code><b><a href=
      "#cellconfigure">cellconfigure</a></b></code> (or <code><b><a href=
      "#configcelllist">configcelllist</a></b></code>, or <code><b><a href=
      "#configcells">configcells</a></b></code>) subcommands of the Tcl command
      associated with the tablelist widget.&nbsp; For this reason, a particular
      cell can have up to four values for one and the same color or font
      option.&nbsp; If these values conflict, then the option specified at the
      highest priority level is used.&nbsp; The decreasing priority order is
      cell, row, column, widget.

      <p>If one of these options hasn't been specified at cell, row, or column
      level, or if its value for that level is an empty string (this is
      explicitly allowed), then that option will not be used at that particular
      level.</p>
    </dd>

    <dt><a name="col_options"></a><b>COLUMN CONFIGURATION OPTIONS</b></dt>

    <dd>The following options are currently supported by the <code><b><a href=
    "#columncget">columncget</a></b></code>, <code><b><a href=
    "#columnconfigure">columnconfigure</a></b></code>, <code><b><a href=
    "#configcolumnlist">configcolumnlist</a></b></code>, and <code><b><a href=
    "#configcolumns">configcolumns</a></b></code> commands:</dd>
................................................................................
        <code><b>ttk::combobox</b></code>,
        <code><b>ttk::checkbutton</b></code>, or
        <code><b>ttk::menubutton</b></code> (the latter five only in the
        presence of the tile widget engine), or the value returned by one of
        the registration commands for widgets from the packages <a href=
        "tablelistBWidget.html">BWidget</a>, <a href=
        "tablelistIwidgets.html">Iwidgets</a>, <a href=
        "tablelistCombobox.html">combobox</a> (by Bryan Oakley), and <a href=

        "tablelistMentry.html">Mentry (or Mentry_tile)</a>.&nbsp; For example,
        you can use&nbsp; <code><b>-editwindow ComboBox</b></code>&nbsp;
        <i>after</i> registering the ComboBox widget for interactive cell
        editing with the aid of the <code><b><a href=
        "tablelistBWidget.html#ComboBox">tablelist::addBWidgetComboBox</a></b></code>
        command.&nbsp; Similarly, you can use&nbsp; <code><b>-editwindow
        combobox</b></code>&nbsp; <i>after</i> registering Bryan Oakley's
................................................................................
        <dt><a name="col_hide"></a><code><b>-hide</b>
        <i>boolean</i></code></dt>

        <dd>Specifies whether to hide the column when displaying the widget or
        exporting its selection.&nbsp; The default value is
        <code>0</code>.&nbsp; After toggling the hidden state of a column, the
        <code><b>&lt;&lt;TablelistColHiddenStateChanged&gt;&gt;</b></code>
        virtual event is generated.</dd>


        <dt><br>
        <a name="col_labelalign"></a><code><b>-labelalign</b>
        <i>alignment</i></code></dt>

        <dd>Specifies how to align the column's title.&nbsp; It must be one of
        <code><b>left</b></code>, <code><b>right</b></code>, or
................................................................................
        <a name="row_hide"></a><code><b>-hide</b> <i>boolean</i></code></dt>

        <dd>
          Specifies whether to hide the row when displaying the widget or
          exporting its selection.&nbsp; The default value is
          <code>0</code>.&nbsp; After toggling the hidden state of a row, the
          <code><b>&lt;&lt;TablelistRowHiddenStateChanged&gt;&gt;</b></code>
          virtual event is generated.&nbsp;


          <p>For technical reasons (the use of the <code><b>-elide</b></code>
          option for a text widget tag), this option is not supported for Tk
          versions earlier than 8.3.</p>

          <p><b>CAUTION:</b>&nbsp; Tk versions 8.3 - 8.4.12 had a bug that
          caused a segmentation fault if the whole content of a text widget was
................................................................................
          <code><b>-background</b></code> and the cell's current background
          color, as well as the option name <code><b>-foreground</b></code> and
          the cell's current foreground color.&nbsp; The resulting script is
          then evaluated in the global scope.&nbsp; The specified command can
          use the colors passed to it as arguments to set the corresponding
          colors of the embedded window to the same values.

          <p>For example, if the embedded window is a text widget and you want
          for its background and foreground colors to be automatically adapted
          to the cell's current background and foreground colors, then you can
          achieve this by setting the <code><b>-windowupdate</b></code> cell
          configuration option to <code>updateWindow</code>, where the latter
          is the procedure implemented as follows:</p>

          <blockquote>
            <pre>
proc updateWindow {tbl row col w args} {
    eval [list $w configure] $args
}
</pre>
................................................................................
        level if the specified value is not an empty string.&nbsp; See the
        <a href="#colors_and_fonts">COLORS AND FONTS</a> section for further
        details on these options.</dt>
      </dl>
    </dd>

    <dt><br>




















































































































    <a name="tree_widget"></a><b>USING A TABLELIST AS MULTI-COLUMN TREE WIDGET</b></dt>


    <dd>
      When using a tablelist widget to display a tree hierarchy, there are a
      few rules to follow:<br>
      &nbsp;

      <ol>
................................................................................
    <code>Return</code> or <code>KP_Enter</code>.&nbsp; Per default, the
    <code><b>editcell</b></code> subcommand creates a temporary entry widget
    and embeds it into the cell whose index was passed to it as argument.&nbsp;
    You can, however, use the <code><b>-editwindow</b></code> <a href=
    "#col_editwindow">column</a> or <a href="#cell_editwindow">cell</a>
    configuration option to specify another widget instead of an entry, like a
    Tk core text, spinbox, checkbutton, or menubutton widget, or a tile entry,
    spinbox, combobox, checkbutton, or menubutton, or one of the 18 currently
    supported widgets from the packages <a href=
    "tablelistBWidget.html">BWidget</a>, <a href=
    "tablelistIwidgets.html">Iwidgets</a>, <a href=
    "tablelistCombobox.html">combobox</a> (by Bryan Oakley), and <a href=

    "tablelistMentry.html">Mentry (or Mentry_tile)</a>.&nbsp; Before specifying
    a widget from one of these library packages as the value of the
    <code><b>-editwindow</b></code> column or cell configuration option, you
    must register it for interactive cell editing by invoking the corresponding
    <code><b>tablelist::add*</b></code> command.&nbsp; The above-mentioned Tk
    core and tile widgets are automatically registered for cell editing.</dd>

................................................................................
    <dd><br>
    The editing of the text inserted into the edit window uses the
    widget-specific bindings for mouse and keyboard events, with a few
    extensions and changes, as described in the <a href=
    "#edit_bindings">DEFAULT BINDINGS FOR INTERACTIVE CELL EDITING</a>
    section.&nbsp; For example, in entry or entry-like components of the edit
    window, <code>Control-i</code> inserts a tab, <code>Control-j</code>
    inserts a newline, and if the edit window is a text widget then
    <code>Return</code> and <code>KP_Enter</code> insert a newline character,
    too.&nbsp; <code>Tab</code> and <code>Shift-Tab</code> are used for
    navigation between the editable cells, just like <code>Alt-Left</code>,
    <code>Alt-Right</code>, <code>Alt-Up</code>, <code>Alt-Down</code>,
    <code>Alt-Prior</code>, <code>Alt-Next</code>, <code>Alt-Home</code>, and
    <code>Alt-End</code> (as well as <code>Control-Home</code> and
    <code>Control-End</code>, except in the case of a text widget).&nbsp; On
    Mac OS Classic and Mac OS X Aqua the <code>Command</code> key is used
    instead of <code>Alt</code>.&nbsp; The editing can be aborted with the
    <code>Escape</code> key (or by invoking the <code><b><a href=
    "#cancelediting">cancelediting</a></b></code> subcommand) and terminated
    normally with <code>Return</code> or <code>KP_Enter</code> (together with
    <code>Control</code> for a text widget).&nbsp; The bindings for the keys
    used for normal termination of the editing just invoke the
    <code><b><a href="#finishediting">finishediting</a></b></code> subcommand;
    the latter can also be called explicitly to terminate the editing
    programmatically.&nbsp; Normal termination is also triggered by clicking
    with the left mouse button anywhere in the tablelist's body, outside the
    cell just being edited, or moving into another editable cell by using
    keyboard navigation.</dd>

................................................................................
    <code><b>-editendcommand</b></code> option is to convert the edit window's
    text to the cell's new <i>internal</i> contents, which is necessary if, due
    to the <code><b><a href="#col_formatcommand">-formatcommand</a></b></code>
    column configuration option, the cell's internal value is different from
    its external representation.&nbsp; See the description of the
    <code><b><a href="#forceeditendcommand">-forceeditendcommand</a></b></code>
    option for more about the invocation of the command mentioned above.</dd>




































































































































    <dt><br>
    <a name="row_indices"></a><b>ROW INDICES</b></dt>

    <dd>
      Many of the widget commands for tablelist widgets take one or more row
      indices as arguments.&nbsp; A row index specifies a particular item of
................................................................................
        be used when defining individual binding scripts for tablelist
        widgets.&nbsp; The main advantage of using this tag instead of the path
        name of the tablelist's body is that it enables you to write event
        handling scripts that are valid not only for the tablelist's body but
        also for the separators, multi-line cells, and embedded images.</dd>

        <dt><br>



















        <a name="cancelediting"></a><code><i>pathName</i>
        <b>cancelediting</b></code></dt>

        <dd>This subcommand cancels the interactive editing of the contents of
        the cell whose index was passed to the <code><b><a href=
        "#editcell">editcell</a></b></code> subcommand, destroys the temporary
        widget embedded into the cell, and restores the original cell
        contents.&nbsp; This command enables you to cancel the interactive cell
................................................................................
        "#editstartcommand">-editstartcommand</a></b></code> configuration
        option if that pre-edit callback encounters an error when preparing the
        text to be inserted into the edit window.&nbsp; The command is also
        invoked implicitly by pressing the <code>Escape</code> key when a cell
        is being edited.&nbsp; The return value is an empty string.&nbsp;
        Immediately before returning this value, the command generates the
        virtual event
        <code><b>&lt;&lt;TablelistCellRestored&gt;&gt;</b></code>.&nbsp; If no



        cell was being edited when the command was invoked then an empty string
        is returned without generating a virtual event.</dd>


        <dt><br>
        <a name="cellattrib"></a><code><i>pathName</i> <b>cellattrib</b>
        <i>cellIndex</i> ?<i>name</i>? ?<i>value</i> <i>name</i> <i>value</i>
        ...?</code></dt>

        <dd>Queries or modifies the attributes of the cell given by
................................................................................
          if from within this script the <code><b><a href=
          "#rejectinput">rejectinput</a></b></code> subcommand was invoked then
          the cell's value is not changed and the embedded widget remains
          displayed in the cell; in this case the command returns the boolean
          value <code>0</code>.&nbsp; In all the other cases, the return value
          is <code>1</code>.&nbsp; Immediately before returning the value
          <code>1</code>, the command generates the virtual event
          <code><b>&lt;&lt;TablelistCellUpdated&gt;&gt;</b></code>.&nbsp; If no



          cell was being edited when the command was invoked then the same
          value <code>1</code> is returned but no virtual event is generated.


          <p>This subcommand is called <i>implicitly</i> by pressing
          <code>Return</code> or <code>KP_Enter</code> (together with
          <code>Control</code> if the edit window is a text widget) when
          editing a cell, or by clicking with the left mouse button anywhere in
          the tablelist's body, outside the cell just being edited, or moving
          into another editable cell by using keyboard navigation.</p>


          <p><b>REMARK:</b>&nbsp; There are also situations where an
          <i>explicit</i> invocation of this subcommand is needed, in order to
          make sure that the cell just being edited gets updated with the text
          entered by the user.&nbsp; For example, if a tablelist widget is part
          of a dialog used for editing some data, then the command associated
          with the button designed to accept the data should call this
................................................................................
        <code><i>firstColumn</i></code> and <code><i>lastColumn</i></code> are
        indices specifying the first and last columns in the range whose
        visibility is to be toggled.&nbsp; The command's second form accepts a
        list <code><i>columnIndexList</i></code> of indices specifying the
        columns whose visibility is to be toggled.&nbsp; Returns an empty
        string.&nbsp; After toggling the hidden state of the specified columns,
        the <code><b>&lt;&lt;TablelistColHiddenStateChanged&gt;&gt;</b></code>
        virtual event is generated.&nbsp; The main advantage of using this



        command instead of invoking <code><b><a href=
        "#columnconfigure">columnconfigure</a></b></code> for each of the
        specified columns is that it causes only one redisplay of the widget's
        contents, thus being significantly faster.</dd>

        <dt><br>
        <a name="togglerowhide"></a><code><i>pathName</i> <b>togglerowhide</b>
        <i>first</i> <i>last</i></code><br>
................................................................................
          <code><i>first</i></code> and <code><i>last</i></code> are indices
          specifying the first and last rows in the range whose visibility is
          to be toggled.&nbsp; The command's second form accepts a list
          <code><i>indexList</i></code> of indices specifying the rows whose
          visibility is to be toggled.&nbsp; Returns an empty string.&nbsp;
          After toggling the hidden state of the specified rows, the
          <code><b>&lt;&lt;TablelistRowHiddenStateChanged&gt;&gt;</b></code>
          virtual event is generated.&nbsp; Just like the



          <code><b>-hide</b></code> row configuration option, this subcommand
          is not supported for Tk versions earlier than 8.3.

          <p><b>CAUTION:</b>&nbsp; Tk versions 8.3 - 8.4.12 had a bug that
          caused a segmentation fault if the whole content of a text widget was
          elided.&nbsp; This bug was also present in Tk 8.5.a1 - 8.5.a3.&nbsp;
          When using one of these earlier Tk versions, this bug will produce a
          crash if all the rows of a tablelist widget are hidden.&nbsp; It is
          your responsibility to avoid such situations when using a Tk version
................................................................................
        it.&nbsp; This <b>local drag &amp; drop</b> operation ends when mouse
        button 1 is released, and can be canceled by pressing the
        <code>Escape</code> key.&nbsp; In both cases, the mouse cursor is reset
        to its original value, specified by the <code><b>-cursor</b></code>
        configuration option.&nbsp; After releasing mouse button 1 in the
        presence of a valid target, the source item is moved before the target
        row or just before the latter's first child, and the virtual event
        <code><b>&lt;&lt;TablelistRowMoved&gt;&gt;</b></code> is generated.</p>









        <p>Notice that, depending on the current mouse position during the
        local drag &amp; drop, there can be a corresponding potential target
        row or not.&nbsp; For instance, a tree item cannot become a sibling of
        one of its descendants, and not all items might be allowed to have
        children or to become top-level ones (example: in a file manager,
        regular file items cannot be parents of other items and should not be
................................................................................
        amount of the cursor motion.&nbsp; The interactive column resizing ends
        when mouse button 1 is released, and can be canceled by pressing the
        <code>Escape</code> key.&nbsp; In both cases, the mouse cursor is reset
        to its original value, specified by the <code><b>-cursor</b></code>
        configuration option.&nbsp; When the column resize operation is
        finished, the virtual event
        <code><b>&lt;&lt;TablelistColumnResized&gt;&gt;</b></code> is
        generated.<br>

        &nbsp;</li>

        <li>If mouse button 1 is pressed over a header label but outside the
        resize area described above and then dragged outside the label, and the
        value of the <code><b><a href=
        "#movablecolumns">-movablecolumns</a></b></code> configuration option
        is true, then the mouse cursor takes on the shape specified by the
................................................................................
        1 is released, and can be canceled by pressing the <code>Escape</code>
        key when the mouse pointer is outside the label.&nbsp; In both cases,
        the mouse cursor is reset to its original value, specified by the
        <code><b>-cursor</b></code> configuration option.&nbsp; After releasing
        mouse button 1, the source column is moved before the one indicated by
        the gap mentioned above and the virtual event
        <code><b>&lt;&lt;TablelistColumnMoved&gt;&gt;</b></code> is
        generated.<br>





        &nbsp;</li>

        <li>If mouse button 1 is pressed over a header label but outside the
        resize area described above and later released over the same label, and
        the command specified by the <code><b><a href=
        "#labelcommand">-labelcommand</a></b></code> option is a nonempty
        string, then this command is concatenated with the name of the
................................................................................
        corresponding to that label are true, then the width of that column is
        set to zero, i.e., it is made just large enough to hold all the
        elements in the column, including the header (but no larger than the
        maximum width indicated by the <code><b><a href=
        "#col_maxwidth">-maxwidth</a></b></code> column configuration option),
        and the virtual event
        <code><b>&lt;&lt;TablelistColumnResized&gt;&gt;</b></code> is


        generated.&nbsp; The same action is triggered by double-clicking the
        resize area of a header label.<br>
        &nbsp;</li>

        <li>The Tablelist package defines the virtual event
        <code><b>&lt;&lt;ShiftButton3&gt;&gt;</b></code> as
        <code><b>&lt;Shift-Button-3&gt;</b></code> for all windowing systems
        and additionally as <code><b>&lt;Shift-Control-Button-1&gt;</b></code>
        for Mac OS Classic and Mac OS X Aqua.&nbsp; If this event occurs over a
................................................................................
        header label and both the value of the <code><b><a href=
        "#resizablecolumns">-resizablecolumns</a></b></code> configuration
        option and that of the <code><b><a href=
        "#col_resizable">-resizable</a></b></code> option for the column
        corresponding to that label are true, then the width of that column is
        set to its last static width (if any) and the virtual event
        <code><b>&lt;&lt;TablelistColumnResized&gt;&gt;</b></code> is


        generated.&nbsp; The same action is triggered by double-clicking the
        resize area of a header label with the <code>Shift</code> key held
        down.</li>
      </ol>

      <p>If the tablelist's <code><b><a href="#state">state</a></b></code> is
      <code><b>disabled</b></code> then none of the above actions occur: the
      labels are completely insensitive.</p>

      <p>If you want to define non-default bindings for the header labels, it
................................................................................
        &nbsp;</li>

        <li><code>Control-j</code> inserts a newline character into the edit
        window's entry or entry-like components (if any), at the point of the
        insertion cursor.<br>
        &nbsp;</li>

        <li>If the edit window is a text widget then <code>Return</code> and
        <code>KP_Enter</code> insert a newline character at the point of the
        insertion cursor.&nbsp; Otherwise they terminate the editing and
        destroy the edit window.<br>
        &nbsp;</li>

        <li><code>Control-Return</code> and <code>Control-KP_Enter</code>
        terminate the editing and destroy the edit window.<br>
        &nbsp;</li>

        <li><code>Escape</code> aborts the editing and destroys the edit
................................................................................

        <li>When editing a cell that is not the only editable cell of the
        tablelist widget, <code>Tab</code> and <code>Shift-Tab</code> terminate
        the editing in the current cell, move the edit window into the
        next/previous editable cell of the tablelist, select the contents of
        the edit window's first entry or entry-like component (if any), and set
        the insertion cursor to its end.&nbsp; If the new edit window is a text
        widget then its contents are left unselected.&nbsp; Notice that these
        bindings replace the common inter-widget navigation via
        <code>Tab</code> and <code>Shift-Tab</code> with inter-cell
        navigation.&nbsp; Just like in the case of the text widget,
        <code>Control-Tab</code> and <code>Control-Shift-Tab</code> are
        intended to be used for widget-to-widget keyboard navigation during
        interactive cell editing.&nbsp; Unfortunately, this won't always work
        because some window managers intercept the latter key sequences and use
        them for their own purposes (like inter-workplace navigation).&nbsp;
................................................................................
        <li>When editing a cell that is not the first/last editable cell within
        its row, <code>Alt-Left</code>/<code>Alt-Right</code>
        (<code>Command-Left</code>/<code>Command-Right</code> on Mac OS Classic
        and Mac OS X Aqua) terminates the editing in the current cell, moves
        the edit window into the previous/next editable cell of the row,
        selects the contents of the edit window's first entry or entry-like
        component (if any), and sets the insertion cursor to its end.&nbsp; If
        the new edit window is a text widget then its contents are left
        unselected.&nbsp; The key sequence
        <code>Meta-Left</code>/<code>Meta-Right</code> has the same effect as
        <code>Alt-Left</code>/<code>Alt-Right</code>.&nbsp; If
        <code><b>tk_strictMotif</b></code> is false and the edit window is not
        a text widget then <code>Meta-b</code> and <code>Meta-f</code> behave
        the same as <code>Alt-Left</code> and <code>Alt-Right</code>,
        respectively.&nbsp; If the edit window is a Tk or tile checkbutton or
        menubutton widget then <code>Left</code>/<code>Right</code> has the
        same effect as <code>Alt-Left</code>/<code>Alt-Right</code>.<br>
        &nbsp;</li>

        <li>When editing a cell that is not the first/last editable cell within
        its column, <code>Alt-Up</code>/<code>Alt-Down</code>
        (<code>Command-Up</code>/<code>Command-Down</code> on Mac OS Classic
        and Mac OS X Aqua) terminates the editing in the current cell, moves
        the edit window one line up/down within the column, selects the
        contents of the edit window's first entry or entry-like component (if
        any), and sets the insertion cursor to its end.&nbsp; If the new edit
        window is a text widget then its contents are left unselected.&nbsp;

        The key sequence <code>Meta-Up</code>/<code>Meta-Down</code> has the
        same effect as <code>Alt-Up</code>/<code>Alt-Down</code>.&nbsp; If
        <code><b>tk_strictMotif</b></code> is false and the edit window is not
        a text widget or an Iwidgets combobox, then <code>Control-p</code> and
        <code>Control-n</code> behave the same as <code>Alt-Up</code> and

        <code>Alt-Down</code>, respectively.&nbsp; If the edit window is a Tk
        or tile entry, Tk or tile checkbutton, Tk or tile menubutton, BWidget
        Entry, Iwidgets entryfield/spinner/spinint, or a mentry widget of type

        <code>"FixedPoint"</code>, then <code>Up</code>/<code>Down</code> has
        the same effect as <code>Alt-Up</code>/<code>Alt-Down</code>.<br>
        &nbsp;</li>

        <li>When editing a cell that is not the first/last editable cell within
        its column, <code>Alt-Prior</code>/<code>Alt-Next</code>
        (<code>Command-Prior</code>/<code>Command-Next</code> on Mac OS Classic
        and Mac OS X Aqua) terminates the editing in the current cell, moves
        the edit window up/down by one page within the column, selects the
        contents of the edit window's first entry or entry-like component (if
        any), and sets the insertion cursor to its end.&nbsp; If the new edit
        window is a text widget then its contents are left unselected.&nbsp;

        The key sequence <code>Meta-Prior</code>/<code>Meta-Next</code> has the
        same effect as <code>Alt-Prior</code>/<code>Alt-Next</code>.&nbsp; If
        the edit window is not a text widget, BWidget SpinBox, Oakley combobox,
        or a mentry widget of type <code>"Date"</code>, <code>"Time"</code>,
        <code>"DateTime"</code>, <code>"IPAddr"</code>, or
        <code>"IPv6Addr"</code>, then <code>Prior</code>/<code>Next</code> has
        the same effect as <code>Alt-Prior</code>/<code>Alt-Next</code>.<br>
        &nbsp;</li>

        <li>When editing a cell that is not the only editable cell of the
        tablelist widget, <code>Alt-Home</code>/<code>Alt-End</code>
        (<code>Command-Home</code>/<code>Command-End</code> on Mac OS Classic
        and Mac OS X Aqua) terminates the editing in the current cell, moves
        the edit window into the first/last editable cell of the tablelist,
        selects the contents of the edit window's first entry or entry-like
        component (if any), and sets the insertion cursor to its end.&nbsp; If
        the new edit window is a text widget then its contents are left
        unselected.&nbsp; The key sequence
        <code>Meta-Home</code>/<code>Meta-End</code> has the same effect as
        <code>Alt-Home</code>/<code>Alt-End</code>.&nbsp; If
        <code><b>tk_strictMotif</b></code> is false and the edit window is not
        a text widget then <code>Meta-&lt;</code> and <code>Meta-&gt;</code>
        behave the same as <code>Alt-Home</code> and <code>Alt-End</code>,
        respectively.&nbsp; If the edit window is not a text widget then

        <code>Control-Home</code>/<code>Control-End</code> has the same effect
        as <code>Alt-Home</code>/<code>Alt-End</code>.</li>
      </ol>

      <p>Before moving the edit window, the key sequences mentioned under 7 -
      11 move the active item or element and change the (cell)selection and the
      (cell)selection anchor in the body of the tablelist widget.&nbsp; For







|







 







<
<
<
<
<
<







 







>
>
>
>
>
>







>
>
>







 







>
>
>







 







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







 







|
>







 







|
>







 







|
>







 







|
|
|
|
|
|







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>







 







|



|
>







 







|






|
|
|
|


|
|







 







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







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|







 







|
>
>
>
|
|
>







 







|
>
>
>
|
|
>



|
|
|
|
>







 







|
>
>
>
|







 







|
>
>
>
|
|







 







|
>
>
>
>
>
>
>
>







 







|
>







 







|
>
>
>
>
>







 







>
>
|
|







 







>
>
|
|
<







 







|
|
|
|







 







|
|







 







|
|



|
|












|
>
|
|

|
<
>
|
|
|
>
|
|









|
>
|
|
|
|












|
|



|
|
|
>







7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
...
266
267
268
269
270
271
272






273
274
275
276
277
278
279
...
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
...
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
....
3857
3858
3859
3860
3861
3862
3863




















































































































3864
3865
3866
3867
3868
3869
3870
....
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
....
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
....
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
....
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
....
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
....
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
....
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
....
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
....
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
....
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
....
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
....
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
....
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
....
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
....
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
....
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
....
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401
....
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8412

8413
8414
8415
8416
8417
8418
8419
....
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
8486
8487
8488
8489
8490
8491
8492
8493
....
8502
8503
8504
8505
8506
8507
8508
8509
8510
8511
8512
8513
8514
8515
8516
8517
....
8524
8525
8526
8527
8528
8529
8530
8531
8532
8533
8534
8535
8536
8537
8538
8539
8540
8541
8542
8543
8544
8545
8546
8547
8548
8549
8550
8551
8552
8553
8554
8555

8556
8557
8558
8559
8560
8561
8562
8563
8564
8565
8566
8567
8568
8569
8570
8571
8572
8573
8574
8575
8576
8577
8578
8579
8580
8581
8582
8583
8584
8585
8586
8587
8588
8589
8590
8591
8592
8593
8594
8595
8596
8597
8598
8599
8600
8601
8602
8603
8604
8605
  "tablelist, multi-column, listbox, tree, widget">
</head>

<body bgcolor="#FFFFFF">
  <div align="center">
    <h1>The <code><b>tablelist::tablelist</b></code> Command</h1>

    <h2>For Tablelist Version 5.8</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:csaba.nemethi@t-online.de">csaba.nemethi@t-online.de</a>
................................................................................
    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gtk</b>|<b>klearlooks</b>|<b>mint</b>|<b>newWave</b>|<b>oxygen1</b>|<b>oxygen2</b>|<br>
    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phase</b>|<b>plastik</b>|<b>plastique</b>|<b>radiance</b>|<b>ubuntu</b>|<br>
    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vistaAero</b>|<b>vistaClassic</b>|<b>win7Aero</b>|<b>win7Classic</b>|<br>
    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;winnative</b>|<b>winxpBlue</b>|<b>winxpOlive</b>|<b>winxpSilver</b></code></dd>

    <dd><code><b><a href="#width">-width</a></b> <i>characters</i></code></dd>







    <dt><br>
    <a href="#col_options">COLUMN CONFIGURATION OPTIONS</a></dt>

    <dd><code><b><a href="#col_align">-align</a></b>
    <b>left</b>|<b>right</b>|<b>center</b></code></dd>

    <dd><code><b><a href="#col_background">-background</a></b>
................................................................................

    <dd><code><b><a href="#cell_windowdestroy">-windowdestroy</a></b>
    <i>command</i></code></dd>

    <dd><code><b><a href="#cell_windowupdate">-windowupdate</a></b>
    <i>command</i></code></dd>

    <dt><br>
    <a href="#description">DESCRIPTION</a></dt>

    <dt><br>
    <a href="#colors_and_fonts">COLORS AND FONTS</a></dt>

    <dt><br>
    <a href="#tree_widget">USING A TABLELIST AS MULTI-COLUMN TREE
    WIDGET</a></dt>

    <dt><br>
    <a href="#cell_editing">INTERACTIVE CELL EDITING</a></dt>

    <dt><br>
    <a href="#virtual_events">VIRTUAL EVENTS</a></dt>

    <dt><br>
    <a href="#row_indices">ROW INDICES</a></dt>

    <dd>
      <pre>
<i>number</i>  <b>k</b><i>number</i>  <b>active</b>  <b>anchor</b>  <b>end</b>  <b>top</b>  <b>bottom</b>  <b>@</b><i>x</i><b>,</b><i>y</i>  <i>name</i>
</pre>
................................................................................
    <i>index</i></code></dd>

    <dd><code><i>pathName</i> <b><a href=
    "#bodypath">bodypath</a></b></code></dd>

    <dd><code><i>pathName</i> <b><a href="#bodytag">bodytag</a></b></code></dd>

    <dd><code><i>pathName</i> <b><a href=
    "#canceledediting">canceledediting</a></b></code></dd>

    <dd><code><i>pathName</i> <b><a href=
    "#cancelediting">cancelediting</a></b></code></dd>

    <dd><code><i>pathName</i> <b><a href="#cellattrib">cellattrib</a></b>
    <i>cellIndex</i> ?<i>name</i>? ?<i>value</i> <i>name</i> <i>value</i>
    ...?</code></dd>

................................................................................
        <p>Specifies the desired width for the window, in average-size
        characters of the widget's font.&nbsp; If zero or less then the desired
        width for the window is made just large enough to hold all the columns
        in the tablelist widget.</p>
      </blockquote>
    </dd>





















































































































    <dt><a name="col_options"></a><b>COLUMN CONFIGURATION OPTIONS</b></dt>

    <dd>The following options are currently supported by the <code><b><a href=
    "#columncget">columncget</a></b></code>, <code><b><a href=
    "#columnconfigure">columnconfigure</a></b></code>, <code><b><a href=
    "#configcolumnlist">configcolumnlist</a></b></code>, and <code><b><a href=
    "#configcolumns">configcolumns</a></b></code> commands:</dd>
................................................................................
        <code><b>ttk::combobox</b></code>,
        <code><b>ttk::checkbutton</b></code>, or
        <code><b>ttk::menubutton</b></code> (the latter five only in the
        presence of the tile widget engine), or the value returned by one of
        the registration commands for widgets from the packages <a href=
        "tablelistBWidget.html">BWidget</a>, <a href=
        "tablelistIwidgets.html">Iwidgets</a>, <a href=
        "tablelistCombobox.html">combobox</a> (by Bryan Oakley), <a href=
        "tablelistCtext.html">ctext</a>, and <a href=
        "tablelistMentry.html">Mentry (or Mentry_tile)</a>.&nbsp; For example,
        you can use&nbsp; <code><b>-editwindow ComboBox</b></code>&nbsp;
        <i>after</i> registering the ComboBox widget for interactive cell
        editing with the aid of the <code><b><a href=
        "tablelistBWidget.html#ComboBox">tablelist::addBWidgetComboBox</a></b></code>
        command.&nbsp; Similarly, you can use&nbsp; <code><b>-editwindow
        combobox</b></code>&nbsp; <i>after</i> registering Bryan Oakley's
................................................................................
        <dt><a name="col_hide"></a><code><b>-hide</b>
        <i>boolean</i></code></dt>

        <dd>Specifies whether to hide the column when displaying the widget or
        exporting its selection.&nbsp; The default value is
        <code>0</code>.&nbsp; After toggling the hidden state of a column, the
        <code><b>&lt;&lt;TablelistColHiddenStateChanged&gt;&gt;</b></code>
        virtual event is generated, with its <code><b>-data</b></code> option
        set to the numerical column index for Tk versions 8.5 or higher.</dd>

        <dt><br>
        <a name="col_labelalign"></a><code><b>-labelalign</b>
        <i>alignment</i></code></dt>

        <dd>Specifies how to align the column's title.&nbsp; It must be one of
        <code><b>left</b></code>, <code><b>right</b></code>, or
................................................................................
        <a name="row_hide"></a><code><b>-hide</b> <i>boolean</i></code></dt>

        <dd>
          Specifies whether to hide the row when displaying the widget or
          exporting its selection.&nbsp; The default value is
          <code>0</code>.&nbsp; After toggling the hidden state of a row, the
          <code><b>&lt;&lt;TablelistRowHiddenStateChanged&gt;&gt;</b></code>
          virtual event is generated, with its <code><b>-data</b></code> option
          set to the numerical row index for Tk versions 8.5 or higher.&nbsp;

          <p>For technical reasons (the use of the <code><b>-elide</b></code>
          option for a text widget tag), this option is not supported for Tk
          versions earlier than 8.3.</p>

          <p><b>CAUTION:</b>&nbsp; Tk versions 8.3 - 8.4.12 had a bug that
          caused a segmentation fault if the whole content of a text widget was
................................................................................
          <code><b>-background</b></code> and the cell's current background
          color, as well as the option name <code><b>-foreground</b></code> and
          the cell's current foreground color.&nbsp; The resulting script is
          then evaluated in the global scope.&nbsp; The specified command can
          use the colors passed to it as arguments to set the corresponding
          colors of the embedded window to the same values.

          <p>For example, if the embedded window is a text or ctext widget and
          you want for its background and foreground colors to be automatically
          adapted to the cell's current background and foreground colors, then
          you can achieve this by setting the <code><b>-windowupdate</b></code>
          cell configuration option to <code>updateWindow</code>, where the
          latter is the procedure implemented as follows:</p>

          <blockquote>
            <pre>
proc updateWindow {tbl row col w args} {
    eval [list $w configure] $args
}
</pre>
................................................................................
        level if the specified value is not an empty string.&nbsp; See the
        <a href="#colors_and_fonts">COLORS AND FONTS</a> section for further
        details on these options.</dt>
      </dl>
    </dd>

    <dt><br>
    <a name="description"></a><b>DESCRIPTION</b></dt>

    <dd>The <code><b>tablelist::tablelist</b></code> command creates a new
    window named <code><i>pathName</i></code> and of the class
    <code><b>Tablelist</b></code>, and makes it into a <b>tablelist</b>
    widget.&nbsp; Additional options, described above, may be specified on the
    command line or in the option database to configure aspects of the
    tablelist such as its colors, font, and columns.&nbsp; The
    <code><b>tablelist::tablelist</b></code> command returns its
    <code><i>pathName</i></code> argument.&nbsp; 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><br>
    A tablelist is a multi-column listbox and tree widget, implemented as a
    mega-widget, consisting of a <b>body</b> and a <b>header</b>.&nbsp; The
    body displays a list of <b>items</b>, one per line.&nbsp; Each item is a
    list of <b>elements</b>, which are aligned in columns.&nbsp; In other
    words, an item is the contents of a row, and an element is the text
    contained in a cell.&nbsp; The header consists of label widgets displaying
    the column titles.&nbsp; The labels can be used, among others, for
    interactive column resizing and column-based sorting of the items, as
    described below.</dd>

    <dd><br>
    Each cell and each header label of a tablelist widget can also contain an
    image, which is placed to the left or right of the text, depending on the
    column's alignment.&nbsp; Instead of an image, a tablelist cell can also
    contain an embedded window, placed to the left or right of the text, just
    like an embedded image.</dd>

    <dd><br>
    When a tablelist is used as a tree widget, one of its columns will display
    the tree hierarchy with the aid of indentations and expand/collapse
    controls.&nbsp; The Tablelist package provides a great variety of tree
    styles controlling the look &amp; feel of that column, and chooses the
    correct default style depending on the windowing system, operating system
    version, and tile theme.&nbsp; In a tablelist used as a multi-column tree
    widget, every row is at the same time a tree <b>node</b>, having exactly
    one <b>parent</b> node and any number of <b>child</b> nodes.&nbsp; The
    tree's origin is the invisible <b>root</b> node, which has no parent itself
    and whose children are the <b>top-level</b> nodes.</dd>

    <dd><br>
    The elements of a tablelist widget can, per default, be only edited
    programmatically.&nbsp; However, interactive editing can be enabled for
    individual cells and for entire columns.&nbsp; Per default, the interactive
    cell editing uses a temporary embedded entry widget, thus making sure that
    all the validation facilities available for entry widgets can be used
    during the editing process.&nbsp; A great variety of widgets from the
    packages BWidget, Iwidgets, combobox (by Bryan Oakley), ctext, and Mentry
    (or Mentry_tile), as well as Tk core text, spinbox, checkbutton, and
    menubutton widgets, along with tile entry, spinbox, combobox, checkbutton,
    and menubutton widgets are also supported as temporary embedded widgets
    used for cell editing.&nbsp; In addition, a rich set of keyboard bindings
    is provided for a comfortable navigation between the editable cells.</dd>

    <dd><br>
    When first created, a new tablelist widget has no items.&nbsp; Items may be
    added, deleted, or updated using widget commands described below.&nbsp; In
    addition, one or more items or elements may be selected.&nbsp; If a
    tablelist widget is exporting its selection (see the
    <code><b>-exportselection</b></code> option), then it will observe the
    standard X11 protocols for handling the selection.&nbsp; Tablelist widget
    selections are available as types <code><b>STRING</b></code> and
    <code><b>UTF8_STRING</b></code>; the value of the selection will be a text
    built by taking all of the rows having at least one non-hidden selected
    element, joining these elements together with tabs, and the resulting
    strings in turn with newlines.&nbsp; If a tablelist widget that is
    exporting its selection is the selection owner and some other window claims
    ownership of the selection away from it, then the virtual event
    <code><b>&lt;&lt;TablelistSelectionLost&gt;&gt;</b></code> is
    generated.</dd>

    <dd><br>
    It is not necessary for all the elements to be displayed in the tablelist
    widget at once; commands described below may be used to change the view in
    the window.&nbsp; Tablelist widgets allow scrolling in both directions
    using the standard <code><b>-xscrollcommand</b></code> and
    <code><b>-yscrollcommand</b></code> options.&nbsp; They also support
    scanning, as described below.</dd>

    <dd><br>
    Each tablelist widget, as well as each tablelist column, row, and cell may
    have any number of <b>attributes</b>, which can be used in commands that
    create or manipulate tablelist widgets for particular purposes.</dd>

    <dt><br>
    <a name="colors_and_fonts"></a><b>COLORS AND FONTS</b></dt>

    <dd>
      The <code><b>-background</b></code>, <code><b>-font</b></code>,
      <code><b>-foreground</b></code>, <code><b>-selectbackground</b></code>,
      and <code><b>-selectforeground</b></code> options can also be specified
      at column, row, and cell level, by using the <code><b><a href=
      "#columnconfigure">columnconfigure</a></b></code> (or <code><b><a href=
      "#configcolumnlist">configcolumnlist</a></b></code>, or <code><b><a href=
      "#configcolumns">configcolumns</a></b></code>), <code><b><a href=
      "#rowconfigure">rowconfigure</a></b></code> (or <code><b><a href=
      "#configrowlist">configrowlist</a></b></code>, or <code><b><a href=
      "#configrows">configrows</a></b></code>), and <code><b><a href=
      "#cellconfigure">cellconfigure</a></b></code> (or <code><b><a href=
      "#configcelllist">configcelllist</a></b></code>, or <code><b><a href=
      "#configcells">configcells</a></b></code>) subcommands of the Tcl command
      associated with the tablelist widget.&nbsp; For this reason, a particular
      cell can have up to four values for one and the same color or font
      option.&nbsp; If these values conflict, then the option specified at the
      highest priority level is used.&nbsp; The decreasing priority order is
      cell, row, column, widget.

      <p>If one of these options hasn't been specified at cell, row, or column
      level, or if its value for that level is an empty string (this is
      explicitly allowed), then that option will not be used at that particular
      level.</p>
    </dd>

    <dt><a name="tree_widget"></a><b>USING A TABLELIST AS MULTI-COLUMN TREE
    WIDGET</b></dt>

    <dd>
      When using a tablelist widget to display a tree hierarchy, there are a
      few rules to follow:<br>
      &nbsp;

      <ol>
................................................................................
    <code>Return</code> or <code>KP_Enter</code>.&nbsp; Per default, the
    <code><b>editcell</b></code> subcommand creates a temporary entry widget
    and embeds it into the cell whose index was passed to it as argument.&nbsp;
    You can, however, use the <code><b>-editwindow</b></code> <a href=
    "#col_editwindow">column</a> or <a href="#cell_editwindow">cell</a>
    configuration option to specify another widget instead of an entry, like a
    Tk core text, spinbox, checkbutton, or menubutton widget, or a tile entry,
    spinbox, combobox, checkbutton, or menubutton, or one of the 19 currently
    supported widgets from the packages <a href=
    "tablelistBWidget.html">BWidget</a>, <a href=
    "tablelistIwidgets.html">Iwidgets</a>, <a href=
    "tablelistCombobox.html">combobox</a> (by Bryan Oakley), <a href=
    "tablelistCtext.html">ctext</a>, and <a href=
    "tablelistMentry.html">Mentry (or Mentry_tile)</a>.&nbsp; Before specifying
    a widget from one of these library packages as the value of the
    <code><b>-editwindow</b></code> column or cell configuration option, you
    must register it for interactive cell editing by invoking the corresponding
    <code><b>tablelist::add*</b></code> command.&nbsp; The above-mentioned Tk
    core and tile widgets are automatically registered for cell editing.</dd>

................................................................................
    <dd><br>
    The editing of the text inserted into the edit window uses the
    widget-specific bindings for mouse and keyboard events, with a few
    extensions and changes, as described in the <a href=
    "#edit_bindings">DEFAULT BINDINGS FOR INTERACTIVE CELL EDITING</a>
    section.&nbsp; For example, in entry or entry-like components of the edit
    window, <code>Control-i</code> inserts a tab, <code>Control-j</code>
    inserts a newline, and if the edit window is a text or ctext widget then
    <code>Return</code> and <code>KP_Enter</code> insert a newline character,
    too.&nbsp; <code>Tab</code> and <code>Shift-Tab</code> are used for
    navigation between the editable cells, just like <code>Alt-Left</code>,
    <code>Alt-Right</code>, <code>Alt-Up</code>, <code>Alt-Down</code>,
    <code>Alt-Prior</code>, <code>Alt-Next</code>, <code>Alt-Home</code>, and
    <code>Alt-End</code> (as well as <code>Control-Home</code> and
    <code>Control-End</code>, except in the case of a text or ctext
    widget).&nbsp; On Mac OS Classic and Mac OS X Aqua the <code>Command</code>
    key is used instead of <code>Alt</code>.&nbsp; The editing can be aborted
    with the <code>Escape</code> key (or by invoking the <code><b><a href=
    "#cancelediting">cancelediting</a></b></code> subcommand) and terminated
    normally with <code>Return</code> or <code>KP_Enter</code> (together with
    <code>Control</code> for a text or ctext widget).&nbsp; The bindings for
    the keys used for normal termination of the editing just invoke the
    <code><b><a href="#finishediting">finishediting</a></b></code> subcommand;
    the latter can also be called explicitly to terminate the editing
    programmatically.&nbsp; Normal termination is also triggered by clicking
    with the left mouse button anywhere in the tablelist's body, outside the
    cell just being edited, or moving into another editable cell by using
    keyboard navigation.</dd>

................................................................................
    <code><b>-editendcommand</b></code> option is to convert the edit window's
    text to the cell's new <i>internal</i> contents, which is necessary if, due
    to the <code><b><a href="#col_formatcommand">-formatcommand</a></b></code>
    column configuration option, the cell's internal value is different from
    its external representation.&nbsp; See the description of the
    <code><b><a href="#forceeditendcommand">-forceeditendcommand</a></b></code>
    option for more about the invocation of the command mentioned above.</dd>

    <dt><br>
    <a name="virtual_events"></a><b>VIRTUAL EVENTS</b></dt>

    <dd>Tablelist defines a few virtual events for the purposes of
    notification, and makes use of the&nbsp; <code><b>event
    generate</b></code>&nbsp; command to send them to the tablelist widget in
    question (whose path name will be the value of the <code><b>%W</b></code>
    substitution in event scripts).&nbsp; When using Tk 8.5 or above, most of
    these virtual events are generated with their <code><b>-data</b></code>
    option set to an appropriate event-specific value.&nbsp; Binding scripts
    can access this user data as the value of the <code><b>%d</b></code>
    substitution.&nbsp; Unfortunately, the <code><b>-data</b></code> option
    to&nbsp; <code><b>event generate</b></code>&nbsp; was not supported by Tk
    versions earlier than 8.5.&nbsp; For these Tk versions, the&nbsp;
    <code><b>event generate</b></code>&nbsp; command will be invoked without
    the <code><b>-data</b></code> option.</dd>

    <dd>
      <p>The virtual events generated by Tablelist are as follows:</p>

      <table border="2" cellspacing="0" cellpadding="3">
        <tr bgcolor="#FFFFE0">
          <th align="left">Virtual Event</th>
          <th align="left">Description</th>
          <th align="left">User Data (for Tk 8.5 or Later)</th>
        </tr>

        <tr>
          <td><code><b>&lt;&lt;TablelistCellRestored&gt;&gt;</b></code></td>
          <td>Generated by the <code><b><a href=
	  "#cancelediting">cancelediting</a></b></code> subcommand.</td>
          <td>A list consisting of the numerical row and column indices of the
	  cell whose content is being edited.</td>
        </tr>

        <tr>
          <td><code><b>&lt;&lt;TablelistCellUpdated&gt;&gt;</b></code></td>
          <td>Generated by the <code><b><a href=
	  "#finishediting">finishediting</a></b></code> subcommand.</td>
          <td>A list consisting of the numerical row and column indices of the
	  cell whose content is being edited.</td>
        </tr>

        <tr>
          <td><code><b>&lt;&lt;TablelistColHiddenStateChanged&gt;&gt;</b></code></td>
          <td>Generated whenever the hidden state of one or more columns is
          toggled by using the <code><b><a href=
	  "#columnconfigure">columnconfigure</a></b></code>, <code><b><a href=
          "#configcolumnlist">configcolumnlist</a></b></code>,
          <ccode><b><a href="#configcolumns">configcolumns</a></b></code>, or
          <ccode><b><a href="#togglecolumnhide">togglecolumnhide</a></b></code>
          subcommand.</td>
          <td>A list consisting of the numerical indices of the columns whose
          hidden state changed.</td>
        </tr>

        <tr>
          <td><code><b>&lt;&lt;TablelistColumnMoved&gt;&gt;</b></code></td>
          <td>Generated by the default bindings whenever a column is moved
          interactively to a new position.</td>
          <td>A list consisting of the two arguments passed to the
          <code><b><a href="#movecolumn">movecolumn</a></b></code>
          subcommand, invoked for moving the source column to the target
          position.</td>
        </tr>

        <tr>
          <td><code><b>&lt;&lt;TablelistColumnResized&gt;&gt;</b></code></td>
          <td>Generated by the default bindings whenever a column is resized
          interactively.</td>
          <td>The numerical index of the column that was resized.</td>
        </tr>

        <tr>
          <td><code><b>&lt;&lt;TablelistColumnSorted&gt;&gt;</b></code></td>
          <td>Generated by the <code><b><a href=
          "tablelistColSort.html#sortByColumn">tablelist::sortByColumn</a></b></code>
          command.</td>
          <td>A list consisting of the numerical column index and the sort
          order (<code><b>decreasing</b></code> or
          <code><b>increasing</b></code>).</td>
        </tr>

        <tr>
          <td><code><b>&lt;&lt;TablelistColumnsSorted&gt;&gt;</b></code></td>
          <td>Generated by the <code><b><a href=
          "tablelistColSort.html#addToSortColumns">tablelist::addToSortColumns</a></b></code> command.</td>
          <td>A list consisting of the two lists passed to the
          <code><b><a href=
          "tablelistWidget.html#sortbycolumnlist">sortbycolumnlist</a></b></code>
          subcommand, invoked to perform the multi-column sorting.</td>
        </tr>

        <tr>
          <td><code><b>&lt;&lt;TablelistRowHiddenStateChanged&gt;&gt;</b></code></td>
          <td>Generated whenever the hidden state of one or more rows is
          toggled by using the <code><b><a href=
	  "#rowconfigure">rowconfigure</a></b></code>, <code><b><a href=
          "#configrowlist">configrowlist</a></b></code>, <ccode><b><a href=
          "#configrows">configrows</a></b></code>, or <ccode><b><a href=
          "#togglerowhide">togglerowhide</a></b></code> subcommand.</td>
          <td>A list consisting of the numerical indices of the rows whose
          hidden state changed.</td>
        </tr>

        <tr>
          <td><code><b>&lt;&lt;TablelistRowMoved&gt;&gt;</b></code></td>
          <td>Generated by the default bindings whenever a row is moved
          interactively to a new position.</td>
          <td>A list consisting of the three arguments passed to the second
          form of the <code><b><a href="#move">move</a></b></code> subcommand,
          invoked for moving the source row to the target position.</td>
        </tr>

        <tr>
          <td><code><b>&lt;&lt;TablelistSelect&gt;&gt;</b></code>,
          <code><b>&lt;&lt;ListboxSelect&gt;&gt;</b></code></td>
          <td>Generated by the default bindings whenever the selection changes
	  in the tablelist widget due to user interaction.</td>
          <td>Not used.</td>
        </tr>

        <tr>
          <td><code><b>&lt;&lt;TablelistSelectionLost&gt;&gt;</b></code></td>
          <td>Sent to the tablelist widget whenever it loses ownership of the
	  PRIMARY selection.</td>
          <td>Not used.</td>
        </tr>
      </table>
    </dd>

    <dt><br>
    <a name="row_indices"></a><b>ROW INDICES</b></dt>

    <dd>
      Many of the widget commands for tablelist widgets take one or more row
      indices as arguments.&nbsp; A row index specifies a particular item of
................................................................................
        be used when defining individual binding scripts for tablelist
        widgets.&nbsp; The main advantage of using this tag instead of the path
        name of the tablelist's body is that it enables you to write event
        handling scripts that are valid not only for the tablelist's body but
        also for the separators, multi-line cells, and embedded images.</dd>

        <dt><br>
        <a name="canceledediting"></a><code><i>pathName</i>
        <b>canceledediting</b></code></dt>

        <dd>
          Returns the value <code>1</code> if the most recent interactive cell
          editing was canceled (by the user or programmatically, with the aid
          of the <code><b><a href="#cancelediting">cancelediting</a></b></code>
          subcommand) and <code>0</code> otherwise.

          <p><b>REMARK:</b>&nbsp; By invoking this subcommand from within the
          Tcl command specified by the <code><b><a href=
          "#editendcommand">-editendcommand</a></b></code> configuration
          option, you can find out whether the editing session was canceled or
          terminated normally.&nbsp; Remember that this Tcl command will be
          invoked in both cases mentioned above if the <code><b><a href=
          "#forceeditendcommand">-forceeditendcommand</a></b></code> option was
          set to true.</p>
        </dd>

        <dt><a name="cancelediting"></a><code><i>pathName</i>
        <b>cancelediting</b></code></dt>

        <dd>This subcommand cancels the interactive editing of the contents of
        the cell whose index was passed to the <code><b><a href=
        "#editcell">editcell</a></b></code> subcommand, destroys the temporary
        widget embedded into the cell, and restores the original cell
        contents.&nbsp; This command enables you to cancel the interactive cell
................................................................................
        "#editstartcommand">-editstartcommand</a></b></code> configuration
        option if that pre-edit callback encounters an error when preparing the
        text to be inserted into the edit window.&nbsp; The command is also
        invoked implicitly by pressing the <code>Escape</code> key when a cell
        is being edited.&nbsp; The return value is an empty string.&nbsp;
        Immediately before returning this value, the command generates the
        virtual event
        <code><b>&lt;&lt;TablelistCellRestored&gt;&gt;</b></code>.&nbsp; 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 row and column indices of the cell whose content is being
        edited.&nbsp; If no cell was being edited when the command was invoked
        then an empty string is returned without generating a virtual
        event.</dd>

        <dt><br>
        <a name="cellattrib"></a><code><i>pathName</i> <b>cellattrib</b>
        <i>cellIndex</i> ?<i>name</i>? ?<i>value</i> <i>name</i> <i>value</i>
        ...?</code></dt>

        <dd>Queries or modifies the attributes of the cell given by
................................................................................
          if from within this script the <code><b><a href=
          "#rejectinput">rejectinput</a></b></code> subcommand was invoked then
          the cell's value is not changed and the embedded widget remains
          displayed in the cell; in this case the command returns the boolean
          value <code>0</code>.&nbsp; In all the other cases, the return value
          is <code>1</code>.&nbsp; Immediately before returning the value
          <code>1</code>, the command generates the virtual event
          <code><b>&lt;&lt;TablelistCellUpdated&gt;&gt;</b></code>.&nbsp; 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 row and column indices of the cell whose content is being
          edited.&nbsp; If no cell was being edited when the command was
          invoked then the same value <code>1</code> is returned but no virtual
          event is generated.

          <p>This subcommand is called <i>implicitly</i> by pressing
          <code>Return</code> or <code>KP_Enter</code> (together with
          <code>Control</code> if the edit window is a text or ctext widget)
          when editing a cell, or by clicking with the left mouse button
          anywhere in the tablelist's body, outside the cell just being edited,
          or moving into another editable cell by using keyboard
          navigation.</p>

          <p><b>REMARK:</b>&nbsp; There are also situations where an
          <i>explicit</i> invocation of this subcommand is needed, in order to
          make sure that the cell just being edited gets updated with the text
          entered by the user.&nbsp; For example, if a tablelist widget is part
          of a dialog used for editing some data, then the command associated
          with the button designed to accept the data should call this
................................................................................
        <code><i>firstColumn</i></code> and <code><i>lastColumn</i></code> are
        indices specifying the first and last columns in the range whose
        visibility is to be toggled.&nbsp; The command's second form accepts a
        list <code><i>columnIndexList</i></code> of indices specifying the
        columns whose visibility is to be toggled.&nbsp; Returns an empty
        string.&nbsp; After toggling the hidden state of the specified columns,
        the <code><b>&lt;&lt;TablelistColHiddenStateChanged&gt;&gt;</b></code>
        virtual event is generated.&nbsp; 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 indices of the columns
        whose <code><b>-hide</b></code> option was toggled.&nbsp; The main
        advantage of using this command instead of invoking <code><b><a href=
        "#columnconfigure">columnconfigure</a></b></code> for each of the
        specified columns is that it causes only one redisplay of the widget's
        contents, thus being significantly faster.</dd>

        <dt><br>
        <a name="togglerowhide"></a><code><i>pathName</i> <b>togglerowhide</b>
        <i>first</i> <i>last</i></code><br>
................................................................................
          <code><i>first</i></code> and <code><i>last</i></code> are indices
          specifying the first and last rows in the range whose visibility is
          to be toggled.&nbsp; The command's second form accepts a list
          <code><i>indexList</i></code> of indices specifying the rows whose
          visibility is to be toggled.&nbsp; Returns an empty string.&nbsp;
          After toggling the hidden state of the specified rows, the
          <code><b>&lt;&lt;TablelistRowHiddenStateChanged&gt;&gt;</b></code>
          virtual event is generated.&nbsp; 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 row indices of the rows
          whose <code><b>-hide</b></code> option was toggled.&nbsp; Just like
          the <code><b>-hide</b></code> row configuration option, this
          subcommand is not supported for Tk versions earlier than 8.3.

          <p><b>CAUTION:</b>&nbsp; Tk versions 8.3 - 8.4.12 had a bug that
          caused a segmentation fault if the whole content of a text widget was
          elided.&nbsp; This bug was also present in Tk 8.5.a1 - 8.5.a3.&nbsp;
          When using one of these earlier Tk versions, this bug will produce a
          crash if all the rows of a tablelist widget are hidden.&nbsp; It is
          your responsibility to avoid such situations when using a Tk version
................................................................................
        it.&nbsp; This <b>local drag &amp; drop</b> operation ends when mouse
        button 1 is released, and can be canceled by pressing the
        <code>Escape</code> key.&nbsp; In both cases, the mouse cursor is reset
        to its original value, specified by the <code><b>-cursor</b></code>
        configuration option.&nbsp; After releasing mouse button 1 in the
        presence of a valid target, the source item is moved before the target
        row or just before the latter's first child, and the virtual event
        <code><b>&lt;&lt;TablelistRowMoved&gt;&gt;</b></code> is
        generated.&nbsp; For Tk versions 8.5 or higher, this virtual event is
        is generated with its <code><b>-data</b></code> option set to a list
        consisting of the three arguments passed to the second form of the
        <code><b><a href="#move">move</a></b></code> subcommand, invoked for
        moving the source row to its new position.&nbsp; All the three list
        elements will be numerical values, except the second one
        (<code><i>targetParentNodeIndex</i></code>), which can also be
        <code><b>root</b></code>.</p>

        <p>Notice that, depending on the current mouse position during the
        local drag &amp; drop, there can be a corresponding potential target
        row or not.&nbsp; For instance, a tree item cannot become a sibling of
        one of its descendants, and not all items might be allowed to have
        children or to become top-level ones (example: in a file manager,
        regular file items cannot be parents of other items and should not be
................................................................................
        amount of the cursor motion.&nbsp; The interactive column resizing ends
        when mouse button 1 is released, and can be canceled by pressing the
        <code>Escape</code> key.&nbsp; In both cases, the mouse cursor is reset
        to its original value, specified by the <code><b>-cursor</b></code>
        configuration option.&nbsp; When the column resize operation is
        finished, the virtual event
        <code><b>&lt;&lt;TablelistColumnResized&gt;&gt;</b></code> is
        generated, with its <code><b>-data</b></code> option set to the
        numerical column index for Tk versions 8.5 or higher.<br>
        &nbsp;</li>

        <li>If mouse button 1 is pressed over a header label but outside the
        resize area described above and then dragged outside the label, and the
        value of the <code><b><a href=
        "#movablecolumns">-movablecolumns</a></b></code> configuration option
        is true, then the mouse cursor takes on the shape specified by the
................................................................................
        1 is released, and can be canceled by pressing the <code>Escape</code>
        key when the mouse pointer is outside the label.&nbsp; In both cases,
        the mouse cursor is reset to its original value, specified by the
        <code><b>-cursor</b></code> configuration option.&nbsp; After releasing
        mouse button 1, the source column is moved before the one indicated by
        the gap mentioned above and the virtual event
        <code><b>&lt;&lt;TablelistColumnMoved&gt;&gt;</b></code> is
        generated.&nbsp; 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 arguments passed to the <code><b><a href=
        "#movecolumn">movecolumn</a></b></code> subcommand, invoked for
        moving the source column to its new position.&nbsp; Both list elements
        will be numerical column indices.<br>
        &nbsp;</li>

        <li>If mouse button 1 is pressed over a header label but outside the
        resize area described above and later released over the same label, and
        the command specified by the <code><b><a href=
        "#labelcommand">-labelcommand</a></b></code> option is a nonempty
        string, then this command is concatenated with the name of the
................................................................................
        corresponding to that label are true, then the width of that column is
        set to zero, i.e., it is made just large enough to hold all the
        elements in the column, including the header (but no larger than the
        maximum width indicated by the <code><b><a href=
        "#col_maxwidth">-maxwidth</a></b></code> column configuration option),
        and the virtual event
        <code><b>&lt;&lt;TablelistColumnResized&gt;&gt;</b></code> is
        generated, with its <code><b>-data</b></code> option set to the
        numerical column index for Tk versions 8.5 or higher.&nbsp; The same
        action is triggered by double-clicking the resize area of a header
        label.<br>
        &nbsp;</li>

        <li>The Tablelist package defines the virtual event
        <code><b>&lt;&lt;ShiftButton3&gt;&gt;</b></code> as
        <code><b>&lt;Shift-Button-3&gt;</b></code> for all windowing systems
        and additionally as <code><b>&lt;Shift-Control-Button-1&gt;</b></code>
        for Mac OS Classic and Mac OS X Aqua.&nbsp; If this event occurs over a
................................................................................
        header label and both the value of the <code><b><a href=
        "#resizablecolumns">-resizablecolumns</a></b></code> configuration
        option and that of the <code><b><a href=
        "#col_resizable">-resizable</a></b></code> option for the column
        corresponding to that label are true, then the width of that column is
        set to its last static width (if any) and the virtual event
        <code><b>&lt;&lt;TablelistColumnResized&gt;&gt;</b></code> is
        generated, with its <code><b>-data</b></code> option set to the
        numerical column index for Tk versions 8.5 or higher.&nbsp; The same
        action is triggered by double-clicking the resize area of a header
        label with the <code>Shift</code> key held down.</li>

      </ol>

      <p>If the tablelist's <code><b><a href="#state">state</a></b></code> is
      <code><b>disabled</b></code> then none of the above actions occur: the
      labels are completely insensitive.</p>

      <p>If you want to define non-default bindings for the header labels, it
................................................................................
        &nbsp;</li>

        <li><code>Control-j</code> inserts a newline character into the edit
        window's entry or entry-like components (if any), at the point of the
        insertion cursor.<br>
        &nbsp;</li>

        <li>If the edit window is a text or ctext widget then
        <code>Return</code> and <code>KP_Enter</code> insert a newline
        character at the point of the insertion cursor.&nbsp; Otherwise they
        terminate the editing and destroy the edit window.<br>
        &nbsp;</li>

        <li><code>Control-Return</code> and <code>Control-KP_Enter</code>
        terminate the editing and destroy the edit window.<br>
        &nbsp;</li>

        <li><code>Escape</code> aborts the editing and destroys the edit
................................................................................

        <li>When editing a cell that is not the only editable cell of the
        tablelist widget, <code>Tab</code> and <code>Shift-Tab</code> terminate
        the editing in the current cell, move the edit window into the
        next/previous editable cell of the tablelist, select the contents of
        the edit window's first entry or entry-like component (if any), and set
        the insertion cursor to its end.&nbsp; If the new edit window is a text
        or ctext widget then its contents are left unselected.&nbsp; Notice
        that these bindings replace the common inter-widget navigation via
        <code>Tab</code> and <code>Shift-Tab</code> with inter-cell
        navigation.&nbsp; Just like in the case of the text widget,
        <code>Control-Tab</code> and <code>Control-Shift-Tab</code> are
        intended to be used for widget-to-widget keyboard navigation during
        interactive cell editing.&nbsp; Unfortunately, this won't always work
        because some window managers intercept the latter key sequences and use
        them for their own purposes (like inter-workplace navigation).&nbsp;
................................................................................
        <li>When editing a cell that is not the first/last editable cell within
        its row, <code>Alt-Left</code>/<code>Alt-Right</code>
        (<code>Command-Left</code>/<code>Command-Right</code> on Mac OS Classic
        and Mac OS X Aqua) terminates the editing in the current cell, moves
        the edit window into the previous/next editable cell of the row,
        selects the contents of the edit window's first entry or entry-like
        component (if any), and sets the insertion cursor to its end.&nbsp; If
        the new edit window is a text or ctext widget then its contents are
        left unselected.&nbsp; The key sequence
        <code>Meta-Left</code>/<code>Meta-Right</code> has the same effect as
        <code>Alt-Left</code>/<code>Alt-Right</code>.&nbsp; If
        <code><b>tk_strictMotif</b></code> is false and the edit window is not
        a text or ctext widget then <code>Meta-b</code> and <code>Meta-f</code>
        behave the same as <code>Alt-Left</code> and <code>Alt-Right</code>,
        respectively.&nbsp; If the edit window is a Tk or tile checkbutton or
        menubutton widget then <code>Left</code>/<code>Right</code> has the
        same effect as <code>Alt-Left</code>/<code>Alt-Right</code>.<br>
        &nbsp;</li>

        <li>When editing a cell that is not the first/last editable cell within
        its column, <code>Alt-Up</code>/<code>Alt-Down</code>
        (<code>Command-Up</code>/<code>Command-Down</code> on Mac OS Classic
        and Mac OS X Aqua) terminates the editing in the current cell, moves
        the edit window one line up/down within the column, selects the
        contents of the edit window's first entry or entry-like component (if
        any), and sets the insertion cursor to its end.&nbsp; If the new edit
        window is a text or ctext widget then its contents are left
        unselected.&nbsp; The key sequence
        <code>Meta-Up</code>/<code>Meta-Down</code> has the same effect as
        <code>Alt-Up</code>/<code>Alt-Down</code>.&nbsp; If
        <code><b>tk_strictMotif</b></code> is false and the edit window is not
        a text or ctext widget or an Iwidgets combobox, then

        <code>Control-p</code> and <code>Control-n</code> behave the same as
        <code>Alt-Up</code> and <code>Alt-Down</code>, respectively.&nbsp; If
        the edit window is a Tk or tile entry, Tk or tile checkbutton, Tk or
        tile menubutton, BWidget Entry, Iwidgets entryfield/spinner/spinint, or
        a mentry widget of type <code>"FixedPoint"</code>, then
        <code>Up</code>/<code>Down</code> has the same effect as
        <code>Alt-Up</code>/<code>Alt-Down</code>.<br>
        &nbsp;</li>

        <li>When editing a cell that is not the first/last editable cell within
        its column, <code>Alt-Prior</code>/<code>Alt-Next</code>
        (<code>Command-Prior</code>/<code>Command-Next</code> on Mac OS Classic
        and Mac OS X Aqua) terminates the editing in the current cell, moves
        the edit window up/down by one page within the column, selects the
        contents of the edit window's first entry or entry-like component (if
        any), and sets the insertion cursor to its end.&nbsp; If the new edit
        window is a text or ctext widget then its contents are left
        unselected.&nbsp; The key sequence
        <code>Meta-Prior</code>/<code>Meta-Next</code> has the same effect as
        <code>Alt-Prior</code>/<code>Alt-Next</code>.&nbsp; If the edit window
        is not a text or ctext widget, BWidget SpinBox, Oakley combobox, or a
        mentry widget of type <code>"Date"</code>, <code>"Time"</code>,
        <code>"DateTime"</code>, <code>"IPAddr"</code>, or
        <code>"IPv6Addr"</code>, then <code>Prior</code>/<code>Next</code> has
        the same effect as <code>Alt-Prior</code>/<code>Alt-Next</code>.<br>
        &nbsp;</li>

        <li>When editing a cell that is not the only editable cell of the
        tablelist widget, <code>Alt-Home</code>/<code>Alt-End</code>
        (<code>Command-Home</code>/<code>Command-End</code> on Mac OS Classic
        and Mac OS X Aqua) terminates the editing in the current cell, moves
        the edit window into the first/last editable cell of the tablelist,
        selects the contents of the edit window's first entry or entry-like
        component (if any), and sets the insertion cursor to its end.&nbsp; If
        the new edit window is a text or ctext widget then its contents are
        left unselected.&nbsp; The key sequence
        <code>Meta-Home</code>/<code>Meta-End</code> has the same effect as
        <code>Alt-Home</code>/<code>Alt-End</code>.&nbsp; If
        <code><b>tk_strictMotif</b></code> is false and the edit window is not
        a text or ctext widget then <code>Meta-&lt;</code> and
        <code>Meta-&gt;</code> behave the same as <code>Alt-Home</code> and
        <code>Alt-End</code>, respectively.&nbsp; If the edit window is not a
        text or ctext widget then
        <code>Control-Home</code>/<code>Control-End</code> has the same effect
        as <code>Alt-Home</code>/<code>Alt-End</code>.</li>
      </ol>

      <p>Before moving the edit window, the key sequences mentioned under 7 -
      11 move the active item or element and change the (cell)selection and the
      (cell)selection anchor in the body of the tablelist widget.&nbsp; For