3 #include "RGValuators.h"
7 #include <TGDoubleSlider.h>
11 /**************************************************************************/
13 /**************************************************************************/
15 ClassImp(RGValuatorBase)
17 RGValuatorBase::RGValuatorBase(const TGWindow *p, const char* name,
19 TGCompositeFrame(p, w, h),
33 /**************************************************************************/
35 /**************************************************************************/
39 RGValuator::RGValuator(const TGWindow *p, const char* title,
41 RGValuatorBase(p, title, w, h),
47 fSliderNewLine (kFALSE),
53 void RGValuator::Build()
55 TGCompositeFrame *hf1, *hfs;
56 if(fShowSlider && fSliderNewLine) {
57 SetLayoutManager(new TGVerticalLayout(this));
58 hf1 = new TGHorizontalFrame(this);
59 hf1->SetLayoutManager(new TGHorizontalLayout(hf1));
60 AddFrame(hf1, new TGLayoutHints(kLHintsTop, 0,0,0,0));
61 hfs = new TGHorizontalFrame(this);
62 hfs->SetLayoutManager(new TGHorizontalLayout(hfs));
63 AddFrame(hfs, new TGLayoutHints(kLHintsTop, 0,0,0,0));
67 SetLayoutManager(new TGHorizontalLayout(this));
72 TGLayoutHints *labh, *labfrh;
74 labh = new TGLayoutHints(kLHintsRight | kLHintsBottom, 4,0,0,0);
75 labfrh = new TGLayoutHints(kLHintsRight);
77 labh = new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0,4,0,0);
78 labfrh = new TGLayoutHints(kLHintsLeft);
80 TGCompositeFrame *labfr =
81 new TGHorizontalFrame(hf1, fLabelWidth, fNEHeight,
82 fLabelWidth != 0 ? kFixedSize : kFixedHeight);
83 fLabel = new TGLabel(labfr, GetName());
84 labfr->AddFrame(fLabel, labh);
85 hf1->AddFrame(labfr, labfrh);
89 TGLayoutHints* elh = new TGLayoutHints(kLHintsLeft, 0,0,0,0);
90 fEntry = new TGNumberEntry(hf1, 0, fNELength);
91 fEntry->SetHeight(fNEHeight);
92 fEntry->GetNumberEntry()->SetToolTipText("Enter Slider Value");
93 hf1->AddFrame(fEntry, elh);
95 fEntry->Associate(this);
96 fEntry->Connect("ValueSet(Long_t)",
97 "Reve::RGValuator", this, "EntryCallback()");
101 fSlider = new TGHSlider(hfs, GetWidth(), kSlider1 | kScaleBoth);
102 hfs->AddFrame(fSlider, new TGLayoutHints(kLHintsLeft|kLHintsTop, 1,1,0,0));
104 fSlider->Associate(this);
105 fSlider->Connect("PositionChanged(Int_t)",
106 "Reve::RGValuator", this, "SliderCallback()");
110 void RGValuator::SetLimits(Float_t min, Float_t max, Int_t npos,
111 TGNumberFormat::EStyle nef)
115 fEntry->SetFormat(nef);
116 fEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);
119 fSliderDivs = npos - 1;
120 fSlider->SetRange(0, fSliderDivs);
124 void RGValuator::SetLimits(Int_t min, Int_t max)
128 fEntry->SetFormat(TGNumberFormat::kNESInteger);
129 fEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);
132 fSliderDivs = max - min;
133 fSlider->SetRange(0, fSliderDivs);
137 Int_t RGValuator::CalcSliderPos(Float_t v)
139 return (Int_t) TMath::Nint((v - fMin)*fSliderDivs/(fMax - fMin));
142 void RGValuator::EntryCallback()
144 fValue = fEntry->GetNumber();
146 fSlider->SetPosition(CalcSliderPos(fValue));
151 void RGValuator::SliderCallback()
153 fValue = fMin + fSlider->GetPosition()*(fMax-fMin)/fSliderDivs;
154 fEntry->SetNumber(fValue);
159 void RGValuator::ValueSet(Double_t val)
161 Emit("ValueSet(Double_t)", val);
164 void RGValuator::SetValue(Float_t val, Bool_t emit)
167 fEntry->SetNumber(fValue);
170 fSlider->SetPosition(CalcSliderPos(fValue));
176 void RGValuator::SetToolTip(const Text_t* tip)
178 fEntry->GetNumberEntry()->SetToolTipText(tip);
181 void RGValuator::SetEnabled(Bool_t state)
183 fEntry->GetNumberEntry()->SetEnabled(state);
184 fEntry->GetButtonUp()->SetEnabled(state);
185 fEntry->GetButtonDown()->SetEnabled(state);
187 if(state) fSlider->MapWindow();
188 else fSlider->UnmapWindow();
192 /**************************************************************************/
194 /**************************************************************************/
196 ClassImp(RGDoubleValuator)
198 RGDoubleValuator::RGDoubleValuator(const TGWindow *p, const char* title,
199 UInt_t w, UInt_t h) :
200 RGValuatorBase(p, title, w, h),
207 void RGDoubleValuator::Build()
209 TGCompositeFrame *hf1, *hfs;
211 SetLayoutManager(new TGVerticalLayout(this));
212 hf1 = new TGHorizontalFrame(this);
213 hf1->SetLayoutManager(new TGHorizontalLayout(hf1));
214 AddFrame(hf1, new TGLayoutHints(kLHintsTop, 0,0,0,0));
215 hfs = new TGHorizontalFrame(this);
216 hfs->SetLayoutManager(new TGHorizontalLayout(hfs));
217 AddFrame(hfs, new TGLayoutHints(kLHintsTop, 0,0,0,0));
221 SetLayoutManager(new TGHorizontalLayout(this));
227 lh = new TGLayoutHints(kLHintsRight | kLHintsBottom, 4,0,0,0);
229 lh = new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0,4,0,0);
231 if(fLabelWidth > 0) {
232 TGCompositeFrame *lf = new TGHorizontalFrame(hf1, fLabelWidth, fNEHeight, kFixedSize);
233 fLabel = new TGLabel(lf, GetName());
234 lf->AddFrame(fLabel, lh);
235 // add label frame to top horizontal frame
236 TGLayoutHints* lfh = new TGLayoutHints(kLHintsLeft, 0,0,0,0);
237 hf1->AddFrame(lf, lfh);
239 fLabel = new TGLabel(hf1, GetName());
240 hf1->AddFrame(fLabel, lh);
244 fMinEntry = new TGNumberEntry(this, 0, fNELength);
245 fMinEntry->SetHeight(fNEHeight);
246 fMinEntry->GetNumberEntry()->SetToolTipText("Enter Slider Min Value");
247 hf1->AddFrame(fMinEntry, new TGLayoutHints(kLHintsLeft, 0,0,0,0));
248 fMinEntry->Connect("ValueSet(Long_t)",
249 "Reve::RGDoubleValuator", this, "MinEntryCallback()");
250 fMinEntry->Associate(this);
252 fMaxEntry = new TGNumberEntry(this, 0, fNELength);
253 fMaxEntry->SetHeight(fNEHeight);
254 fMaxEntry->GetNumberEntry()->SetToolTipText("Enter Slider Max Value");
255 hf1->AddFrame(fMaxEntry, new TGLayoutHints(kLHintsLeft, 2,0,0,0));
256 fMaxEntry->Connect("ValueSet(Long_t)",
257 "Reve::RGDoubleValuator", this, "MaxEntryCallback()");
258 fMaxEntry->Associate(this);
262 fSlider = new TGDoubleHSlider(hfs, GetWidth(), kDoubleScaleBoth);
263 hfs->AddFrame(fSlider, new TGLayoutHints(kLHintsTop|kLHintsLeft, 0,0,1,0));
264 fSlider->Associate(this);
265 fSlider->Connect("PositionChanged()",
266 "Reve::RGDoubleValuator", this, "SliderCallback()");
270 void RGDoubleValuator::SetLimits(Float_t min, Float_t max,
271 TGNumberFormat::EStyle nef)
273 // printf("RGDoubleValuator::SetLimits(Float_t min, Float_t max, Int_ \n");
274 fMinEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);
275 fMinEntry->SetFormat(nef);
276 fMaxEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);
277 fMaxEntry->SetFormat(nef);
279 if(fSlider) fSlider->SetRange(min, max);
282 void RGDoubleValuator::MinEntryCallback()
284 if(GetMin() > GetMax())
285 fMaxEntry->SetNumber(GetMin());
286 if(fSlider) fSlider->SetPosition(GetMin(), GetMax());
290 void RGDoubleValuator::MaxEntryCallback()
292 if(GetMax() < GetMin())
293 fMinEntry->SetNumber(GetMax());
294 if(fSlider) fSlider->SetPosition(GetMin(), GetMax());
298 void RGDoubleValuator::SliderCallback()
301 fSlider->GetPosition(minp, maxp);
302 //printf("RGDoubleValuator::SliderCallback %f %f\n", minp, maxp);
303 fMinEntry->SetNumber(minp);
304 fMaxEntry->SetNumber(maxp);
308 void RGDoubleValuator::SetValues(Float_t min, Float_t max, Bool_t emit)
310 fMinEntry->SetNumber(min);
311 fMaxEntry->SetNumber(max);
313 if(fSlider) fSlider->SetPosition(min, max);
317 void RGDoubleValuator::ValueSet()