// @(#)root/eve:$Id$
// Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

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

#include "TEveGValuators.h"

#include "TMath.h"
#include "TGLabel.h"
#include "TGSlider.h"
#include "TGDoubleSlider.h"


/******************************************************************************/
// TEveGValuatorBase
/******************************************************************************/

//______________________________________________________________________________
//
// Base class for composite GUI elements for setting of numeric
// values.

ClassImp(TEveGValuatorBase);

//______________________________________________________________________________
TEveGValuatorBase::TEveGValuatorBase(const TGWindow *p, const char* name,
                                     UInt_t w, UInt_t h, Int_t widgetId) :
   TGCompositeFrame(p, w, h), TGWidget(widgetId),

   fLabelWidth (0),
   fAlignRight (kFALSE),
   fShowSlider (kTRUE),

   fNELength (5),
   fNEHeight (20),

   fLabel (0)
{
   // Constructor.

   SetName(name);
}


/******************************************************************************/
// TEveGValuator
/******************************************************************************/

//______________________________________________________________________________
//
// Composite GUI element for single value selection (supports label,
// number-entry and slider).

ClassImp(TEveGValuator);

//______________________________________________________________________________
TEveGValuator::TEveGValuator(const TGWindow *p, const char* title,
                             UInt_t w, UInt_t h, Int_t widgetId) :
   TEveGValuatorBase(p, title, w, h, widgetId),

   fValue (0),
   fMin   (0),
   fMax   (0),

   fSliderNewLine (kFALSE),
   fSliderDivs    (-1),
   fEntry  (0),
   fSlider (0)
{
   // Constructor.
}

//______________________________________________________________________________
void TEveGValuator::Build(Bool_t connect)
{
   // Create sub-components (label, number entry, slider).

   TGCompositeFrame *hf1, *hfs;
   if(fShowSlider && fSliderNewLine) {
      SetLayoutManager(new TGVerticalLayout(this));
      hf1 = new TGHorizontalFrame(this);
      hf1->SetLayoutManager(new TGHorizontalLayout(hf1));
      AddFrame(hf1, new TGLayoutHints(kLHintsTop, 0,0,0,0));
      hfs = new TGHorizontalFrame(this);
      hfs->SetLayoutManager(new TGHorizontalLayout(hfs));
      AddFrame(hfs, new TGLayoutHints(kLHintsTop, 0,0,0,0));
   } else {
      hf1 = this;
      hfs = this;
      SetLayoutManager(new TGHorizontalLayout(this));
   }

   // label
   {
      TGLayoutHints *labh, *labfrh;
      if(fAlignRight) {
         labh   = new TGLayoutHints(kLHintsRight | kLHintsBottom, 0,0,0,0);
         labfrh = new TGLayoutHints(kLHintsRight);
      } else {
         labh   = new TGLayoutHints(kLHintsLeft  | kLHintsBottom, 0,0,0,0);
         labfrh = new TGLayoutHints(kLHintsLeft);
      }
      TGCompositeFrame *labfr =
         new TGHorizontalFrame(hf1, fLabelWidth, fNEHeight,
                               fLabelWidth != 0 ? kFixedSize : kFixedHeight);
      fLabel = new TGLabel(labfr, fName);
      labfr->AddFrame(fLabel, labh);
      hf1->AddFrame(labfr, labfrh);
   }

   // number-entry
   TGLayoutHints*  elh =  new TGLayoutHints(kLHintsLeft, 0,0,0,0);
   fEntry = new TGNumberEntry(hf1, 0, fNELength);
   fEntry->SetHeight(fNEHeight);
   fEntry->GetNumberEntry()->SetToolTipText("Enter Slider Value");
   hf1->AddFrame(fEntry, elh);

   if (connect)
      fEntry->Connect("ValueSet(Long_t)",
                      "TEveGValuator", this, "EntryCallback()");

   // slider
   if(fShowSlider) {
      fSlider = new TGHSlider(hfs, GetWidth(), kSlider1 | kScaleBoth);
      hfs->AddFrame(fSlider, new TGLayoutHints(kLHintsLeft|kLHintsTop, 1,1,0,0));

      if (connect)
         fSlider->Connect("PositionChanged(Int_t)",
                          "TEveGValuator", this, "SliderCallback()");
   }
}

