Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TEveParamList.cxx
Go to the documentation of this file.
1// @(#)root/eve:$Id$
2// Author: Dmytro Kovalskyi, 28.2.2008
3
4/*************************************************************************
5 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#include "TEveParamList.h"
13
14#include "TGLabel.h"
15#include "TGButton.h"
16#include "TGNumberEntry.h"
17
18#include "TEveGValuators.h"
19#include "TGedEditor.h"
20
21/** \class TEveParamList
22\ingroup TEve
23Collection of named parameters.
24*/
25
26
27////////////////////////////////////////////////////////////////////////////////
28/// Constructor.
29
30TEveParamList::TEveParamList(const char* n, const char* t, Bool_t doColor) :
31 TNamed(n, t),
32 fColor(0)
33{
35}
36
37////////////////////////////////////////////////////////////////////////////////
38/// Get config-struct for float parameter 'name'.
39
41{
42 static const TEveException eh("TEveParamList::GetFloatParameter ");
43
45 if (itr->fName.CompareTo(name)==0 ) return *itr;
46 Error(eh, "parameter not found.");
47 return FloatConfig_t();
48}
49
50////////////////////////////////////////////////////////////////////////////////
51/// Get config-struct for int parameter 'name'.
52
54{
55 static const TEveException eh("TEveParamList::GetIntParameter ");
56
57 for (IntConfigVec_ci itr = fIntParameters.begin(); itr != fIntParameters.end(); ++itr)
58 if (itr->fName.CompareTo(name) == 0) return *itr;
59 Error(eh, "parameter not found.");
60 return IntConfig_t();
61}
62
63////////////////////////////////////////////////////////////////////////////////
64/// Get value for bool parameter 'name'.
65
67{
68 static const TEveException eh("TEveParamList::GetBoolParameter ");
69
70 for (BoolConfigVec_ci itr = fBoolParameters.begin(); itr != fBoolParameters.end(); ++itr)
71 if ( itr->fName.CompareTo(name)==0 ) return itr->fValue;
72 Error(eh, "parameter not found.");
73 return kFALSE;
74}
75
76////////////////////////////////////////////////////////////////////////////////
77/// Emit ParamChanged() signal.
78
80{
81 Emit("ParamChanged(char*)", name);
82}
83
84/** \class TEveParamListEditor
85\ingroup TEve
86GUI editor for TEveParamList.
87
88Slot methods from this object do not call Update, instead they call
89their model's ParamChanged(const char* name) function which emits a
90corresponding signal.
91
92This helps in handling of parameter changes as they are probably
93related to displayed objects in a more complicated way. Further,
94the TGCheckButton::HandleButton() emits more signal after the
95Clicked() signal and if model is reset in the editor, its contents
96is removed. This results in a crash.
97*/
98
99
100////////////////////////////////////////////////////////////////////////////////
101/// Constructor.
102
104 UInt_t options, Pixel_t back) :
105 TGedFrame(p, width, height, options | kVerticalFrame, back),
106 fM (nullptr),
107 fParamFrame (nullptr)
108{
109 MakeTitle("TEveParamList");
110}
111
112////////////////////////////////////////////////////////////////////////////////
113/// Initialize widgets when a new object is selected.
114
116{
117 fM = dynamic_cast<TEveParamList*>(obj);
118
119 if (fParamFrame) {
123 delete fParamFrame;
124 }
125 fParamFrame = new TGVerticalFrame(this);
127
128 // integers
129 fIntParameters.clear();
130 for (UInt_t i = 0; i < fM->fIntParameters.size(); ++i)
131 {
133
134 // number entry widget
136 (frame, fM->fIntParameters[i].fValue,
137 5, // number of digits
138 i, // widget ID
140 TGNumberFormat::kNEAAnyNumber, // input value filter
141 TGNumberFormat::kNELLimitMinMax, // specify limits
142 fM->fIntParameters[i].fMin, // min value
143 fM->fIntParameters[i].fMax); // max value
145 widget->Connect("ValueSet(Long_t)", "TEveParamListEditor", this, "DoIntUpdate()");
146 fIntParameters.push_back(widget);
147
148 // label
149 frame->AddFrame(new TGLabel(frame,fM->fIntParameters[i].fName.Data()),
151
153 }
154
155
156 // floats
157 fFloatParameters.clear();
158 for (UInt_t i = 0; i < fM->fFloatParameters.size(); ++i)
159 {
161
162 // number entry widget
164 (frame, fM->fFloatParameters[i].fValue,
165 5, // number of digits
166 i, // widget ID
168 TGNumberFormat::kNEAAnyNumber, // input value filter
169 TGNumberFormat::kNELLimitMinMax, // specify limits
170 fM->fFloatParameters[i].fMin, // min value
171 fM->fFloatParameters[i].fMax); // max value
173 widget->Connect("ValueSet(Long_t)", "TEveParamListEditor", this, "DoFloatUpdate()");
174 fFloatParameters.push_back( widget );
175
176 // label
177 frame->AddFrame(new TGLabel(frame,fM->fFloatParameters[i].fName.Data()),
179
181 }
182
183 // boolean
184 fBoolParameters.clear();
185 for (UInt_t i = 0; i < fM->fBoolParameters.size(); ++i)
186 {
188 fM->fBoolParameters[i].fName.Data(),
189 i);
190 widget->Connect("Clicked()", "TEveParamListEditor", this, "DoBoolUpdate()");
191 fBoolParameters.push_back(widget);
192
194 }
196}
197
198////////////////////////////////////////////////////////////////////////////////
199/// Set model object.
200
202{
203 InitModel(obj);
204
205 for (UInt_t i = 0; i < fIntParameters.size(); ++i)
206 fIntParameters[i]->GetNumberEntry()->SetIntNumber(fM->fIntParameters[i].fValue);
207
208 for (UInt_t i = 0; i < fFloatParameters.size(); ++i)
209 fFloatParameters[i]->GetNumberEntry()->SetNumber(fM->fFloatParameters[i].fValue);
210
211 for (UInt_t i = 0; i < fBoolParameters.size(); ++i)
212 fBoolParameters[i]->SetState( fM->fBoolParameters[i].fValue ? kButtonDown : kButtonUp);
213}
214
215////////////////////////////////////////////////////////////////////////////////
216/// Slot for integer parameter update.
217
219{
221 Int_t id = widget->WidgetId();
222 if (id < 0 || id >= (int) fM->fIntParameters.size()) return;
223 fM->fIntParameters[id].fValue = widget->GetNumberEntry()->GetIntNumber();
224
225 fM->ParamChanged(fM->fIntParameters[id].fName);
226 gTQSender = (void*) widget;
227}
228
229////////////////////////////////////////////////////////////////////////////////
230/// Slot for float parameter update.
231
233{
235 Int_t id = widget->WidgetId();
236 if (id < 0 || id >= (int) fM->fFloatParameters.size()) return;
237 fM->fFloatParameters[id].fValue = widget->GetNumberEntry()->GetNumber();
238
239 fM->ParamChanged(fM->fFloatParameters[id].fName);
240 gTQSender = (void*) widget;
241}
242
243////////////////////////////////////////////////////////////////////////////////
244/// Slot for bool parameter update.
245
247{
249 Int_t id = widget->WidgetId();
250 if (id < 0 || id >= (int) fM->fBoolParameters.size()) return;
251 fM->fBoolParameters[id].fValue = widget->IsOn();
252
253 fM->ParamChanged(fM->fBoolParameters[id].fName);
254 gTQSender = (void*) widget;
255}
@ kVerticalFrame
Definition GuiTypes.h:381
ULong_t Pixel_t
Pixel value.
Definition GuiTypes.h:40
constexpr Bool_t kFALSE
Definition RtypesCore.h:108
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
@ kButtonDown
Definition TGButton.h:54
@ kButtonUp
Definition TGButton.h:53
@ kLHintsLeft
Definition TGLayout.h:24
@ kLHintsCenterY
Definition TGLayout.h:28
@ kLHintsTop
Definition TGLayout.h:27
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
Option_t Option_t width
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t height
char name[80]
Definition TGX11.cxx:110
R__EXTERN void * gTQSender
Definition TQObject.h:46
void SetMainColorPtr(Color_t *color)
Exception class thrown by TEve classes and macros.
Definition TEveUtil.h:102
TGVerticalFrame * fParamFrame
virtual void InitModel(TObject *obj)
Initialize widgets when a new object is selected.
std::vector< TGCheckButton * > fBoolParameters
std::vector< TGNumberEntry * > fIntParameters
void DoFloatUpdate()
Slot for float parameter update.
TEveParamListEditor(const TEveParamListEditor &)
void SetModel(TObject *obj) override
Set model object.
void DoIntUpdate()
Slot for integer parameter update.
void DoBoolUpdate()
Slot for bool parameter update.
TEveParamList * fM
std::vector< TGNumberEntry * > fFloatParameters
Collection of named parameters.
IntConfigVec_t::const_iterator IntConfigVec_ci
TEveParamList(const TEveParamList &)
BoolConfigVec_t::const_iterator BoolConfigVec_ci
IntConfigVec_t fIntParameters
FloatConfigVec_t::const_iterator FloatConfigVec_ci
void ParamChanged(const char *name)
Emit ParamChanged() signal.
IntConfig_t GetIntParameter(const TString &name)
Get config-struct for int parameter 'name'.
BoolConfigVec_t fBoolParameters
Bool_t GetBoolParameter(const TString &name)
Get value for bool parameter 'name'.
FloatConfigVec_t fFloatParameters
FloatConfig_t GetFloatParameter(const TString &name)
Get config-struct for float parameter 'name'.
Selects different options.
Definition TGButton.h:264
The base class for composite widgets (menu bars, list boxes, etc.).
Definition TGFrame.h:289
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=nullptr)
Add frame to the composite frame using the specified layout hints.
Definition TGFrame.cxx:1109
void MapSubwindows() override
Map all sub windows that are part of the composite frame.
Definition TGFrame.cxx:1156
virtual void RemoveFrame(TGFrame *f)
Remove frame from composite frame.
Definition TGFrame.cxx:1141
void UnmapWindow() override
unmap window
Definition TGFrame.h:208
A composite frame that layout their children in horizontal way.
Definition TGFrame.h:387
This class handles GUI labels.
Definition TGLabel.h:24
This class describes layout hints used by the layout classes.
Definition TGLayout.h:50
TGNumberEntry is a number entry input widget with up/down buttons.
@ kNEAAnyNumber
Attributes of number entry field.
@ kNESReal
Real number.
@ kNESInteger
Style of number entry field.
@ kNELLimitMinMax
Both lower and upper limits.
A composite frame that layout their children in vertical way.
Definition TGFrame.h:376
ROOT GUI Window base class.
Definition TGWindow.h:23
virtual void DestroyWindow()
destroy window
Definition TGWindow.cxx:190
Base frame for implementing GUI - a service class.
Definition TGedFrame.h:27
virtual void MakeTitle(const char *title)
Create attribute frame title.
Definition TGedFrame.cxx:94
The TNamed class is the base class for all named ROOT classes.
Definition TNamed.h:29
Mother of all ROOT objects.
Definition TObject.h:41
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definition TObject.cxx:1071
void Emit(const char *signal, const T &arg)
Activate signal with single parameter.
Definition TQObject.h:164
Basic string class.
Definition TString.h:138
const Int_t n
Definition legend1.C:16