import numpy as np
import matplotlib.pyplot as plt
import time
from pylab import *
from datetime import datetime
from datetime import timedelta

from Tkinter import *
import tkMessageBox
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg


def about():
  tkMessageBox.showinfo('About...','quick gui plotter for ephin, 12.12.2013')
  #lab=Label(root,text="Hier nicht!")
  #lab.pack()

def loaddata():
  #global inte
  if vardata.get()==1:
    ephindata=np.loadtxt('/home/pacifix/kuehl/work/data/dayly_ephin/ephin_dayly.dat')
  if vardata.get()==2:
    ephindata=np.loadtxt('/home/pacifix/kuehl/work/data/dayly_ephin/ephin_hourly.dat')
  yearephin=ephindata[:,0]
  dayephin=ephindata[:,1]
  hourephin=ephindata[:,2]/3600000.
  dateephin=[(datetime(int(yearephin[date]),1,1,int(hourephin[date]))+timedelta(int(dayephin[date]-1))) for date in range(len(yearephin))]
  e150=ephindata[:,6]
  e300=ephindata[:,7]
  e1300=ephindata[:,8]
  e3000=ephindata[:,9]
  p4=ephindata[:,10]
  p8=ephindata[:,11]
  p25=ephindata[:,12]
  p41=ephindata[:,13]
  he4=ephindata[:,14]
  he8=ephindata[:,15]
  he25=ephindata[:,16]
  he41=ephindata[:,17]
  inte=ephindata[:,18]
  #global inte
  #inte.set(ephindata[:,18])
  #inte.set(5)  
  #global inte=ephindata[:,18]
  return yearephin,dayephin,hourephin,dateephin, [e150,e300,e1300,e3000,p4,p8,p25,p41,he4,he8,he25,he41,inte]




def myexit():
  root.quit()
  root.destroy()


def canvasplot(f):
  for child in plotwindow.winfo_children():
    child.destroy()
  canvas=FigureCanvasTkAgg(f,master=plotwindow)
  canvas.show()
  canvas.get_tk_widget().pack()
  if vartoolbar.get():
    toolbar = NavigationToolbar2TkAgg( canvas, plotwindow )
    toolbar.update()
  #canvas._tkcanvas.configure(width = 800, height = 800)
  #canvas._tkcanvas.resizescrollregion()
  canvas._tkcanvas.pack(side=TOP, fill=BOTH, expand=YES)

def replot():
  names=["e150","e300","e1300","e3000","p4","p8","p25","p41", "he4","he8","he25","he41","int"]
  yearephin,dayephin,hourephin,dateephin,data=loaddata()
  to_plot=[ varche1.get(),varche2.get(),varche3.get(),varche4.get(),varchp1.get(),varchp2.get(),varchp3.get(),varchp4.get(),varchh1.get(),varchh2.get(),varchh3.get(),varchh4.get(),varchint.get()]
  number_of_plots= sum(to_plot)
  #print to_plot
  ylimmins=[entmine1.get(),entmine2.get(),entmine3.get(),entmine4.get(), entminp1.get(),entminp2.get(),entminp3.get(),entminp4.get(), entminh1.get(),entminh2.get(),entminh3.get(),entminh4.get(),entminint.get()]
  ylimmaxs=[entmaxe1.get(),entmaxe2.get(),entmaxe3.get(),entmaxe4.get(), entmaxp1.get(),entmaxp2.get(),entmaxp3.get(),entmaxp4.get(), entmaxh1.get(),entmaxh2.get(),entmaxh3.get(),entmaxh4.get(),entmaxint.get()]
  f = plt.figure(figsize=(8,7), dpi=100)
  vartypeindex=0
  for thisplotnumber in range(1,number_of_plots+1):
    a = f.add_subplot(number_of_plots,1,thisplotnumber)
    while True:
      if to_plot[vartypeindex]==1: break
      if to_plot[vartypeindex]==0: vartypeindex+=1
    thisdata=data[vartypeindex]
    a.plot_date(dateephin,thisdata,'k-') #a.plot(t,s)
    if thisplotnumber!=number_of_plots: a.set_xticklabels([])
    if thisplotnumber==number_of_plots: plt.xticks(rotation=30)
    #f.autofmt_xdate()   
    if thisplotnumber==1:    plt.title(enttitle.get())
    if varlog.get(): plt.yscale("log")
    plt.ylabel(names[vartypeindex])
    sdate=(datetime(int(entsy.get()),1,1)+timedelta(int(entsd.get())-1))
    edate=(datetime(int(entey.get()),1,1)+timedelta(int(ented.get())-1))
    plt.xlim([sdate,edate])
    if ylimmins[vartypeindex]!="auto" and ylimmaxs[vartypeindex]!="auto":
      plt.ylim([float(ylimmins[vartypeindex]),float(ylimmaxs[vartypeindex])])
    vartypeindex+=1
  canvasplot(f)

