import os, sys, ROOT

def pygaus( x, par ):
	import math
	if (par[2] != 0.0):
		arg1 = (x[0]-par[1])/par[2]
		arg2 = (0.01*0.39894228)/par[2]
		arg3 = par[0]/(1+par[3])

		gauss = arg3*arg2*math.exp(-0.5*arg1*arg1)
	else:
		print 'returning 0'
		gauss = 0.
	return gauss

tpygaus = ROOT.TF1( 'pygaus', pygaus, -4, 4, 4 )
tpygaus.SetParameters( 1., 0., 1. )

def MyDraw():
	btn = ROOT.BindObject( ROOT.gTQSender, ROOT.TGTextButton )
	if btn.WidgetId() == 10:
		global tpygaus, window
		tpygaus.Draw()
		ROOT.gPad.Update()

m = ROOT.TPyDispatcher( MyDraw )


def MyFileOpen():
	global window
	fi = ROOT.TGFileInfo()
#	fi.fIniDir = "."
	
	file_dialog = ROOT.TGFileDialog(ROOT.gClient.GetRoot(), window, ROOT.kFDOpen, fi)
	ROOT.SetOwnership(file_dialog, False)
	
	fullpath = fi.fFilename
	print fullpath
	
	del file_dialog

fo = ROOT.TPyDispatcher( MyFileOpen )

class pMainFrame( ROOT.TGMainFrame ):
	def __init__( self, parent, width, height ):
		ROOT.TGMainFrame.__init__( self, parent, width, height )

		self.Canvas    = ROOT.TRootEmbeddedCanvas( 'Canvas', self, 200, 200 )
		self.AddFrame( self.Canvas, ROOT.TGLayoutHints() )
		self.ButtonsFrame = ROOT.TGHorizontalFrame( self, 200, 40 )

		self.DrawButton   = ROOT.TGTextButton( self.ButtonsFrame, '&Draw', 10 )
		self.DrawButton.Connect( 'Clicked()', "TPyDispatcher", m, 'Dispatch()' )
		self.ButtonsFrame.AddFrame( self.DrawButton, ROOT.TGLayoutHints() )

		self.FileOpenButton  = ROOT.TGTextButton( self.ButtonsFrame, '&File Open', 10 )
		self.FileOpenButton.Connect( 'Clicked()', "TPyDispatcher", fo, 'Dispatch()' )
		self.ButtonsFrame.AddFrame( self.FileOpenButton, ROOT.TGLayoutHints() )

		self.ExitButton   = ROOT.TGTextButton( self.ButtonsFrame, '&Exit', 20 )
		self.ExitButton.SetCommand( 'TPython::Exec( "raise SystemExit" )' )
		self.ButtonsFrame.AddFrame( self.ExitButton, ROOT.TGLayoutHints() )

		self.AddFrame( self.ButtonsFrame, ROOT.TGLayoutHints() )

		self.SetWindowName( 'My first GUI' )
		self.MapSubwindows()
		self.Resize( self.GetDefaultSize() )
		self.MapWindow()

	def __del__(self):
		self.Cleanup()


if __name__ == '__main__':
	window = pMainFrame( ROOT.gClient.GetRoot(), 200, 200 )