//______________________________________________________________________________
void TEveGValuator::SetLimits(Float_t min, Float_t max, Int_t npos,
                              TGNumberFormat::EStyle nef)
{
   // Set limits of the represented value.

   fMin = Float_t(min);
   fMax = Float_t(max);
   fEntry->SetFormat(nef);
   fEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);

   if(fSlider) {
      fSliderDivs = npos - 1;
      fSlider->SetRange(0, fSliderDivs);
   }
}

//______________________________________________________________________________
void TEveGValuator::SetLimits(Int_t min, Int_t max)
{
   // Set limits of the represented value for integer values.

   fMin = Float_t(min);
   fMax = Float_t(max);
   fEntry->SetFormat(TGNumberFormat::kNESInteger);
   fEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);

   if(fSlider) {
      fSliderDivs = max - min;
      fSlider->SetRange(0, fSliderDivs);
   }
}

//______________________________________________________________________________
Int_t TEveGValuator::CalcSliderPos(Float_t v)
{
   // Return slider position for given value.

   return (Int_t) TMath::Nint((v - fMin)*fSliderDivs/(fMax - fMin));
}

//______________________________________________________________________________
void TEveGValuator::EntryCallback()
{
   // Callback for change in number-entry.

   fValue = fEntry->GetNumber();
   if(fSlider) {
      fSlider->SetPosition(CalcSliderPos(fValue));
   }
   ValueSet(fValue);
}

//______________________________________________________________________________
void TEveGValuator::SliderCallback()
{
   // Callback for change in slider position.

   fValue = fMin + fSlider->GetPosition()*(fMax-fMin)/fSliderDivs;
   fEntry->SetNumber(fValue);
   ValueSet(fValue);
}


//______________________________________________________________________________
void TEveGValuator::ValueSet(Double_t val)
{
   // Emit "ValueSet(Double_t)" signal.

   Emit("ValueSet(Double_t)", val);
}

//______________________________________________________________________________
void TEveGValuator::SetValue(Float_t val, Bool_t emit)
{
   // Set value, optionally emit signal.

   fValue = val;
   fEntry->SetNumber(fValue);

   if(fSlider){
      fSlider->SetPosition(CalcSliderPos(fValue));
   }
   if(emit)
      ValueSet(val);
}

//______________________________________________________________________________
void TEveGValuator::SetToolTip(const char* tip)
{
   // Set the tooltip of the number-entry.

   fEntry->GetNumberEntry()->SetToolTipText(tip);
}

//______________________________________________________________________________
void TEveGValuator::SetEnabled(Bool_t state)
{
   // Set enabled state of the whole widget.

   fEntry->GetNumberEntry()->SetEnabled(state);
   fEntry->GetButtonUp()->SetEnabled(state);
   fEntry->GetButtonDown()->SetEnabled(state);
   if(fSlider) {
      if(state) fSlider->MapWindow();
      else      fSlider->UnmapWindow();
   }
}


/******************************************************************************/
// TEveGDoubleValuator
/******************************************************************************/

//______________________________________________________________________________
//
// Composite GUI element for selection of range (label, two
// number-entries and double-slider).

ClassImp(TEveGDoubleValuator);

//______________________________________________________________________________
TEveGDoubleValuator::TEveGDoubleValuator(const TGWindow *p, const char* title,
                                         UInt_t w, UInt_t h, Int_t widgetId) :
   TEveGValuatorBase(p, title, w, h, widgetId),

   fMinEntry(0),
   fMaxEntry(0),
   fSlider(0)
{
   // Constructor.
}

