00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "TEveParamList.h"
00013
00014
00015 #include "TGLabel.h"
00016 #include "TGButton.h"
00017 #include "TGNumberEntry.h"
00018 #include "TGColorSelect.h"
00019 #include "TGDoubleSlider.h"
00020
00021 #include "TEveGValuators.h"
00022 #include "TGNumberEntry.h"
00023 #include "TGedEditor.h"
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 ClassImp(TEveParamList);
00035
00036
00037 TEveParamList::TEveParamList(const char* n, const char* t, Bool_t doColor) :
00038 TNamed(n, t),
00039 fColor(0)
00040 {
00041
00042
00043 if (doColor) SetMainColorPtr(&fColor);
00044 }
00045
00046
00047 TEveParamList::FloatConfig_t TEveParamList::GetFloatParameter(const TString& name)
00048 {
00049
00050
00051 static const TEveException eh("TEveParamList::GetFloatParameter ");
00052
00053 for (FloatConfigVec_ci itr = fFloatParameters.begin(); itr != fFloatParameters.end(); ++itr)
00054 if (itr->fName.CompareTo(name)==0 ) return *itr;
00055 Error(eh, "parameter not found.");
00056 return FloatConfig_t();
00057 }
00058
00059
00060 TEveParamList::IntConfig_t TEveParamList::GetIntParameter(const TString& name)
00061 {
00062
00063
00064 static const TEveException eh("TEveParamList::GetIntParameter ");
00065
00066 for (IntConfigVec_ci itr = fIntParameters.begin(); itr != fIntParameters.end(); ++itr)
00067 if (itr->fName.CompareTo(name) == 0) return *itr;
00068 Error(eh, "parameter not found.");
00069 return IntConfig_t();
00070 }
00071
00072
00073 Bool_t TEveParamList::GetBoolParameter(const TString& name)
00074 {
00075
00076
00077 static const TEveException eh("TEveParamList::GetBoolParameter ");
00078
00079 for (BoolConfigVec_ci itr = fBoolParameters.begin(); itr != fBoolParameters.end(); ++itr)
00080 if ( itr->fName.CompareTo(name)==0 ) return itr->fValue;
00081 Error(eh, "parameter not found.");
00082 return kFALSE;
00083 }
00084
00085
00086 void TEveParamList::ParamChanged(const char* name)
00087 {
00088
00089
00090 Emit("ParamChanged(char*)", name);
00091 }
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111 ClassImp(TEveParamListEditor);
00112
00113
00114 TEveParamListEditor::TEveParamListEditor(const TGWindow *p, Int_t width, Int_t height,
00115 UInt_t options, Pixel_t back) :
00116 TGedFrame(p, width, height, options | kVerticalFrame, back),
00117 fM (0),
00118 fParamFrame (0)
00119 {
00120
00121
00122 MakeTitle("TEveParamList");
00123 }
00124
00125
00126 void TEveParamListEditor::InitModel(TObject* obj)
00127 {
00128
00129
00130 fM = dynamic_cast<TEveParamList*>(obj);
00131
00132 if (fParamFrame) {
00133 fParamFrame->UnmapWindow();
00134 RemoveFrame(fParamFrame);
00135 fParamFrame->DestroyWindow();
00136 delete fParamFrame;
00137 }
00138 fParamFrame = new TGVerticalFrame(this);
00139 AddFrame(fParamFrame);
00140
00141
00142 fIntParameters.clear();
00143 for (UInt_t i = 0; i < fM->fIntParameters.size(); ++i)
00144 {
00145 TGCompositeFrame* frame = new TGHorizontalFrame(fParamFrame);
00146
00147
00148 TGNumberEntry* widget = new TGNumberEntry
00149 (frame, fM->fIntParameters[i].fValue,
00150 5,
00151 i,
00152 TGNumberFormat::kNESInteger,
00153 TGNumberFormat::kNEAAnyNumber,
00154 TGNumberFormat::kNELLimitMinMax,
00155 fM->fIntParameters[i].fMin,
00156 fM->fIntParameters[i].fMax);
00157 frame->AddFrame(widget, new TGLayoutHints(kLHintsLeft|kLHintsCenterY, 2,8,2,2));
00158 widget->Connect("ValueSet(Long_t)", "TEveParamListEditor", this, "DoIntUpdate()");
00159 fIntParameters.push_back(widget);
00160
00161
00162 frame->AddFrame(new TGLabel(frame,fM->fIntParameters[i].fName.Data()),
00163 new TGLayoutHints(kLHintsLeft|kLHintsCenterY));
00164
00165 fParamFrame->AddFrame(frame, new TGLayoutHints(kLHintsTop));
00166 }
00167
00168
00169
00170 fFloatParameters.clear();
00171 for (UInt_t i = 0; i < fM->fFloatParameters.size(); ++i)
00172 {
00173 TGCompositeFrame* frame = new TGHorizontalFrame(fParamFrame);
00174
00175
00176 TGNumberEntry* widget = new TGNumberEntry
00177 (frame, fM->fFloatParameters[i].fValue,
00178 5,
00179 i,
00180 TGNumberFormat::kNESReal,
00181 TGNumberFormat::kNEAAnyNumber,
00182 TGNumberFormat::kNELLimitMinMax,
00183 fM->fFloatParameters[i].fMin,
00184 fM->fFloatParameters[i].fMax);
00185 frame->AddFrame(widget, new TGLayoutHints(kLHintsLeft|kLHintsCenterY, 2,8,2,2));
00186 widget->Connect("ValueSet(Long_t)", "TEveParamListEditor", this, "DoFloatUpdate()");
00187 fFloatParameters.push_back( widget );
00188
00189
00190 frame->AddFrame(new TGLabel(frame,fM->fFloatParameters[i].fName.Data()),
00191 new TGLayoutHints(kLHintsLeft|kLHintsCenterY) );
00192
00193 fParamFrame->AddFrame(frame, new TGLayoutHints(kLHintsTop));
00194 }
00195
00196
00197 fBoolParameters.clear();
00198 for (UInt_t i = 0; i < fM->fBoolParameters.size(); ++i)
00199 {
00200 TGCheckButton* widget = new TGCheckButton(fParamFrame,
00201 fM->fBoolParameters[i].fName.Data(),
00202 i);
00203 widget->Connect("Clicked()", "TEveParamListEditor", this, "DoBoolUpdate()");
00204 fBoolParameters.push_back(widget);
00205
00206 fParamFrame->AddFrame(widget, new TGLayoutHints(kLHintsTop,2,0,1,1));
00207 }
00208 MapSubwindows();
00209 }
00210
00211
00212
00213
00214 void TEveParamListEditor::SetModel(TObject* obj)
00215 {
00216
00217
00218 InitModel(obj);
00219
00220 for (UInt_t i = 0; i < fIntParameters.size(); ++i)
00221 fIntParameters[i]->GetNumberEntry()->SetIntNumber(fM->fIntParameters[i].fValue);
00222
00223 for (UInt_t i = 0; i < fFloatParameters.size(); ++i)
00224 fFloatParameters[i]->GetNumberEntry()->SetNumber(fM->fFloatParameters[i].fValue);
00225
00226 for (UInt_t i = 0; i < fBoolParameters.size(); ++i)
00227 fBoolParameters[i]->SetState( fM->fBoolParameters[i].fValue ? kButtonDown : kButtonUp);
00228 }
00229
00230
00231
00232
00233 void TEveParamListEditor::DoIntUpdate()
00234 {
00235
00236
00237 TGNumberEntry *widget = (TGNumberEntry*) gTQSender;
00238 Int_t id = widget->WidgetId();
00239 if (id < 0 || id >= (int) fM->fIntParameters.size()) return;
00240 fM->fIntParameters[id].fValue = widget->GetNumberEntry()->GetIntNumber();
00241
00242 fM->ParamChanged(fM->fIntParameters[id].fName);
00243 gTQSender = (void*) widget;
00244 }
00245
00246
00247 void TEveParamListEditor::DoFloatUpdate()
00248 {
00249
00250
00251 TGNumberEntry *widget = (TGNumberEntry*) gTQSender;
00252 Int_t id = widget->WidgetId();
00253 if (id < 0 || id >= (int) fM->fFloatParameters.size()) return;
00254 fM->fFloatParameters[id].fValue = widget->GetNumberEntry()->GetNumber();
00255
00256 fM->ParamChanged(fM->fFloatParameters[id].fName);
00257 gTQSender = (void*) widget;
00258 }
00259
00260
00261 void TEveParamListEditor::DoBoolUpdate()
00262 {
00263
00264
00265 TGCheckButton *widget = (TGCheckButton*) gTQSender;
00266 Int_t id = widget->WidgetId();
00267 if (id < 0 || id >= (int) fM->fBoolParameters.size()) return;
00268 fM->fBoolParameters[id].fValue = widget->IsOn();
00269
00270 fM->ParamChanged(fM->fBoolParameters[id].fName);
00271 gTQSender = (void*) widget;
00272 }