X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;f=yarrg%2Fwhere-vessels;h=b6ca822e59688b54c74eee3145790d2a8c08c6e5;hb=6d80f770870d3fa734f0f340ec78e14b26ff4129;hp=7e64cce85e60a5d97401fee79a8fc025c8e54e31;hpb=84e330af6dabd818db6e87e0ff57db45fdf176ca;p=ypp-sc-tools.db-live.git diff --git a/yarrg/where-vessels b/yarrg/where-vessels index 7e64cce..b6ca822 100755 --- a/yarrg/where-vessels +++ b/yarrg/where-vessels @@ -289,6 +289,7 @@ proc vesselclasses-init {} { global vsc_game2code set vsc_game2code(null) {} set vsc_code2report() Ordinary + set vsc_code2report(!) "Special/L.E." foreach {game code full} $subclassinfos { if {![regexp {^[A-Z]$} $code code]} { error "bad code" } set vsc_game2code($game) $code @@ -435,6 +436,37 @@ proc show-report-decode {code} { } } +#---------- smashing ---------- + +set smash_subclass 0 + +proc smash-code {code} { + manyset [split $code _] inport class subclass lockown xabbrev + + global smash_subclass + if {$smash_subclass > 1} { + set subclass {} + } elseif {$smash_subclass && [string length $subclass]} { + set subclass ! + } + + return [join [list $inport $class $subclass $lockown $xabbrev] _] +} + +proc make-smasher {sma label ekind} { + return [make-gridded-control .smash $sma $label $ekind] +} + +proc make-radio-smasher {sma label variable descs} { + set w [make-smasher $sma $label frame] + for {set i 0} {$i < [llength $descs]} {incr i} { + radiobutton $w.v$i \ + -variable $variable -value $i -command redraw-needed \ + -text [lindex $descs $i] + pack $w.v$i -side left + } +} + #---------- filtering ---------- set filters {} @@ -496,7 +528,7 @@ proc filter-tickbox-flip {fil} { proc make-tickbox-filter {fil label rows inrow} { upvar #0 filter_$fil vars - set fw [make-filter tickbox $fil $label frame] + set fw [make-filter $fil $label frame] set values [filter-values/$fil] set nvalues [llength $values] if {!$inrow} { @@ -548,7 +580,7 @@ proc make-entry-filter {fil label def} { global filterentered_$fil upvar #0 filter_$fil realvar set realvar $def - set fw [make-filter entry $fil $label frame] + set fw [make-filter $fil $label frame] entry $fw.entry -textvariable filterentered_$fil label $fw.error glset def_background [$fw.error cget -background] @@ -557,15 +589,21 @@ proc make-entry-filter {fil label def} { pack $fw.entry $fw.error -side top -anchor w } -proc make-filter {kind fil label ekind} { +proc make-gridded-control {parent name label ekind} { + debug "MAKE-GRIDDED-CONTROL [list $parent $name $label $ekind]" + label $parent.lab_$name -text $label -justify left + $ekind $parent.$name + manyset [grid size $parent] dummy row + incr row + grid configure $parent.lab_$name -row $row -column 0 -sticky nw -pady 4 + grid configure $parent.$name -row $row -column 1 -sticky w -pady 3 + return $parent.$name +} + +proc make-filter {fil label ekind} { global filters - label .filter.lab_$fil -text $label -justify left - $ekind .filter.$fil lappend filters $fil - set nfilters [llength $filters] - grid configure .filter.lab_$fil -row $nfilters -column 0 -sticky nw -pady 4 - grid configure .filter.$fil -row $nfilters -column 1 -sticky w -pady 3 - return .filter.$fil + return [make-gridded-control .filter $fil $label $ekind] } proc make-filters {} { @@ -794,7 +832,7 @@ proc redraw-needed {} { } proc draw {} { - global chart found isleloc canvas redraw_after islandnames + global chart found isleloc canvas redraw_after islandnames smfound catch { after cancel $redraw_after } catch { unset redraw_after } @@ -807,12 +845,21 @@ proc draw {} { eval chart-got/$proc [lrange $l 1 end] } - set islandnames {} - set lastislandname {} + catch { unset smfound } foreach key [lsort [array names found]] { - set c [llength $found($key)] -# debug "SHOWING $key $c" regexp {^(.*) (\S+)$} $key dummy islandname code + set smcode [smash-code $code] + debug "smashed $code => $smcode" + set smkey "$islandname $smcode" + foreach vessel $found($key) { lappend smfound($smkey) $vessel } + } + + set islandnames {} + set lastislandname {} + foreach smkey [lsort [array names smfound]] { + set c [llength $smfound($smkey)] +# debug "SHOWING $smkey $c" + regexp {^(.*) (\S+)$} $smkey dummy islandname code if {![filters-say-yes $code]} continue @@ -1023,9 +1070,16 @@ proc widgets-setup {} { #----- control panels and filter ----- frame .cp + frame .smash -relief groove -bd 2 -padx 1 frame .filter -relief groove -bd 2 -padx 1 frame .islands -pady 2 - pack .cp .filter .islands -side top + pack .cp .filter .islands .smash -side top + + label .smash.title -text Smash + grid .smash.title -row 0 -column 0 -columnspan 2 + + make-radio-smasher subclass Subclass smash_subclass \ + {Show Normal/LE Hide} set filterstyle 1 trace add variable filterstyle write filterstyle-changed @@ -1125,7 +1179,7 @@ proc show-report {islandname code} { show-report-decode $code set kk "$islandname $code" - upvar #0 found($kk) k + upvar #0 smfound($kk) k .cp.report.list delete 0 end @@ -1218,3 +1272,5 @@ if {[catch { parse-clipboard } emsg]} { after idle invoke_notes draw + +# rsync -r --exclude=\*~ yarrg/icons/. ijackson@chiark.greenend.org.uk:/home/ftp/users/ijackson/yarrg/vessel-info/.