ROOT logo
// @(#)root/gui:$Id: TGInputDialog.cxx 26223 2008-11-17 11:00:01Z brun $
// Author: David Gonzalez Maline  19/07/2006

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// Input Dialog Widget                                                   //
//                                                                       //
// An Input dialog box                                                   //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TGInputDialog.h"
#include "TGButton.h"
#include "TGLabel.h"
#include "TGTextEntry.h"

ClassImp(TGInputDialog)


//______________________________________________________________________________
TGInputDialog::TGInputDialog(const TGWindow *p, const TGWindow *main, 
                             const char *prompt, const char *defval, 
                             char *retstr, UInt_t options) :
      TGTransientFrame(p, main, 10, 10, options)
{
   /** Create simple input dialog.  

   It is important to know that the case where the constructor in
   which all the variables are initialized to their default values is
   only used for the TBrowser to inspect on the classes. For normal
   use the only variable that should be free is options.

   Variables prompt, defval are the content of the input dialog while
   retstr has to be initialized to a char[256]. In case these are not
   initialized, they will show default values while retstr will be
   automatically allocated by the dialog. However this will make
   impossible to retrieve the value entered by the dialog.

   To see TGInputDialog in use see:
   $ROOTSYS/tutorials/testInputDialog.cxx
   */

   if (!p && !main) {
      MakeZombie();
      return;
   }
   SetCleanup(kDeepCleanup);
   // create prompt label and textentry widget
   fLabel = new TGLabel(this, prompt?prompt:"Introduce value:");

   TGTextBuffer *tbuf = new TGTextBuffer(256);  //will be deleted by TGtextEntry
   tbuf->AddText(0, defval?defval:"");

   fTE = new TGTextEntry(this, tbuf);
   fTE->Resize(260, fTE->GetDefaultHeight());

   AddFrame(fLabel, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 0));
   AddFrame(fTE, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 5));

   // create frame and layout hints for Ok and Cancel buttons
   TGHorizontalFrame *hf = new TGHorizontalFrame(this, 60, 20, kFixedWidth);
   hf->SetCleanup(kDeepCleanup);

   // create OK and Cancel buttons in their own frame (hf)
   UInt_t  width = 0, height = 0;

   fOk = new TGTextButton(hf, "&Ok", 1);
   fOk->Associate(this);
   hf->AddFrame(fOk, new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 5, 5, 0, 0));
   height = fOk->GetDefaultHeight();
   width  = TMath::Max(width, fOk->GetDefaultWidth());

   fCancel = new TGTextButton(hf, "&Cancel", 2);
   fCancel->Associate(this);
   hf->AddFrame(fCancel, new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 5, 5, 0, 0));
   height = fCancel->GetDefaultHeight();
   width  = TMath::Max(width, fCancel->GetDefaultWidth());

   // place button frame (hf) at the bottom
   AddFrame(hf, new TGLayoutHints(kLHintsBottom | kLHintsCenterX, 0, 0, 5, 5));

   // keep buttons centered and with the same width
   hf->Resize((width + 20) * 2, height);

   // set dialog title
   SetWindowName("Get Input");

   // map all widgets and calculate size of dialog
   MapSubwindows();

   width  = GetDefaultWidth();
   height = GetDefaultHeight();

   Resize(width, height);

   // position relative to the parent's window
   CenterOnParent();

   // make the message box non-resizable
   SetWMSize(width, height);
   SetWMSizeHints(width, height, width, height, 0, 0);

   SetMWMHints(kMWMDecorAll | kMWMDecorResizeH  | kMWMDecorMaximize |
                                       kMWMDecorMinimize | kMWMDecorMenu,
                        kMWMFuncAll  | kMWMFuncResize    | kMWMFuncMaximize |
                                       kMWMFuncMinimize,
                        kMWMInputModeless);

   // popup dialog and wait till user replies
   MapWindow();
   fTE->SetFocus();

   if (retstr == 0)
      retstr = new char[256];

   fRetStr = retstr;

   gClient->WaitFor(this);
}

