summaryrefslogtreecommitdiffstats
path: root/library/demos/mclist.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'library/demos/mclist.tcl')
-rw-r--r--library/demos/mclist.tcl79
1 files changed, 65 insertions, 14 deletions
diff --git a/library/demos/mclist.tcl b/library/demos/mclist.tcl
index 7a4dd4c..086fbf5 100644
--- a/library/demos/mclist.tcl
+++ b/library/demos/mclist.tcl
@@ -11,7 +11,7 @@ package require Tk
set w .mclist
catch {destroy $w}
-toplevel $w
+toplevel $w -class MCList
wm title $w "Multi-Column List"
wm iconname $w "mclist"
positionWindow $w
@@ -21,7 +21,10 @@ ttk::label $w.msg -font $font -wraplength 4i -justify left -anchor n -padding {1
pack $w.msg -fill x
## See Code / Dismiss
-pack [addSeeDismiss $w.seeDismiss $w] -side bottom -fill x
+pack [addSeeDismiss $w.seeDismiss $w {} {
+ ttk::checkbutton $w.seeDismiss.cb1 -text Grid -variable mclistGrid -command tglGrid
+}] -side bottom -fill x
+
ttk::frame $w.container
ttk::treeview $w.tree -columns {country capital currency} -show headings \
@@ -34,13 +37,47 @@ grid $w.hsb -in $w.container -sticky nsew
grid column $w.container 0 -weight 1
grid row $w.container 0 -weight 1
-image create photo upArrow -data {
- R0lGODlhDgAOAJEAANnZ2YCAgPz8/P///yH5BAEAAAAALAAAAAAOAA4AAAImhI+
- py+1LIsJHiBAh+BgmiEAJQITgW6DgUQIAECH4JN8IPqYuNxUAOw==}
-image create photo downArrow -data {
- R0lGODlhDgAOAJEAANnZ2YCAgPz8/P///yH5BAEAAAAALAAAAAAOAA4AAAInhI+
- py+1I4ocQ/IgDEYIPgYJICUCE4F+YIBolEoKPEJKZmVJK6ZACADs=}
-image create photo noArrow -height 14 -width 14
+set upArrowData {
+ <?xml version="1.0" encoding="UTF-8"?>
+ <svg width="16" height="4" version="1.1" xmlns="http://www.w3.org/2000/svg">
+ <path d="m4 4 4-4 4 4z" fill="#000000"/>
+ </svg>
+}
+
+set downArrowData {
+ <?xml version="1.0" encoding="UTF-8"?>
+ <svg width="16" height="4" version="1.1" xmlns="http://www.w3.org/2000/svg">
+ <path d="m4 0 4 4 4-4z" fill="#000000"/>
+ </svg>
+}
+
+proc createArrowImages {} {
+ set fgColor [ttk::style lookup . -foreground {} black]
+ lassign [winfo rgb . $fgColor] r g b
+ set fgColor [format "#%02x%02x%02x" \
+ [expr {$r >> 8}] [expr {$g >> 8}] [expr {$b >> 8}]]
+
+ foreach dir {up down} {
+ upvar ${dir}ArrowData imgData
+ set idx1 [string first "#000000" $imgData]
+ set idx2 [expr {$idx1 + 6}]
+ set data [string replace $imgData $idx1 $idx2 $fgColor]
+
+ image create photo ${dir}Arrow -format $::tk::svgFmt -data $data]
+ }
+}
+
+createArrowImages
+foreach event {<<ThemeChanged>> <<LightAqua>> <<DarkAqua>>} {
+ bind MCList $event { createArrowImages }
+}
+unset event
+
+image create photo noArrow -format $tk::svgFmt -data {
+ <?xml version="1.0" encoding="UTF-8"?>
+ <svg width="16" height="4" version="1.1" xmlns="http://www.w3.org/2000/svg">
+ </svg>
+}
## The data we're going to insert
set data {
@@ -62,15 +99,14 @@ set data {
}
## Code to insert the data nicely
-set font [ttk::style lookup Heading -font]
+set font [ttk::style lookup Heading -font {} TkDefaultFont]
+set morePx [expr {[image width noArrow] + round(4 * $tk::scalingPct / 100.0)}]
foreach col {country capital currency} name {Country Capital Currency} {
$w.tree heading $col -text $name -image noArrow -anchor w \
-command [list SortBy $w.tree $col 0]
- $w.tree column $col -width [expr {
- [font measure $font $name] + [image width noArrow] + 5
- }]
+ $w.tree column $col -width [expr {[font measure $font $name] + $morePx}]
}
-set font [ttk::style lookup Treeview -font]
+set font [ttk::style lookup Treeview -font {} TkDefaultFont]
foreach {country capital currency} $data {
$w.tree insert {} end -values [list $country $capital $currency]
foreach col {country capital currency} {
@@ -117,3 +153,18 @@ proc SortBy {tree col direction} {
$tree heading $col -image [expr {$direction?"upArrow":"downArrow"}]
}
}
+
+set mclistGrid 0
+proc tglGrid {} {
+ if {$::mclistGrid} {
+ .mclist.tree configure -stripe 1
+ foreach col [.mclist.tree cget -columns] {
+ .mclist.tree column $col -separator 1
+ }
+ } else {
+ .mclist.tree configure -stripe 0
+ foreach col [.mclist.tree cget -columns] {
+ .mclist.tree column $col -separator 0
+ }
+ }
+}