// @(#)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.             *
 *************************************************************************/

#ifndef ROOT_TEveGValuators
#define ROOT_TEveGValuators

#include "TGNumberEntry.h"

class TGLabel;
class TGHSlider;
class TGDoubleHSlider;

class TEveGValuatorBase: public TGCompositeFrame, public TGWidget
{
   TEveGValuatorBase(const TEveGValuatorBase&);            // Not implemented
   TEveGValuatorBase& operator=(const TEveGValuatorBase&); // Not implemented

protected:
   UInt_t      fLabelWidth;
   Bool_t      fAlignRight;
   Bool_t      fShowSlider;

   Int_t       fNELength; // Number-entry length (in characters)
   Int_t       fNEHeight; // Number-entry height (in pixels)

   TGLabel*    fLabel;

public:
   TEveGValuatorBase(const TGWindow *p, const char* title, UInt_t w, UInt_t h, Int_t widgetId=-1);
   virtual ~TEveGValuatorBase() {}

   virtual void Build(Bool_t connect=kTRUE) = 0;

   void SetLabelWidth(Int_t w)        { fLabelWidth = w; }
   void SetAlignRight(Bool_t a)       { fAlignRight = a; }
   void SetShowSlider(Bool_t s=kTRUE) { fShowSlider = s; }

   void SetNELength(Int_t l)          { fNELength = l; }
   void SetNEHeight(Int_t h)          { fNEHeight = h; }

   TGLabel* GetLabel() {return fLabel;}

   ClassDef(TEveGValuatorBase, 0); // Base class for composite GUI elements for setting of numeric values.
};


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

class TEveGValuator: public TEveGValuatorBase
{
   TEveGValuator(const TEveGValuator&);            // Not implemented
   TEveGValuator& operator=(const TEveGValuator&); // Not implemented

protected:
   Float_t        fValue;
   Float_t        fMin;
   Float_t        fMax;

   Bool_t         fSliderNewLine;
   Int_t          fSliderDivs;
   TGNumberEntry* fEntry;
   TGHSlider*     fSlider;

   Int_t CalcSliderPos(Float_t v);

public:
   TEveGValuator(const TGWindow *p, const char* title, UInt_t w, UInt_t h, Int_t widgetId=-1);
   virtual ~TEveGValuator() {}

   virtual void Build(Bool_t connect=kTRUE);

   Float_t GetValue() const { return fValue; }
   virtual void SetValue(Float_t v, Bool_t emit=kFALSE);

   void SliderCallback();
   void EntryCallback();
   void ValueSet(Double_t); //*SIGNAL*

   TGHSlider*     GetSlider() { return fSlider; }
   TGNumberEntry* GetEntry()  { return fEntry; }

   void SetSliderNewLine(Bool_t nl) { fSliderNewLine = nl; }

   void GetLimits(Float_t& min, Float_t& max) const { min = fMin; max = fMax; }
   Float_t GetLimitMin() const { return fMin; }
   Float_t GetLimitMax() const { return fMax; }
   void SetLimits(Int_t min, Int_t max);
   void SetLimits(Float_t min, Float_t max, Int_t npos,
                  TGNumberFormat::EStyle nef=TGNumberFormat::kNESRealTwo);

   void SetToolTip(const char* tip);
   void SetEnabled(Bool_t state);

   ClassDef(TEveGValuator, 0); // Composite GUI element for single value selection (supports label, number-entry and slider).
};


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

class TEveGDoubleValuator: public TEveGValuatorBase
{
   TEveGDoubleValuator(const TEveGDoubleValuator&);            // Not implemented
   TEveGDoubleValuator& operator=(const TEveGDoubleValuator&); // Not implemented

protected:
   TGNumberEntry*    fMinEntry;
   TGNumberEntry*    fMaxEntry;
   TGDoubleHSlider*  fSlider;

public:
   TEveGDoubleValuator(const TGWindow *p, const char* title, UInt_t w, UInt_t h, Int_t widgetId=-1);
   virtual ~TEveGDoubleValuator() {}

