############################################################################
#
#   Christopher Miller
#   Laser Projet
#
############################################################################

#import GUI and other libraries
from Tkinter import *
root = Tk()
root.title('Laser')
import random    
#import my function
import plotlaser

#create a class for a slider
class Indicator:
    def __init__(self, master=None, label='', value=0.0):
        self.var = DoubleVar()
        self.s = Scale(master, 
                       label=label, 
                       variable=self.var,
                       from_=0.0, 
                       to=1.0, 
                       resolution=.1,
                       orient=HORIZONTAL,
                       length=300)
        self.var.set(value)
        self.s.pack()

#create a class for a slider of different length
class Indicator2:
    def __init__(self, master=None, label='', value=0.0):
        self.var = DoubleVar()
        self.s = Scale(master, 
                       label=label, 
                       variable=self.var,
                       from_=-.5, 
                       to=.5, 
                       resolution=.1,
                       orient=HORIZONTAL,
                       length=300)
        self.var.set(value)
        self.s.pack()

#create a class for a button (for graph selection)
class ButtonLine(Frame):

	def __init__(self, master, button_data):
		Frame.__init__(self, master)
		for text, command in button_data:
			Button(self, text=text, command=command).pack(side=LEFT)
 
slist = []

#create the different sliders
slist.append(Indicator(root, label='Gain (G)'))
slist.append(Indicator2(root, label='Pump Rate (p)'))
slist.append(Indicator(root, label='Spontaneous Emission Decay Rate (f)'))
slist.append(Indicator(root, label='Transmission/Scattering Decay Rate (b)'))

#create my random variable butoon        
def randomnumber():
    slist[0].var.set(random.choice(range(10))/10.0)
    slist[1].var.set((random.choice(range(10))-5)/10.0)
    slist[2].var.set(random.choice(range(10))/10.0)
    slist[3].var.set(random.choice(range(10))/10.0)           

#plots the selected graph with current parameters
def plotit():
    # Simulation parameters
    G=slist[0].var.get()
    p=slist[1].var.get()
    f=slist[2].var.get()
    b=slist[3].var.get()
    plotnumber=var.get()
    plotlaser.plotlaser(G,p,f,b,plotnumber)   #plot the function


class ButtonLine(Frame):

	def __init__(self, master, button_data):
		Frame.__init__(self, master)
		for text, command in button_data:
			Button(self, text=text, command=command).pack(side=LEFT)
     
#radio button for graph selection
var  = IntVar()       
rad1 = Radiobutton(root, text='n(t) vs q(t)', value=1, variable=var)
rad1.pack(side=TOP)
rad2 = Radiobutton(root, text='q vs time', value=2, variable=var)
rad2.pack(side=TOP)
rad3 = Radiobutton(root, text='q_dot vs q', value=3, variable=var)
rad3.pack(side=TOP)


#Random/Plotit buttons
outer_frame = Frame(None)
outer_frame.pack()
first_line = ButtonLine(outer_frame, [('Random', randomnumber), ('Plot it!', plotit)])
first_line.pack(side=TOP)

outer_frame.mainloop()
