View Ticket
Not logged in
Ticket Hash: 040cbad431f9524d0f1bb17ec97732922daa01b5
Title: BLT zoomInfo stack not accessible, under undroidwish/vanillawish
Status: Closed Type: Incident
Severity: Minor Priority: Immediate
Subsystem: Resolution: Fixed
Last Modified: 2020-03-07 20:44:17
Version Found In: "Eppur si muove"
User Comments:
anonymous added on 2020-02-11 21:41:47:

The following code inserts a user zoom level into the zoomInfo stack of BLT:

proc AddZoomStack { } {
  global g zoomInfo
  set cmd {}
  foreach margin { xaxis yaxis x2axis y2axis } {
    foreach axis [$g $margin use] {
      set min [$g axis cget $axis -min]; set max [$g axis cget $axis -max]
      set c [list $g axis configure $axis -min $min -max $max]
      append cmd "$c\n"
      }
    }
  set zoomInfo($g,stack) [linsert $zoomInfo($g,stack) 0 $cmd]
  }

This works under BLT 2.4z on Linux and Windows, fails with
 
   can't read "zoomInfo(.r.gr.c,stack)": no such variable
under undroidwish-e5dc71ed9d-linux64 or vanillawish-e5dc71ed9d-linux64


chw added on 2020-02-11 22:17:12:
Without having tested it myself would you like to try this snippet instead?

proc AddZoomStack {g} {
  set cmd {}
  foreach margin { xaxis yaxis x2axis y2axis } {
    foreach axis [$g $margin use] {
      set min [$g axis cget $axis -min]
      set max [$g axis cget $axis -max]
      set c [list $g axis configure $axis -min $min -max $max]
      append cmd "$c\n"
    }
  }
  set ::blt::zoomInfo($g,stack) [linsert $::blt::zoomInfo($g,stack) 0 $cmd]
}

anonymous added on 2020-02-12 02:49:27:

Thank you, that solves this!

Which is very strange because earlier in the script I

   namespace import ::blt::*
and it has always been sufficient (i.e. it WORKED) under native wish (tk 8.5.*) on the same machine, but failed if invoked with undroidwish/vanillawish.

With the explicit ::blt::zoomInfo, it finds the stack under both.

Thanks again, we can close this ticket!


anonymous added on 2020-02-12 03:20:26:

Wait, spoke too soon.

Now it runs under undroidwish/vanillawish, but does NOT find it under the native wish 8.6, BLT 2.5.3. (it did work under native wish 8.5, BLT 2.4z)

The error message now is

   cant't read "::blt::zoomInfo(...,stack)": no such variable
And, of course, taking out ::blt:: restores it to full function.


anonymous added on 2020-02-12 03:50:25:

Sorry, another correction, it did NOT work under native wish 8.5 / BLT 2.4z under Linux. So, neither BLT 2.4z nor BLT 2.5 work with ::blt::zoomInfo() variant; and neither vanillawish nor undroidwish (with BLT 2.4z built-in) work with plain zoomInfo() variant.


chw added on 2020-02-12 05:59:35:
So we need to refine the proc like so (again untested):

proc AddZoomStack {g} {
  set cmd {}
  foreach margin { xaxis yaxis x2axis y2axis } {
    foreach axis [$g $margin use] {
      set min [$g axis cget $axis -min]
      set max [$g axis cget $axis -max]
      set c [list $g axis configure $axis -min $min -max $max]
      append cmd "$c\n"
    }
  }
  if {[info exists ::blt::zoomInfo]} {
    set ::blt::zoomInfo($g,stack) [linsert $::blt::zoomInfo($g,stack) 0 $cmd]
  } elseif {[info global zoomInfo] eq "zoomInfo"} {
    set ::zoomInfo($g,stack) [linsert $::zoomInfo($g,stack) 0 $cmd]
  }
}

chw added on 2020-02-15 17:05:21:

Demoting this issue to "minor" "incident" because it uses undocumented features and can be solved by introspection at runtime.


anonymous added on 2020-03-07 20:44:17:

Never got a chance to thank you for the fix!

THANKS!