//______________________________________________________________________________
TGInputDialog::~TGInputDialog()
{
   // Cleanup dialog.

   Cleanup();
}

//______________________________________________________________________________
Bool_t TGInputDialog::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
{
   // Handle button and text enter events

   switch (GET_MSG(msg)) {
      case kC_COMMAND:
         switch (GET_SUBMSG(msg)) {
            case kCM_BUTTON:
               switch (parm1) {
                  case 1:
                     // here copy the string from text buffer to return variable
                     strcpy(fRetStr, fTE->GetBuffer()->GetString());
                     delete this;
                     break;
                  case 2:
                     fRetStr[0] = 0;
                     delete this;
                     break;
               }
               default:
                  break;
         }
         break;

      case kC_TEXTENTRY:
         switch (GET_SUBMSG(msg)) {
            case kTE_ENTER:
               // here copy the string from text buffer to return variable
               strcpy(fRetStr, fTE->GetBuffer()->GetString());
               delete this;
               break;
            default:
               break;
         }
         break;

      default:
         break;
   }
   return kTRUE;
}
 TGInputDialog.cxx:1
 TGInputDialog.cxx:2
 TGInputDialog.cxx:3
 TGInputDialog.cxx:4
 TGInputDialog.cxx:5
 TGInputDialog.cxx:6
 TGInputDialog.cxx:7
 TGInputDialog.cxx:8
 TGInputDialog.cxx:9
 TGInputDialog.cxx:10
 TGInputDialog.cxx:11
 TGInputDialog.cxx:12
 TGInputDialog.cxx:13
 TGInputDialog.cxx:14
 TGInputDialog.cxx:15
 TGInputDialog.cxx:16
 TGInputDialog.cxx:17
 TGInputDialog.cxx:18
 TGInputDialog.cxx:19
 TGInputDialog.cxx:20
 TGInputDialog.cxx:21
 TGInputDialog.cxx:22
 TGInputDialog.cxx:23
 TGInputDialog.cxx:24
 TGInputDialog.cxx:25
 TGInputDialog.cxx:26
 TGInputDialog.cxx:27
 TGInputDialog.cxx:28
 TGInputDialog.cxx:29
 TGInputDialog.cxx:30
 TGInputDialog.cxx:31
 TGInputDialog.cxx:32
 TGInputDialog.cxx:33
 TGInputDialog.cxx:34
 TGInputDialog.cxx:35
 TGInputDialog.cxx:36
 TGInputDialog.cxx:37
 TGInputDialog.cxx:38
 TGInputDialog.cxx:39
 TGInputDialog.cxx:40
 TGInputDialog.cxx:41
 TGInputDialog.cxx:42
 TGInputDialog.cxx:43
 TGInputDialog.cxx:44
 TGInputDialog.cxx:45
 TGInputDialog.cxx:46
 TGInputDialog.cxx:47
 TGInputDialog.cxx:48
 TGInputDialog.cxx:49
 TGInputDialog.cxx:50
 TGInputDialog.cxx:51
 TGInputDialog.cxx:52
 TGInputDialog.cxx:53
 TGInputDialog.cxx:54
 TGInputDialog.cxx:55
 TGInputDialog.cxx:56
 TGInputDialog.cxx:57
 TGInputDialog.cxx:58
 TGInputDialog.cxx:59
 TGInputDialog.cxx:60
 TGInputDialog.cxx:61
 TGInputDialog.cxx:62
 TGInputDialog.cxx:63
 TGInputDialog.cxx:64
 TGInputDialog.cxx:65
 TGInputDialog.cxx:66
 TGInputDialog.cxx:67
 TGInputDialog.cxx:68
 TGInputDialog.cxx:69
 TGInputDialog.cxx:70
 TGInputDialog.cxx:71
 TGInputDialog.cxx:72
 TGInputDialog.cxx:73
 TGInputDialog.cxx:74
 TGInputDialog.cxx:75
 TGInputDialog.cxx:76
 TGInputDialog.cxx:77
 TGInputDialog.cxx:78
 TGInputDialog.cxx:79
 TGInputDialog.cxx:80
 TGInputDialog.cxx:81
 TGInputDialog.cxx:82
 TGInputDialog.cxx:83
 TGInputDialog.cxx:84
 TGInputDialog.cxx:85
 TGInputDialog.cxx:86
 TGInputDialog.cxx:87
 TGInputDialog.cxx:88
 TGInputDialog.cxx:89
 TGInputDialog.cxx:90
 TGInputDialog.cxx:91
 TGInputDialog.cxx:92
 TGInputDialog.cxx:93
 TGInputDialog.cxx:94
 TGInputDialog.cxx:95
 TGInputDialog.cxx:96
 TGInputDialog.cxx:97
 TGInputDialog.cxx:98
 TGInputDialog.cxx:99
 TGInputDialog.cxx:100
 TGInputDialog.cxx:101
 TGInputDialog.cxx:102
 TGInputDialog.cxx:103
 TGInputDialog.cxx:104
 TGInputDialog.cxx:105
 TGInputDialog.cxx:106
 TGInputDialog.cxx:107
 TGInputDialog.cxx:108
 TGInputDialog.cxx:109
 TGInputDialog.cxx:110
 TGInputDialog.cxx:111
 TGInputDialog.cxx:112
 TGInputDialog.cxx:113
 TGInputDialog.cxx:114
 TGInputDialog.cxx:115
 TGInputDialog.cxx:116
 TGInputDialog.cxx:117
 TGInputDialog.cxx:118
 TGInputDialog.cxx:119
 TGInputDialog.cxx:120
 TGInputDialog.cxx:121
 TGInputDialog.cxx:122
 TGInputDialog.cxx:123
 TGInputDialog.cxx:124
 TGInputDialog.cxx:125
 TGInputDialog.cxx:126
 TGInputDialog.cxx:127
 TGInputDialog.cxx:128
 TGInputDialog.cxx:129
 TGInputDialog.cxx:130
 TGInputDialog.cxx:131
 TGInputDialog.cxx:132
 TGInputDialog.cxx:133
 TGInputDialog.cxx:134
 TGInputDialog.cxx:135
 TGInputDialog.cxx:136
 TGInputDialog.cxx:137
 TGInputDialog.cxx:138
 TGInputDialog.cxx:139
 TGInputDialog.cxx:140
 TGInputDialog.cxx:141
 TGInputDialog.cxx:142
 TGInputDialog.cxx:143
 TGInputDialog.cxx:144
 TGInputDialog.cxx:145
 TGInputDialog.cxx:146
 TGInputDialog.cxx:147
 TGInputDialog.cxx:148
 TGInputDialog.cxx:149
 TGInputDialog.cxx:150
 TGInputDialog.cxx:151
 TGInputDialog.cxx:152
 TGInputDialog.cxx:153
 TGInputDialog.cxx:154
 TGInputDialog.cxx:155
 TGInputDialog.cxx:156
 TGInputDialog.cxx:157
 TGInputDialog.cxx:158
 TGInputDialog.cxx:159
 TGInputDialog.cxx:160
 TGInputDialog.cxx:161
 TGInputDialog.cxx:162
 TGInputDialog.cxx:163
 TGInputDialog.cxx:164
 TGInputDialog.cxx:165
 TGInputDialog.cxx:166
 TGInputDialog.cxx:167
 TGInputDialog.cxx:168
 TGInputDialog.cxx:169
 TGInputDialog.cxx:170
 TGInputDialog.cxx:171
 TGInputDialog.cxx:172
 TGInputDialog.cxx:173
 TGInputDialog.cxx:174
 TGInputDialog.cxx:175
 TGInputDialog.cxx:176
 TGInputDialog.cxx:177
 TGInputDialog.cxx:178