import ROOT as R

root_obj = R.TF1('quad_func', 'x**2', -1, 2)

def PrintMessage( event ):
   if event.fType == R.kGKeyPress:
      print "PrintMessage() : key pressed!"

m = R.TPyDispatcher( PrintMessage )

def PrintMessage2( event ):
   if event.fType == R.kGKeyPress:
      print "PrintMessage2() : key pressed!"

m2 = R.TPyDispatcher( PrintMessage2 )

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

      self.fButton = R.TGTextButton( self, 'E&xit Application', 10 )
      self.AddFrame( self.fButton, R.TGLayoutHints( R.kLHintsExpandX | R.kLHintsBottom, 20, 20, 20, 20) )
      self.fQuitDispatch = R.TPyDispatcher( self.quit )
      self.fButton.Connect( 'Clicked()', 'TPyDispatcher', self.fQuitDispatch, 'Dispatch()' )

      #self.fTextEntry = R.TGTextEntry( self, '' , 50)
      #self.AddFrame( self.fTextEntry, R.TGLayoutHints( R.kLHintsExpandX | R.kLHintsCenterY, 20, 20, 20, 20) )

      self.SetCleanup( R.kDeepCleanup )
      self.canvas = R.TRootEmbeddedCanvas( 'canvas', self, int(0.9*width), int(0.6*height) )
      self.AddFrame( self.canvas, R.TGLayoutHints( R.kLHintsTop | R.kLHintsCenterX, 5, 5, 5, 5 ) )
      self.canvas.Connect( 'ProcessedEvent(Event_t*)', 'TPyDispatcher', m2, 'Dispatch(Event_t*)' )
      canvas = self.canvas.GetCanvas()
      canvas.cd()
      root_obj.Draw()
      
      self.AddInput( R.kKeyPressMask )
      R.gVirtualX.GrabKey(self.GetId(), R.gVirtualX.KeysymToKeycode(R.kKey_F3), R.kKeyControlMask, 1 )

      self.fEventDispatch = R.TPyDispatcher( self.EventSlot )
      self.Connect( 'ProcessedEvent(Event_t*)', 'TPyDispatcher', self.fEventDispatch, 'Dispatch(Event_t*)' )
      self.Connect( 'ProcessedEvent(Event_t*)', 'TPyDispatcher', m, 'Dispatch(Event_t*)' )

      self.MapSubwindows()
      self.Layout()
      self.MapWindow()
      #self.Resize(150,100)

   def __del__( self ):
      self.Cleanup()

   def HandleKey( self, event ):
      print "pMainFrame::HandleKey() : key pressed!"

   def EventSlot( self, event ):
      if event.fType == R.kGKeyPress:
         print "pMainFrame::EventSlot() : key pressed!"
         print "The event:",event.fCode, event.fCount, event.fFormat, event.fState, event.fType, event.fUser[0]

   def quit(self):
      print 'Bye bye...'
      self.CloseWindow()
      #R.gApplication.Terminate()
      #exit()


if __name__ == '__main__':
   window = pMainFrame( R.gClient.GetRoot(), 300, 500 )
