Cleaned up the library manager a bit, making sure both columns appear,

formatting headers for the columns, and adding a filter for items with
matching technology and a checkbutton to turn off the filter.
This commit is contained in:
Tim Edwards 2018-04-16 11:39:44 -04:00
parent 79cb20cf9a
commit bb480ae31e
1 changed files with 48 additions and 23 deletions

View File

@ -46,32 +46,49 @@ proc magic::libcallback {command} {
#---------------------------------------------- #----------------------------------------------
proc magic::makelibmanager { mgrpath } { proc magic::makelibmanager { mgrpath } {
global filtered
set filtered 1
toplevel ${mgrpath} toplevel ${mgrpath}
wm withdraw ${mgrpath} wm withdraw ${mgrpath}
frame ${mgrpath}.actionbar frame ${mgrpath}.actionbar
frame ${mgrpath}.box frame ${mgrpath}.box
frame ${mgrpath}.target frame ${mgrpath}.target
ttk::treeview ${mgrpath}.box.view -show tree -selectmode browse \ ttk::treeview ${mgrpath}.box.view -selectmode browse \
-yscrollcommand "${mgrpath}.box.vert set" \ -yscrollcommand "${mgrpath}.box.vert set" \
-xscrollcommand "${mgrpath}.box.vert set" \ -xscrollcommand "${mgrpath}.box.vert set" \
-columns 1 -columns 0
scrollbar ${mgrpath}.box.vert -orient vertical -command "${mgrpath}.box.view yview" scrollbar ${mgrpath}.box.vert -orient vertical -command "${mgrpath}.box.view yview"
${mgrpath}.box.view heading #0 -text Cell
${mgrpath}.box.view heading 0 -text Technology
${mgrpath}.box.view column #0 -stretch true -anchor w -minwidth 300
${mgrpath}.box.view column 0 -stretch false -anchor center -minwidth 100
pack ${mgrpath}.actionbar -side top -fill x grid columnconfigure ${mgrpath}.box 0 -weight 1 -minsize 500
pack ${mgrpath}.box.view -side left -fill both -expand true grid columnconfigure ${mgrpath}.box 1 -weight 0
pack ${mgrpath}.box.vert -side right -fill y grid rowconfigure ${mgrpath}.box 0 -weight 1
pack ${mgrpath}.box -side top -fill both -expand true grid ${mgrpath}.box.view -row 0 -column 0 -sticky news
pack ${mgrpath}.target -side top -fill x grid ${mgrpath}.box.vert -row 0 -column 1 -sticky news
grid rowconfigure ${mgrpath} 0 -weight 0
grid rowconfigure ${mgrpath} 1 -weight 1
grid rowconfigure ${mgrpath} 2 -weight 0
grid columnconfigure ${mgrpath} 0 -weight 1
grid ${mgrpath}.actionbar -row 0 -column 0 -sticky news
grid ${mgrpath}.box -row 1 -column 0 -sticky news
grid ${mgrpath}.target -row 2 -column 0 -sticky news
button ${mgrpath}.actionbar.load -text "Load" -command {magic::libcallback load} button ${mgrpath}.actionbar.load -text "Load" -command {magic::libcallback load}
button ${mgrpath}.actionbar.place -text "Place" -command {magic::libcallback place} button ${mgrpath}.actionbar.place -text "Place" -command {magic::libcallback place}
button ${mgrpath}.actionbar.pick -text "Pick" -command {magic::libcallback pick} button ${mgrpath}.actionbar.pick -text "Pick" -command {magic::libcallback pick}
checkbutton ${mgrpath}.actionbar.filter -text "Filter" -variable filtered \
-command {magic::libmanager update}
pack ${mgrpath}.actionbar.load -side left pack ${mgrpath}.actionbar.load -side left
pack ${mgrpath}.actionbar.place -side left pack ${mgrpath}.actionbar.place -side left
pack ${mgrpath}.actionbar.pick -side left pack ${mgrpath}.actionbar.pick -side left
pack ${mgrpath}.actionbar.filter -side right
label ${mgrpath}.target.name -text "Target window:" label ${mgrpath}.target.name -text "Target window:"
menubutton ${mgrpath}.target.list -text "default" \ menubutton ${mgrpath}.target.list -text "default" \
@ -94,7 +111,7 @@ proc magic::makelibmanager { mgrpath } {
set s [.libmgr.box.view selection] set s [.libmgr.box.view selection]
# puts stdout "open $s" # puts stdout "open $s"
foreach i [.libmgr.box.view children $s] { foreach i [.libmgr.box.view children $s] {
magic::addtolibset $i # This is NOT hierarchical like the cell manager!
.libmgr.box.view item $i -open false .libmgr.box.view item $i -open false
} }
} }
@ -110,12 +127,12 @@ proc magic::makelibmanager { mgrpath } {
} }
} }
proc magic::addlibentry {parent child tech} { proc magic::addlibentry {parent child name tech} {
if {$child != 0} { if {$child != 0} {
set hiername [join [list $parent $child] "/"] set hiername ${parent}${child}
# puts stdout "libentry $hiername" # puts stdout "libentry $hiername"
if {[.libmgr.box.view exists $hiername] == 0} { if {[.libmgr.box.view exists $hiername] == 0} {
.libmgr.box.view insert $parent end -id $hiername -text "$child" .libmgr.box.view insert $parent end -id $hiername -text "$name"
.libmgr.box.view set $hiername 0 "$tech" .libmgr.box.view set $hiername 0 "$tech"
} }
} }
@ -123,13 +140,17 @@ proc magic::addlibentry {parent child tech} {
# #
proc magic::addtolibset {item} { proc magic::addtolibset {item} {
global filtered
set pathname [.libmgr.box.view item $item -text] set pathname [.libmgr.box.view item $item -text]
set pathfiles [glob -nocomplain -directory $pathname *.mag] set pathfiles [glob -nocomplain -directory $pathname *.mag]
# puts stdout "addtolibset $item"
# Sort files alphabetically # Sort files alphabetically
foreach f [lsort $pathfiles] { foreach f [lsort $pathfiles] {
set rootname [file tail [file root $f]] set tailname [file tail $f]
set rootname [file root $tailname]
if {![catch {open $f r} fin]} { if {![catch {open $f r} fin]} {
# Read first two lines, break on error # Read first two lines, break on error
if {[gets $fin line] < 0} {continue} ;# empty file error if {[gets $fin line] < 0} {continue} ;# empty file error
@ -143,8 +164,9 @@ proc magic::addtolibset {item} {
close $fin close $fin
# filter here for compatible technology # filter here for compatible technology
if {($filtered == 0) || ($tech == [tech name])} {
magic::addlibentry $item $rootname $tech magic::addlibentry $item $tailname $rootname $tech
}
} }
} }
} }
@ -186,24 +208,27 @@ proc magic::libmanager {{option "update"}} {
set allpaths [concat $spath1 $spath2] set allpaths [concat $spath1 $spath2]
foreach path $curpaths { foreach path $curpaths {
if {[lsearch $allpaths $path] == -1} { if {[lsearch $allpaths $path] == -1} {
.libmgr.box.view delete $path .libmgr.box.view delete ${path}
} }
} }
set first true
foreach i $spath1 { foreach i $spath1 {
if {[.libmgr.box.view exists $i] == 0} { if {[.libmgr.box.view exists ${i}/] == 0} {
.libmgr.box.view insert {} end -id $i -text $i .libmgr.box.view insert {} end -id ${i}/ -text ${i}/
} }
magic::addtolibset $i magic::addtolibset ${i}/
.libmgr.box.view item $i -open false .libmgr.box.view item ${i}/ -open $first
set first false
} }
foreach i $spath2 { foreach i $spath2 {
set expandname [subst $i] set expandname [subst $i]
if {[.libmgr.box.view exists $expandname] == 0} { if {[.libmgr.box.view exists ${expandname}/] == 0} {
.libmgr.box.view insert {} end -id $expandname -text $expandname .libmgr.box.view insert {} end -id ${expandname}/ -text ${expandname}/
} }
magic::addtolibset $expandname magic::addtolibset ${expandname}/
.libmgr.box.view item $expandname -open false .libmgr.box.view item ${expandname}/ -open $first
set first false
} }
magic::resumeall magic::resumeall
} }