   virtual void Build(Bool_t connect=kTRUE);

   void MinEntryCallback();
   void MaxEntryCallback();
   void SliderCallback();
   void ValueSet(); //*SIGNAL*

   TGDoubleHSlider* GetSlider()   { return fSlider; }
   TGNumberEntry*   GetMinEntry() { return fMinEntry; }
   TGNumberEntry*   GetMaxEntry() { return fMaxEntry; }

   void SetLimits(Int_t min, Int_t max);
   void SetLimits(Float_t min, Float_t max, TGNumberFormat::EStyle nef=TGNumberFormat::kNESRealTwo);
   void SetValues(Float_t min, Float_t max, Bool_t emit=kFALSE);

   void GetValues(Float_t& min, Float_t& max) const
   { min = fMinEntry->GetNumber(); max = fMaxEntry->GetNumber(); }
   Float_t GetMin() const { return fMinEntry->GetNumber(); }
   Float_t GetMax() const { return fMaxEntry->GetNumber(); }
   Float_t GetLimitMin() const { return fMinEntry->GetNumMin(); }
   Float_t GetLimitMax() const { return fMaxEntry->GetNumMax(); }

   ClassDef(TEveGDoubleValuator, 0); // Composite GUI element for selection of range (label, two number-entries and double-slider).
};


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

class TEveGTriVecValuator : public TGCompositeFrame, public TGWidget
{
   TEveGTriVecValuator(const TEveGTriVecValuator&);            // Not implemented
   TEveGTriVecValuator& operator=(const TEveGTriVecValuator&); // Not implemented

protected:
   TEveGValuator* fVal[3];

   // Weed-size vars from TEveGValuator; copied.
   UInt_t      fLabelWidth;
   Int_t       fNELength; // Number-entry length (in characters)
   Int_t       fNEHeight; // Number-entry height (in pixels)

public:
   TEveGTriVecValuator(const TGWindow *p, const char* name, UInt_t w, UInt_t h, Int_t widgetId=-1);
   virtual ~TEveGTriVecValuator() {}

   void Build(Bool_t vertical, const char* lab0, const char* lab1, const char* lab2);

   TEveGValuator* GetValuator(Int_t i) const { return fVal[i]; }

   Float_t GetValue(Int_t i) const   { return fVal[i]->GetValue(); }
   void SetValue(Int_t i, Float_t v) { fVal[i]->SetValue(v); }

   void GetValues(Float_t& v0, Float_t& v1, Float_t& v2) const
   { v0 = GetValue(0); v1 = GetValue(1); v2 = GetValue(2); }
   void GetValues(Float_t v[3]) const
   { v[0] = GetValue(0); v[1] = GetValue(1); v[2] = GetValue(2); }
   void GetValues(Double_t v[3]) const
   { v[0] = GetValue(0); v[1] = GetValue(1); v[2] = GetValue(2); }

   void SetValues(Float_t v0, Float_t v1, Float_t v2)
   { SetValue(0, v0); SetValue(1, v1); SetValue(2, v2); }
   void SetValues(Float_t v[3])
   { SetValue(0, v[0]); SetValue(1, v[1]); SetValue(2, v[2]); }
   void SetValues(Double_t v[3])
   { SetValue(0, v[0]); SetValue(1, v[1]); SetValue(2, v[2]); }

   void ValueSet(); //*SIGNAL*

                      // Weed-size vars from TEveGValuator; copied.
   void SetLabelWidth(Int_t w) { fLabelWidth = w; }
   void SetNELength(Int_t l)   { fNELength   = l; }
   void SetNEHeight(Int_t h)   { fNEHeight   = h; }

   void SetLimits(Int_t min, Int_t max);
   void SetLimits(Float_t min, Float_t max,
                  TGNumberFormat::EStyle nef=TGNumberFormat::kNESRealTwo);

   ClassDef(TEveGTriVecValuator, 0); // Composite GUI element for setting three numerical values (label, three number-entries).
};

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