//______________________________________________________________________________
void TEveGDoubleValuator::Build(Bool_t connect)
{
   // Create sub-components (label, number entries, double-slider).

   TGCompositeFrame *hf1, *hfs;
   if(fShowSlider) {
      SetLayoutManager(new TGVerticalLayout(this));
      hf1 = new TGHorizontalFrame(this);
      hf1->SetLayoutManager(new TGHorizontalLayout(hf1));
      AddFrame(hf1, new TGLayoutHints(kLHintsTop));
      hfs = new TGHorizontalFrame(this);
      hfs->SetLayoutManager(new TGHorizontalLayout(hfs));
      AddFrame(hfs, new TGLayoutHints(kLHintsTop));
   } else {
      hf1 = this;
      hfs = this;
      SetLayoutManager(new TGHorizontalLayout(this));
   }

   // label
   TGLayoutHints* lh;
   if(fAlignRight)
      lh = new TGLayoutHints(kLHintsRight | kLHintsBottom, 4,0,0,0);
   else
      lh = new TGLayoutHints(kLHintsLeft  | kLHintsBottom, 0,4,0,0);

   if(fLabelWidth > 0) {
      TGCompositeFrame *lf = new TGHorizontalFrame(hf1, fLabelWidth, fNEHeight, kFixedSize);
      fLabel = new TGLabel(lf, fName);
      lf->AddFrame(fLabel, lh);
      // add label frame to top horizontal frame
      TGLayoutHints* lfh = new TGLayoutHints(kLHintsLeft, 0,0,0,0);
      hf1->AddFrame(lf, lfh);
   } else {
      fLabel = new TGLabel(hf1, fName);
      hf1->AddFrame(fLabel, lh);
   }

   // entries
   fMinEntry = new TGNumberEntry(hf1, 0, fNELength);
   fMinEntry->SetHeight(fNEHeight);
   fMinEntry->GetNumberEntry()->SetToolTipText("Enter Slider Min Value");
   hf1->AddFrame(fMinEntry, new TGLayoutHints(kLHintsLeft, 0,0,0,0));
   if (connect)
      fMinEntry->Connect("ValueSet(Long_t)",
                         "TEveGDoubleValuator", this, "MinEntryCallback()");

   fMaxEntry = new TGNumberEntry(hf1, 0, fNELength);
   fMaxEntry->SetHeight(fNEHeight);
   fMaxEntry->GetNumberEntry()->SetToolTipText("Enter Slider Max Value");
   hf1->AddFrame(fMaxEntry,  new TGLayoutHints(kLHintsLeft, 2,0,0,0));
   if (connect)
      fMaxEntry->Connect("ValueSet(Long_t)",
                         "TEveGDoubleValuator", this, "MaxEntryCallback()");

   // slider
   if(fShowSlider) {
      fSlider = new TGDoubleHSlider(hfs, GetWidth(), kDoubleScaleBoth);
      hfs->AddFrame(fSlider, new TGLayoutHints(kLHintsTop|kLHintsLeft, 0,0,1,0));
      if (connect)
         fSlider->Connect("PositionChanged()",
                          "TEveGDoubleValuator", this, "SliderCallback()");
   }
}

//______________________________________________________________________________
void TEveGDoubleValuator::SetLimits(Int_t min, Int_t max)
{
   // Set limits of the represented range for integer values.

   fMinEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);
   fMinEntry->SetFormat(TGNumberFormat::kNESInteger);
   fMaxEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);
   fMaxEntry->SetFormat(TGNumberFormat::kNESInteger);

   if(fSlider) {
      fSlider->SetRange(min, max);
   }
}

//______________________________________________________________________________
void TEveGDoubleValuator::SetLimits(Float_t min, Float_t max,
                                    TGNumberFormat::EStyle nef)
{
   // Set limits of the represented range.

   //  printf("TEveGDoubleValuator::SetLimits(Float_t min, Float_t max, Int_ \n");
   fMinEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);
   fMinEntry->SetFormat(nef);
   fMaxEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);
   fMaxEntry->SetFormat(nef);

   if(fSlider) fSlider->SetRange(min, max);
}

//______________________________________________________________________________
void TEveGDoubleValuator::MinEntryCallback()
{
   // Callback for change in low number-entry.

   if(GetMin() > GetMax())
      fMaxEntry->SetNumber(GetMin());
   if(fSlider) fSlider->SetPosition(GetMin(), GetMax());
   ValueSet();
}

//______________________________________________________________________________
void TEveGDoubleValuator::MaxEntryCallback()
{
   // Callback for change in high number-entry.

   if(GetMax() < GetMin())
      fMinEntry->SetNumber(GetMax());
   if(fSlider) fSlider->SetPosition(GetMin(), GetMax());
   ValueSet();
}

//______________________________________________________________________________
void TEveGDoubleValuator::SliderCallback()
{
   // Callback for change in slider position / width.

   Float_t minp, maxp;
   fSlider->GetPosition(minp, maxp);
   fMinEntry->SetNumber(minp);
   fMaxEntry->SetNumber(maxp);
   ValueSet();
}

//______________________________________________________________________________
void TEveGDoubleValuator::SetValues(Float_t min, Float_t max, Bool_t emit)
{
   // Set min/max values, optionally emit signal.

   fMinEntry->SetNumber(min);
   fMaxEntry->SetNumber(max);

   if(fSlider) fSlider->SetPosition(min, max);
   if(emit)    ValueSet();
}

