X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;f=yarrg%2Fwhere-vessels;h=8d6de95900fcd15d64f480cac5d05238b78f2945;hb=15a33b9bcca5a2932534c7ab5952961bf278faf8;hp=ae8fb5520325066b134011566c178f5ed7650264;hpb=2bafdfd9436b439aa7ccd22289e99e84e895134a;p=ypp-sc-tools.main.git diff --git a/yarrg/where-vessels b/yarrg/where-vessels index ae8fb55..8d6de95 100755 --- a/yarrg/where-vessels +++ b/yarrg/where-vessels @@ -254,8 +254,8 @@ proc vesselclasses-init {} { merchbrig fm mb {Merchant Brig} warbrig gm wb {War Brig} xebec hm xe Xebec - warfrig im wf {War Frigate} merchgal jm mg {Merchant Galleon} + warfrig im wf {War Frigate} grandfrig km gf {Grand Frigate} } set vc_codes {} @@ -264,29 +264,98 @@ proc vesselclasses-init {} { set vc_game2code($game) $code set vc_code2abbrev($code) $abbrev set vc_code2full($code) $full + load-icon $abbrev } + + load-icon unlocked + load-icon locked + load-icon battle + load-icon atsea + load-icon borrow + load-icon query + load-icon ours + load-icon dot +} + +proc load-icon {icon} { + image create bitmap icon/$icon -file icons/$icon.xbm } proc code2abbrev-lock {lockown} { manyset [split $lockown ""] lock notown - append abbrev [lindex {* + -} $lock] - append abbrev [lindex {= - ?} [regsub {\D} $notown 2]] + append abbrev [lindex {x u .} $lock] + append abbrev [lindex {m . ?} [regsub {\D} $notown 2]] } -proc code2abbrev {code} { +proc canvas-horiz-stack {xvar xoff y bind type args} { + upvar 1 $xvar x + upvar 1 canvas canvas + set id [eval $canvas create $type [expr {$x+$xoff}] $y $args] + set bbox [$canvas bbox $id] + set x [lindex $bbox 2] + $canvas bind $id $bind + return $id +} + +proc code2canvas {code canvas x yvar qty qtylen bind} { global vc_code2abbrev + upvar 1 $yvar y manyset [split $code _] inport class subclass lockown xabbrev - set abbrev {} - append abbrev [lindex {? {}} $inport] - append abbrev $vc_code2abbrev($class) - append abbrev $subclass - append abbrev [code2abbrev-lock $lockown] - append abbrev $xabbrev + set stackx $x + incr stackx 2 + set imy [expr {$y+2}] + + if {!$inport} { incr qtylen -1 } + if {$qtylen<=0} { set qtylen {} } + set qty [format "%${qtylen}s" $qty] + + set qtyid [canvas-horiz-stack stackx 0 $y $bind \ + text -anchor nw -font fixed -text $qty] - debug "CODE2ABBREV $code $abbrev" - return $abbrev + if {!$inport} { + canvas-horiz-stack stackx 0 $imy $bind \ + image -anchor nw -image icon/atsea + incr stackx + } + + canvas-horiz-stack stackx -1 $imy $bind \ + image -anchor nw -image icon/$vc_code2abbrev($class) + + if {[string length $subclass]} { + canvas-horiz-stack stackx 0 $y $bind \ + text -anchor nw -font fixed -text \ + $subclass + } + + manyset [split $lockown ""] lock notown + + incr stackx + canvas-horiz-stack stackx 0 $imy $bind \ + image -anchor nw -image icon/[lindex {battle borrow dot} $lock] + incr stackx + canvas-horiz-stack stackx 0 $imy $bind \ + image -anchor nw -image icon/[lindex {ours dot query} \ + [regsub {\D} $notown 2]] + incr stackx + + if {[string length $xabbrev]} { + canvas-horiz-stack stackx 0 $y $bind \ + text -anchor nw -font fixed -text \ + $xabbrev + } + + set bbox [$canvas bbox $qtyid] + set ny [lindex $bbox 3] + set bid [$canvas create rectangle \ + $x $y $stackx $ny \ + -fill white] + + set y $ny + $canvas lower $bid $qtyid + + $canvas bind $bid $bind } proc show-report-decode {code} { @@ -328,7 +397,10 @@ proc show-report-decode {code} { set filters {} proc filter-values/size {} { global vc_codes; return $vc_codes } -proc filter-map/size {code} { upvar #0 vc_code2abbrev($code) abb; return $abb } +proc filter-icon/size {code} { + upvar #0 vc_code2abbrev($code) abb + return icon/$abb +} proc filter-default/size {code} { return 1 } proc filter-says-yes/size {codel} { set sizecode [lindex $codel 1] @@ -388,13 +460,17 @@ proc make-tickbox-filter {fil label rows inrow} { if {!$inrow} { set inrow [expr {($nvalues + $rows) / $rows}] } - + set noicons [catch { info args filter-icon/$fil }] for {set ix 0} {$ix < $nvalues} {incr ix} { set val [lindex $values $ix] set vars($val) [filter-default/$fil $val] checkbutton $fw.$ix -variable filter_${fil}($val) \ - -text [filter-map/$fil $val] -font fixed \ - -command redraw-needed + -font fixed -command redraw-needed + if {!$noicons} { + $fw.$ix configure -image [filter-icon/$fil $val] -height 16 + } else { + $fw.$ix configure -text [filter-map/$fil $val] + } grid configure $fw.$ix -sticky sw \ -row [expr {$ix / $inrow}] \ -column [expr {$ix % $inrow}] @@ -667,8 +743,6 @@ proc draw {} { if {![filters-say-yes $code]} continue - set abbrev [code2abbrev $code] - if {[string compare $lastislandname $islandname]} { manyset $isleloc($islandname) x y set x [coord $x] @@ -676,22 +750,10 @@ proc draw {} { set lastislandname $islandname # debug "START Y $y" } - set text $abbrev - regsub -all {[0-9]} $text {} text - if {$c > 1} { - set text [format "%2d%s" $c $text] - } else { - set text [format " %s" $text] - } - set id [$canvas create text $x $y \ - -anchor nw -font fixed \ - -text $text] - set bbox [$canvas bbox $id] - set bid [eval $canvas create rectangle $bbox -fill white] - $canvas lower $bid $id - $canvas bind $id [list show-report $islandname $code] - $canvas bind $bid [list show-report $islandname $code] - manyset $bbox dummy dummy dummy y + + if {$c > 1} { set qty [format %d $c] } else { set qty {} } + code2canvas $code $canvas $x y $qty 2 \ + [list show-report $islandname $code] # debug "NEW Y $y" } @@ -900,14 +962,7 @@ proc widgets-setup {} { label .cp.report.island -text { } - frame .cp.report.abbrev -background black - glset report_abbrev { } - entry .cp.report.abbrev.abbrev -state readonly \ - -textvariable report_abbrev \ - -borderwidth 0 -relief flat -width 0 \ - -highlightbackground white \ - -readonlybackground white -foreground black - pack .cp.report.abbrev.abbrev -side left -padx 1 -pady 1 + canvas .cp.report.abbrev -width 1 -height 15 frame .cp.report.code label .cp.report.code.lab -text Code: @@ -933,9 +988,14 @@ proc report-set {sw val} { .cp.report.details.$sw configure -text $val } proc show-report {islandname code} { .cp.report.island configure -text $islandname - glset report_code $code - glset report_abbrev [code2abbrev $code] + .cp.report.abbrev delete all + set y 2 + code2canvas $code .cp.report.abbrev 5 y {} 0 {} + manyset [.cp.report.abbrev bbox all] minx dummy maxx dummy + .cp.report.abbrev configure -width [expr {$maxx-$minx+4}] + + glset report_code $code show-report-decode $code set kk "$islandname $code"