root=Tk()
root.title("EPHIN Quickplotter")

#plotwindow
plotwindow=Frame(root,width=900,height=900)
plotwindow.pack(expand=YES,side=RIGHT)


# buttonwindow
buttonwindow=Frame(root,width=300,height=900,cursor="trek")
buttonwindow.pack(expand=YES,side=LEFT)
buttonwindowrow=1

# input data
labeldata=Label(buttonwindow,text="Input Data / Resolution",font="bold")
labeldata.grid(row=buttonwindowrow,column=2)
buttonwindowrow+=1
vardata=IntVar()
radiodata1=Radiobutton(buttonwindow,text="1-day", variable=vardata, value=1)
radiodata1.grid(row=buttonwindowrow,column=1)
radiodata2=Radiobutton(buttonwindow,text="1-hour", variable=vardata, value=2)
radiodata2.grid(row=buttonwindowrow,column=2)
"""butloaddata=Button(buttonwindow,text="Load Data",command=loaddata)
butloaddata.grid(row=buttonwindowrow,column=3)  #pack()#side=TOP)"""
buttonwindowrow+=1
vardata.set(1)
buttonwindowrow+=1
labeldummy1=Label(buttonwindow,text=" ")
labeldummy1.grid(row=buttonwindowrow,column=2)
buttonwindowrow+=1

#date
labeldate=Label(buttonwindow,text="Date range",font="bold")
labeldate.grid(row=buttonwindowrow,column=2)
buttonwindowrow+=1
labelsy=Label(buttonwindow,text="Start Year / Doy: ")
labelsy.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
entsy=Entry(buttonwindow,width=4)
entsy.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
entsd=Entry(buttonwindow,width=3)
entsd.grid(row=buttonwindowrow,column=3)#.pack(side=RIGHT)
buttonwindowrow+=1
entsy.insert(0, "1995"),entsd.insert(0,"1")
labeley=Label(buttonwindow,text="End Year / Doy: ")
labeley.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
entey=Entry(buttonwindow,width=4)
entey.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
ented=Entry(buttonwindow,width=3)
ented.grid(row=buttonwindowrow,column=3)#.pack(side=RIGHT)
buttonwindowrow+=1
entey.insert(0, "2013"),ented.insert(0,"300")
labeldummy2=Label(buttonwindow,text=" ")
labeldummy2.grid(row=buttonwindowrow,column=2)
buttonwindowrow+=1

#chs
labelch=Label(buttonwindow,text="Channels",font="bold")
labelch.grid(row=buttonwindowrow,column=2)
buttonwindowrow+=1
varche1=IntVar()
che1 = Checkbutton(buttonwindow, text="e150", variable=varche1)
che1.grid(row=buttonwindowrow,column=1)
varchp1=IntVar()
chp1 = Checkbutton(buttonwindow, text="p4", variable=varchp1)
chp1.grid(row=buttonwindowrow,column=2)
varchh1=IntVar()
chh1 = Checkbutton(buttonwindow, text="he4", variable=varchh1)
chh1.grid(row=buttonwindowrow,column=3)
buttonwindowrow+=1
varche2=IntVar()
che2 = Checkbutton(buttonwindow, text="e300", variable=varche2)
che2.grid(row=buttonwindowrow,column=1)
varchp2=IntVar()
chp2 = Checkbutton(buttonwindow, text="p8", variable=varchp2)
chp2.grid(row=buttonwindowrow,column=2)
varchh2=IntVar()
chh2 = Checkbutton(buttonwindow, text="he8", variable=varchh2)
chh2.grid(row=buttonwindowrow,column=3)
buttonwindowrow+=1
varche3=IntVar()
che3 = Checkbutton(buttonwindow, text="e1300", variable=varche3)
che3.grid(row=buttonwindowrow,column=1)
varchp3=IntVar()
chp3 = Checkbutton(buttonwindow, text="p25", variable=varchp3)
chp3.grid(row=buttonwindowrow,column=2)
varchh3=IntVar()
chh3 = Checkbutton(buttonwindow, text="he25", variable=varchh3)
chh3.grid(row=buttonwindowrow,column=3)
buttonwindowrow+=1
varche4=IntVar()
che4 = Checkbutton(buttonwindow, text="e3000", variable=varche4)
che4.grid(row=buttonwindowrow,column=1)
varchp4=IntVar()
chp4 = Checkbutton(buttonwindow, text="p41", variable=varchp4)
chp4.grid(row=buttonwindowrow,column=2)
varchh4=IntVar()
chh4 = Checkbutton(buttonwindow, text="he41", variable=varchh4)
chh4.grid(row=buttonwindowrow,column=3)
buttonwindowrow+=1
varchint=IntVar()
chint = Checkbutton(buttonwindow, text="Int.", variable=varchint)
chint.grid(row=buttonwindowrow,column=2)
buttonwindowrow+=1
labeldummy3=Label(buttonwindow,text=" ")
labeldummy3.grid(row=buttonwindowrow,column=2)
buttonwindowrow+=1

