//*CMZ : 1.03/08 13/06/98 23.03.41 by Rene Brun
//*-- Author : Nenad Buncic 08/02/96
//*KEEP,CopyRight,T=C.
/*************************************************************************
* Copyright(c) 1995-1998, The ROOT System, All rights reserved. *
* Authors: Rene Brun, Nenad Buncic, Valery Fine, Fons Rademakers. *
* *
* Permission to use, copy, modify and distribute this software and its *
* documentation for non-commercial purposes is hereby granted without *
* fee, provided that the above copyright notice appears in all copies *
* and that both the copyright notice and this permission notice appear *
* in the supporting documentation. The authors make no claims about the *
* suitability of this software for any purpose. *
* It is provided "as is" without express or implied warranty. *
*************************************************************************/
//*KEND.
////////////////////////////////////////////////////////////////////////////////
// //
// TContextMenu //
// //
// This class provides an interface to context sensitive popup menus. //
// These menus pop up when the user hits the right mouse button, and //
// are destroyed when the menu pops downs. //
// //
// Context Menus are automatically generated by ROOT using the following //
// convention: //
// If the string // *MENU* is found in the comment field of a member function //
// This function will be added to the list of items in the menu. //
//
// The picture below shows a canvas with a pop-up menu. //
// //
//
//
// //
// The picture below shows a canvas with a pop-up menu and a dialog box. //
// //
//
//
////////////////////////////////////////////////////////////////////////////////
//*KEEP,TROOT.
#include "TROOT.h"
//*KEEP,TInterpreter, T=C++.
#include "TInterpreter.h"
//*KEEP,TContextMenu,T=C++.
#include "TContextMenu.h"
//*KEEP,TVirtualPad.
#include "TVirtualPad.h"
//*KEEP,TGuiFactory.
#include "TGuiFactory.h"
//*KEEP,TMethod.
#include "TMethod.h"
//*KEEP,TMethodArg.
#include "TMethodArg.h"
//*KEEP,TGlobal.
#include "TGlobal.h"
//*KEEP,TObjArray.
#include "TObjArray.h"
//*KEEP,TObjString.
#include "TObjString.h"
//*KEND.
ClassImp(TContextMenu)
//______________________________________________________________________________
TContextMenu::TContextMenu( const Char_t *name, const Char_t *title )
: TNamed( name, title )
{
fSelectedObject = 0;
fSelectedMethod = 0;
fContextMenuImp = gGuiFactory->CreateContextMenuImp( this, name, title );
}
//______________________________________________________________________________
TContextMenu::~TContextMenu()
{
delete fContextMenuImp;
fSelectedMethod = 0;
fSelectedObject = 0;
fContextMenuImp = 0;
}
//______________________________________________________________________________
void TContextMenu::Action( TObject *object, TMethod *method )
{
if ( method ) {
SetMethod( method );
if ( method->GetListOfMethodArgs()->First() )
fContextMenuImp->Dialog( object, method );
else {
#ifndef WIN32
Execute( object, method, "" );
#else
//*-* It is a workaround of the "Dead lock under Windows
char cmd[]= "((TContextMenu *)0x1234567890123456)->Execute((TObject *)0x1234567890123456,(TMethod *)0x1234567890123456,(TObjArray *)NULL );";
sprintf(cmd,"((TContextMenu *)0x%x)->Execute((TObject *)0x%x,(TMethod *)0x%x,(TObjArray *)0 );",
this,object,method);
Printf("%s n", cmd);
gInterpreter->ProcessLine(cmd);
// Execute( object, method, (TObjArray *)NULL );
#endif
}
}
}
//______________________________________________________________________________
Char_t *TContextMenu::CreateArgumentTitle( TMethodArg *argument )
{
static Char_t argTitle[128];
if ( argument ) {
sprintf( argTitle, "(%s) %s", argument->GetTitle(), argument->GetName() );
if (argument->GetDefault() && *(argument->GetDefault())) {
strcat( argTitle, " [default: " );
strcat( argTitle, argument->GetDefault() );
strcat( argTitle, "]" );
}
}
else *argTitle = 0;
return( argTitle );
}
//______________________________________________________________________________
Char_t *TContextMenu::CreateDialogTitle( TObject *object, TMethod *method )
{
static Char_t methodTitle[128];
if ( object && method )
sprintf( methodTitle, "%s::%s", object->ClassName(), method->GetName() );
else *methodTitle = 0;
return( methodTitle );
}
//______________________________________________________________________________
Char_t *TContextMenu::CreatePopupTitle( TObject *object )
{
static Char_t popupTitle[128];
if ( object ) {
if ( !*( object->GetName() ) || !strcmp( object->GetName(), object->ClassName() ) ) {
TGlobal *global = (TGlobal *) gROOT->GetGlobal( object );
if ( global && *( global->GetName() ) )
sprintf( popupTitle, " %s::%s ", object->ClassName(), global->GetName() );
else
sprintf( popupTitle, " %s ", object->ClassName() );
}
else sprintf( popupTitle, " %s::%s ", object->ClassName(), object->GetName() );
}
else *popupTitle = 0;
return( popupTitle );
}
//______________________________________________________________________________
void TContextMenu::Execute( TObject *object, TMethod *method, Char_t *params )
{
if ( object && method ) {
TVirtualPad *savedPad = 0;
gROOT->SetSelectedPrimitive(object);
if( fSelectedPad ) {
savedPad = (TVirtualPad *) gPad;
if( savedPad ) fSelectedPad->cd();
}
gROOT->SetFromPopUp( kTRUE );
// if (fSelectedCanvas) fSelectedCanvas->GetPadSave()->cd();
object->Execute( (char *) method->GetName(), params );
if (fSelectedCanvas) fSelectedCanvas->GetPadSave()->Modified();
if (fSelectedPad) fSelectedPad->Modified();
gROOT->SetFromPopUp( kFALSE );
if( fSelectedPad && savedPad ) {
// fSelectedPad->Modified();
if (savedPad->TestBit(kNotDeleted)) savedPad->cd();
}
if (fSelectedCanvas) fSelectedCanvas->Update();
if (fSelectedCanvas) fSelectedCanvas->GetPadSave()->Update();
}
}
//______________________________________________________________________________
void TContextMenu::Execute( TObject *object, TMethod *method, TObjArray *params )
{
if ( object && method ) {
TVirtualPad *savedPad = 0;
gROOT->SetSelectedPrimitive(object);
if( fSelectedPad ) {
savedPad = (TVirtualPad *) gPad;
if( savedPad ) fSelectedPad->cd();
}
gROOT->SetFromPopUp( kTRUE );
if (fSelectedCanvas) fSelectedCanvas->GetPadSave()->cd();
object->Execute( method, params );
if (fSelectedCanvas) fSelectedCanvas->GetPadSave()->Modified();
gROOT->SetFromPopUp( kFALSE );
if( fSelectedPad && savedPad ) {
// fSelectedPad->Modified();
if (savedPad->TestBit(kNotDeleted)) savedPad->cd();
}
if( fSelectedCanvas ) fSelectedCanvas->Update();
}
}
//______________________________________________________________________________
void TContextMenu::Popup( Int_t x, Int_t y, TObject *obj, TVirtualPad *c, TVirtualPad *p )
{
SetBrowser(0);
SetObject( obj );
SetCanvas( c );
SetPad( p );
DisplayPopUp(x,y);
}
//______________________________________________________________________________
void TContextMenu::Popup( Int_t x, Int_t y, TObject *obj, TBrowser *b)
{
SetBrowser(b);
SetObject( obj );
SetCanvas( 0 );
SetPad( 0 );
DisplayPopUp(x,y);
}
ROOT page - Class index - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.