#!/bin/sh

""":"
exec python $0 ${1+"$@"}
"""

# ---------------------- HelloAxis.py ----------------------
# 
# This program demonstrates all methods available for axes.
# Note that this program does not do anything useful;
# its purpose is to try out functionality only.
# 


from Tkinter import *        # The Tk package
import Pmw                   # The Python MegaWidget package
import math                  # import the sin-function

master = Tk()                # build Tk-environment
ncurves = 4                  # draw 4 curves
npoints = 32                 # use 32 points on each curve


if not Pmw.Blt.haveblt(master):     # Is Blt installed?
   print("BLT is not installed!")

else:
   vector_x = []   # make vector for x-axis
   vector_y = []

   for y in range(ncurves):
      vector_y.append([])              

   for x in range(npoints+1):          
      vector_x.append(x*0.1)           

      # fill vectors with cool graphs
      for c in range(ncurves):         
         vector_y[c].append(math.sin(c*x*0.1))

   g = Pmw.Blt.Graph(master)                  
   g.pack(expand=1, fill='both')

   for c in range(ncurves):                   
      curvename = 'sin(' + str(c) +'x)'       
      g.line_create(curvename,                
                    xdata=tuple(vector_x),   
                    ydata=tuple(vector_y[c]),
                    symbol='')               
   
   g.configure(title='Hello Axes')            

   
   ############################## axis_cget ###############################
   
   print "xaxis color: ", g.axis_cget("x", "color")

   # alternatively, you can fetch x,y,x2,y2 axes directly:
   print "yaxis color: ", g.yaxis_cget("color")
   
   ############################ axis_configure #############################
   
   g.axis_configure("y", color="red") # set yaxis option color
   alloptions = g.axis_configure("x") # get all xaxis options
   print "get yaxis option color: ", g.axis_configure("y", "color")
   
   # alternatively: make the calls directly on the axis:
   g.xaxis_configure(color="red") # set xaxis option color
   alloptions = g.xaxis_configure() # get all xaxis options
   print "get xaxis option color: ", g.xaxis_configure("color")
   
   # print all options
   print "all options:",
   for option in alloptions.keys():
      print option + ",",
   print "\n"
   
   # Example of setting the labels on the yaxis:
   def axislabels(pathname, value):
       return  "y="  + str(value)
   
   g.yaxis_configure(command=axislabels)
   
   # note: older versions call this option limits rather than limitsformat
   g.axis_configure("x", limitsformat=("min: %4.2fkm", "max: %4.2fkm"))


   ############################### axis_create ############################  
   g.axis_create("myOwnAxis", color="green", subdivisions=5)

   ################################ axis_use ##############################
   g.y2axis_use("myOwnAxis") # ..and use the new axis as second y-axis

   # ...and map the sin(x) function to the new axis.
   g.element_configure("sin(1x)",  mapy="myOwnAxis")

   ################################ axis_delete ###########################   
   g.axis_delete("myOwnAxis") # Axis won't be deleted since it is in use.
   
   ################################ axis_limits ###########################
   axislim = g.axis_limits("x")
   print "axis limits are:", axislim
    
   ################################# axis_names ###########################
   allNames = g.axis_names() # retrieve all names.
   someNames = g.axis_names("x*", "y") # get all x-axes and the y-axis.
   print "some axis names: "
   
   for name in someNames:
       print name +",",
   print "\n"
   
   ################ axis_transform, axis_invtransform #####################
   def transformer(event):
       (x,y) = (event.x, event.y)
       print "(%d,%d)" %(x,y),
       
       # inversetransform clicked pos to get axis-coordinates.
       (x,y) = (g.xaxis_invtransform(x), g.yaxis_invtransform(y))
       print "--> (%f,%f)" %(x,y),

       # transform back to get original window-coordinates.
       # (not always exact because of round-off errors.)
       (x,y) = (g.xaxis_transform(x), g.yaxis_transform(y))
       print "--> (%d,%d)" %(x,y)
   
   g.bind("<ButtonPress>", transformer)

   master.mainloop()