Re: TRootDialog

From: Radovan Chytracek (Radovan.Chytracek@cern.ch)
Date: Wed Mar 18 1998 - 14:20:40 MET


On Wed, 18 Mar 1998, rene Scholte wrote:

> hello ROOTERS,
> 
> I'm trying to make a simple dialog box from within the CINT-environment.
> I already know I have to use TRootContextmenu, or TRootDialog or something
> like that, but I don't seem to get it right.
> 
> Can someone please tell me how to make a simple dialog box (and read the
> input) or point me to an example ?
> 
> thanx in advance,
> 
> Rene Scholte
Try this one:

************************ Cut Here *************************************

// Example of creating a Dialog Window with customizable message
// Returns string typed in text entry

///////////////////////////////////////////////////////////////////////////
//                                                                       // 
//                           Dialog Window Objects                       //
//                                                                       // 
///////////////////////////////////////////////////////////////////////////

// Transient frame for standalone Dialo Window
TGTransientFrame *rTFrm;

// Dialog Label showing information string
TGLabel         *rDgLbl;

// Text buffer associated with text entry declared bellow
TGTextBuffer    *rTFBuf;

// Text entry object for new value for rLbl object string
TGTextEntry        *rTE;

// OK button invokec procesdure for applying changes
TGButton          *rOKb;

// Cancel button does nothing and close Dialog Window
TGButton      *rCancelb;

char          *tempstr;

// Create Dialog Window
char *StrDialog(char *desc = "Change String Dialog", char *defval = "Text")
{
rTFrm = new TGTransientFrame(gClient->GetRoot(),
                             gClient->GetRoot(),
                             400, 400);

rDgLbl = new TGLabel(rTFrm, desc) ;

rTFBuf = new TGTextBuffer(256);

rTFBuf->AddText(0, defval);

rTE = new TGTextEntry(rTFrm, rTFBuf);

rOKb = new TGTextButton(rTFrm, "Ok", "DialogAction($MSG,$PARM1,$PARM2)",
                                        21
                                       );

rCancelb = new TGTextButton(rTFrm, "Cancel",
                                        "DialogAction($MSG,$PARM1,$PARM2)",
                                        22
                                       );

rTFrm->AddFrame(rDgLbl,   new TGLayoutHints(kLHintsExpandX));

rTFrm->AddFrame(rTE,      new TGLayoutHints(kLHintsExpandX));

rTFrm->AddFrame(rOKb,     new TGLayoutHints(kLHintsExpandX));

rTFrm->AddFrame(rCancelb, new TGLayoutHints(kLHintsExpandX));

rTFrm->SetWindowName("Set String");

rTFrm->MapSubwindows();

rTFrm->Resize(rTFrm->GetDefaultSize());

rTFrm->MapWindow();

gClient->WaitFor(rTFrm);

return(tempstr);
}

// Amalogy for ProcessMessage method
void DialogAction(Long_t msg, Long_t parm1, Long_t parm2)
{
 switch (GET_MSG(msg)) {
    case kC_COMMAND:
       switch (GET_SUBMSG(msg)) {
          case kCM_BUTTON:
             switch (parm1) {
                case 21:
                   tempstr = StrDup(rTE->GetBuffer()->GetString());
                   delete rDgLbl;
                   delete rTE;
                   delete rOKb;
                   delete rCancelb;
                   delete rTFrm;
                   break;
                case 22:
                   delete rDgLbl;
                   delete rTE;
                   delete rOKb;
                   delete rCancelb;
                   delete rTFrm;
                   break;
             }
          default:
             break;
       }
    default:
       break;
 }
}

**************************** Cut Here **************************

Sorry for the layout, this was my first interactive ROOT gui and
I didn't make it nicer ....

Happy ROOTing 

                Radovan



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:31 MET