Tk Library Source Code

Check-in [d000059d37]
Login

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

Overview
Comment:Tablelist: Updated for version 7.6. See the ChangeLog for details.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: d000059d372385e196bc167871981e8955fdbaa3ae207ee0fb39002d47954174
User & Date: csaba 2025-05-16 17:46:56.656
Context
2025-05-16
19:47
Scrollutil: Updated for version 2.6. See the ChangeLog for details. check-in: 10f204257d user: csaba tags: trunk
17:46
Tablelist: Updated for version 7.6. See the ChangeLog for details. check-in: d000059d37 user: csaba tags: trunk
2025-03-24
11:11
Released Tsw 1.0. check-in: 70a3e7bfe4 user: csaba tags: trunk
Changes
Unified Diff Ignore Whitespace Patch
Changes to examples/tablelist/bwidget.tcl.
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateCkbtn $tbl $row $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {







|







195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateHdrCkbtn $tbl $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {
Changes to examples/tablelist/bwidget_tile.tcl.
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateCkbtn $tbl $row $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {







|







202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateHdrCkbtn $tbl $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {
Changes to examples/tablelist/iwidgets.tcl.
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateCkbtn $tbl $row $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {







|







205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateHdrCkbtn $tbl $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {
Changes to examples/tablelist/iwidgets_tile.tcl.
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateCkbtn $tbl $row $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {







|







210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateHdrCkbtn $tbl $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {
Changes to examples/tablelist/miscWidgets.tcl.
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateCkbtn $tbl $row $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {







|







205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateHdrCkbtn $tbl $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {
Changes to examples/tablelist/miscWidgets_tile.tcl.
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateCkbtn $tbl $row $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {







|







212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateHdrCkbtn $tbl $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {
Changes to examples/tablelist/serialParams.tcl.
1
2
3
4
5
6
7
8
9
10
11
#==============================================================================
# Populates a tablelist widget with the parameters of 16 serial lines,
# configures the checkbutton embedded into the header label of the column
# "available", and implements the procedures updateCkbtn and afterCopyCmd.
#
# Copyright (c) 2021-2024  Csaba Nemethi (E-mail: [email protected])
#==============================================================================

#
# Populate the tablelist widget; set the activation
# date & time to 10 minutes past the current clock value



|







1
2
3
4
5
6
7
8
9
10
11
#==============================================================================
# Populates a tablelist widget with the parameters of 16 serial lines,
# configures the checkbutton embedded into the header label of the column
# "available", and implements the procedures updateHdrCkbtn and afterCopyCmd.
#
# Copyright (c) 2021-2024  Csaba Nemethi (E-mail: [email protected])
#==============================================================================

#
# Populate the tablelist widget; set the activation
# date & time to 10 minutes past the current clock value
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
    unset $varName
}

#
# Selects/deselects the checkbutton embedded into the header label
# of the specified column or sets it into the tri-state mode.
#
proc updateCkbtn {tbl row col} {
    set lst [$tbl getcolumns $col]
    set ckbtn [$tbl labelwindowpath $col]
    upvar #0 [$ckbtn cget -variable] var

    if {[lsearch -exact $lst 1] < 0} {			;# all 0
	set var 0					;# deselect
    } elseif {[lsearch -exact $lst 0] < 0} {		;# all 1







|







49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
    unset $varName
}

#
# Selects/deselects the checkbutton embedded into the header label
# of the specified column or sets it into the tri-state mode.
#
proc updateHdrCkbtn {tbl col} {
    set lst [$tbl getcolumns $col]
    set ckbtn [$tbl labelwindowpath $col]
    upvar #0 [$ckbtn cget -variable] var

    if {[lsearch -exact $lst 1] < 0} {			;# all 0
	set var 0					;# deselect
    } elseif {[lsearch -exact $lst 0] < 0} {		;# all 1
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
	    # the checkbutton embedded into the column's header label
	    #
	    for {set row 0} {$row < 16} {incr row} {
		set text [$tbl cellcget $row,$col -text]
		set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
		$tbl cellconfigure $row,$col -image $img
	    }
	    updateCkbtn $tbl 0 $col
	}

	color {
	    #
	    # Update the images contained in the column's cells
	    #
	    for {set row 0} {$row < 16} {incr row} {
		set text [$tbl cellcget $row,$col -text]
		$tbl cellconfigure $row,$col -image img$::colors($text)
	    }
	}
    }
}







|













81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
	    # the checkbutton embedded into the column's header label
	    #
	    for {set row 0} {$row < 16} {incr row} {
		set text [$tbl cellcget $row,$col -text]
		set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
		$tbl cellconfigure $row,$col -image $img
	    }
	    updateHdrCkbtn $tbl $col
	}

	color {
	    #
	    # Update the images contained in the column's cells
	    #
	    for {set row 0} {$row < 16} {incr row} {
		set text [$tbl cellcget $row,$col -text]
		$tbl cellconfigure $row,$col -image img$::colors($text)
	    }
	}
    }
}
Changes to examples/tablelist/tileWidgets.tcl.
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateCkbtn $tbl $row $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {







|







233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateHdrCkbtn $tbl $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {
Changes to examples/tablelist/tileWidgets2.tcl.
1
2
3
4
5
6
7
8
9
10
11
12
#! /usr/bin/env tclsh

#==============================================================================
# Demonstrates the interactive tablelist cell editing with the aid of some Ttk
# widgets and of the toggleswitch widget.
#
# Copyright (c) 2005-2025  Csaba Nemethi (E-mail: [email protected])
#==============================================================================

package require Tk
package require tsw
package require tablelist_tile




|







1
2
3
4
5
6
7
8
9
10
11
12
#! /usr/bin/env tclsh

#==============================================================================
# Demonstrates the interactive tablelist cell editing with the aid of some Ttk
# widgets and the toggleswitch widget.
#
# Copyright (c) 2005-2025  Csaba Nemethi (E-mail: [email protected])
#==============================================================================

package require Tk
package require tsw
package require tablelist_tile
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateCkbtn $tbl $row $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {







|







221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
	available {
	    #
	    # Update the image contained in the cell and the checkbutton
	    # embedded into the header label of the column "available"
	    #
	    set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
	    $tbl cellconfigure $row,$col -image $img
	    after idle [list updateHdrCkbtn $tbl $col]
	}

	baudRate {
	    #
	    # Check whether the baud rate is an integer in the range 50..921600
	    #
	    if {![regexp {^[0-9]+$} $text] || $text < 50 || $text > 921600} {
Changes to modules/tablelist/CHANGES.txt.
1
2

























3
4
5
6
7
8
9
What is new in Tablelist 7.5?
-----------------------------


























1. Support for interactive cell editing with the aid of the new
   toggleswitch widget.

2. Improvements related to the use of various system colors on aqua and
   win32.

|

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







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
What is new in Tablelist 7.6?
-----------------------------

1. The implementation of the interactive cell editing with the aid of a
   (ttk::)menubutton now takes into acount that in Tk 9 the menu index
   "none" was replaced with the empty string.

2. Eliminated a few artifacts related to the "showtargetmark" subcommand
   when using TkDND on Windows or macOS Aqua (thanks to Nicolas Bats for
   his bug report).

3. Made sure that the "autoscrolltarget" subcommand works as expected
   (again, thanks to Nicolas Bats for reporting that on Windows and
   macOS Aqua this was not always the case).

4. Made sure that in multi-line cell texts the substring "%W" won't be
   substituted by the path name of the tablelist's body (thanks to
   Harald Oehlmann for his bug report).

5. Minor improvements in the demo scripts related to interactive cell
   editing.

6. Improved the documentation by extending the CSS stylesheet used in
   the HTML files.

What was new in Tablelist 7.5?
------------------------------

1. Support for interactive cell editing with the aid of the new
   toggleswitch widget.

2. Improvements related to the use of various system colors on aqua and
   win32.

Changes to modules/tablelist/COPYRIGHT.txt.
1
2
3
4
5
6
7
8
9
Multi-column listbox and tree widget package Tablelist, version 7.5
Copyright (c) 2000-2024  Csaba Nemethi (E-mail: [email protected])

This library is free software; you can use, modify, and redistribute it
for any purpose, provided that existing copyright notices are retained
in all copies and that this notice is included verbatim in any
distributions.

This software is distributed WITHOUT ANY WARRANTY; without even the
|
|







1
2
3
4
5
6
7
8
9
Multi-column listbox and tree widget package Tablelist, version 7.6
Copyright (c) 2000-2025  Csaba Nemethi (E-mail: [email protected])

This library is free software; you can use, modify, and redistribute it
for any purpose, provided that existing copyright notices are retained
in all copies and that this notice is included verbatim in any
distributions.

This software is distributed WITHOUT ANY WARRANTY; without even the
Changes to modules/tablelist/ChangeLog.





















1
2
3
4
5
6
7





















2025-03-24 Csaba Nemethi <[email protected]>

	* Released Tablelist 7.5.

2025-03-20 Csaba Nemethi <[email protected]>

	* *.tcl:         Bumped the version number to 7.5.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
2025-05-16 Csaba Nemethi <[email protected]>

	* *.tcl:         Bumped the version number to 7.6.
	* COPYRIGHT.txt:
	* README.txt:

	* CHANGES.txt: Updated to reflect the changes.
	* doc/*.html:

	* scripts/*.tcl: Eliminated a few artifacts related to the
	  "showtargetmark" subcommand when using TkDND on Windows or macOS
	  Aqua; made sure that the "autoscrolltarget" subcommand works as
	  expected; made sure that in multi-line cell texts the substring "%W"
	  won't be substituted by the path name of the tablelist's body; the
	  implementation of the interactive cell editing with the aid of a
	  (ttk::)menubutton now takes into acount that in Tk 9 the menu index
	  "none" was replaced with the empty string.

	* ../../examples/tablelist/*.tcl: Minor improvements related to
	  interactive cell editing.

2025-03-24 Csaba Nemethi <[email protected]>

	* Released Tablelist 7.5.

2025-03-20 Csaba Nemethi <[email protected]>

	* *.tcl:         Bumped the version number to 7.5.
Changes to modules/tablelist/README.txt.
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

    https://www.nemethi.de

How to Get It?
--------------

Tablelist is available for free download from the same URL as Wcb.  The
distribution file is "tablelist7.5.tar.gz" for UNIX and
"tablelist7_5.zip" for Windows.  These files contain the same
information, except for the additional carriage return character
preceding the linefeed at the end of each line in the text files for
Windows.

Tablelist is also included in tklib, which has the address

    https://core.tcl.tk/tklib

How to Install It?
------------------

Install the package as a subdirectory of one of the directories given
by the "auto_path" variable.  For example, you can install it as a
subdirectory of the "lib" directory within your Tcl/Tk installation.

To install Tablelist on UNIX, "cd" to the desired directory and unpack
the distribution file "tablelist7.5.tar.gz":

    gunzip -c tablelist7.5.tar.gz | tar -xf -

On most UNIX systems this can be replaced with

    tar -zxf tablelist7.5.tar.gz

Both commands will create a directory named "tablelist7.5 with the
subdirectories "demos", "doc", and "scripts".

On Windows, use WinZip or some other program capable of unpacking the
distribution file "tablelist7_5.zip" into the directory "tablelist7.5",
with the subdirectories "demos", "doc", and "scripts".

The file "tablelistEdit.tcl" in the "scripts" directory is only needed
for applications making use of interactive cell editing.  Similarly, the
file "tablelistMove.tcl" in the same directory is only required for
scripts invoking the "move" or "movecolumn" tablelist command.  Finally,
the file "tablelistThemes.tcl" is only needed for applications using







|
|
















|

|



|

|



|







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

    https://www.nemethi.de

How to Get It?
--------------

Tablelist is available for free download from the same URL as Wcb.  The
distribution file is "tablelist7.6.tar.gz" for UNIX and
"tablelist7_6.zip" for Windows.  These files contain the same
information, except for the additional carriage return character
preceding the linefeed at the end of each line in the text files for
Windows.

Tablelist is also included in tklib, which has the address

    https://core.tcl.tk/tklib

How to Install It?
------------------

Install the package as a subdirectory of one of the directories given
by the "auto_path" variable.  For example, you can install it as a
subdirectory of the "lib" directory within your Tcl/Tk installation.

To install Tablelist on UNIX, "cd" to the desired directory and unpack
the distribution file "tablelist7.6.tar.gz":

    gunzip -c tablelist7.6.tar.gz | tar -xf -

On most UNIX systems this can be replaced with

    tar -zxf tablelist7.6.tar.gz

Both commands will create a directory named "tablelist7.6 with the
subdirectories "demos", "doc", and "scripts".

On Windows, use WinZip or some other program capable of unpacking the
distribution file "tablelist7_6.zip" into the directory "tablelist7.6",
with the subdirectories "demos", "doc", and "scripts".

The file "tablelistEdit.tcl" in the "scripts" directory is only needed
for applications making use of interactive cell editing.  Similarly, the
file "tablelistMove.tcl" in the same directory is only required for
scripts invoking the "move" or "movecolumn" tablelist command.  Finally,
the file "tablelistThemes.tcl" is only needed for applications using
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
20
21
22
<!DOCTYPE html>
<html>
<head>
  <title>The Multi-Column Listbox and Tree Widget Package Tablelist 7.5</title>

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

  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>The Multi-Column Listbox and Tree Widget Package Tablelist 7.5</h1>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>



|










|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html>
<head>
  <title>The Multi-Column Listbox and Tree Widget Package Tablelist 7.6</title>

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

  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>The Multi-Column Listbox and Tree Widget Package Tablelist 7.6</h1>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>
Changes to modules/tablelist/doc/stylesheet.css.
1
2










3
4
5
6
7
8
9
10
11
12

13
14
15

16
17
18
19
20
/* generic class defining a top margin whose height equals the font size */
.tm {margin-top: 1em}











/* background, border, border-radius, and padding for the <pre> tag */
pre {
  background: #F7F7F7;
  border: silver solid 1px;
  border-radius: 4px;
  padding: 4px;
}

/* background for the <body> tag */

body {background: #FFFFFF}

/* text-align for the <div> tag */

div {text-align: center}

/* color for the <span> tag */
span.red {color: #E00000}
span.cmt {color: #36648b}


>
>
>
>
>
>
>
>
>
>









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



/* generic class defining a top margin whose height equals the font size */
.tm {margin-top: 1em}

/* text-align for the <div> tag */
div {text-align: center}

/* background for the <body> tag */
body {background: #FFFFFF}

/* color for the <span> tag */
span.red {color: #E00000}
span.cmt {color: #36648b}

/* background, border, border-radius, and padding for the <pre> tag */
pre {
  background: #F7F7F7;
  border: silver solid 1px;
  border-radius: 4px;
  padding: 4px;
}

/* background, border, border-radius, and padding for the <code> tag */
code {
  background: #F7F7F7;
  border: #F0F0F0 solid 1px;

  border-radius: 3px;
  padding: 2px;
}



Changes to modules/tablelist/doc/tablelist.html.
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Tablelist Programmer's Guide</h1>

    <h2>For Tablelist Version 7.5</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>







|







10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Tablelist Programmer's Guide</h1>

    <h2>For Tablelist Version 7.6</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
      <a href="https://www.nemethi.de">https://www.nemethi.de</a>
    </address>
  </blockquote>

  <h3 id="ov_get">How to Get It?</h3>

  <p>Tablelist is available for free download from the same URL as Wcb.&nbsp;
  The distribution file is <code>tablelist7.5.tar.gz</code> for UNIX and
  <code>tablelist7_5.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 included in tklib, which has the address</p>

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

  <h3 id="ov_install">How to Install It?</h3>

  <p>Install the package as a subdirectory of one of the directories given by
  the <code>auto_path</code> variable.&nbsp; For example, you can install it as
  a subdirectory of the <code>lib</code> directory within your Tcl/Tk
  installation.</p>

  <p>To install Tablelist <i>on UNIX</i>, <code>cd</code> to the desired
  directory and unpack the distribution file
  <code>tablelist7.5.tar.gz</code>:</p>

  <blockquote>
    <pre>
gunzip -c tablelist7.5.tar.gz | tar -xf -
</pre>
  </blockquote>

  <p>On most UNIX systems this can be replaced with</p>

  <blockquote>
    <pre>
tar -zxf tablelist7.5.tar.gz
</pre>
  </blockquote>

  <p>Both commands will create a directory named <code>tablelist7.5</code>,
  with the subdirectories <code>demos</code>, <code>doc</code>, and
  <code>scripts</code>.</p>

  <p><i>On Windows</i>, use WinZip or some other program capable of unpacking
  the distribution file <code>tablelist7_5.zip</code> into the directory
  <code>tablelist7.5</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







|
|




















|



|







|



|




|
|







175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
      <a href="https://www.nemethi.de">https://www.nemethi.de</a>
    </address>
  </blockquote>

  <h3 id="ov_get">How to Get It?</h3>

  <p>Tablelist is available for free download from the same URL as Wcb.&nbsp;
  The distribution file is <code>tablelist7.6.tar.gz</code> for UNIX and
  <code>tablelist7_6.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 included in tklib, which has the address</p>

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

  <h3 id="ov_install">How to Install It?</h3>

  <p>Install the package as a subdirectory of one of the directories given by
  the <code>auto_path</code> variable.&nbsp; For example, you can install it as
  a subdirectory of the <code>lib</code> directory within your Tcl/Tk
  installation.</p>

  <p>To install Tablelist <i>on UNIX</i>, <code>cd</code> to the desired
  directory and unpack the distribution file
  <code>tablelist7.6.tar.gz</code>:</p>

  <blockquote>
    <pre>
gunzip -c tablelist7.6.tar.gz | tar -xf -
</pre>
  </blockquote>

  <p>On most UNIX systems this can be replaced with</p>

  <blockquote>
    <pre>
tar -zxf tablelist7.6.tar.gz
</pre>
  </blockquote>

  <p>Both commands will create a directory named <code>tablelist7.6</code>,
  with the subdirectories <code>demos</code>, <code>doc</code>, and
  <code>scripts</code>.</p>

  <p><i>On Windows</i>, use WinZip or some other program capable of unpacking
  the distribution file <code>tablelist7_6.zip</code> into the directory
  <code>tablelist7.6</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
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
    unset $varName
}

<span class="cmt">#
# Selects/deselects the checkbutton embedded into the header label
# of the specified column or sets it into the tri-state mode.
#</span>
proc updateCkbtn {tbl row col} {
    set lst [$tbl getcolumns $col]
    set ckbtn [$tbl labelwindowpath $col]
    upvar #0 [$ckbtn cget -variable] var

    if {[lsearch -exact $lst 1] < 0} {                  ;<span class="cmt"># all 0</span>
        set var 0                                       ;<span class="cmt"># deselect</span>
    } elseif {[lsearch -exact $lst 0] < 0} {            ;<span class="cmt"># all 1</span>







|







2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
    unset $varName
}

<span class="cmt">#
# Selects/deselects the checkbutton embedded into the header label
# of the specified column or sets it into the tri-state mode.
#</span>
proc updateHdrCkbtn {tbl col} {
    set lst [$tbl getcolumns $col]
    set ckbtn [$tbl labelwindowpath $col]
    upvar #0 [$ckbtn cget -variable] var

    if {[lsearch -exact $lst 1] < 0} {                  ;<span class="cmt"># all 0</span>
        set var 0                                       ;<span class="cmt"># deselect</span>
    } elseif {[lsearch -exact $lst 0] < 0} {            ;<span class="cmt"># all 1</span>
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
            # the checkbutton embedded into the column's header label
            #</span>
            for {set row 0} {$row < 16} {incr row} {
                set text [$tbl cellcget $row,$col -text]
                set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
                $tbl cellconfigure $row,$col -image $img
            }
            updateCkbtn $tbl 0 $col
        }</span>

        color {
            <span class="cmt">#
            # Update the images contained in the column's cells
            #</span>
            for {set row 0} {$row < 16} {incr row} {







|







2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
            # the checkbutton embedded into the column's header label
            #</span>
            for {set row 0} {$row < 16} {incr row} {
                set text [$tbl cellcget $row,$col -text]
                set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
                $tbl cellconfigure $row,$col -image $img
            }
            updateHdrCkbtn $tbl $col
        }</span>

        color {
            <span class="cmt">#
            # Update the images contained in the column's cells
            #</span>
            for {set row 0} {$row < 16} {incr row} {
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
        <span class="red">available {
            <span class="cmt">#
            # Update the image contained in the cell and the checkbutton
            # embedded into the header label of the column "available"
            #</span>
            set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
            $tbl cellconfigure $row,$col -image $img
            after idle [list updateCkbtn $tbl $row $col]
        }</span>

        baudRate {
            <span class="cmt">#
            # Check whether the baud rate is an integer in the range 50..921600
            #</span>
            if {![regexp {^[0-9]+$} $text] || $text &lt; 50 || $text &gt; 921600} {







|







2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
        <span class="red">available {
            <span class="cmt">#
            # Update the image contained in the cell and the checkbutton
            # embedded into the header label of the column "available"
            #</span>
            set img [expr {$text ? "checkedImg" : "uncheckedImg"}]
            $tbl cellconfigure $row,$col -image $img
            after idle [list updateHdrCkbtn $tbl $col]
        }</span>

        baudRate {
            <span class="cmt">#
            # Check whether the baud rate is an integer in the range 50..921600
            #</span>
            if {![regexp {^[0-9]+$} $text] || $text &lt; 50 || $text &gt; 921600} {
2801
2802
2803
2804
2805
2806
2807










2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
  "tablelistWidget.html#embedcheckbuttons">embedcheckbuttons</a></code>
  subcommand to populate the column with <i>persistently</i> embedded
  checkbuttons.&nbsp; The necessary changes are as follows:</p>

  <ul>
    <li class="tm">Remove those parts of the code above that are shown in
    <span class="red">red</span> color.</li>











    <li class="tm">
      After populating the tablelist widget, invoke

      <blockquote>
        <pre>
$tbl embedcheckbuttons 1 updateCkbtn
</pre>
      </blockquote>
    </li>

    <li class="tm">
      Instead of the two deleted lines of the <code>onCkbtnToggle</code>
      procedure, insert the following loop:







>
>
>
>
>
>
>
>
>
>






|







2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
  "tablelistWidget.html#embedcheckbuttons">embedcheckbuttons</a></code>
  subcommand to populate the column with <i>persistently</i> embedded
  checkbuttons.&nbsp; The necessary changes are as follows:</p>

  <ul>
    <li class="tm">Remove those parts of the code above that are shown in
    <span class="red">red</span> color.</li>

    <li class="tm">
      Implement the procedure <code>ckbtnCmd</code> as follows:

      <blockquote>
        <pre>
proc ckbtnCmd {tbl row col} { return [updateHdrCkbtn $tbl $col] }
</pre>
      </blockquote>
    </li>

    <li class="tm">
      After populating the tablelist widget, invoke

      <blockquote>
        <pre>
$tbl embedcheckbuttons 1 ckbtnCmd
</pre>
      </blockquote>
    </li>

    <li class="tm">
      Instead of the two deleted lines of the <code>onCkbtnToggle</code>
      procedure, insert the following loop:
Changes to modules/tablelist/doc/tablelistBWidget.html.
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Interactive Tablelist Cell Editing Using the BWidget Package</h1>

    <h2>For Tablelist Version 7.5</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>







|







9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Interactive Tablelist Cell Editing Using the BWidget Package</h1>

    <h2>For Tablelist Version 7.6</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>
Changes to modules/tablelist/doc/tablelistBinding.html.
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Commands Related to Binding Scripts</h1>

    <h2>For Tablelist Version 7.5</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>







|







9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Commands Related to Binding Scripts</h1>

    <h2>For Tablelist Version 7.6</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>
Changes to modules/tablelist/doc/tablelistColSort.html.
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Commands for Interactive Sorting by One or More Columns</h1>

    <h2>For Tablelist Version 7.5</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>







|







9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Commands for Interactive Sorting by One or More Columns</h1>

    <h2>For Tablelist Version 7.6</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>
Changes to modules/tablelist/doc/tablelistCombobox.html.
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Interactive Tablelist Cell Editing Using the combobox Package</h1>

    <h2>For Tablelist Version 7.5</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>







|







9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Interactive Tablelist Cell Editing Using the combobox Package</h1>

    <h2>For Tablelist Version 7.6</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>
Changes to modules/tablelist/doc/tablelistCtext.html.
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Interactive Tablelist Cell Editing Using the ctext Package</h1>

    <h2>For Tablelist Version 7.5</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>







|







9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Interactive Tablelist Cell Editing Using the ctext Package</h1>

    <h2>For Tablelist Version 7.6</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>
Changes to modules/tablelist/doc/tablelistIwidgets.html.
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Interactive Tablelist Cell Editing Using the Iwidgets Package</h1>

    <h2>For Tablelist Version 7.5</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>







|







9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Interactive Tablelist Cell Editing Using the Iwidgets Package</h1>

    <h2>For Tablelist Version 7.6</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>
Changes to modules/tablelist/doc/tablelistMentry.html.
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Interactive Tablelist Cell Editing Using the Mentry Package</h1>

    <h2>For Tablelist Version 7.5</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>







|







9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Interactive Tablelist Cell Editing Using the Mentry Package</h1>

    <h2>For Tablelist Version 7.6</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>
Changes to modules/tablelist/doc/tablelistThemes.html.
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Commands Related to Tile Themes</h1>

    <h2>For Tablelist Version 7.5</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>







|







9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Commands Related to Tile Themes</h1>

    <h2>For Tablelist Version 7.6</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>
Changes to modules/tablelist/doc/tablelistTile.html.
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Interactive Tablelist Cell Editing Using Tile Widgets</h1>

    <h2>For Tablelist Version 7.5</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>







|







9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Interactive Tablelist Cell Editing Using Tile Widgets</h1>

    <h2>For Tablelist Version 7.6</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>
Changes to modules/tablelist/doc/tablelistTkCore.html.
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Interactive Tablelist Cell Editing Using Tk Core Widgets</h1>

    <h2>For Tablelist Version 7.5</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>







|







9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>Interactive Tablelist Cell Editing Using Tk Core Widgets</h1>

    <h2>For Tablelist Version 7.6</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>
Changes to modules/tablelist/doc/tablelistWidget.html.
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>The <code><b>tablelist::tablelist</b></code> Command</h1>

    <h2>For Tablelist Version 7.5</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>







|







10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  <link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>

<body>
  <div>
    <h1>The <code><b>tablelist::tablelist</b></code> Command</h1>

    <h2>For Tablelist Version 7.6</h2>

    <h3>by</h3>

    <h2>Csaba Nemethi</h2>

    <address>
      <a href="mailto:[email protected]">[email protected]</a>
96
97
98
99
100
101
102



103
104




105




106




107




108




109



110
111
112
113
114
115
116

    <dd><code><b><a href="#arrowcolor">-arrowcolor</a></b>
    <i>color</i></code></dd>

    <dd><code><b><a href="#arrowdisabledcolor">-arrowdisabledcolor</a></b>
    <i>color</i></code></dd>




    <dd><code><b><a href="#arrowstyle">-arrowstyle</a></b>
    <b>flat7x4</b>|<b>flat7x7</b>|<b>flat8x4</b>|<b>flat8x5</b>|<b>flat9x5</b>|<b>flat10x5</b>|<br>




    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flat11x6</b>|<b>flat12x6</b>|<b>flat13x7</b>|<b>flat14x7</b>|<b>flat15x8</b>|<b>flat16x8</b>|<br>




    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flatAngle7x4</b>|<b>flatAngle7x5</b>|<b>flatAngle9x5</b>|<b>flatAngle9x6</b>|<br>




    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flatAngle10x6</b>|<b>flatAngle11x6</b>|<b>flatAngle13x7</b>|<b>flatAngle15x8</b>|<br>




    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;photo0x0</b>|<b>photo7x4</b>|<b>photo7x7</b>|<b>photo9x5</b>|<b>photo11x6</b>|<br>




    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;photo13x7</b>|<b>photo15x8</b>|<b>sunken8x7</b>|<b>sunken10x9</b>|<b>sunken12x11</b></code></dd>




    <dd><code><b><a href="#autofinishediting">-autofinishediting</a></b>
    <i>boolean</i></code></dd>

    <dd><code><b><a href="#autoscan">-autoscan</a></b>
    <i>boolean</i></code></dd>








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







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

    <dd><code><b><a href="#arrowcolor">-arrowcolor</a></b>
    <i>color</i></code></dd>

    <dd><code><b><a href="#arrowdisabledcolor">-arrowdisabledcolor</a></b>
    <i>color</i></code></dd>

    <dd>
      <table border="0" cellpadding="0" cellspacing="0">
        <tr>
          <td><code><b><a href="#arrowstyle">-arrowstyle</a></b></code></td>
          <td><code><b>flat7x4</b>|<b>flat7x7</b>|<b>flat8x4</b>|<b>flat8x5</b>|<b>flat9x5</b>|<b>flat10x5</b>|</code></td>
        </tr>

        <tr>
          <td></td>
          <td><code><b>flat11x6</b>|<b>flat12x6</b>|<b>flat13x7</b>|<b>flat14x7</b>|<b>flat15x8</b>|<b>flat16x8</b>|</code></td>
        </tr>

        <tr>
          <td></td>
          <td><code><b>flatAngle7x4</b>|<b>flatAngle7x5</b>|<b>flatAngle9x5</b>|<b>flatAngle9x6</b>|</code></td>
        </tr>

        <tr>
          <td></td>
          <td><code><b>flatAngle10x6</b>|<b>flatAngle11x6</b>|<b>flatAngle13x7</b>|<b>flatAngle15x8</b>|</code></td>
        </tr>

        <tr>
          <td></td>
          <td><code><b>photo0x0</b>|<b>photo7x4</b>|<b>photo7x7</b>|<b>photo9x5</b>|<b>photo11x6</b>|</code></td>
        </tr>

        <tr>
          <td></td>
          <td><code><b>photo13x7</b>|<b>photo15x8</b>|<b>sunken8x7</b>|<b>sunken10x9</b>|<b>sunken12x11</b></code></td>
        </tr>
      </table>
    </dd>

    <dd><code><b><a href="#autofinishediting">-autofinishediting</a></b>
    <i>boolean</i></code></dd>

    <dd><code><b><a href="#autoscan">-autoscan</a></b>
    <i>boolean</i></code></dd>

310
311
312
313
314
315
316



317
318




319




320




321




322




323




324




325



326
327
328
329
330
331
332

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

    <dd><code><b><a href="#treecolumn">-treecolumn</a></b>
    <i>columnIndex</i></code></dd>




    <dd><code><b><a href="#treestyle">-treestyle</a></b>
    <b>adwaita</b>|<b>ambiance</b>|<b>aqua</b>|<b>aqua11</b>|<b>arc</b>|<b>baghira</b>|<b>bicolor</b>|<b>bicolor100</b>|<br>




    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bicolor125</b>|<b>bicolor150</b>|<b>bicolor175</b>|<b>bicolor200</b>|<b>blueMenta</b>|<b>classic</b>|<br>




    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;classic100</b>|<b>classic125</b>|<b>classic150</b>|<b>classic175</b>|<b>classic200</b>|<b>dust</b>|<b>dustSand</b>|<br>




    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gtk</b>|<b>klearlooks</b>|<b>mate</b>|<b>menta</b>|<b>mint</b>|<b>mint2</b>|<b>newWave</b>|<b>oxygen1</b>|<b>oxygen2</b>|<b>phase</b>|<br>




    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plain</b>|<b>plain100</b>|<b>plain125</b>|<b>plain150</b>|<b>plain175</b>|<b>plain200</b>|<b>plastik</b>|<b>plastique</b>|<br>




    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;radiance</b>|<b>ubuntu</b>|<b>ubuntu2</b>|<b>ubuntu3</b>|<b>ubuntuMate</b>|<b>vistaAero</b>|<b>vistaClassic</b>|<br>




    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;white</b>|<b>white100</b>|<b>white125</b>|<b>white150</b>|<b>white175</b>|<b>white200</b>|<b>win7Aero</b>|<br>




    &nbsp;<b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win7Classic</b>|<b>win10</b>|<b>winnative</b>|<b>winxpBlue</b>|<b>winxpOlive</b>|<b>winxpSilver</b>|<b>yuyo</b></code></dd>




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

    <dd><code><b><a href="#xmousewheelwindow">-xmousewheelwindow</a></b>
    <i>window</i></code></dd>

    <dd><code><b><a href="#ymousewheelwindow">-ymousewheelwindow</a></b>







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







336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392

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

    <dd><code><b><a href="#treecolumn">-treecolumn</a></b>
    <i>columnIndex</i></code></dd>

    <dd>
      <table border="0" cellpadding="0" cellspacing="0">
        <tr>
          <td><code><b><a href="#treestyle">-treestyle</a></b></code></td>
          <td><code><b>adwaita</b>|<b>ambiance</b>|<b>aqua</b>|<b>aqua11</b>|<b>arc</b>|<b>baghira</b>|<b>bicolor</b>|<b>bicolor100</b>|</code></td>
        </tr>

        <tr>
          <td></td>
          <td><code><b>bicolor125</b>|<b>bicolor150</b>|<b>bicolor175</b>|<b>bicolor200</b>|<b>blueMenta</b>|<b>classic</b>|</code></td>
        </tr>

        <tr>
          <td></td>
          <td><code><b>classic100</b>|<b>classic125</b>|<b>classic150</b>|<b>classic175</b>|<b>classic200</b>|<b>dust</b>|<b>dustSand</b>|</code></td>
        </tr>

        <tr>
          <td></td>
          <td><code><b>gtk</b>|<b>klearlooks</b>|<b>mate</b>|<b>menta</b>|<b>mint</b>|<b>mint2</b>|<b>newWave</b>|<b>oxygen1</b>|<b>oxygen2</b>|<b>phase</b>|</code></td>
        </tr>

        <tr>
          <td></td>
          <td><code><b>plain100</b>|<b>plain125</b>|<b>plain150</b>|<b>plain175</b>|<b>plain200</b>|<b>plastik</b>|<b>plastique</b>|</code></td>
        </tr>

        <tr>
          <td></td>
          <td><code><b>radiance</b>|<b>ubuntu</b>|<b>ubuntu2</b>|<b>ubuntu3</b>|<b>ubuntuMate</b>|<b>vistaAero</b>|<b>vistaClassic</b>|</code></td>
        </tr>

        <tr>
          <td></td>
          <td><code><b>white</b>|<b>white100</b>|<b>white125</b>|<b>white150</b>|<b>white175</b>|<b>white200</b>|<b>win7Aero</b>|</code></td>
        </tr>

        <tr>
          <td></td>
          <td><code><b>win7Classic</b>|<b>win10</b>|<b>winnative</b>|<b>winxpBlue</b>|<b>winxpOlive</b>|<b>winxpSilver</b>|<b>yuyo</b></code></td>
        </tr>
      </table>
    </dd>

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

    <dd><code><b><a href="#xmousewheelwindow">-xmousewheelwindow</a></b>
    <i>window</i></code></dd>

    <dd><code><b><a href="#ymousewheelwindow">-ymousewheelwindow</a></b>
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
    ctext, Mentry (or Mentry_tile), and Tsw, 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 class="tm">When first created, a new tablelist widget has no
    items.&nbsp; Items (in both the body and the header) may be added, deleted,
    or updated using widget commands described below.&nbsp; In addition, one or
    more items or elements of the widget's body 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 <a href=
    "#isviewable">viewable</a> selected element, joining these elements
    together with tabs, and the resulting strings in turn with newlines.&nbsp;







|
|
|
|
|







1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
    ctext, Mentry (or Mentry_tile), and Tsw, 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 class="tm">When created, a new tablelist widget has no items.&nbsp;
    Items (in both the body and the header) may be added, deleted, or updated
    using widget commands described below.&nbsp; In addition, one or more items
    or elements of the widget's body 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 <a href=
    "#isviewable">viewable</a> selected element, joining these elements
    together with tabs, and the resulting strings in turn with newlines.&nbsp;
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
          <td><code><b>&nbsp;TargetColor</b></code></td>
        </tr>
      </table>

      <blockquote>
        <p>Specifies the color of the gap displayed in the tablelist's body or
        header label area to indicate the target position when moving a row or
        column interactively.&nbsp; The target indicator belonging to the
        tablelist's body can also be displayed explicitly with the aid of the
        <code><b><a href="#showtargetmark">showtargetmark</a></b></code>
        subcommand, and its path name can be retrieved via <code><b><a href=
        "#targetmarkpath">targetmarkpath</a></b></code>.&nbsp; The default
        value is <code><b>black</b></code>.</p>
      </blockquote>
    </dd>








|
|







4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
          <td><code><b>&nbsp;TargetColor</b></code></td>
        </tr>
      </table>

      <blockquote>
        <p>Specifies the color of the gap displayed in the tablelist's body or
        header label area to indicate the target position when moving a row or
        column interactively.&nbsp; The target indicator for the tablelist's
        body can also be displayed explicitly with the aid of the
        <code><b><a href="#showtargetmark">showtargetmark</a></b></code>
        subcommand, and its path name can be retrieved via <code><b><a href=
        "#targetmarkpath">targetmarkpath</a></b></code>.&nbsp; The default
        value is <code><b>black</b></code>.</p>
      </blockquote>
    </dd>

11388
11389
11390
11391
11392
11393
11394
11395
11396
11397
11398
11399
11400
11401
11402
        SUPPORT</a> section for examples of how to use this subcommand during a
        drag & drop operation.</dd>

        <dt class="tm" id="targetmarkpath"><code><i>pathName</i>
        <b>targetmarkpath</b></code></dt>

        <dd>Returns the path name of the drop target indicator (displayed as a
        horizontal gap or vertical bar) belonging to the tablelist's body.</dd>

        <dt class="tm" id="targetmarkpos"><code><i>pathName</i>
        <b>targetmarkpos</b> <i>y</i>
        ?<b>-any</b>|<b>-horizontal</b>|<b>-vertical</b>?</code></dt>

        <dd>Given a y-coordinate within the tablelist window, this command
        returns a two-element list containing the arguments to be passed to the







|







11448
11449
11450
11451
11452
11453
11454
11455
11456
11457
11458
11459
11460
11461
11462
        SUPPORT</a> section for examples of how to use this subcommand during a
        drag & drop operation.</dd>

        <dt class="tm" id="targetmarkpath"><code><i>pathName</i>
        <b>targetmarkpath</b></code></dt>

        <dd>Returns the path name of the drop target indicator (displayed as a
        horizontal gap or vertical bar).</dd>

        <dt class="tm" id="targetmarkpos"><code><i>pathName</i>
        <b>targetmarkpos</b> <i>y</i>
        ?<b>-any</b>|<b>-horizontal</b>|<b>-vertical</b>?</code></dt>

        <dd>Given a y-coordinate within the tablelist window, this command
        returns a two-element list containing the arguments to be passed to the
Changes to modules/tablelist/pkgIndex.tcl.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#==============================================================================
# Tablelist and Tablelist_tile package index file.
#
# Copyright (c) 2000-2025  Csaba Nemethi (E-mail: [email protected])
#==============================================================================

#
# Regular packages:
#
package ifneeded tablelist         7.5 \
	[list source [file join $dir tablelist.tcl]]
package ifneeded tablelist_tile    7.5 \
	[list source [file join $dir tablelist_tile.tcl]]

#
# Aliases:
#
package ifneeded Tablelist         7.5 \
	[list package require -exact tablelist	    7.5]
package ifneeded Tablelist_tile    7.5 \
	[list package require -exact tablelist_tile 7.5]

#
# Code common to all packages:
#
package ifneeded tablelist::common 7.5 \
	[list source [file join $dir tablelistCommon.tcl]]









|

|





|
|
|
|




|

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#==============================================================================
# Tablelist and Tablelist_tile package index file.
#
# Copyright (c) 2000-2025  Csaba Nemethi (E-mail: [email protected])
#==============================================================================

#
# Regular packages:
#
package ifneeded tablelist         7.6 \
	[list source [file join $dir tablelist.tcl]]
package ifneeded tablelist_tile    7.6 \
	[list source [file join $dir tablelist_tile.tcl]]

#
# Aliases:
#
package ifneeded Tablelist         7.6 \
	[list package require -exact tablelist	    7.6]
package ifneeded Tablelist_tile    7.6 \
	[list package require -exact tablelist_tile 7.6]

#
# Code common to all packages:
#
package ifneeded tablelist::common 7.6 \
	[list source [file join $dir tablelistCommon.tcl]]
Changes to modules/tablelist/scripts/tablelistBind.tcl.
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
# the mouse leaves the area obtained by trimming the scrollable part of a
# tablelist widget's body text child on each side by (scaled) 4 px.  It scrolls
# the child up, down, left, or right, depending on where the mouse left that
# area, and reschedules itself as an "after" command so that the child
# continues to scroll until the mouse moves back into that area or no more
# scrolling in that direction is possible.
#------------------------------------------------------------------------------
proc tablelist::autoScan2 {win seqNum} {
    if {[destroyed $win]} {
	return ""
    }

    if {$seqNum < 10} {
	set units 1
    } elseif {$seqNum < 20} {







|







2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
# the mouse leaves the area obtained by trimming the scrollable part of a
# tablelist widget's body text child on each side by (scaled) 4 px.  It scrolls
# the child up, down, left, or right, depending on where the mouse left that
# area, and reschedules itself as an "after" command so that the child
# continues to scroll until the mouse moves back into that area or no more
# scrolling in that direction is possible.
#------------------------------------------------------------------------------
proc tablelist::autoScan2 {win margin seqNum} {
    if {[destroyed $win]} {
	return ""
    }

    if {$seqNum < 10} {
	set units 1
    } elseif {$seqNum < 20} {
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
    }

    upvar ::tablelist::ns${win}::data data
    set w [::$win bodypath]
    set x [expr {$data(x) - [winfo x $w]}]		;# relative to the body
    set y [expr {$data(y) - [winfo y $w]}]		;# relative to the body

    variable scaled4
    set minX [expr {[minScrollableX $win] + $scaled4}]	;# relative to the body
    set minY $scaled4					;# relative to the body
    set maxX [expr {[winfo width  $w] - 1 - $scaled4}]	;# relative to the body
    set maxY [expr {[winfo height $w] - 1 - $scaled4}]	;# relative to the body

    if {$y > $maxY} {
	foreach {first last} [::$win yview] {}
	if {$last == 1} {
	    return ""
	} else {
	    ::$win yview scroll $units units







<
|
|
|
|







2032
2033
2034
2035
2036
2037
2038

2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
    }

    upvar ::tablelist::ns${win}::data data
    set w [::$win bodypath]
    set x [expr {$data(x) - [winfo x $w]}]		;# relative to the body
    set y [expr {$data(y) - [winfo y $w]}]		;# relative to the body


    set minX [expr {[minScrollableX $win] + $margin}]	;# relative to the body
    set minY $margin					;# relative to the body
    set maxX [expr {[winfo width  $w] - 1 - $margin}]	;# relative to the body
    set maxY [expr {[winfo height $w] - 1 - $margin}]	;# relative to the body

    if {$y > $maxY} {
	foreach {first last} [::$win yview] {}
	if {$last == 1} {
	    return ""
	} else {
	    ::$win yview scroll $units units
2081
2082
2083
2084
2085
2086
2087

2088

2089
2090
2091
2092
2093
2094
2095
	    set ms 500
	}
    } else {
	return ""
    }

    incr seqNum

    set data(afterId2) [after $ms [list tablelist::autoScan2 $win $seqNum]]

}

#------------------------------------------------------------------------------
# tablelist::motion
#
# This procedure is called to process mouse motion events in the body of a
# tablelist widget or in one of its separators, while button 1 is down.  It may







>
|
>







2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
	    set ms 500
	}
    } else {
	return ""
    }

    incr seqNum
    set data(afterId2) \
	[after $ms [list tablelist::autoScan2 $win $margin $seqNum]]
    update
}

#------------------------------------------------------------------------------
# tablelist::motion
#
# This procedure is called to process mouse motion events in the body of a
# tablelist widget or in one of its separators, while button 1 is down.  It may
2313
2314
2315
2316
2317
2318
2319

2320
2321

2322
2323
2324
2325
2326
2327
2328
2329
2330
2331

	unset data(targetRow)
	unset data(targetChildIdx)
	$w configure -cursor $data(-cursor)
	place forget $data(rowGap)
    } else {
	$w configure -cursor $data(-movecursor)

	if {$data(targetChildIdx) == 0} {
	    place $data(rowGap) -anchor w -y $gapY -height $lineHeight -width 6

	} else {
	    variable scaled4
	    place $data(rowGap) -anchor w -y $gapY -height $scaled4 \
				-width [winfo width $data(hdrTxtFrm)]
	}
	raise $data(rowGap)
    }
}

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







>

|
>

<
|







2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325

2326
2327
2328
2329
2330
2331
2332
2333

	unset data(targetRow)
	unset data(targetChildIdx)
	$w configure -cursor $data(-cursor)
	place forget $data(rowGap)
    } else {
	$w configure -cursor $data(-movecursor)
	variable scaled4
	if {$data(targetChildIdx) == 0} {
	    place $data(rowGap) -in $w -anchor w -y $gapY -height $lineHeight \
				-width $scaled4
	} else {

	    place $data(rowGap) -in $w -anchor w -y $gapY -height $scaled4 \
				-width [winfo width $data(hdrTxtFrm)]
	}
	raise $data(rowGap)
    }
}

#------------------------------------------------------------------------------
Changes to modules/tablelist/scripts/tablelistConfig.tcl.
2402
2403
2404
2405
2406
2407
2408

2409
2410
2411
2412
2413
2414
2415
			set snipSide ""
		    }
		    adjustMlElem $win list auxWidth indentWidth $cellFont \
				 $workPixels $snipSide $data(-snipstring)
		    set msgScript [list ::tablelist::displayText $win $key \
				   $col [join $list "\n"] $cellFont \
				   $maxTextWidth $alignment]

		} else {
		    adjustElem $win text auxWidth indentWidth $cellFont \
			       $workPixels $snipSide $data(-snipstring)
		}

		if {$inBody &&
		    $row == $data(editRow) && $col == $data(editCol)} {







>







2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
			set snipSide ""
		    }
		    adjustMlElem $win list auxWidth indentWidth $cellFont \
				 $workPixels $snipSide $data(-snipstring)
		    set msgScript [list ::tablelist::displayText $win $key \
				   $col [join $list "\n"] $cellFont \
				   $maxTextWidth $alignment]
		    set msgScript [string map {"%" "%%"} $msgScript]
		} else {
		    adjustElem $win text auxWidth indentWidth $cellFont \
			       $workPixels $snipSide $data(-snipstring)
		}

		if {$inBody &&
		    $row == $data(editRow) && $col == $data(editCol)} {
2755
2756
2757
2758
2759
2760
2761

2762
2763
2764
2765
2766
2767
2768
			set snipSide ""
		    }
		    adjustMlElem $win list auxWidth indentWidth $cellFont \
				 $workPixels $snipSide $data(-snipstring)
		    set msgScript [list ::tablelist::displayText $win $key \
				   $col [join $list "\n"] $cellFont \
				   $maxTextWidth $alignment]

		} else {
		    adjustElem $win text auxWidth indentWidth $cellFont \
			       $workPixels $snipSide $data(-snipstring)
		}

		if {!$inBody ||
		    $row != $data(editRow) || $col != $data(editCol)} {







>







2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
			set snipSide ""
		    }
		    adjustMlElem $win list auxWidth indentWidth $cellFont \
				 $workPixels $snipSide $data(-snipstring)
		    set msgScript [list ::tablelist::displayText $win $key \
				   $col [join $list "\n"] $cellFont \
				   $maxTextWidth $alignment]
		    set msgScript [string map {"%" "%%"} $msgScript]
		} else {
		    adjustElem $win text auxWidth indentWidth $cellFont \
			       $workPixels $snipSide $data(-snipstring)
		}

		if {!$inBody ||
		    $row != $data(editRow) || $col != $data(editCol)} {
3071
3072
3073
3074
3075
3076
3077

3078
3079
3080
3081
3082
3083
3084
		    set snipSide ""
		}
		adjustMlElem $win list auxWidth indentWidth $cellFont \
			     $workPixels $snipSide $data(-snipstring)
		set msgScript [list ::tablelist::displayText $win $key \
			       $col [join $list "\n"] $cellFont \
			       $maxTextWidth $alignment]

	    } else {
		adjustElem $win text auxWidth indentWidth $cellFont \
			   $workPixels $snipSide $data(-snipstring)
	    }

	    if {!$data($col-hide)} {
		if {$inBody &&







>







3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
		    set snipSide ""
		}
		adjustMlElem $win list auxWidth indentWidth $cellFont \
			     $workPixels $snipSide $data(-snipstring)
		set msgScript [list ::tablelist::displayText $win $key \
			       $col [join $list "\n"] $cellFont \
			       $maxTextWidth $alignment]
		set msgScript [string map {"%" "%%"} $msgScript]
	    } else {
		adjustElem $win text auxWidth indentWidth $cellFont \
			   $workPixels $snipSide $data(-snipstring)
	    }

	    if {!$data($col-hide)} {
		if {$inBody &&
3240
3241
3242
3243
3244
3245
3246

3247
3248
3249
3250
3251
3252
3253
		    set snipSide ""
		}
		adjustMlElem $win list auxWidth indentWidth $cellFont \
			     $workPixels $snipSide $data(-snipstring)
		set msgScript [list ::tablelist::displayText $win $key \
			       $col [join $list "\n"] $cellFont \
			       $maxTextWidth $alignment]

	    } else {
		adjustElem $win text auxWidth indentWidth $cellFont \
			   $workPixels $snipSide $data(-snipstring)
	    }

	    if {!$inBody || $row != $data(editRow) || $col != $data(editCol)} {
		#







>







3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
		    set snipSide ""
		}
		adjustMlElem $win list auxWidth indentWidth $cellFont \
			     $workPixels $snipSide $data(-snipstring)
		set msgScript [list ::tablelist::displayText $win $key \
			       $col [join $list "\n"] $cellFont \
			       $maxTextWidth $alignment]
		set msgScript [string map {"%" "%%"} $msgScript]
	    } else {
		adjustElem $win text auxWidth indentWidth $cellFont \
			   $workPixels $snipSide $data(-snipstring)
	    }

	    if {!$inBody || $row != $data(editRow) || $col != $data(editCol)} {
		#
3408
3409
3410
3411
3412
3413
3414

3415
3416
3417
3418
3419
3420
3421
		    set snipSide ""
		}
		adjustMlElem $win list auxWidth indentWidth $cellFont \
			     $workPixels $snipSide $data(-snipstring)
		set msgScript [list ::tablelist::displayText $win $key \
			       $col [join $list "\n"] $cellFont \
			       $maxTextWidth $alignment]

	    } else {
		adjustElem $win text auxWidth indentWidth $cellFont \
			   $workPixels $snipSide $data(-snipstring)
	    }

	    if {$row != $data(editRow) || $col != $data(editCol)} {
		#







>







3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
		    set snipSide ""
		}
		adjustMlElem $win list auxWidth indentWidth $cellFont \
			     $workPixels $snipSide $data(-snipstring)
		set msgScript [list ::tablelist::displayText $win $key \
			       $col [join $list "\n"] $cellFont \
			       $maxTextWidth $alignment]
		set msgScript [string map {"%" "%%"} $msgScript]
	    } else {
		adjustElem $win text auxWidth indentWidth $cellFont \
			   $workPixels $snipSide $data(-snipstring)
	    }

	    if {$row != $data(editRow) || $col != $data(editCol)} {
		#
3561
3562
3563
3564
3565
3566
3567

3568
3569
3570
3571
3572
3573
3574
		    set snipSide ""
		}
		adjustMlElem $win list auxWidth indentWidth $cellFont \
			     $pixels $snipSide $data(-snipstring)
		set msgScript [list ::tablelist::displayText $win $key $row \
			       [join $list "\n"] $cellFont \
			       $maxTextWidth $alignment]

	    } else {
		adjustElem $win text auxWidth indentWidth $cellFont \
			   $pixels $snipSide $data(-snipstring)
	    }

	    #
	    # Update the text widget's content between the two tabs







>







3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
		    set snipSide ""
		}
		adjustMlElem $win list auxWidth indentWidth $cellFont \
			     $pixels $snipSide $data(-snipstring)
		set msgScript [list ::tablelist::displayText $win $key $row \
			       [join $list "\n"] $cellFont \
			       $maxTextWidth $alignment]
		set msgScript [string map {"%" "%%"} $msgScript]
	    } else {
		adjustElem $win text auxWidth indentWidth $cellFont \
			   $pixels $snipSide $data(-snipstring)
	    }

	    #
	    # Update the text widget's content between the two tabs
3653
3654
3655
3656
3657
3658
3659

3660
3661
3662
3663
3664
3665
3666
		    set snipSide ""
		}
		adjustMlElem $win list auxWidth indentWidth $cellFont \
			     $workPixels $snipSide $data(-snipstring)
		set msgScript [list ::tablelist::displayText $win $key \
			       $col [join $list "\n"] $cellFont \
			       $maxTextWidth $alignment]

	    } else {
		adjustElem $win text auxWidth indentWidth $cellFont \
			   $workPixels $snipSide $data(-snipstring)
	    }

	    if {!$inBody || $row != $data(editRow) || $col != $data(editCol)} {
		#







>







3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
		    set snipSide ""
		}
		adjustMlElem $win list auxWidth indentWidth $cellFont \
			     $workPixels $snipSide $data(-snipstring)
		set msgScript [list ::tablelist::displayText $win $key \
			       $col [join $list "\n"] $cellFont \
			       $maxTextWidth $alignment]
		set msgScript [string map {"%" "%%"} $msgScript]
	    } else {
		adjustElem $win text auxWidth indentWidth $cellFont \
			   $workPixels $snipSide $data(-snipstring)
	    }

	    if {!$inBody || $row != $data(editRow) || $col != $data(editCol)} {
		#
3902
3903
3904
3905
3906
3907
3908

3909
3910
3911
3912
3913
3914
3915
		    set snipSide ""
		}
		adjustMlElem $win list auxWidth indentWidth $cellFont \
			     $workPixels $snipSide $data(-snipstring)
		set msgScript [list ::tablelist::displayText $win $key \
			       $col [join $list "\n"] $cellFont \
			       $maxTextWidth $alignment]

	    } else {
		adjustElem $win text auxWidth indentWidth $cellFont \
			   $workPixels $snipSide $data(-snipstring)
	    }

	    if {!$inBody || $row != $data(editRow) || $col != $data(editCol)} {
		#







>







3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
		    set snipSide ""
		}
		adjustMlElem $win list auxWidth indentWidth $cellFont \
			     $workPixels $snipSide $data(-snipstring)
		set msgScript [list ::tablelist::displayText $win $key \
			       $col [join $list "\n"] $cellFont \
			       $maxTextWidth $alignment]
		set msgScript [string map {"%" "%%"} $msgScript]
	    } else {
		adjustElem $win text auxWidth indentWidth $cellFont \
			   $workPixels $snipSide $data(-snipstring)
	    }

	    if {!$inBody || $row != $data(editRow) || $col != $data(editCol)} {
		#
Changes to modules/tablelist/scripts/tablelistEdit.tcl.
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
# menubutton's text.
#------------------------------------------------------------------------------
proc tablelist::postMenuCmd w {
    set menu [$w cget -menu]
    variable winSys
    if {$winSys eq "x11"} {
	set last [$menu index last]
	if {$last ne "none"} {
	    set text [$w cget -text]
	    for {set idx 0} {$idx <= $last} {incr idx} {
		if {[$menu type $idx] eq "radiobutton" &&
		    [$menu entrycget $idx -value] eq $text} {
		    $menu activate $idx
		}
	    }







|







1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
# menubutton's text.
#------------------------------------------------------------------------------
proc tablelist::postMenuCmd w {
    set menu [$w cget -menu]
    variable winSys
    if {$winSys eq "x11"} {
	set last [$menu index last]
	if {$last ne "" && $last ne "none"} {
	    set text [$w cget -text]
	    for {set idx 0} {$idx <= $last} {incr idx} {
		if {[$menu type $idx] eq "radiobutton" &&
		    [$menu entrycget $idx -value] eq $text} {
		    $menu activate $idx
		}
	    }
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
		      $editWin($name-putValueCmd)]
	    }
	}

	if {$isMenubtn} {
	    set menu [$w cget -menu]
	    set last [$menu index last]
	    if {$last ne "none"} {
		set varName [$w cget -textvariable]
		for {set idx 0} {$idx <= $last} {incr idx} {
		    if {[$menu type $idx] eq "radiobutton"} {
			$menu entryconfigure $idx -variable $varName
		    }
		}
	    }







|







1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
		      $editWin($name-putValueCmd)]
	    }
	}

	if {$isMenubtn} {
	    set menu [$w cget -menu]
	    set last [$menu index last]
	    if {$last ne "" && $last ne "none"} {
		set varName [$w cget -textvariable]
		for {set idx 0} {$idx <= $last} {incr idx} {
		    if {[$menu type $idx] eq "radiobutton"} {
			$menu entryconfigure $idx -variable $varName
		    }
		}
	    }
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
	    }
	}

	Menubutton -
	TMenubutton {
	    set menu [$w cget -menu]
	    set last [$menu index last]
	    if {$last ne "none"} {
		for {set idx 0} {$idx <= $last} {incr idx} {
		    if {[regexp {^(command|checkbutton|radiobutton)$} \
			 [$menu type $idx]]} {
			set cmd [$menu entrycget $idx -command]
			$menu entryconfigure $idx -command [format {
			    eval [list %s]
			    after 0 [list %s finishediting]







|







2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
	    }
	}

	Menubutton -
	TMenubutton {
	    set menu [$w cget -menu]
	    set last [$menu index last]
	    if {$last ne "" && $last ne "none"} {
		for {set idx 0} {$idx <= $last} {incr idx} {
		    if {[regexp {^(command|checkbutton|radiobutton)$} \
			 [$menu type $idx]]} {
			set cmd [$menu entrycget $idx -command]
			$menu entryconfigure $idx -command [format {
			    eval [list %s]
			    after 0 [list %s finishediting]
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
    }

    if {[string match "*Menubutton" [winfo class $w]]} {
	set menu [$w cget -menu]
	set last [$menu index last]
	set types {}

	if {$last ne "none"} {
	    for {set idx 0} {$idx <= $last} {incr idx} {
		lappend types [$menu type $idx]
		foreach configSet [$menu entryconfigure $idx] {
		    set default [lindex $configSet 3]
		    set current [lindex $configSet 4]
		    if {$default ne $current} {
			set opt [lindex $configSet 0]







|







2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
    }

    if {[string match "*Menubutton" [winfo class $w]]} {
	set menu [$w cget -menu]
	set last [$menu index last]
	set types {}

	if {$last ne "" && $last ne "none"} {
	    for {set idx 0} {$idx <= $last} {incr idx} {
		lappend types [$menu type $idx]
		foreach configSet [$menu entryconfigure $idx] {
		    set default [lindex $configSet 3]
		    set current [lindex $configSet 4]
		    if {$default ne $current} {
			set opt [lindex $configSet 0]
Changes to modules/tablelist/scripts/tablelistSort.tcl.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#==============================================================================
# Contains the implementation of the tablelist::sortByColumn and
# tablelist::addToSortColumns commands, as well as of the tablelist sort,
# sortbycolumn, and sortbycolumnlist subcommands.
#
# Structure of the module:
#   - Public procedures related to sorting
#   - Private procedures implementing the sorting
#
# Copyright (c) 2000-2024  Csaba Nemethi (E-mail: [email protected])
#==============================================================================

#
# Public procedures related to sorting
# ====================================
#










|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#==============================================================================
# Contains the implementation of the tablelist::sortByColumn and
# tablelist::addToSortColumns commands, as well as of the tablelist sort,
# sortbycolumn, and sortbycolumnlist subcommands.
#
# Structure of the module:
#   - Public procedures related to sorting
#   - Private procedures implementing the sorting
#
# Copyright (c) 2000-2025  Csaba Nemethi (E-mail: [email protected])
#==============================================================================

#
# Public procedures related to sorting
# ====================================
#

487
488
489
490
491
492
493

494
495
496
497
498
499
500
	    #
	    # Embed the message widgets displaying multiline elements
	    #
	    foreach {col text font pixels alignment} $multilineData {
		findTabs $win $w $line $col $col tabIdx1 tabIdx2
		set msgScript [list ::tablelist::displayText $win $key \
			       $col $text $font $pixels $alignment]

		$w window create $tabIdx2 -pady $padY -create $msgScript
		$w tag add elidedWin $tabIdx2
	    }

	} else {
	    foreach text $dispItem \
		    colFont $data(colFontList) \







>







487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
	    #
	    # Embed the message widgets displaying multiline elements
	    #
	    foreach {col text font pixels alignment} $multilineData {
		findTabs $win $w $line $col $col tabIdx1 tabIdx2
		set msgScript [list ::tablelist::displayText $win $key \
			       $col $text $font $pixels $alignment]
		set msgScript [string map {"%" "%%"} $msgScript]
		$w window create $tabIdx2 -pady $padY -create $msgScript
		$w tag add elidedWin $tabIdx2
	    }

	} else {
	    foreach text $dispItem \
		    colFont $data(colFontList) \
Changes to modules/tablelist/scripts/tablelistUtil.tcl.
1925
1926
1927
1928
1929
1930
1931

1932
1933
1934
1935
1936
1937
1938
	set padY [expr {[$w cget -spacing1] == 0}]
	if {[catch {$w window cget $index1 -create} script] == 0 &&
	    [string match "::tablelist::displayText*" $script]} {
	    $w window configure $index1 -pady $padY -create $msgScript

	    set path [lindex [$w dump -window $index1] 1]
	    if {$path ne "" && [winfo class $path] eq "Message"} {

		eval $msgScript
	    }
	} else {
	    if {!$areEqual} {
		$w delete $index1
	    }
	    $w window create $index1 -pady $padY -create $msgScript







>







1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
	set padY [expr {[$w cget -spacing1] == 0}]
	if {[catch {$w window cget $index1 -create} script] == 0 &&
	    [string match "::tablelist::displayText*" $script]} {
	    $w window configure $index1 -pady $padY -create $msgScript

	    set path [lindex [$w dump -window $index1] 1]
	    if {$path ne "" && [winfo class $path] eq "Message"} {
		set msgScript [string map {"%%" "%"} $msgScript]
		eval $msgScript
	    }
	} else {
	    if {!$areEqual} {
		$w delete $index1
	    }
	    $w window create $index1 -pady $padY -create $msgScript
2016
2017
2018
2019
2020
2021
2022

2023
2024
2025
2026
2027
2028
2029
	    set padY [expr {[$w cget -spacing1] == 0}]
	    if {[catch {$w window cget $msgIdx -create} script] == 0 &&
		[string match "::tablelist::displayText*" $script]} {
		$w window configure $msgIdx -pady $padY -create $msgScript

		set path [lindex [$w dump -window $msgIdx] 1]
		if {$path ne "" && [winfo class $path] eq "Message"} {

		    eval $msgScript
		}
	    } elseif {$alignment eq "right"} {
		$w window create index2Mark-1$pu -pady $padY -create $msgScript
		$w tag add elidedWin index2Mark-1$pu
		$w delete $index1 index2Mark-2$pu
	    } else {







>







2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
	    set padY [expr {[$w cget -spacing1] == 0}]
	    if {[catch {$w window cget $msgIdx -create} script] == 0 &&
		[string match "::tablelist::displayText*" $script]} {
		$w window configure $msgIdx -pady $padY -create $msgScript

		set path [lindex [$w dump -window $msgIdx] 1]
		if {$path ne "" && [winfo class $path] eq "Message"} {
		    set msgScript [string map {"%%" "%"} $msgScript]
		    eval $msgScript
		}
	    } elseif {$alignment eq "right"} {
		$w window create index2Mark-1$pu -pady $padY -create $msgScript
		$w tag add elidedWin index2Mark-1$pu
		$w delete $index1 index2Mark-2$pu
	    } else {
2137
2138
2139
2140
2141
2142
2143

2144
2145
2146
2147
2148
2149
2150
	if {$data($col-wrap)} {
	    set snipSide ""
	}
	adjustMlElem $win list auxWidth indentWidth $cellFont $pixels \
		     $snipSide $snipStr
	set msgScript [list ::tablelist::displayText $win $key $col \
		       [join $list "\n"] $cellFont $maxTextWidth $alignment]

    } else {
	adjustElem $win text auxWidth indentWidth $cellFont $pixels \
		   $snipSide $snipStr
    }

    #
    # Insert the text and the auxiliary object (if any) just before the newline







>







2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
	if {$data($col-wrap)} {
	    set snipSide ""
	}
	adjustMlElem $win list auxWidth indentWidth $cellFont $pixels \
		     $snipSide $snipStr
	set msgScript [list ::tablelist::displayText $win $key $col \
		       [join $list "\n"] $cellFont $maxTextWidth $alignment]
	set msgScript [string map {"%" "%%"} $msgScript]
    } else {
	adjustElem $win text auxWidth indentWidth $cellFont $pixels \
		   $snipSide $snipStr
    }

    #
    # Insert the text and the auxiliary object (if any) just before the newline
4994
4995
4996
4997
4998
4999
5000

5001
5002
5003
5004
5005
5006
5007
	    #
	    # Embed the message widgets displaying multiline elements
	    #
	    foreach {col text font pixels alignment} $multilineData {
		if {[findTabs $win $w $line $col $col tabIdx1 tabIdx2]} {
		    set msgScript [list ::tablelist::displayText $win $key \
				   $col $text $font $pixels $alignment]

		    $w window create $tabIdx2 -pady $padY -create $msgScript
		    $w tag add elidedWin $tabIdx2
		}
	    }

	} else {
	    foreach fmtCmdFlag $data(fmtCmdFlagList) \







>







4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
	    #
	    # Embed the message widgets displaying multiline elements
	    #
	    foreach {col text font pixels alignment} $multilineData {
		if {[findTabs $win $w $line $col $col tabIdx1 tabIdx2]} {
		    set msgScript [list ::tablelist::displayText $win $key \
				   $col $text $font $pixels $alignment]
		    set msgScript [string map {"%" "%%"} $msgScript]
		    $w window create $tabIdx2 -pady $padY -create $msgScript
		    $w tag add elidedWin $tabIdx2
		}
	    }

	} else {
	    foreach fmtCmdFlag $data(fmtCmdFlagList) \
5348
5349
5350
5351
5352
5353
5354

5355
5356
5357
5358
5359
5360
5361
	    if {$data($col-wrap)} {
		set snipSide2 ""
	    }
	    adjustMlElem $win list auxWidth indentWidth $cellFont \
			 $pixels $snipSide2 $snipStr
	    set msgScript [list ::tablelist::displayText $win $key $col \
			   [join $list "\n"] $cellFont $maxTextWidth $alignment]

	} else {
	    adjustElem $win text auxWidth indentWidth $cellFont \
		       $pixels $snipSide $snipStr
	}

	#
	# Update the text widget's content between the two tabs







>







5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
	    if {$data($col-wrap)} {
		set snipSide2 ""
	    }
	    adjustMlElem $win list auxWidth indentWidth $cellFont \
			 $pixels $snipSide2 $snipStr
	    set msgScript [list ::tablelist::displayText $win $key $col \
			   [join $list "\n"] $cellFont $maxTextWidth $alignment]
	    set msgScript [string map {"%" "%%"} $msgScript]
	} else {
	    adjustElem $win text auxWidth indentWidth $cellFont \
		       $pixels $snipSide $snipStr
	}

	#
	# Update the text widget's content between the two tabs
5454
5455
5456
5457
5458
5459
5460

5461
5462
5463
5464
5465
5466
5467
	    if {$data($col-wrap)} {
		set snipSide2 ""
	    }
	    adjustMlElem $win list auxWidth indentWidth $cellFont \
			 $pixels $snipSide2 $snipStr
	    set msgScript [list ::tablelist::displayText $win $key $col \
			   [join $list "\n"] $cellFont $maxTextWidth $alignment]

	} else {
	    adjustElem $win text auxWidth indentWidth $cellFont \
		       $pixels $snipSide $snipStr
	}

	#
	# Update the text widget's content between the two tabs







>







5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
	    if {$data($col-wrap)} {
		set snipSide2 ""
	    }
	    adjustMlElem $win list auxWidth indentWidth $cellFont \
			 $pixels $snipSide2 $snipStr
	    set msgScript [list ::tablelist::displayText $win $key $col \
			   [join $list "\n"] $cellFont $maxTextWidth $alignment]
	    set msgScript [string map {"%" "%%"} $msgScript]
	} else {
	    adjustElem $win text auxWidth indentWidth $cellFont \
		       $pixels $snipSide $snipStr
	}

	#
	# Update the text widget's content between the two tabs
Changes to modules/tablelist/scripts/tablelistWidget.tcl.
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941

942
943
944
945
946
947
948
    set data(bodyTag)		body$win
    set data(headerTag)		header$win
    set data(labelTag)		label$win
    set data(editwinTag)	editwin$win
    set data(body)		$win.body
    set data(bodyFrm)		$data(body).f
    set data(bodyFrmEd)		$data(bodyFrm).e
    set data(rowGap)		$data(body).g
    set data(hdr)		$win.hdr
    set data(hdrTxt)		$data(hdr).t
    set data(hdrTxtFrm)		$data(hdrTxt).f
    set data(hdrTxtFrmFrm)	$data(hdrTxtFrm).f	;# for the aqua theme
    set data(hdrTxtFrmCanv)	$data(hdrTxtFrm).c
    set data(hdrTxtFrmLbl)	$data(hdrTxtFrm).l
    set data(hdrFrm)		$data(hdr).f
    set data(hdrFrmFrm)		$data(hdrFrm).f		;# for the aqua theme
    set data(hdrFrmLbl)		$data(hdrFrm).l
    set data(colGap)		$data(hdr).g

    set data(lb)		$win.lb
    set data(vsep)		$win.vsep
    set data(hsep)		$win.hsep
    set data(topWin)		[winfo toplevel $win]

    #
    # Get unique names for the north-east and south-west corner







<










>







924
925
926
927
928
929
930

931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
    set data(bodyTag)		body$win
    set data(headerTag)		header$win
    set data(labelTag)		label$win
    set data(editwinTag)	editwin$win
    set data(body)		$win.body
    set data(bodyFrm)		$data(body).f
    set data(bodyFrmEd)		$data(bodyFrm).e

    set data(hdr)		$win.hdr
    set data(hdrTxt)		$data(hdr).t
    set data(hdrTxtFrm)		$data(hdrTxt).f
    set data(hdrTxtFrmFrm)	$data(hdrTxtFrm).f	;# for the aqua theme
    set data(hdrTxtFrmCanv)	$data(hdrTxtFrm).c
    set data(hdrTxtFrmLbl)	$data(hdrTxtFrm).l
    set data(hdrFrm)		$data(hdr).f
    set data(hdrFrmFrm)		$data(hdrFrm).f		;# for the aqua theme
    set data(hdrFrmLbl)		$data(hdrFrm).l
    set data(colGap)		$data(hdr).g
    set data(rowGap)		$win.g
    set data(lb)		$win.lb
    set data(vsep)		$win.vsep
    set data(hsep)		$win.hsep
    set data(topWin)		[winfo toplevel $win]

    #
    # Get unique names for the north-east and south-west corner
1350
1351
1352
1353
1354
1355
1356

1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
    set wY [winfo y $w]
    incr x -$wX						;# relative to the body
    incr y -$wY						;# relative to the body
    incr prevX -$wX					;# relative to the body
    incr prevY -$wY					;# relative to the body

    variable scaled4

    set minX [expr {[minScrollableX $win] + $scaled4}]	;# relative to the body
    set minY $scaled4					;# relative to the body
    set maxX [expr {[winfo width  $w] - 1 - $scaled4}]	;# relative to the body
    set maxY [expr {[winfo height $w] - 1 - $scaled4}]	;# relative to the body

    if {($y > $maxY && $prevY <= $maxY) ||
	($y < $minY && $prevY >= $minY) ||
	($x > $maxX && $prevX <= $maxX) ||
	($x < $minX && $prevX >= $minX)} {
	autoScan2 $win 0
    } elseif {($y <= $maxY && $prevY > $maxY) ||
	      ($y >= $minY && $prevY < $minY) ||
	      ($x <= $maxX && $prevX > $maxX) ||
	      ($x >= $minX && $prevX < $minX)} {
	after cancel $data(afterId2)
    }








>
|
|
|
|





|







1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
    set wY [winfo y $w]
    incr x -$wX						;# relative to the body
    incr y -$wY						;# relative to the body
    incr prevX -$wX					;# relative to the body
    incr prevY -$wY					;# relative to the body

    variable scaled4
    set margin [expr {3 * $scaled4}]
    set minX [expr {[minScrollableX $win] + $margin}]	;# relative to the body
    set minY $margin					;# relative to the body
    set maxX [expr {[winfo width  $w] - 1 - $margin}]	;# relative to the body
    set maxY [expr {[winfo height $w] - 1 - $margin}]	;# relative to the body

    if {($y > $maxY && $prevY <= $maxY) ||
	($y < $minY && $prevY >= $minY) ||
	($x > $maxX && $prevX <= $maxX) ||
	($x < $minX && $prevX >= $minX)} {
	autoScan2 $win $margin 0
    } elseif {($y <= $maxY && $prevY > $maxY) ||
	      ($y >= $minY && $prevY < $minY) ||
	      ($x <= $maxX && $prevX > $maxX) ||
	      ($x >= $minX && $prevX < $minX)} {
	after cancel $data(afterId2)
    }

2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
    foreach item $data(itemList) {
	set key [lindex $item end]
	lappend parentList [keyToRow $win $data($key-parent)]
	lappend itemList [lrange $item 0 $lastCol]
    }

    set str ""
    append str [string map {\n \\n} [::$win cget -columntitles]] \n
    append str [list [::$win sortcolumnlist] [::$win sortorderlist]] \n
    append str [string map {\n \\n} $hdr_itemList] \n
    append str $parentList \n
    append str $itemList
    return $str
}

#------------------------------------------------------------------------------
# tablelist::editcellSubCmd







|

|







2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
    foreach item $data(itemList) {
	set key [lindex $item end]
	lappend parentList [keyToRow $win $data($key-parent)]
	lappend itemList [lrange $item 0 $lastCol]
    }

    set str ""
    append str [string map {"\n" "\\n"} [::$win cget -columntitles]] \n
    append str [list [::$win sortcolumnlist] [::$win sortorderlist]] \n
    append str [string map {"\n" "\\n"} $hdr_itemList] \n
    append str $parentList \n
    append str $itemList
    return $str
}

#------------------------------------------------------------------------------
# tablelist::editcellSubCmd
4767
4768
4769
4770
4771
4772
4773


4774





4775
4776
4777
4778
4779
4780
4781
#------------------------------------------------------------------------------
proc tablelist::hidetargetmarkSubCmd {win argList} {
    if {[llength $argList] != 0} {
	mwutil::wrongNumArgs "$win hidetargetmark"
    }

    upvar ::tablelist::ns${win}::data data


    place forget $data(rowGap)





    return ""
}

#------------------------------------------------------------------------------
# tablelist::imagelabelpathSubCmd
#------------------------------------------------------------------------------
proc tablelist::imagelabelpathSubCmd {win argList} {







>
>
|
>
>
>
>
>







4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
#------------------------------------------------------------------------------
proc tablelist::hidetargetmarkSubCmd {win argList} {
    if {[llength $argList] != 0} {
	mwutil::wrongNumArgs "$win hidetargetmark"
    }

    upvar ::tablelist::ns${win}::data data
    if {[winfo ismapped $data(rowGap)]} {
	lower $data(rowGap)
	place forget $data(rowGap)

	place $data(rowGap) -in $data(body) -anchor w -height 1 -width 1
	tkwait visibility $data(rowGap)		;# instead of invoking update
    }

    return ""
}

#------------------------------------------------------------------------------
# tablelist::imagelabelpathSubCmd
#------------------------------------------------------------------------------
proc tablelist::imagelabelpathSubCmd {win argList} {
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
    } else {
	variable expCollOpts
	set opt [mwutil::fullOpt "option" [lindex $argList 1] $expCollOpts]
    }

    set idx [string first \n $str]
    set line [string range $str 0 [expr {$idx - 1}]]
    set columnTitles [string map {\\n \n} $line]
    if {$columnTitles ne [::$win cget -columntitles]} {
	return -code error \
	    "the specified string is not compatible with this tablelist widget"
    }

    set startIdx [incr idx]
    set idx [string first \n $str $startIdx]
    set line [string range $str $startIdx [expr {$idx - 1}]]
    foreach {sortColumnList sortOrderList} $line {}

    set startIdx [incr idx]
    set idx [string first \n $str $startIdx]
    set line [string range $str $startIdx [expr {$idx - 1}]]
    set hdr_itemList [string map {\\n \n} $line]

    set startIdx [incr idx]
    set idx [string first \n $str $startIdx]
    set parentList [string range $str $startIdx [expr {$idx - 1}]]

    set itemList [string range $str [incr idx] end]








|













|







5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
    } else {
	variable expCollOpts
	set opt [mwutil::fullOpt "option" [lindex $argList 1] $expCollOpts]
    }

    set idx [string first \n $str]
    set line [string range $str 0 [expr {$idx - 1}]]
    set columnTitles [string map {"\\n" "\n"} $line]
    if {$columnTitles ne [::$win cget -columntitles]} {
	return -code error \
	    "the specified string is not compatible with this tablelist widget"
    }

    set startIdx [incr idx]
    set idx [string first \n $str $startIdx]
    set line [string range $str $startIdx [expr {$idx - 1}]]
    foreach {sortColumnList sortOrderList} $line {}

    set startIdx [incr idx]
    set idx [string first \n $str $startIdx]
    set line [string range $str $startIdx [expr {$idx - 1}]]
    set hdr_itemList [string map {"\\n" "\n"} $line]

    set startIdx [incr idx]
    set idx [string first \n $str $startIdx]
    set parentList [string range $str $startIdx [expr {$idx - 1}]]

    set itemList [string range $str [incr idx] end]

6014
6015
6016
6017
6018
6019
6020

6021

6022
6023
6024
6025
6026
6027
6028
    synchronize $win
    displayItems $win
    variable targetOpts
    set opt [mwutil::fullOpt "option" [lindex $argList 0] $targetOpts]
    set index [lindex $argList 1]

    upvar ::tablelist::ns${win}::data data

    set w $data(body)


    switch $opt {
	before {
	    set row [rowIndex $win $index 1]
	    if {$data(itemCount) == 0} {
		set y 0
	    } elseif {$row >= $data(itemCount)} {







>

>







6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
    synchronize $win
    displayItems $win
    variable targetOpts
    set opt [mwutil::fullOpt "option" [lindex $argList 0] $targetOpts]
    set index [lindex $argList 1]

    upvar ::tablelist::ns${win}::data data
    place forget $data(rowGap)
    set w $data(body)
    variable scaled4

    switch $opt {
	before {
	    set row [rowIndex $win $index 1]
	    if {$data(itemCount) == 0} {
		set y 0
	    } elseif {$row >= $data(itemCount)} {
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065

6066
6067
6068
6069






6070
6071
6072
6073
6074
6075
6076
		if {[llength $dlineinfo] == 0} {
		    return ""
		}

		set y [lindex $dlineinfo 1]
	    }

	    variable scaled4
	    place $data(rowGap) -anchor w -y $y -height $scaled4 \
				-width [winfo width $data(hdrTxtFrm)]
	}

	inside {
	    set row [rowIndex $win $index 0 1]
	    set dlineinfo [$w dlineinfo [expr {$row + 1}].0]
	    if {[llength $dlineinfo] == 0} {
		return ""
	    }

	    set lineY [lindex $dlineinfo 1]
	    set lineHeight [lindex $dlineinfo 3]
	    set y [expr {$lineY + $lineHeight/2}]

	    place $data(rowGap) -anchor w -y $y -height $lineHeight -width 6

	}
    }

    raise $data(rowGap)






    return ""
}

#------------------------------------------------------------------------------
# tablelist::sizeSubCmd
#------------------------------------------------------------------------------
proc tablelist::sizeSubCmd {win argList} {







<
|














|
>




>
>
>
>
>
>







6052
6053
6054
6055
6056
6057
6058

6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
		if {[llength $dlineinfo] == 0} {
		    return ""
		}

		set y [lindex $dlineinfo 1]
	    }


	    place $data(rowGap) -in $w -anchor w -y $y -height $scaled4 \
				-width [winfo width $data(hdrTxtFrm)]
	}

	inside {
	    set row [rowIndex $win $index 0 1]
	    set dlineinfo [$w dlineinfo [expr {$row + 1}].0]
	    if {[llength $dlineinfo] == 0} {
		return ""
	    }

	    set lineY [lindex $dlineinfo 1]
	    set lineHeight [lindex $dlineinfo 3]
	    set y [expr {$lineY + $lineHeight/2}]

	    place $data(rowGap) -in $w -anchor w -y $y -height $lineHeight \
				-width $scaled4
	}
    }

    raise $data(rowGap)
    variable winSys
    if {$winSys eq "aqua"} {
	update idletasks
    } else {
	tkwait visibility $data(rowGap)		;# instead of invoking update
    }
    return ""
}

#------------------------------------------------------------------------------
# tablelist::sizeSubCmd
#------------------------------------------------------------------------------
proc tablelist::sizeSubCmd {win argList} {
8073
8074
8075
8076
8077
8078
8079

8080
8081
8082
8083
8084
8085
8086
    #
    # Embed the message widgets displaying multiline elements
    #
    foreach {line key col text font pixels alignment} $multilineData {
	findTabs $win $w $line $col $col tabIdx1 tabIdx2
	set msgScript [list ::tablelist::displayText $win $key $col $text \
		       $font $pixels $alignment]

	$w window create $tabIdx2 -pady $padY -create $msgScript
    }

    #
    # Check whether the width of any column has changed
    #
    set colWidthsChanged 0







>







8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
    #
    # Embed the message widgets displaying multiline elements
    #
    foreach {line key col text font pixels alignment} $multilineData {
	findTabs $win $w $line $col $col tabIdx1 tabIdx2
	set msgScript [list ::tablelist::displayText $win $key $col $text \
		       $font $pixels $alignment]
	set msgScript [string map {"%" "%%"} $msgScript]
	$w window create $tabIdx2 -pady $padY -create $msgScript
    }

    #
    # Check whether the width of any column has changed
    #
    set colWidthsChanged 0
8348
8349
8350
8351
8352
8353
8354

8355
8356
8357
8358
8359
8360
8361
	#
	# Embed the message widgets displaying multiline elements
	#
	foreach {line key col text font pixels alignment} $multilineData {
	    findTabs $win $w $line $col $col tabIdx1 tabIdx2
	    set msgScript [list ::tablelist::displayText $win $key $col $text \
			   $font $pixels $alignment]

	    $w window create $tabIdx2 -pady $padY -create $msgScript
	    $w tag add elidedWin $tabIdx2
	}
    }

    #
    # Adjust the heights of the body text widget







>







8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
	#
	# Embed the message widgets displaying multiline elements
	#
	foreach {line key col text font pixels alignment} $multilineData {
	    findTabs $win $w $line $col $col tabIdx1 tabIdx2
	    set msgScript [list ::tablelist::displayText $win $key $col $text \
			   $font $pixels $alignment]
	    set msgScript [string map {"%" "%%"} $msgScript]
	    $w window create $tabIdx2 -pady $padY -create $msgScript
	    $w tag add elidedWin $tabIdx2
	}
    }

    #
    # Adjust the heights of the body text widget
Changes to modules/tablelist/scripts/utils/mwutil.tcl.
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
# ========================
#

namespace eval mwutil {
    #
    # Public variables:
    #
    variable version	2.24
    variable library	[file dirname [file normalize [info script]]]

    #
    # Public procedures:
    #
    namespace export	wrongNumArgs getAncestorByClass convEventFields \
			defineKeyNav processTraversal focusNext focusPrev \
			configureWidget fullConfigOpt fullOpt enumOpts \
			configureSubCmd attribSubCmdEx attribSubCmd \
			hasattribSubCmdEx hasattribSubCmd unsetattribSubCmdEx \
			unsetattribSubCmd getScrollInfo getScrollInfo2 \
			isScrollable scrollByUnits genMouseWheelEvent \
			containsPointer hasFocus windowingSystem currentTheme \
			normalizeColor parsePadding

    #
    # Make modified versions of the procedures tk_focusNext and
    # tk_focusPrev, to be invoked in the processTraversal command
    #
    proc makeFocusProcs {} {
	#







|













|







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
# ========================
#

namespace eval mwutil {
    #
    # Public variables:
    #
    variable version	2.25
    variable library	[file dirname [file normalize [info script]]]

    #
    # Public procedures:
    #
    namespace export	wrongNumArgs getAncestorByClass convEventFields \
			defineKeyNav processTraversal focusNext focusPrev \
			configureWidget fullConfigOpt fullOpt enumOpts \
			configureSubCmd attribSubCmdEx attribSubCmd \
			hasattribSubCmdEx hasattribSubCmd unsetattribSubCmdEx \
			unsetattribSubCmd getScrollInfo getScrollInfo2 \
			isScrollable scrollByUnits genMouseWheelEvent \
			containsPointer hasFocus windowingSystem currentTheme \
			isColorLight normalizeColor parsePadding

    #
    # Make modified versions of the procedures tk_focusNext and
    # tk_focusPrev, to be invoked in the processTraversal command
    #
    proc makeFocusProcs {} {
	#
703
704
705
706
707
708
709













710
711
712
713
714
715
716
	return $::ttk::currentTheme
    } elseif {[info exists ::tile::currentTheme]} {
	return $::tile::currentTheme
    } else {
	return ""
    }
}














#------------------------------------------------------------------------------
# mwutil::normalizeColor
#
# Returns the representation of a given color in the form "#RRGGBB".
#------------------------------------------------------------------------------
proc mwutil::normalizeColor color {







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







703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
	return $::ttk::currentTheme
    } elseif {[info exists ::tile::currentTheme]} {
	return $::tile::currentTheme
    } else {
	return ""
    }
}

#------------------------------------------------------------------------------
# mwutil::isColorLight
#
# A quick & dirty method to check whether a given color can be classified as
# light.  Inspired by article "Support Dark and Light themes in Win32 apps"
# (see https://learn.microsoft.com/en-us/windows/apps/desktop/modernize/ui/
# apply-windows-themes).
#------------------------------------------------------------------------------
proc mwutil::isColorLight color {
    foreach {r g b} [winfo rgb . $color] {}
    return [expr {5 * ($g >> 8) + 2 * ($r >> 8) + ($b >> 8) > 8 * 128}]
}

#------------------------------------------------------------------------------
# mwutil::normalizeColor
#
# Returns the representation of a given color in the form "#RRGGBB".
#------------------------------------------------------------------------------
proc mwutil::normalizeColor color {
Changes to modules/tablelist/scripts/utils/pkgIndex.tcl.
1
2
3
4
5
6
7
8
9
10
11
#==============================================================================
# mwutil, scaleutil, and scaleutilmisc package index file.
#
# Copyright (c) 2020-2025  Csaba Nemethi (E-mail: [email protected])
#==============================================================================

package ifneeded mwutil     2.24 [list source [file join $dir mwutil.tcl]]
package ifneeded scaleutil  1.15 [list source [file join $dir scaleutil.tcl]]
package ifneeded themepatch 1.8  [list source [file join $dir themepatch.tcl]]
package ifneeded scaleutilmisc 1.7.1 \
	[list source [file join $dir scaleutilMisc.tcl]]






|




1
2
3
4
5
6
7
8
9
10
11
#==============================================================================
# mwutil, scaleutil, and scaleutilmisc package index file.
#
# Copyright (c) 2020-2025  Csaba Nemethi (E-mail: [email protected])
#==============================================================================

package ifneeded mwutil     2.25 [list source [file join $dir mwutil.tcl]]
package ifneeded scaleutil  1.15 [list source [file join $dir scaleutil.tcl]]
package ifneeded themepatch 1.8  [list source [file join $dir themepatch.tcl]]
package ifneeded scaleutilmisc 1.7.1 \
	[list source [file join $dir scaleutilMisc.tcl]]
Changes to modules/tablelist/tablelist.tcl.
1
2
3
4
5
6
7
8
9
10
11
12
13
#==============================================================================
# Main Tablelist package module.
#
# Copyright (c) 2000-2025  Csaba Nemethi (E-mail: [email protected])
#==============================================================================

package require -exact tablelist::common 7.5

package provide tablelist $tablelist::version
package provide Tablelist $tablelist::version

tablelist::useTile 0
tablelist::createBindings






|






1
2
3
4
5
6
7
8
9
10
11
12
13
#==============================================================================
# Main Tablelist package module.
#
# Copyright (c) 2000-2025  Csaba Nemethi (E-mail: [email protected])
#==============================================================================

package require -exact tablelist::common 7.6

package provide tablelist $tablelist::version
package provide Tablelist $tablelist::version

tablelist::useTile 0
tablelist::createBindings
Changes to modules/tablelist/tablelistCommon.tcl.
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    proc - {} { return [expr {$::tcl_version >= 8.5 ? "-" : ""}] }

    package require Tk 8.4[-]

    #
    # Public variables:
    #
    variable version	7.5
    variable library	[file dirname [file normalize [info script]]]

    #
    # Creates a new tablelist widget:
    #
    namespace export	tablelist








|







8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    proc - {} { return [expr {$::tcl_version >= 8.5 ? "-" : ""}] }

    package require Tk 8.4[-]

    #
    # Public variables:
    #
    variable version	7.6
    variable library	[file dirname [file normalize [info script]]]

    #
    # Creates a new tablelist widget:
    #
    namespace export	tablelist

92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#
# Load the packages mwutil, scaleutil, and scaleutilmisc from the directory
# "scripts/utils".  Take into account that mwutil is also included in Mentry,
# Scrollutil, and Tsw, and scaleutil is also included in Scrollutil and Tsw.
#
proc tablelist::loadUtils {} {
    if {[catch {package present mwutil} version] == 0 &&
	[package vcompare $version 2.24] < 0} {
	package forget mwutil
    }
    package require mwutil 2.24[-]

    if {[catch {package present scaleutil} version] == 0 &&
	[package vcompare $version 1.15] < 0} {
	package forget scaleutil
    }
    package require scaleutil 1.15[-]

    package require scaleutilmisc 1.7.1[-]
}
tablelist::loadUtils







|


|










92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#
# Load the packages mwutil, scaleutil, and scaleutilmisc from the directory
# "scripts/utils".  Take into account that mwutil is also included in Mentry,
# Scrollutil, and Tsw, and scaleutil is also included in Scrollutil and Tsw.
#
proc tablelist::loadUtils {} {
    if {[catch {package present mwutil} version] == 0 &&
	[package vcompare $version 2.25] < 0} {
	package forget mwutil
    }
    package require mwutil 2.25[-]

    if {[catch {package present scaleutil} version] == 0 &&
	[package vcompare $version 1.15] < 0} {
	package forget scaleutil
    }
    package require scaleutil 1.15[-]

    package require scaleutilmisc 1.7.1[-]
}
tablelist::loadUtils
Changes to modules/tablelist/tablelist_tile.tcl.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#==============================================================================
# Main Tablelist_tile package module.
#
# Copyright (c) 2000-2025  Csaba Nemethi (E-mail: [email protected])
#==============================================================================

package require -exact tablelist::common 7.5

if {$::tk_version < 8.5 || [regexp {^8\.5a[1-5]$} $::tk_patchLevel]} {
    package require tile 0.6[tablelist::-]
}

package provide tablelist_tile $tablelist::version
package provide Tablelist_tile $tablelist::version






|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
#==============================================================================
# Main Tablelist_tile package module.
#
# Copyright (c) 2000-2025  Csaba Nemethi (E-mail: [email protected])
#==============================================================================

package require -exact tablelist::common 7.6

if {$::tk_version < 8.5 || [regexp {^8\.5a[1-5]$} $::tk_patchLevel]} {
    package require tile 0.6[tablelist::-]
}

package provide tablelist_tile $tablelist::version
package provide Tablelist_tile $tablelist::version