chiark / gitweb /
where-vessels: more fine-grained scale-selection
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 8 Aug 2010 17:44:50 +0000 (18:44 +0100)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 8 Aug 2010 19:59:56 +0000 (20:59 +0100)
yarrg/where-vessels

index f4fee80..4e6a225 100755 (executable)
@@ -952,8 +952,18 @@ proc load-chart {} {
     }]]
 }
 
-
-set scale 16
+proc init-scales {} {
+    global scales scaleix scale
+    set defscale 16
+    set scales {1 2 3 4 5 6 8}
+    set e12 {10 12 15 18 22 27 33 39 47 56 68 82}
+    foreach t $e12 {
+       if {$t < $defscale} { set scaleix [llength $scales] }
+       lappend scales $t
+    }
+    foreach t [lrange $e12 0 6] { lappend scales [expr {$t * 10}] }
+    set scale [lindex $scales $scaleix]
+}
 
 proc coord {c} {
        global scale
@@ -1289,9 +1299,11 @@ proc widgets-setup {} {
     frame .cp.ctrl.zoom
     pack .cp.ctrl.zoom -side top
 
-    button .cp.ctrl.zoom.out -text - -font {Courier 16} -command {zoom /2} -pady 0
-    button .cp.ctrl.zoom.in  -text + -font {Courier 16} -command {zoom *2} -pady 0
-    pack .cp.ctrl.zoom.out .cp.ctrl.zoom.in -side left
+    foreach inout {out in} minplus {- +} {
+       button .cp.ctrl.zoom.$inout -text $minplus -font {Courier 16} \
+           -command "zoom ${minplus}1" -pady 0
+       pack .cp.ctrl.zoom.$inout -side left
+    }
 
     parser-control-create .cp.ctrl.acquire \
        acquire Acquire \
@@ -1380,12 +1392,14 @@ proc show-report {islandname code} {
     }
 }
 
-proc zoom {extail} {
-    global scale canvas
-    set nscale [expr "\$scale $extail"]
-    debug "ZOOM $scale $nscale"
-    if {$nscale < 1 || $nscale > 200} return
-    set scale $nscale
+proc zoom {amt} {
+    global scaleix scales scale canvas
+    incr scaleix $amt
+    if {$scaleix < 0} { set scaleix 0 }
+    set nscales [llength $scales]
+    if {$scaleix >= $nscales} { set scaleix [expr {$nscales-1}] }
+    set scale [lindex $scales $scaleix]
+    debug "ZOOM $amt $scaleix $scale"
     draw
 }
 
@@ -1434,6 +1448,7 @@ proc invoke_notes {} {
 
 #---------- main program ----------
 
+init-scales
 parseargs
 argdefaults
 httpclientsetup where-vessels