#! python
# This is a Python/Tk toolbar to run the Python demos.  Perhpas
# eventually we will be able to have plframe in a Python/Tk context. 

from Tkinter import *
import string

class PyDemo(Frame):
    def __init__(self, master=None):
	Frame.__init__(self,master)
	self.create_demo_bar()
	self.pack()

    def create_demo_bar(s):
	# Build a button for each PLplot python example program.

	s.x01 = Button( s, {
		"text" : "Example 1",
		"command" : s.x01m
		} )
	s.x02 = Button( s, {
		"text" : "Example 2",
		"command" : s.x02m
		} )
	s.x03 = Button( s, {
		"text" : "Example 3",
		"command" : s.x03m
		} )
	s.x04 = Button( s, {
		"text" : "Example 4",
		"command" : s.x04m
		} )
	s.x05 = Button( s, {
		"text" : "Example 5",
		"command" : s.x05m
		} )
	s.x06 = Button( s, {
		"text" : "Example 6",
		"command" : s.x06m
		} )
	s.x07 = Button( s, {
		"text" : "Example 7",
		"command" : s.x07m
		} )
	s.x08 = Button( s, {
		"text" : "Example 8",
		"command" : s.x08m
		} )
	s.x09 = Button( s, {
		"text" : "Example 9",
		"command" : s.x09m
		} )
	s.x10 = Button( s, {
		"text" : "Example 10",
		"command" : s.x10m
		} )
	s.x11 = Button( s, {
		"text" : "Example 11",
		"command" : s.x11m
		} )
	s.x12 = Button( s, {
		"text" : "Example 12",
		"command" : s.x12m
		} )
	s.x13 = Button( s, {
		"text" : "Example 13",
		"command" : s.x13m
		} )
	s.x14 = Button( s, {
		"text" : "Example 14",
		"command" : s.x14m
		} )
	s.x15 = Button( s, {
		"text" : "Example 15",
		"command" : s.x15m
		} )
	s.x16 = Button( s, {
		"text" : "Example 16",
		"command" : s.x16m
		} )
	s.x17 = Button( s, {
		"text" : "Example 17",
		"command" : s.x17m
		} )
	s.x18 = Button( s, {
		"text" : "Example 18",
		"command" : s.x18m
		} )
	s.x19 = Button( s, {
		"text" : "Example 19",
		"command" : s.x19m
		} )

	# Now pack them all.

	s.x01.pack()
	s.x02.pack()
	s.x03.pack()
	s.x04.pack()
	s.x05.pack()
	s.x06.pack()
	s.x07.pack()
	s.x08.pack()
	s.x09.pack()
	s.x10.pack()
	s.x11.pack()
	s.x12.pack()
	s.x13.pack()
	s.x14.pack()
	s.x15.pack()
	s.x16.pack()
	s.x17.pack()
	s.x18.pack()
	s.x19.pack()

# It sure seems to me that it ought to have been possible to do this
# dynamically, but I couldn't get it to work.  The following was my
# feeble effort, but it failed b/c I could never figure out how to get
# the command action to bind to the method I was trying to define in
# this class.  Very annoying.

##	for i in range(2,5):
##	    n = string.zfill( `i`, 2 )
##	    print i, "fn will be x" + n + "m"
##	    exec( "def x"+n+"m(s): import x"+n+"; x"+n+".main()",
##		  globals(), locals() )
##
####	    exec( """
####    def x""" + n + """m(s):
####	print "xxx" """ )
##	    
##	    exec( "s.x" + n + " = Button( s, {" +
##		  "'text' : 'Example " + `i` + "'," +	
##		  "'command' : s.x" + n + "m" +
##		  "} )", globals(), locals() )
##	    exec( "s.x"+ n +".pack()" )
##
####	    exec( "s.x"+`i`+" = Button(s, {" +
####		  "'text' : 'Example " + `i` + "'," +
####		  "'command' : s.x"+`i` + "m" +
####		  "} )" )
##
####	    exec( "def x" + `i` +"m(s):
####	    import x" + 

	# Don't forget the quit button!

	s.quit = Button( s, {
		"text" : "Quit",
		"command" : s.quit
		} )
	s.quit.pack()

# Build some methods for all the button actions, which run the
# corresponding demo.  Unfortunately, this isn't really doing what I
# want.  What I want si to run the demo.  If I use execfile, there si
# some nonsense about it not running in the right namespace or
# something.  I can't understand.  If I use import, they work, but on
# second invocations nothing is done.  If I add an explicit call to
# x01.main() here, then it runs twice the first time, once
# thereafter.  Can't win.  Obviously there is something I don't
# understand about the Python execution model.  Probably the
# difficulties with dynamically defining the methods are all bundled
# up in the same problem here.

    def x01m(s): import x01
    def x02m(s): import x02
    def x03m(s): import x03
    def x04m(s): import x04
    def x05m(s): import x05
    def x06m(s): import x06
    def x07m(s): import x07
    def x08m(s): import x08
    def x09m(s): import x09
    def x10m(s): import x10
    def x11m(s): import x11
    def x12m(s): import x12
    def x13m(s): import x13
    def x14m(s): import x14
    def x15m(s): import x15
    def x16m(s): import x16
    def x17m(s): import x17
    def x18m(s): import x18
    def x19m(s): import x19

demoapp = PyDemo()
demoapp.mainloop()