#plot stuff
labelplot=Label(buttonwindow,text="Plot Options",font="bold")
labelplot.grid(row=buttonwindowrow,column=2)
buttonwindowrow+=1
labeltitle=Label(buttonwindow,text="Plot Title")
labeltitle.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
enttitle=Entry(buttonwindow,width=24)
enttitle.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
enttitle.insert(0, " ")
buttonwindowrow+=1
varlog=IntVar()
chlog = Checkbutton(buttonwindow, text="Log plot", variable=varlog)
chlog.grid(row=buttonwindowrow,column=1)
vartoolbar=IntVar()
chtool = Checkbutton(buttonwindow, text="Toolbar (bugged)", variable=vartoolbar)
chtool.grid(row=buttonwindowrow,column=2)
butreplot=Button(buttonwindow,text="(Re-)plot",command=replot)
butreplot.grid(row=buttonwindowrow,column=3)  #pack()#side=TOP)
buttonwindowrow+=1

labelylim=Label(buttonwindow,text="Y-limits",font="bold")
labelylim.grid(row=buttonwindowrow,column=2)
buttonwindowrow+=1

labelye1=Label(buttonwindow,text="Min/Max e150:")
labelye1.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
entmine1=Entry(buttonwindow,width=8)
entmine1.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
entmaxe1=Entry(buttonwindow,width=8)
entmaxe1.grid(row=buttonwindowrow,column=3)#.pack(side=RIGHT)
buttonwindowrow+=1
entmine1.insert(0, "auto"),entmaxe1.insert(0,"auto")
labelye2=Label(buttonwindow,text="Min/Max e300:")
labelye2.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
entmine2=Entry(buttonwindow,width=8)
entmine2.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
entmaxe2=Entry(buttonwindow,width=8)
entmaxe2.grid(row=buttonwindowrow,column=3)#.pack(side=RIGHT)
buttonwindowrow+=1
entmine2.insert(0, "auto"),entmaxe2.insert(0,"auto")
labelye3=Label(buttonwindow,text="Min/Max e1300:")
labelye3.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
entmine3=Entry(buttonwindow,width=8)
entmine3.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
entmaxe3=Entry(buttonwindow,width=8)
entmaxe3.grid(row=buttonwindowrow,column=3)#.pack(side=RIGHT)
buttonwindowrow+=1
entmine3.insert(0, "auto"),entmaxe3.insert(0,"auto")
labelye4=Label(buttonwindow,text="Min/Max e3000:")
labelye4.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
entmine4=Entry(buttonwindow,width=8)
entmine4.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
entmaxe4=Entry(buttonwindow,width=8)
entmaxe4.grid(row=buttonwindowrow,column=3)#.pack(side=RIGHT)
buttonwindowrow+=1
entmine4.insert(0, "auto"),entmaxe4.insert(0,"auto")

