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