24 ClassImp(TEveGValuatorBase);
29 TEveGValuatorBase::TEveGValuatorBase(
const TGWindow *p,
const char* name,
30 UInt_t w, UInt_t h, Int_t widgetId) :
31 TGCompositeFrame(p, w, h), TGWidget(widgetId),
51 ClassImp(TEveGValuator);
56 TEveGValuator::TEveGValuator(
const TGWindow *p,
const char* title,
57 UInt_t w, UInt_t h, Int_t widgetId) :
58 TEveGValuatorBase(p, title, w, h, widgetId),
64 fSliderNewLine (kFALSE),
74 void TEveGValuator::Build(Bool_t connect)
76 TGCompositeFrame *hf1, *hfs;
77 if(fShowSlider && fSliderNewLine) {
78 SetLayoutManager(
new TGVerticalLayout(
this));
79 hf1 =
new TGHorizontalFrame(
this);
80 hf1->SetLayoutManager(
new TGHorizontalLayout(hf1));
81 AddFrame(hf1,
new TGLayoutHints(kLHintsTop, 0,0,0,0));
82 hfs =
new TGHorizontalFrame(
this);
83 hfs->SetLayoutManager(
new TGHorizontalLayout(hfs));
84 AddFrame(hfs,
new TGLayoutHints(kLHintsTop, 0,0,0,0));
88 SetLayoutManager(
new TGHorizontalLayout(
this));
93 TGLayoutHints *labh, *labfrh;
95 labh =
new TGLayoutHints(kLHintsRight | kLHintsBottom, 0,0,0,0);
96 labfrh =
new TGLayoutHints(kLHintsRight);
98 labh =
new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0,0,0,0);
99 labfrh =
new TGLayoutHints(kLHintsLeft);
101 TGCompositeFrame *labfr =
102 new TGHorizontalFrame(hf1, fLabelWidth, fNEHeight,
103 fLabelWidth != 0 ? kFixedSize : kFixedHeight);
104 fLabel =
new TGLabel(labfr, fName);
105 labfr->AddFrame(fLabel, labh);
106 hf1->AddFrame(labfr, labfrh);
110 TGLayoutHints* elh =
new TGLayoutHints(kLHintsLeft, 0,0,0,0);
111 fEntry =
new TGNumberEntry(hf1, 0, fNELength);
112 fEntry->SetHeight(fNEHeight);
113 fEntry->GetNumberEntry()->SetToolTipText(
"Enter Slider Value");
114 hf1->AddFrame(fEntry, elh);
117 fEntry->Connect(
"ValueSet(Long_t)",
118 "TEveGValuator",
this,
"EntryCallback()");
122 fSlider =
new TGHSlider(hfs, GetWidth(), kSlider1 | kScaleBoth);
123 hfs->AddFrame(fSlider,
new TGLayoutHints(kLHintsLeft|kLHintsTop, 1,1,0,0));
126 fSlider->Connect(
"PositionChanged(Int_t)",
127 "TEveGValuator",
this,
"SliderCallback()");
134 void TEveGValuator::SetLimits(Float_t min, Float_t max, Int_t npos,
135 TGNumberFormat::EStyle nef)
139 fEntry->SetFormat(nef);
140 fEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);
143 fSliderDivs = npos - 1;
144 fSlider->SetRange(0, fSliderDivs);
151 void TEveGValuator::SetLimits(Int_t min, Int_t max)
155 fEntry->SetFormat(TGNumberFormat::kNESInteger);
156 fEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);
159 fSliderDivs = max - min;
160 fSlider->SetRange(0, fSliderDivs);
167 Int_t TEveGValuator::CalcSliderPos(Float_t v)
169 return (Int_t) TMath::Nint((v - fMin)*fSliderDivs/(fMax - fMin));
175 void TEveGValuator::EntryCallback()
177 fValue = fEntry->GetNumber();
179 fSlider->SetPosition(CalcSliderPos(fValue));
187 void TEveGValuator::SliderCallback()
189 fValue = fMin + fSlider->GetPosition()*(fMax-fMin)/fSliderDivs;
190 fEntry->SetNumber(fValue);
198 void TEveGValuator::ValueSet(Double_t val)
200 Emit(
"ValueSet(Double_t)", val);
206 void TEveGValuator::SetValue(Float_t val, Bool_t emit)
209 fEntry->SetNumber(fValue);
212 fSlider->SetPosition(CalcSliderPos(fValue));
221 void TEveGValuator::SetToolTip(
const char* tip)
223 fEntry->GetNumberEntry()->SetToolTipText(tip);
229 void TEveGValuator::SetEnabled(Bool_t state)
231 fEntry->GetNumberEntry()->SetEnabled(state);
232 fEntry->GetButtonUp()->SetEnabled(state);
233 fEntry->GetButtonDown()->SetEnabled(state);
235 if(state) fSlider->MapWindow();
236 else fSlider->UnmapWindow();
246 ClassImp(TEveGDoubleValuator);
251 TEveGDoubleValuator::TEveGDoubleValuator(
const TGWindow *p,
const char* title,
252 UInt_t w, UInt_t h, Int_t widgetId) :
253 TEveGValuatorBase(p, title, w, h, widgetId),
264 void TEveGDoubleValuator::Build(Bool_t connect)
266 TGCompositeFrame *hf1, *hfs;
268 SetLayoutManager(
new TGVerticalLayout(
this));
269 hf1 =
new TGHorizontalFrame(
this);
270 hf1->SetLayoutManager(
new TGHorizontalLayout(hf1));
271 AddFrame(hf1,
new TGLayoutHints(kLHintsTop));
272 hfs =
new TGHorizontalFrame(
this);
273 hfs->SetLayoutManager(
new TGHorizontalLayout(hfs));
274 AddFrame(hfs,
new TGLayoutHints(kLHintsTop));
278 SetLayoutManager(
new TGHorizontalLayout(
this));
284 lh =
new TGLayoutHints(kLHintsRight | kLHintsBottom, 4,0,0,0);
286 lh =
new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0,4,0,0);
288 if(fLabelWidth > 0) {
289 TGCompositeFrame *lf =
new TGHorizontalFrame(hf1, fLabelWidth, fNEHeight, kFixedSize);
290 fLabel =
new TGLabel(lf, fName);
291 lf->AddFrame(fLabel, lh);
293 TGLayoutHints* lfh =
new TGLayoutHints(kLHintsLeft, 0,0,0,0);
294 hf1->AddFrame(lf, lfh);
296 fLabel =
new TGLabel(hf1, fName);
297 hf1->AddFrame(fLabel, lh);
301 fMinEntry =
new TGNumberEntry(hf1, 0, fNELength);
302 fMinEntry->SetHeight(fNEHeight);
303 fMinEntry->GetNumberEntry()->SetToolTipText(
"Enter Slider Min Value");
304 hf1->AddFrame(fMinEntry,
new TGLayoutHints(kLHintsLeft, 0,0,0,0));
306 fMinEntry->Connect(
"ValueSet(Long_t)",
307 "TEveGDoubleValuator",
this,
"MinEntryCallback()");
309 fMaxEntry =
new TGNumberEntry(hf1, 0, fNELength);
310 fMaxEntry->SetHeight(fNEHeight);
311 fMaxEntry->GetNumberEntry()->SetToolTipText(
"Enter Slider Max Value");
312 hf1->AddFrame(fMaxEntry,
new TGLayoutHints(kLHintsLeft, 2,0,0,0));
314 fMaxEntry->Connect(
"ValueSet(Long_t)",
315 "TEveGDoubleValuator",
this,
"MaxEntryCallback()");
319 fSlider =
new TGDoubleHSlider(hfs, GetWidth(), kDoubleScaleBoth);
320 hfs->AddFrame(fSlider,
new TGLayoutHints(kLHintsTop|kLHintsLeft, 0,0,1,0));
322 fSlider->Connect(
"PositionChanged()",
323 "TEveGDoubleValuator",
this,
"SliderCallback()");
330 void TEveGDoubleValuator::SetLimits(Int_t min, Int_t max)
332 fMinEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);
333 fMinEntry->SetFormat(TGNumberFormat::kNESInteger);
334 fMaxEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);
335 fMaxEntry->SetFormat(TGNumberFormat::kNESInteger);
338 fSlider->SetRange(min, max);
345 void TEveGDoubleValuator::SetLimits(Float_t min, Float_t max,
346 TGNumberFormat::EStyle nef)
349 fMinEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);
350 fMinEntry->SetFormat(nef);
351 fMaxEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, min, max);
352 fMaxEntry->SetFormat(nef);
354 if(fSlider) fSlider->SetRange(min, max);
360 void TEveGDoubleValuator::MinEntryCallback()
362 if(GetMin() > GetMax())
363 fMaxEntry->SetNumber(GetMin());
364 if(fSlider) fSlider->SetPosition(GetMin(), GetMax());
371 void TEveGDoubleValuator::MaxEntryCallback()
373 if(GetMax() < GetMin())
374 fMinEntry->SetNumber(GetMax());
375 if(fSlider) fSlider->SetPosition(GetMin(), GetMax());
382 void TEveGDoubleValuator::SliderCallback()
385 fSlider->GetPosition(minp, maxp);
386 fMinEntry->SetNumber(minp);
387 fMaxEntry->SetNumber(maxp);
394 void TEveGDoubleValuator::SetValues(Float_t min, Float_t max, Bool_t emit)
396 fMinEntry->SetNumber(min);
397 fMaxEntry->SetNumber(max);
399 if(fSlider) fSlider->SetPosition(min, max);
406 void TEveGDoubleValuator::ValueSet()
418 ClassImp(TEveGTriVecValuator);
423 TEveGTriVecValuator::TEveGTriVecValuator(
const TGWindow *p,
const char* name,
424 UInt_t w, UInt_t h, Int_t widgetId) :
425 TGCompositeFrame(p, w, h), TGWidget(widgetId),
437 void TEveGTriVecValuator::Build(Bool_t vertical,
const char* lab0,
const char* lab1,
const char* lab2)
439 if (vertical) SetLayoutManager(
new TGVerticalLayout(
this));
440 else SetLayoutManager(
new TGHorizontalLayout(
this));
442 const char *labs[3] = { lab0, lab1, lab2 };
444 for (Int_t i=0; i<3; ++i) {
445 fVal[i] =
new TEveGValuator(
this, labs[i], 10, 0);
446 fVal[i]->SetLabelWidth(fLabelWidth);
447 fVal[i]->SetShowSlider(kFALSE);
448 fVal[i]->SetNELength(fNELength);
449 fVal[i]->SetNEHeight(fNEHeight);
452 (
"ValueSet(Double_t)",
"TEveGTriVecValuator",
this,
"ValueSet()");
453 if (vertical) lh =
new TGLayoutHints(kLHintsTop, 1, 1, 1, 1);
454 else lh =
new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 1, 1);
455 AddFrame(fVal[i], lh);
462 void TEveGTriVecValuator::ValueSet()
470 void TEveGTriVecValuator::SetLimits(Int_t min, Int_t max)
472 for (Int_t i=0; i<3; ++i)
473 fVal[i]->SetLimits(min, max);
479 void TEveGTriVecValuator::SetLimits(Float_t min, Float_t max,
480 TGNumberFormat::EStyle nef)
482 for (Int_t i=0; i<3; ++i)
483 fVal[i]->SetLimits(min, max, 0, nef);