labelyp1=Label(buttonwindow,text="Min/Max p4:")
labelyp1.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
entminp1=Entry(buttonwindow,width=8)
entminp1.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
entmaxp1=Entry(buttonwindow,width=8)
entmaxp1.grid(row=buttonwindowrow,column=3)#.pack(side=RIGHT)
buttonwindowrow+=1
entminp1.insert(0, "auto"),entmaxp1.insert(0,"auto")
labelyp2=Label(buttonwindow,text="Min/Max p8:")
labelyp2.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
entminp2=Entry(buttonwindow,width=8)
entminp2.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
entmaxp2=Entry(buttonwindow,width=8)
entmaxp2.grid(row=buttonwindowrow,column=3)#.pack(side=RIGHT)
buttonwindowrow+=1
entminp2.insert(0, "auto"),entmaxp2.insert(0,"auto")
labelyp3=Label(buttonwindow,text="Min/Max p25:")
labelyp3.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
entminp3=Entry(buttonwindow,width=8)
entminp3.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
entmaxp3=Entry(buttonwindow,width=8)
entmaxp3.grid(row=buttonwindowrow,column=3)#.pack(side=RIGHT)
buttonwindowrow+=1
entminp3.insert(0, "auto"),entmaxp3.insert(0,"auto")
labelyp4=Label(buttonwindow,text="Min/Max p41:")
labelyp4.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
entminp4=Entry(buttonwindow,width=8)
entminp4.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
entmaxp4=Entry(buttonwindow,width=8)
entmaxp4.grid(row=buttonwindowrow,column=3)#.pack(side=RIGHT)
buttonwindowrow+=1
entminp4.insert(0, "auto"),entmaxp4.insert(0,"auto")

labelyh1=Label(buttonwindow,text="Min/Max he4:")
labelyh1.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
entminh1=Entry(buttonwindow,width=8)
entminh1.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
entmaxh1=Entry(buttonwindow,width=8)
entmaxh1.grid(row=buttonwindowrow,column=3)#.pack(side=RIGHT)
buttonwindowrow+=1
entminh1.insert(0, "auto"),entmaxh1.insert(0,"auto")
labelyh2=Label(buttonwindow,text="Min/Max he8:")
labelyh2.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
entminh2=Entry(buttonwindow,width=8)
entminh2.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
entmaxh2=Entry(buttonwindow,width=8)
entmaxh2.grid(row=buttonwindowrow,column=3)#.pack(side=RIGHT)
buttonwindowrow+=1
entminh2.insert(0, "auto"),entmaxh2.insert(0,"auto")
labelyh3=Label(buttonwindow,text="Min/Max he25:")
labelyh3.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
entminh3=Entry(buttonwindow,width=8)
entminh3.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
entmaxh3=Entry(buttonwindow,width=8)
entmaxh3.grid(row=buttonwindowrow,column=3)#.pack(side=RIGHT)
buttonwindowrow+=1
entminh3.insert(0, "auto"),entmaxh3.insert(0,"auto")
labelyh4=Label(buttonwindow,text="Min/Max he41:")
labelyh4.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
entminh4=Entry(buttonwindow,width=8)
entminh4.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
entmaxh4=Entry(buttonwindow,width=8)
entmaxh4.grid(row=buttonwindowrow,column=3)#.pack(side=RIGHT)
buttonwindowrow+=1
entminh4.insert(0, "auto"),entmaxh4.insert(0,"auto")

labelyint=Label(buttonwindow,text="Min/Max Int.:")
labelyint.grid(row=buttonwindowrow,column=1)#.pack(side=LEFT)
entminint=Entry(buttonwindow,width=8)
entminint.grid(row=buttonwindowrow,column=2)#.pack(side=RIGHT)
entmaxint=Entry(buttonwindow,width=8)
entmaxint.grid(row=buttonwindowrow,column=3)#.pack(side=RIGHT)
buttonwindowrow+=1
entminint.insert(0, "auto"),entmaxint.insert(0,"auto")


#commands
labelcommands=Label(buttonwindow,text="Commands",font="bold")
labelcommands.grid(row=buttonwindowrow,column=2)
buttonwindowrow+=1
but=Button(buttonwindow,text="About",command=about)
but.grid(row=buttonwindowrow,column=1)  #.pack()#side=BOTTOM)
butexit=Button(buttonwindow,text="Exit",command=myexit) 
butexit.grid(row=buttonwindowrow,column=3)  #.pack()#side=BOTTOM)
buttonwindowrow+=1


replot()
root.mainloop()


