// @(#)root/gui:$Id$
// Author: David Gonzalez Maline  21/10/2008

/*************************************************************************
 * 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.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// Tree Input Widget                                                    //
//                                                                      //
// An dialog box that asks the user for the variables and cuts          //
// of the selected tree in the fitpanel.                                //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

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

enum ETreeInput {
   kTI_TEVARS, kTI_TECUTS
};

ClassImp(TTreeInput)

//______________________________________________________________________________
   TTreeInput::TTreeInput(const TGWindow *p, const TGWindow *main,
                          char *strvars, char *strcuts):
      TGTransientFrame(p, main, 10, 10, kVerticalFrame),
      fStrvars(strvars),
      fStrcuts(strcuts)
{
   // Create simple input dialog.

   if (!p && !main) {
      MakeZombie();
      return;
   }
   SetCleanup(kDeepCleanup);

   TGLabel *label = new TGLabel(this, "Selected Variables: ");
   AddFrame(label, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 0));

   TGTextBuffer *tbuf = new TGTextBuffer(256);  //will be deleted by TGtextEntry
   fTEVars = new TGTextEntry(this, tbuf, kTI_TEVARS);
   fTEVars->Resize(260, fTEVars->GetDefaultHeight());
   AddFrame(fTEVars, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 5));

   label = new TGLabel(this, "Selected Cuts: ");
   AddFrame(label, new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 0));

   tbuf = new TGTextBuffer(256);  //will be deleted by TGtextEntry
   fTECuts = new TGTextEntry(this, tbuf, kTI_TECUTS);
   fTECuts->Resize(260, fTECuts->GetDefaultHeight());
   AddFrame(fTECuts, 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();
   fTEVars->SetFocus();

   gClient->WaitFor(this);
}

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

   Cleanup();
}

//______________________________________________________________________________
Bool_t TTreeInput::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
                     // see TFitEditor.cxx for the maximum length:
                     // char variables[256] = {0}; char cuts[256] = {0};
                     strlcpy(fStrvars, fTEVars->GetBuffer()->GetString(), 256);
                     strlcpy(fStrcuts, fTECuts->GetBuffer()->GetString(), 256);
                     delete this;
                     break;
                  case 2:
                     fStrvars[0] = 0;
                     fStrcuts[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
               // see TFitEditor.cxx for the maximum length:
               // char variables[256] = {0}; char cuts[256] = {0};
               strlcpy(fStrvars, fTEVars->GetBuffer()->GetString(), 256);
               strlcpy(fStrcuts, fTECuts->GetBuffer()->GetString(), 256);
               delete this;
               break;
            case kTE_TAB:
               if ( parm1 == kTI_TEVARS )
                  fTECuts->SetFocus();
               else if ( parm1 == kTI_TECUTS )
                  fTEVars->SetFocus();
               break;
            default:
               break;
         }
         break;

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