//______________________________________________________________________________
void TEveGDoubleValuator::ValueSet()
{
   // Emit "ValueSet()" signal.

   Emit("ValueSet()");
}


/******************************************************************************/
// TEveGTriVecValuator
/******************************************************************************/

//______________________________________________________________________________
//
// Composite GUI element for setting three numerical values (label,
// three number-entries). All three values have the same number-format
// and value-range.

ClassImp(TEveGTriVecValuator);

//______________________________________________________________________________
TEveGTriVecValuator::TEveGTriVecValuator(const TGWindow *p, const char* name,
                                         UInt_t w, UInt_t h, Int_t widgetId) :
   TGCompositeFrame(p, w, h), TGWidget(widgetId),

   fLabelWidth (0),
   fNELength   (5),
   fNEHeight   (20)
{
   // Constructor.

   SetName(name);
}

//______________________________________________________________________________
void TEveGTriVecValuator::Build(Bool_t vertical, const char* lab0, const char* lab1, const char* lab2)
{
   // Create sub-components (label, number entries).

   if (vertical) SetLayoutManager(new TGVerticalLayout(this));
   else          SetLayoutManager(new TGHorizontalLayout(this));

   const char *labs[3] = { lab0, lab1, lab2 };
   TGLayoutHints* lh;
   for (Int_t i=0; i<3; ++i) {
      fVal[i] = new TEveGValuator(this, labs[i], 10, 0);
      fVal[i]->SetLabelWidth(fLabelWidth);
      fVal[i]->SetShowSlider(kFALSE);
      fVal[i]->SetNELength(fNELength);
      fVal[i]->SetNEHeight(fNEHeight);
      fVal[i]->Build();
      fVal[i]->Connect
         ("ValueSet(Double_t)", "TEveGTriVecValuator", this, "ValueSet()");
      if (vertical) lh = new TGLayoutHints(kLHintsTop,  1, 1, 1, 1);
      else          lh = new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 1, 1);
      AddFrame(fVal[i], lh);
   }
}

//______________________________________________________________________________
void TEveGTriVecValuator::ValueSet()
{
   // Emit "ValueSet()" signal.

   Emit("ValueSet()");
}

/******************************************************************************/

//______________________________________________________________________________
void TEveGTriVecValuator::SetLimits(Int_t min, Int_t max)
{
   // Set limits for all three number-entries, integer values.

   for (Int_t i=0; i<3; ++i)
      fVal[i]->SetLimits(min, max);
}

