Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TEveTrackEditor.cxx
Go to the documentation of this file.
1 // @(#)root/eve:$Id$
2 // Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
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 "TEveTrackEditor.h"
13 #include "TEveTrack.h"
14 #include "TEveTrackPropagator.h"
16 #include "TEveManager.h"
17 
18 #include "TEveGValuators.h"
19 
20 #include "TVirtualPad.h"
21 #include "TColor.h"
22 
23 #include "TGedEditor.h"
24 #include "TAttMarkerEditor.h"
25 #include "TGLabel.h"
26 #include "TG3DLine.h"
27 #include "TGButton.h"
28 #include "TGNumberEntry.h"
29 #include "TGColorSelect.h"
30 #include "TGDoubleSlider.h"
31 
32 /** \class TEveTrackEditor
33 \ingroup TEve
34 Editor for TEveTrack class.
35 */
36 
37 ClassImp(TEveTrackEditor);
38 
39 ////////////////////////////////////////////////////////////////////////////////
40 /// Constructor.
41 
42 TEveTrackEditor::TEveTrackEditor(const TGWindow *p, Int_t width, Int_t height,
43  UInt_t options, Pixel_t back) :
44  TGedFrame(p, width, height, options | kVerticalFrame, back),
45  fM(0),
46  fRSEditor(0)
47 {
48  MakeTitle("TEveTrack");
49 
50  TGHorizontalFrame* f = new TGHorizontalFrame(this);
51 
52  fRSEditor = new TGTextButton(f, "Edit Propagator");
53  fRSEditor->Connect("Clicked()", "TEveTrackEditor", this, "DoEditPropagator()");
54  f->AddFrame(fRSEditor, new TGLayoutHints(kLHintsLeft, 2, 1, 4, 4));
55 
56  AddFrame(f, new TGLayoutHints(kLHintsTop, 0,0,2,1));
57 }
58 
59 ////////////////////////////////////////////////////////////////////////////////
60 /// Set model object.
61 
62 void TEveTrackEditor::SetModel(TObject* obj)
63 {
64  fM = dynamic_cast<TEveTrack*>(obj);
65 }
66 
67 ////////////////////////////////////////////////////////////////////////////////
68 /// Slot for EditPropagator.
69 
70 void TEveTrackEditor::DoEditPropagator()
71 {
72  fGedEditor->SetModel(fGedEditor->GetPad(), fM->GetPropagator(), kButton1Down);
73 }
74 
75 /** \class TEveTrackListEditor
76 \ingroup TEve
77 Editor for TEveTrackList class.
78 */
79 
80 ClassImp(TEveTrackListEditor);
81 
82 ////////////////////////////////////////////////////////////////////////////////
83 /// Constructor.
84 
85 TEveTrackListEditor::TEveTrackListEditor(const TGWindow *p,
86  Int_t width, Int_t height,
87  UInt_t options, Pixel_t back) :
88  TGedFrame(p, width, height, options | kVerticalFrame, back),
89 
90  fTC (0),
91  fPtRange (0),
92  fPRange (0),
93  fRSSubEditor(0)
94 {
95  {
96  TGHorizontalFrame* f = new TGHorizontalFrame(this);
97 
98  fRnrPoints = new TGCheckButton(f, "Draw Marker");
99  f->AddFrame(fRnrPoints, new TGLayoutHints(kLHintsLeft, 2,1,0,0));
100  fRnrPoints->Connect("Toggled(Bool_t)", "TEveTrackListEditor", this, "DoRnrPoints()");
101 
102  fRnrLine = new TGCheckButton(f, "Draw Line");
103  f->AddFrame(fRnrLine, new TGLayoutHints(kLHintsLeft, 1,2,0,0));
104  fRnrLine->Connect("Toggled(Bool_t)", "TEveTrackListEditor", this, "DoRnrLine()");
105 
106  AddFrame(f, new TGLayoutHints(kLHintsTop, 0,0,2,1));
107  }
108  { // --- Selectors
109  Int_t labelW = 51;
110  Int_t dbW = 210;
111 
112  fPtRange = new TEveGDoubleValuator(this,"Pt rng:", 40, 0);
113  fPtRange->SetNELength(6);
114  fPtRange->SetLabelWidth(labelW);
115  fPtRange->Build();
116  fPtRange->GetSlider()->SetWidth(dbW);
117  fPtRange->SetLimits(0, 10, TGNumberFormat::kNESRealTwo);
118  fPtRange->Connect("ValueSet()",
119  "TEveTrackListEditor", this, "DoPtRange()");
120  AddFrame(fPtRange, new TGLayoutHints(kLHintsTop, 1, 1, 4, 1));
121 
122  fPRange = new TEveGDoubleValuator(this,"P rng:", 40, 0);
123  fPRange->SetNELength(6);
124  fPRange->SetLabelWidth(labelW);
125  fPRange->Build();
126  fPRange->GetSlider()->SetWidth(dbW);
127  fPRange->SetLimits(0, 100, TGNumberFormat::kNESRealTwo);
128  fPRange->Connect("ValueSet()",
129  "TEveTrackListEditor", this, "DoPRange()");
130  AddFrame(fPRange, new TGLayoutHints(kLHintsTop, 1, 1, 4, 1));
131  }
132 
133  MakeTitle("RenderStyle");
134  fRSSubEditor = new TEveTrackPropagatorSubEditor(this);
135  fRSSubEditor->Connect("Changed()", "TEveTrackListEditor", this, "Update()");
136  AddFrame(fRSSubEditor, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,0,0));
137  CreateRefsTab();
138 }
139 
140 ////////////////////////////////////////////////////////////////////////////////
141 /// Create tab for control of path-mark display.
142 
143 void TEveTrackListEditor::CreateRefsTab()
144 {
145  fRefs = CreateEditorTabSubFrame("Refs");
146 
147  TGCompositeFrame *title1 = new TGCompositeFrame(fRefs, 145, 10,
148  kHorizontalFrame |
149  kLHintsExpandX |
150  kFixedWidth |
151  kOwnBackground);
152  title1->AddFrame(new TGLabel(title1, "PathMarks"),
153  new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
154  title1->AddFrame(new TGHorizontal3DLine(title1),
155  new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
156  fRefs->AddFrame(title1, new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
157 
158  // path marks
159  fRSSubEditor->CreateRefsContainer(fRefs);
160  fRSSubEditor->fPMAtt->SetGedEditor((TGedEditor*)gEve->GetEditor());
161  fRSSubEditor->fFVAtt->SetGedEditor((TGedEditor*)gEve->GetEditor());
162 }
163 
164 ////////////////////////////////////////////////////////////////////////////////
165 /// Set model object.
166 
167 void TEveTrackListEditor::SetModel(TObject* obj)
168 {
169  fTC = dynamic_cast<TEveTrackList*>(obj);
170  fRnrLine ->SetState(fTC->GetRnrLine() ? kButtonDown : kButtonUp);
171  fRnrPoints->SetState(fTC->GetRnrPoints() ? kButtonDown : kButtonUp);
172 
173  Float_t llim;
174  fPtRange->SetValues(fTC->fMinPt, fTC->fMaxPt);
175  llim = fTC->fLimPt > 1 ? TMath::Log10(fTC->fLimPt) : 0;
176  fPtRange->SetLimits(0, fTC->fLimPt, llim < 2 ? TGNumberFormat::kNESRealTwo : (llim < 3 ? TGNumberFormat::kNESRealOne : TGNumberFormat::kNESInteger));
177  fPRange ->SetValues(fTC->fMinP, fTC->fMaxP);
178  llim = fTC->fLimP > 1 ? TMath::Log10(fTC->fLimP) : 0;
179  fPRange ->SetLimits(0, fTC->fLimP, llim < 2 ? TGNumberFormat::kNESRealTwo : (llim < 3 ? TGNumberFormat::kNESRealOne : TGNumberFormat::kNESInteger));
180 
181  fRSSubEditor->SetModel(fTC->GetPropagator());
182 }
183 
184 ////////////////////////////////////////////////////////////////////////////////
185 /// Slot for RnrLine.
186 
187 void TEveTrackListEditor::DoRnrLine()
188 {
189  fTC->SetRnrLine(fRnrLine->IsOn());
190  Update();
191 }
192 
193 ////////////////////////////////////////////////////////////////////////////////
194 /// Slot for RnrPoints.
195 
196 void TEveTrackListEditor::DoRnrPoints()
197 {
198  fTC->SetRnrPoints(fRnrPoints->IsOn());
199  Update();
200 }
201 
202 ////////////////////////////////////////////////////////////////////////////////
203 /// Slot for PtRange.
204 
205 void TEveTrackListEditor::DoPtRange()
206 {
207  fTC->SelectByPt(fPtRange->GetMin(), fPtRange->GetMax());
208  Update();
209 }
210 
211 ////////////////////////////////////////////////////////////////////////////////
212 /// Slot for PRange.
213 
214 void TEveTrackListEditor::DoPRange()
215 {
216  fTC->SelectByP(fPRange->GetMin(), fPRange->GetMax());
217  Update();
218 }
219