Waiting for a tagged version of Root. All the development is in EVE-dev
[u/mrichter/AliRoot.git] / EVE / Reve / RGeoNodeEditors.cxx
1 // $Header$
2
3 #include "RGeoNodeEditors.h"
4
5 #include <Reve/GeoNode.h>
6 #include <TGeoNode.h>
7
8 #include <TVirtualPad.h>
9 #include <TColor.h>
10
11 #include <TGLabel.h>
12 #include <TGButton.h>
13 #include <TGNumberEntry.h>
14 #include <TGColorSelect.h>
15 #include <TGDoubleSlider.h>
16
17 using namespace Reve;
18
19 //______________________________________________________________________
20 // GeoNodeRnrElEditor
21 //
22
23 ClassImp(GeoNodeRnrElEditor)
24
25 GeoNodeRnrElEditor::GeoNodeRnrElEditor(const TGWindow *p, Int_t id,
26                                        Int_t width, Int_t height,
27                                        UInt_t options, Pixel_t back) :
28   TGedFrame(p, id, width, height, options | kVerticalFrame, back),
29
30   fNodeRE (0),
31
32   fVizNode(0),
33   fVizNodeDaughters(0),
34   fVizVolume(0),
35   fVizVolumeDaughters(0),
36
37   fTransparency(0)
38 {
39   MakeTitle("GeoNode");
40
41   // --- Visibility control
42
43   fVizNode = new TGCheckButton(this, "VizNode");
44   AddFrame(fVizNode, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
45   fVizNode->Connect
46     ("Toggled(Bool_t)",
47      "Reve::GeoNodeRnrElEditor", this, "DoVizNode()");
48
49   fVizNodeDaughters = new TGCheckButton(this, "VizNodeDaughters");
50   AddFrame(fVizNodeDaughters, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
51   fVizNodeDaughters->Connect
52     ("Toggled(Bool_t)",
53      "Reve::GeoNodeRnrElEditor", this, "DoVizNodeDaughters()");
54
55   fVizVolume = new TGCheckButton(this, "VizVolume");
56   AddFrame(fVizVolume, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
57   fVizVolume->Connect
58     ("Toggled(Bool_t)",
59      "Reve::GeoNodeRnrElEditor", this, "DoVizVolume()");
60
61   fVizVolumeDaughters = new TGCheckButton(this, "VizVolumeDaughters");
62   AddFrame(fVizVolumeDaughters, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
63   fVizVolumeDaughters->Connect
64     ("Toggled(Bool_t)",
65      "Reve::GeoNodeRnrElEditor", this, "DoVizVolumeDaughters()");
66
67
68   // --- Color props
69
70   {
71     TGHorizontalFrame* f = new TGHorizontalFrame(this);
72     TGLabel *l = new TGLabel(f, "Transparency:");
73     f->AddFrame(l, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 1, 2, 1, 1));
74     fTransparency = new TGNumberEntry(f, 0., 6, -1, 
75                               TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
76                               TGNumberFormat::kNELLimitMinMax, 0, 100);
77     fTransparency->GetNumberEntry()->SetToolTipText("0 is opaque, 100 fully transparent.");
78     f->AddFrame(fTransparency, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
79     fTransparency->Associate(f);
80     fTransparency->Connect("ValueSet(Long_t)",
81                            "Reve::GeoNodeRnrElEditor", this, "DoTransparency()");
82     AddFrame(f, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
83   }
84
85
86   // What is this crap?
87   TClass *cl = GeoNodeRnrEl::Class();
88   TGedElement *ge = new TGedElement;
89   ge->fGedFrame = this;
90   ge->fCanvas = 0;
91   cl->GetEditorList()->Add(ge);
92 }
93
94 /**************************************************************************/
95
96 void GeoNodeRnrElEditor::SetModel(TVirtualPad* pad, TObject* obj, Int_t )
97 {
98   fModel = 0;
99   fPad = 0;
100
101   if (!obj || !obj->InheritsFrom(GeoNodeRnrEl::Class()) || obj->InheritsFrom(TVirtualPad::Class())) {
102     SetActive(kFALSE);
103     return;
104   }
105
106   fModel = obj;
107   fPad = pad;
108    
109   fNodeRE = dynamic_cast<GeoNodeRnrEl*>(fModel);
110   TGeoNode*  node = fNodeRE->fNode;
111   TGeoVolume* vol = node->GetVolume();
112
113   fVizNode->SetState(node->TGeoAtt::IsVisible() ? kButtonDown : kButtonUp);
114   fVizNodeDaughters->SetState(node->TGeoAtt::IsVisDaughters() ? kButtonDown : kButtonUp);
115   fVizVolume->SetState(vol->IsVisible() ? kButtonDown : kButtonUp);
116   fVizVolumeDaughters->SetState(vol->IsVisDaughters() ? kButtonDown : kButtonUp);
117
118   fTransparency->SetNumber(vol->GetTransparency());
119
120   SetActive();
121 }
122
123 /**************************************************************************/
124
125 void GeoNodeRnrElEditor::DoVizNode()
126 {
127   fNodeRE->fNode->SetVisibility(fVizNode->IsOn());
128   fNodeRE->UpdateItems();
129 }
130
131 void GeoNodeRnrElEditor::DoVizNodeDaughters()
132 {
133   fNodeRE->fNode->VisibleDaughters(fVizNodeDaughters->IsOn());
134   Update();
135 }
136
137 void GeoNodeRnrElEditor::DoVizVolume()
138 {
139   fNodeRE->fNode->GetVolume()->SetVisibility(fVizVolume->IsOn());
140   Update();
141 }
142
143 void GeoNodeRnrElEditor::DoVizVolumeDaughters()
144 {
145   fNodeRE->fNode->GetVolume()->VisibleDaughters(fVizVolumeDaughters->IsOn());
146   Update();
147 }
148
149 /**************************************************************************/
150
151 void GeoNodeRnrElEditor::DoTransparency()
152 {
153   fNodeRE->fNode->GetVolume()->SetTransparency(char(fTransparency->GetNumber()));
154   Update();
155 }
156
157
158 /**************************************************************************/
159 /**************************************************************************/
160
161 //______________________________________________________________________
162 // GeoTopNodeRnrElEditor
163 //
164
165 ClassImp(GeoTopNodeRnrElEditor)
166
167 GeoTopNodeRnrElEditor::GeoTopNodeRnrElEditor(const TGWindow *p, Int_t id,
168                                              Int_t width, Int_t height,
169                                              UInt_t options, Pixel_t back) :
170   TGedFrame(p, id, width, height, options | kVerticalFrame, back),
171
172   fTopNodeRE (0),
173   fVisOption (0),
174   fVisLevel  (0)
175 {
176   MakeTitle("GeoTopNode");
177
178   {
179     TGHorizontalFrame* f = new TGHorizontalFrame(this);
180     TGLabel *l = new TGLabel(f, "VisOption:");
181     f->AddFrame(l, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 1, 2, 1, 1));
182     fVisOption = new TGNumberEntry(f, 0., 6, -1, 
183                               TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
184                               TGNumberFormat::kNELLimitMinMax, 0, 3);
185     fVisOption->GetNumberEntry()->SetToolTipText("0 ~ all final nodes, 1 ~ pure leaves only, 2 ~ path (?)");
186     f->AddFrame(fVisOption, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
187     fVisOption->Associate(f);
188     fVisOption->Connect("ValueSet(Long_t)",
189                         "Reve::GeoTopNodeRnrElEditor", this, "DoVisOption()");
190     AddFrame(f, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
191   }
192
193   {
194     TGHorizontalFrame* f = new TGHorizontalFrame(this);
195     TGLabel *l = new TGLabel(f, "VisLevel:");
196     f->AddFrame(l, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 1, 2, 1, 1));
197     fVisLevel = new TGNumberEntry(f, 0., 6, -1, 
198                               TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
199                               TGNumberFormat::kNELLimitMinMax, 0, 128);
200     fVisLevel->GetNumberEntry()->SetToolTipText("");
201     f->AddFrame(fVisLevel, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
202     fVisLevel->Associate(f);
203     fVisLevel->Connect("ValueSet(Long_t)",
204                         "Reve::GeoTopNodeRnrElEditor", this, "DoVisLevel()");
205     AddFrame(f, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
206   }
207
208
209   // What is this crap?
210   TClass *cl = GeoNodeRnrEl::Class();
211   TGedElement *ge = new TGedElement;
212   ge->fGedFrame = this;
213   ge->fCanvas = 0;
214   cl->GetEditorList()->Add(ge);
215 }
216
217 /**************************************************************************/
218
219 void GeoTopNodeRnrElEditor::SetModel(TVirtualPad* pad, TObject* obj, Int_t )
220 {
221   fModel = 0;
222   fPad = 0;
223
224   if (!obj || !obj->InheritsFrom(GeoTopNodeRnrEl::Class()) || obj->InheritsFrom(TVirtualPad::Class())) {
225     SetActive(kFALSE);
226     return;
227   }
228
229   fModel = obj;
230   fPad   = pad;
231    
232   fTopNodeRE = dynamic_cast<GeoTopNodeRnrEl*>(fModel);
233
234   fVisOption->SetNumber(fTopNodeRE->GetVisOption());
235   fVisLevel->SetNumber(fTopNodeRE->GetVisLevel());
236
237   SetActive();
238 }
239
240 /**************************************************************************/
241
242 void GeoTopNodeRnrElEditor::DoVisOption()
243 {
244   fTopNodeRE->SetVisOption(Int_t(fVisOption->GetNumber()));
245 }
246
247 void GeoTopNodeRnrElEditor::DoVisLevel()
248 {
249   fTopNodeRE->SetVisLevel(Int_t(fVisLevel->GetNumber()));
250 }