TEveParamList.cxx

Go to the documentation of this file.
00001 // @(#)root/eve:$Id: TEveParamList.cxx 27157 2009-01-15 14:05:12Z brun $
00002 // Author: Dmytro Kovalskyi, 28.2.2008
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 #include "TEveParamList.h"
00013 
00014 // Cleanup these includes:
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 // TEveParamList
00028 //==============================================================================
00029 
00030 //______________________________________________________________________________
00031 //
00032 // Collection of named parameters.
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    // Constructor.
00042 
00043    if (doColor) SetMainColorPtr(&fColor);
00044 }
00045 
00046 //______________________________________________________________________________
00047 TEveParamList::FloatConfig_t TEveParamList::GetFloatParameter(const TString& name)
00048 {
00049    // Get config-struct for float parameter 'name'.
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    // Get config-struct for int parameter 'name'.
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    // Get value for bool parameter 'name'.
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    // Emit ParamChanged() signal.
00089 
00090    Emit("ParamChanged(char*)", name);
00091 }
00092 
00093 //==============================================================================
00094 //==============================================================================
00095 // TEveParamListEditor
00096 //==============================================================================
00097 
00098 //______________________________________________________________________________
00099 // GUI editor for TEveParamList.
00100 //
00101 // Slot methods from this object do not call Update, instead they call
00102 // their model's ParamChanged(const char* name) function which emits a
00103 // corresponding signal.
00104 //
00105 // This helps in handling of parameter changes as they are probably
00106 // related to displayed objects in a more complicated way. Further,
00107 // the TGCheckButton::HandleButton() emits more signal after the
00108 // Clicked() signal and if model is reset in the editor, its contents
00109 // is removed. This results in a crash.
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    // Constructor.
00121 
00122    MakeTitle("TEveParamList");
00123 }
00124 
00125 //______________________________________________________________________________
00126 void TEveParamListEditor::InitModel(TObject* obj)
00127 {
00128    // Initialize widgets when a new object is selected.
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    // integers
00142    fIntParameters.clear();
00143    for (UInt_t i = 0; i < fM->fIntParameters.size(); ++i)
00144    {
00145       TGCompositeFrame* frame = new TGHorizontalFrame(fParamFrame);
00146 
00147       // number entry widget
00148       TGNumberEntry* widget = new TGNumberEntry
00149          (frame, fM->fIntParameters[i].fValue,
00150           5,                                 // number of digits
00151           i,                                 // widget ID
00152           TGNumberFormat::kNESInteger,       // style
00153           TGNumberFormat::kNEAAnyNumber,     // input value filter
00154           TGNumberFormat::kNELLimitMinMax,   // specify limits
00155           fM->fIntParameters[i].fMin,        // min value
00156           fM->fIntParameters[i].fMax);       // max value
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       // label
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    // floats
00170    fFloatParameters.clear();
00171    for (UInt_t i = 0; i < fM->fFloatParameters.size(); ++i)
00172    {
00173       TGCompositeFrame* frame = new TGHorizontalFrame(fParamFrame);
00174 
00175       // number entry widget
00176       TGNumberEntry* widget = new TGNumberEntry
00177          (frame, fM->fFloatParameters[i].fValue,
00178           5,                                // number of digits
00179           i,                                // widget ID
00180           TGNumberFormat::kNESReal,         // style
00181           TGNumberFormat::kNEAAnyNumber,    // input value filter
00182           TGNumberFormat::kNELLimitMinMax,  // specify limits
00183           fM->fFloatParameters[i].fMin,     // min value
00184           fM->fFloatParameters[i].fMax);    // max value
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       // label
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    // boolean
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    // Set model object.
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    // Slot for integer parameter update.
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    // Slot for float parameter update.
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    // Slot for bool parameter update.
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 }

Generated on Tue Jul 5 14:16:12 2011 for ROOT_528-00b_version by  doxygen 1.5.1