//______________________________________________________________________________
void TEveGTriVecValuator::SetLimits(Float_t min, Float_t max,
                                    TGNumberFormat::EStyle nef)
{
   // Set limits for all three number-entries.

   for (Int_t i=0; i<3; ++i)
      fVal[i]->SetLimits(min, max, 0, nef);
}


 TEveGValuators.cxx:1
 TEveGValuators.cxx:2
 TEveGValuators.cxx:3
 TEveGValuators.cxx:4
 TEveGValuators.cxx:5
 TEveGValuators.cxx:6
 TEveGValuators.cxx:7
 TEveGValuators.cxx:8
 TEveGValuators.cxx:9
 TEveGValuators.cxx:10
 TEveGValuators.cxx:11
 TEveGValuators.cxx:12
 TEveGValuators.cxx:13
 TEveGValuators.cxx:14
 TEveGValuators.cxx:15
 TEveGValuators.cxx:16
 TEveGValuators.cxx:17
 TEveGValuators.cxx:18
 TEveGValuators.cxx:19
 TEveGValuators.cxx:20
 TEveGValuators.cxx:21
 TEveGValuators.cxx:22
 TEveGValuators.cxx:23
 TEveGValuators.cxx:24
 TEveGValuators.cxx:25
 TEveGValuators.cxx:26
 TEveGValuators.cxx:27
 TEveGValuators.cxx:28
 TEveGValuators.cxx:29
 TEveGValuators.cxx:30
 TEveGValuators.cxx:31
 TEveGValuators.cxx:32
 TEveGValuators.cxx:33
 TEveGValuators.cxx:34
 TEveGValuators.cxx:35
 TEveGValuators.cxx:36
 TEveGValuators.cxx:37
 TEveGValuators.cxx:38
 TEveGValuators.cxx:39
 TEveGValuators.cxx:40
 TEveGValuators.cxx:41
 TEveGValuators.cxx:42
 TEveGValuators.cxx:43
 TEveGValuators.cxx:44
 TEveGValuators.cxx:45
 TEveGValuators.cxx:46
 TEveGValuators.cxx:47
 TEveGValuators.cxx:48
 TEveGValuators.cxx:49
 TEveGValuators.cxx:50
 TEveGValuators.cxx:51
 TEveGValuators.cxx:52
 TEveGValuators.cxx:53
 TEveGValuators.cxx:54
 TEveGValuators.cxx:55
 TEveGValuators.cxx:56
 TEveGValuators.cxx:57
 TEveGValuators.cxx:58
 TEveGValuators.cxx:59
 TEveGValuators.cxx:60
 TEveGValuators.cxx:61
 TEveGValuators.cxx:62
 TEveGValuators.cxx:63
 TEveGValuators.cxx:64
 TEveGValuators.cxx:65
 TEveGValuators.cxx:66
 TEveGValuators.cxx:67
 TEveGValuators.cxx:68
 TEveGValuators.cxx:69
 TEveGValuators.cxx:70
 TEveGValuators.cxx:71
 TEveGValuators.cxx:72
 TEveGValuators.cxx:73
 TEveGValuators.cxx:74
 TEveGValuators.cxx:75
 TEveGValuators.cxx:76
 TEveGValuators.cxx:77
 TEveGValuators.cxx:78
 TEveGValuators.cxx:79
 TEveGValuators.cxx:80
 TEveGValuators.cxx:81
 TEveGValuators.cxx:82
 TEveGValuators.cxx:83
 TEveGValuators.cxx:84
 TEveGValuators.cxx:85
 TEveGValuators.cxx:86
 TEveGValuators.cxx:87
 TEveGValuators.cxx:88
 TEveGValuators.cxx:89
 TEveGValuators.cxx:90
 TEveGValuators.cxx:91
 TEveGValuators.cxx:92
 TEveGValuators.cxx:93
 TEveGValuators.cxx:94
 TEveGValuators.cxx:95
 TEveGValuators.cxx:96
 TEveGValuators.cxx:97
 TEveGValuators.cxx:98
 TEveGValuators.cxx:99
 TEveGValuators.cxx:100
 TEveGValuators.cxx:101
 TEveGValuators.cxx:102
 TEveGValuators.cxx:103
 TEveGValuators.cxx:104
 TEveGValuators.cxx:105
 TEveGValuators.cxx:106
 TEveGValuators.cxx:107
 TEveGValuators.cxx:108
 TEveGValuators.cxx:109
 TEveGValuators.cxx:110
 TEveGValuators.cxx:111
 TEveGValuators.cxx:112
 TEveGValuators.cxx:113
 TEveGValuators.cxx:114
 TEveGValuators.cxx:115
 TEveGValuators.cxx:116
 TEveGValuators.cxx:117
 TEveGValuators.cxx:118
 TEveGValuators.cxx:119
 TEveGValuators.cxx:120
 TEveGValuators.cxx:121
 TEveGValuators.cxx:122
 TEveGValuators.cxx:123
 TEveGValuators.cxx:124
 TEveGValuators.cxx:125
 TEveGValuators.cxx:126
 TEveGValuators.cxx:127
 TEveGValuators.cxx:128
 TEveGValuators.cxx:129
 TEveGValuators.cxx:130
 TEveGValuators.cxx:131
 TEveGValuators.cxx:132
 TEveGValuators.cxx:133
 TEveGValuators.cxx:134
 TEveGValuators.cxx:135
 TEveGValuators.cxx:136
 TEveGValuators.cxx:137
 TEveGValuators.cxx:138
 TEveGValuators.cxx:139
 TEveGValuators.cxx:140
 TEveGValuators.cxx:141
 TEveGValuators.cxx:142
 TEveGValuators.cxx:143
 TEveGValuators.cxx:144
 TEveGValuators.cxx:145
 TEveGValuators.cxx:146
 TEveGValuators.cxx:147
 TEveGValuators.cxx:148
 TEveGValuators.cxx:149
 TEveGValuators.cxx:150
 TEveGValuators.cxx:151
 TEveGValuators.cxx:152
 TEveGValuators.cxx:153
 TEveGValuators.cxx:154
 TEveGValuators.cxx:155
 TEveGValuators.cxx:156
 TEveGValuators.cxx:157
 TEveGValuators.cxx:158
 TEveGValuators.cxx:159
 TEveGValuators.cxx:160
 TEveGValuators.cxx:161
 TEveGValuators.cxx:162
 TEveGValuators.cxx:163
 TEveGValuators.cxx:164
 TEveGValuators.cxx:165
 TEveGValuators.cxx:166
 TEveGValuators.cxx:167
 TEveGValuators.cxx:168
 TEveGValuators.cxx:169
 TEveGValuators.cxx:170
 TEveGValuators.cxx:171
 TEveGValuators.cxx:172
 TEveGValuators.cxx:173
 TEveGValuators.cxx:174
 TEveGValuators.cxx:175
 TEveGValuators.cxx:176
 TEveGValuators.cxx:177
 TEveGValuators.cxx:178
 TEveGValuators.cxx:179
 TEveGValuators.cxx:180
 TEveGValuators.cxx:181
 TEveGValuators.cxx:182
 TEveGValuators.cxx:183
 TEveGValuators.cxx:184
 TEveGValuators.cxx:185
 TEveGValuators.cxx:186
 TEveGValuators.cxx:187
 TEveGValuators.cxx:188
 TEveGValuators.cxx:189
 TEveGValuators.cxx:190
 TEveGValuators.cxx:191
 TEveGValuators.cxx:192
 TEveGValuators.cxx:193
 TEveGValuators.cxx:194
 TEveGValuators.cxx:195
 TEveGValuators.cxx:196
 TEveGValuators.cxx:197
 TEveGValuators.cxx:198
 TEveGValuators.cxx:199
 TEveGValuators.cxx:200
 TEveGValuators.cxx:201
 TEveGValuators.cxx:202
 TEveGValuators.cxx:203
 TEveGValuators.cxx:204
 TEveGValuators.cxx:205
 TEveGValuators.cxx:206
 TEveGValuators.cxx:207
 TEveGValuators.cxx:208
 TEveGValuators.cxx:209
 TEveGValuators.cxx:210
 TEveGValuators.cxx:211
 TEveGValuators.cxx:212
 TEveGValuators.cxx:213
 TEveGValuators.cxx:214
 TEveGValuators.cxx:215
 TEveGValuators.cxx:216
 TEveGValuators.cxx:217
 TEveGValuators.cxx:218
 TEveGValuators.cxx:219
 TEveGValuators.cxx:220
 TEveGValuators.cxx:221
 TEveGValuators.cxx:222
 TEveGValuators.cxx:223
 TEveGValuators.cxx:224
 TEveGValuators.cxx:225
 TEveGValuators.cxx:226
 TEveGValuators.cxx:227
 TEveGValuators.cxx:228
 TEveGValuators.cxx:229
 TEveGValuators.cxx:230
 TEveGValuators.cxx:231
 TEveGValuators.cxx:232
 TEveGValuators.cxx:233
 TEveGValuators.cxx:234
 TEveGValuators.cxx:235
 TEveGValuators.cxx:236
 TEveGValuators.cxx:237
 TEveGValuators.cxx:238
 TEveGValuators.cxx:239
 TEveGValuators.cxx:240
 TEveGValuators.cxx:241
 TEveGValuators.cxx:242
 TEveGValuators.cxx:243
 TEveGValuators.cxx:244
 TEveGValuators.cxx:245
 TEveGValuators.cxx:246
 TEveGValuators.cxx:247
 TEveGValuators.cxx:248
 TEveGValuators.cxx:249
 TEveGValuators.cxx:250
 TEveGValuators.cxx:251
 TEveGValuators.cxx:252
 TEveGValuators.cxx:253
 TEveGValuators.cxx:254
 TEveGValuators.cxx:255
 TEveGValuators.cxx:256
 TEveGValuators.cxx:257
 TEveGValuators.cxx:258
 TEveGValuators.cxx:259
 TEveGValuators.cxx:260
 TEveGValuators.cxx:261
 TEveGValuators.cxx:262
 TEveGValuators.cxx:263
 TEveGValuators.cxx:264
 TEveGValuators.cxx:265
 TEveGValuators.cxx:266
 TEveGValuators.cxx:267
 TEveGValuators.cxx:268
 TEveGValuators.cxx:269
 TEveGValuators.cxx:270
 TEveGValuators.cxx:271
 TEveGValuators.cxx:272
 TEveGValuators.cxx:273
 TEveGValuators.cxx:274
 TEveGValuators.cxx:275
 TEveGValuators.cxx:276
 TEveGValuators.cxx:277
 TEveGValuators.cxx:278
 TEveGValuators.cxx:279
 TEveGValuators.cxx:280
 TEveGValuators.cxx:281
 TEveGValuators.cxx:282
 TEveGValuators.cxx:283
 TEveGValuators.cxx:284
 TEveGValuators.cxx:285
 TEveGValuators.cxx:286
 TEveGValuators.cxx:287
 TEveGValuators.cxx:288
 TEveGValuators.cxx:289
 TEveGValuators.cxx:290
 TEveGValuators.cxx:291
 TEveGValuators.cxx:292
 TEveGValuators.cxx:293
 TEveGValuators.cxx:294
 TEveGValuators.cxx:295
 TEveGValuators.cxx:296
 TEveGValuators.cxx:297
 TEveGValuators.cxx:298
 TEveGValuators.cxx:299
 TEveGValuators.cxx:300
 TEveGValuators.cxx:301
 TEveGValuators.cxx:302
 TEveGValuators.cxx:303
 TEveGValuators.cxx:304
 TEveGValuators.cxx:305
 TEveGValuators.cxx:306
 TEveGValuators.cxx:307
 TEveGValuators.cxx:308
 TEveGValuators.cxx:309
 TEveGValuators.cxx:310
 TEveGValuators.cxx:311
 TEveGValuators.cxx:312
 TEveGValuators.cxx:313
 TEveGValuators.cxx:314
 TEveGValuators.cxx:315
 TEveGValuators.cxx:316
 TEveGValuators.cxx:317
 TEveGValuators.cxx:318
 TEveGValuators.cxx:319
 TEveGValuators.cxx:320
 TEveGValuators.cxx:321
 TEveGValuators.cxx:322
 TEveGValuators.cxx:323
 TEveGValuators.cxx:324
 TEveGValuators.cxx:325
 TEveGValuators.cxx:326
 TEveGValuators.cxx:327
 TEveGValuators.cxx:328
 TEveGValuators.cxx:329
 TEveGValuators.cxx:330
 TEveGValuators.cxx:331
 TEveGValuators.cxx:332
 TEveGValuators.cxx:333
 TEveGValuators.cxx:334
 TEveGValuators.cxx:335
 TEveGValuators.cxx:336
 TEveGValuators.cxx:337
 TEveGValuators.cxx:338
 TEveGValuators.cxx:339
 TEveGValuators.cxx:340
 TEveGValuators.cxx:341
 TEveGValuators.cxx:342
 TEveGValuators.cxx:343
 TEveGValuators.cxx:344
 TEveGValuators.cxx:345
 TEveGValuators.cxx:346
 TEveGValuators.cxx:347
 TEveGValuators.cxx:348
 TEveGValuators.cxx:349
 TEveGValuators.cxx:350
 TEveGValuators.cxx:351
 TEveGValuators.cxx:352
 TEveGValuators.cxx:353
 TEveGValuators.cxx:354
 TEveGValuators.cxx:355
 TEveGValuators.cxx:356
 TEveGValuators.cxx:357
 TEveGValuators.cxx:358
 TEveGValuators.cxx:359
 TEveGValuators.cxx:360
 TEveGValuators.cxx:361
 TEveGValuators.cxx:362
 TEveGValuators.cxx:363
 TEveGValuators.cxx:364
 TEveGValuators.cxx:365
 TEveGValuators.cxx:366
 TEveGValuators.cxx:367
 TEveGValuators.cxx:368
 TEveGValuators.cxx:369
 TEveGValuators.cxx:370
 TEveGValuators.cxx:371
 TEveGValuators.cxx:372
 TEveGValuators.cxx:373
 TEveGValuators.cxx:374
 TEveGValuators.cxx:375
 TEveGValuators.cxx:376
 TEveGValuators.cxx:377
 TEveGValuators.cxx:378
 TEveGValuators.cxx:379
 TEveGValuators.cxx:380
 TEveGValuators.cxx:381
 TEveGValuators.cxx:382
 TEveGValuators.cxx:383
 TEveGValuators.cxx:384
 TEveGValuators.cxx:385
 TEveGValuators.cxx:386
 TEveGValuators.cxx:387
 TEveGValuators.cxx:388
 TEveGValuators.cxx:389
 TEveGValuators.cxx:390
 TEveGValuators.cxx:391
 TEveGValuators.cxx:392
 TEveGValuators.cxx:393
 TEveGValuators.cxx:394
 TEveGValuators.cxx:395
 TEveGValuators.cxx:396
 TEveGValuators.cxx:397
 TEveGValuators.cxx:398
 TEveGValuators.cxx:399
 TEveGValuators.cxx:400
 TEveGValuators.cxx:401
 TEveGValuators.cxx:402
 TEveGValuators.cxx:403
 TEveGValuators.cxx:404
 TEveGValuators.cxx:405
 TEveGValuators.cxx:406
 TEveGValuators.cxx:407
 TEveGValuators.cxx:408
 TEveGValuators.cxx:409
 TEveGValuators.cxx:410
 TEveGValuators.cxx:411
 TEveGValuators.cxx:412
 TEveGValuators.cxx:413
 TEveGValuators.cxx:414
 TEveGValuators.cxx:415
 TEveGValuators.cxx:416
 TEveGValuators.cxx:417
 TEveGValuators.cxx:418
 TEveGValuators.cxx:419
 TEveGValuators.cxx:420
 TEveGValuators.cxx:421
 TEveGValuators.cxx:422
 TEveGValuators.cxx:423
 TEveGValuators.cxx:424
 TEveGValuators.cxx:425
 TEveGValuators.cxx:426
 TEveGValuators.cxx:427
 TEveGValuators.cxx:428
 TEveGValuators.cxx:429
 TEveGValuators.cxx:430
 TEveGValuators.cxx:431
 TEveGValuators.cxx:432
 TEveGValuators.cxx:433
 TEveGValuators.cxx:434
 TEveGValuators.cxx:435
 TEveGValuators.cxx:436
 TEveGValuators.cxx:437
 TEveGValuators.cxx:438
 TEveGValuators.cxx:439
 TEveGValuators.cxx:440
 TEveGValuators.cxx:441
 TEveGValuators.cxx:442
 TEveGValuators.cxx:443
 TEveGValuators.cxx:444
 TEveGValuators.cxx:445
 TEveGValuators.cxx:446
 TEveGValuators.cxx:447
 TEveGValuators.cxx:448
 TEveGValuators.cxx:449
 TEveGValuators.cxx:450
 TEveGValuators.cxx:451
 TEveGValuators.cxx:452
 TEveGValuators.cxx:453
 TEveGValuators.cxx:454
 TEveGValuators.cxx:455
 TEveGValuators.cxx:456
 TEveGValuators.cxx:457
 TEveGValuators.cxx:458
 TEveGValuators.cxx:459
 TEveGValuators.cxx:460
 TEveGValuators.cxx:461
 TEveGValuators.cxx:462
 TEveGValuators.cxx:463
 TEveGValuators.cxx:464
 TEveGValuators.cxx:465
 TEveGValuators.cxx:466
 TEveGValuators.cxx:467
 TEveGValuators.cxx:468
 TEveGValuators.cxx:469
 TEveGValuators.cxx:470
 TEveGValuators.cxx:471
 TEveGValuators.cxx:472
 TEveGValuators.cxx:473
 TEveGValuators.cxx:474
 TEveGValuators.cxx:475
 TEveGValuators.cxx:476
 TEveGValuators.cxx:477
 TEveGValuators.cxx:478
 TEveGValuators.cxx:479
 TEveGValuators.cxx:480
 TEveGValuators.cxx:481
 TEveGValuators.cxx:482
 TEveGValuators.cxx:483
 TEveGValuators.cxx:484
 TEveGValuators.cxx:485
 TEveGValuators.cxx:486
 TEveGValuators.cxx:487
 TEveGValuators.cxx:488
 TEveGValuators.cxx:489
 TEveGValuators.cxx:490
 TEveGValuators.cxx:491
 TEveGValuators.cxx:492
 TEveGValuators.cxx:493
 TEveGValuators.cxx:494
 TEveGValuators.cxx:495
 TEveGValuators.cxx:496
 TEveGValuators.cxx:497
 TEveGValuators.cxx:498
 TEveGValuators.cxx:499
 TEveGValuators.cxx:500
 TEveGValuators.cxx:501
 TEveGValuators.cxx:502
 TEveGValuators.cxx:503