You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

109 lines
2.6 KiB

# Simple viewer for MaterialIcons package.
#
# chw January 2019
# search facility: dzach May 2019
package require Tk
package require MaterialIcons
package require tooltip
wm title . "MaterialIcons"
proc showname {flag} {
if {$flag} {
set ::name [lindex [.v gettags current] 1]
} else {
set ::name ""
}
}
proc putclipboard {} {
if {$::name eq ""} {
return
}
clipboard clear
clipboard append -type STRING -- $::name
}
proc showicons {{isconf 0}} {
if {![winfo exists .v]} {
set ::pattern *
frame .f
label .f.s -text "Search: "
entry .f.e -textvariable ::pattern -width 30
pack .f.s .f.e -side left
grid .f -row 0 -column 0 -padx 4 -pady 4 -columnspan 2 -sticky w
canvas .v -yscrollcommand {.y set} -xscrollcommand {.x set} -bg white
grid .v -row 1 -column 0 -sticky news
ttk::scrollbar .y -orient vertical -command {.v yview}
grid .y -row 1 -column 1 -sticky ns
ttk::scrollbar .x -orient horizontal -command {.v xview}
grid .x -row 2 -column 0 -sticky ew
label .l -textvariable name
grid .l -row 3 -column 0 -sticky ew
grid rowconfigure . 1 -weight 1
grid columnconfigure . 0 -weight 1
bind .f.e <Return> {showicons ; break}
bind .f.e <KP_Enter> {showicons ; break}
bind . <Configure> {
after cancel {showicons 1}
after idle {showicons 1}
break
}
.f.e icursor end
.v bind _icons <Enter> {showname 1}
.v bind _icons <Leave> {showname 0}
.v bind _icons <1> putclipboard
} else {
if {$isconf &&
[winfo width .] == $::dim(w) &&
[winfo height .] == $::dim(h)} {
return
}
.v delete all
tooltip::tooltip .v -items {} {}
}
set ::name ""
set x 20
set y 20
set xmax [winfo width .]
if {$xmax == 1} {
set ::dim(w) [winfo reqwidth .]
set ::dim(h) [winfo reqheight .]
set xmax [expr {[winfo reqwidth .v] + [winfo reqwidth .y]}]
} else {
set ::dim(w) [winfo width .]
set ::dim(h) [winfo height .]
}
set xmax [expr {$xmax - 64}]
if {$xmax < 200} {
set xmax 200
}
foreach n [MaterialIcons names $::pattern] {
set i [MaterialIcons image $n 20]
set c [.v create image $x $y -anchor nw -image $i \
-tags [list _icons $n]]
lassign [.v bbox $c] x1 y1 x2 y2
if {$x1 > $xmax} {
set y [expr {$y2 + 10}]
set x 20
.v coords $c $x $y
lassign [.v bbox $c] x1 y1 x2 y2
}
set x [expr {$x2 + 10}]
tooltip::tooltip .v -items $c $n
}
set bbox [.v bbox _icons]
if {[llength $bbox]} {
lassign [.v bbox _icons] x1 y1 x2 y2
.v configure -scrollregion [list [expr {$x1 - 20}] [expr {$y1 - 20}] \
[expr {$x2 + 20}] [expr {$y2 + 20}]]
} else {
.v configure -scrollregion {}
}
}
showicons