]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/Reve/GeoNodeEditor.cxx
Merged EVE-dev-after-merge to EVE-dev into HEAD. Requires ROOT-5.17.04.
[u/mrichter/AliRoot.git] / EVE / Reve / GeoNodeEditor.cxx
1 // $Header$
2
3 #include "GeoNodeEditor.h"
4 #include "RGValuators.h"
5
6 #include <Reve/GeoNode.h>
7 #include <TGeoNode.h>
8
9 #include <TVirtualPad.h>
10 #include <TColor.h>
11
12 #include <TGLabel.h>
13 #include <TGButton.h>
14 #include <TGNumberEntry.h>
15 #include <TGColorSelect.h>
16 #include <TGDoubleSlider.h>
17
18 using namespace Reve;
19
20 //______________________________________________________________________
21 // GeoNodeRnrElEditor
22 //
23
24 ClassImp(GeoNodeRnrElEditor)
25
26 GeoNodeRnrElEditor::GeoNodeRnrElEditor(const TGWindow *p,
27                                        Int_t width, Int_t height,
28                                        UInt_t options, Pixel_t back) :
29   TGedFrame(p,width, height, options | kVerticalFrame, back),
30
31   fNodeRE (0),
32
33   fVizNode(0),
34   fVizNodeDaughters(0),
35   fVizVolume(0),
36   fVizVolumeDaughters(0),
37
38   fTransparency(0)
39 {
40   MakeTitle("GeoNode");
41
42   // --- Visibility control
43
44   fVizNode = new TGCheckButton(this, "VizNode");
45   AddFrame(fVizNode, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
46   fVizNode->Connect
47     ("Toggled(Bool_t)",
48      "Reve::GeoNodeRnrElEditor", this, "DoVizNode()");
49
50   fVizNodeDaughters = new TGCheckButton(this, "VizNodeDaughters");
51   AddFrame(fVizNodeDaughters, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
52   fVizNodeDaughters->Connect
53     ("Toggled(Bool_t)",
54      "Reve::GeoNodeRnrElEditor", this, "DoVizNodeDaughters()");
55
56   fVizVolume = new TGCheckButton(this, "VizVolume");
57   AddFrame(fVizVolume, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
58   fVizVolume->Connect
59     ("Toggled(Bool_t)",
60      "Reve::GeoNodeRnrElEditor", this, "DoVizVolume()");
61
62   fVizVolumeDaughters = new TGCheckButton(this, "VizVolumeDaughters");
63   AddFrame(fVizVolumeDaughters, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
64   fVizVolumeDaughters->Connect
65     ("Toggled(Bool_t)",
66      "Reve::GeoNodeRnrElEditor", this, "DoVizVolumeDaughters()");
67
68
69   // --- Color props
70
71   {
72     TGHorizontalFrame* f = new TGHorizontalFrame(this);
73     TGLabel *l = new TGLabel(f, "Transparency:");
74     f->AddFrame(l, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 1, 2, 1, 1));
75     fTransparency = new TGNumberEntry(f, 0., 6, -1, 
76                               TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
77                               TGNumberFormat::kNELLimitMinMax, 0, 100);
78     fTransparency->GetNumberEntry()->SetToolTipText("0 is opaque, 100 fully transparent.");
79     f->AddFrame(fTransparency, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
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 /**************************************************************************/
87
88 void GeoNodeRnrElEditor::SetModel(TObject* obj)
89 {
90   fNodeRE = dynamic_cast<GeoNodeRnrEl*>(obj);
91   TGeoNode*  node = fNodeRE->fNode;
92   TGeoVolume* vol = node->GetVolume();
93
94   fVizNode->SetState(node->TGeoAtt::IsVisible() ? kButtonDown : kButtonUp);
95   fVizNodeDaughters->SetState(node->TGeoAtt::IsVisDaughters() ? kButtonDown : kButtonUp);
96   fVizVolume->SetState(vol->IsVisible() ? kButtonDown : kButtonUp);
97   fVizVolumeDaughters->SetState(vol->IsVisDaughters() ? kButtonDown : kButtonUp);
98
99   fTransparency->SetNumber(vol->GetTransparency());
100 }
101
102 /**************************************************************************/
103
104 void GeoNodeRnrElEditor::DoVizNode()
105 {
106   fNodeRE->SetRnrSelf(fVizNode->IsOn());
107   Update();
108 }
109
110 void GeoNodeRnrElEditor::DoVizNodeDaughters()
111 {
112   fNodeRE->SetRnrChildren(fVizNodeDaughters->IsOn());
113   Update();
114 }
115
116 void GeoNodeRnrElEditor::DoVizVolume()
117 {
118   fNodeRE->fNode->GetVolume()->SetVisibility(fVizVolume->IsOn());
119   Update();
120 }
121
122 void GeoNodeRnrElEditor::DoVizVolumeDaughters()
123 {
124   fNodeRE->fNode->GetVolume()->VisibleDaughters(fVizVolumeDaughters->IsOn());
125   Update();
126 }
127
128 /**************************************************************************/
129
130 void GeoNodeRnrElEditor::DoTransparency()
131 {
132   fNodeRE->fNode->GetVolume()->SetTransparency(char(fTransparency->GetNumber()));
133   Update();
134 }
135
136
137 /**************************************************************************/
138 /**************************************************************************/
139
140 //______________________________________________________________________
141 // GeoTopNodeRnrElEditor
142 //
143
144 ClassImp(GeoTopNodeRnrElEditor)
145
146 GeoTopNodeRnrElEditor::GeoTopNodeRnrElEditor(const TGWindow *p,
147                                              Int_t width, Int_t height,
148                                              UInt_t options, Pixel_t back) :
149   TGedFrame(p, width, height, options | kVerticalFrame, back),
150
151   fTopNodeRE (0),
152   fVisOption (0),
153   fVisLevel  (0)
154 {
155   MakeTitle("GeoTopNode");
156
157   Int_t labelW = 58;
158
159   fVisOption = new RGValuator(this, "VisOption:", 90, 0);
160   fVisOption->SetLabelWidth(labelW);
161   fVisOption->SetShowSlider(kFALSE);
162   fVisOption->SetNELength(4);
163   fVisOption->Build();
164   fVisOption->SetLimits(0, 2, 10, TGNumberFormat::kNESInteger);
165   fVisOption->SetToolTip("Visualization option passed to TGeoPainter.");
166   fVisOption->Connect("ValueSet(Double_t)", "Reve::GeoTopNodeRnrElEditor", this, "DoVisOption()");
167   AddFrame(fVisOption, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
168
169   fVisLevel = new RGValuator(this, "VisLevel:", 90, 0);
170   fVisLevel->SetLabelWidth(labelW);
171   fVisLevel->SetShowSlider(kFALSE);
172   fVisLevel->SetNELength(4);
173   fVisLevel->Build();
174   fVisLevel->SetLimits(0, 10, 10, TGNumberFormat::kNESInteger);
175   fVisLevel->SetToolTip("Level (depth) to which the geometry is traversed.");
176   fVisLevel->Connect("ValueSet(Double_t)", "Reve::GeoTopNodeRnrElEditor", this, "DoVisLevel()");
177   AddFrame(fVisLevel, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
178 }
179
180 /**************************************************************************/
181
182 void GeoTopNodeRnrElEditor::SetModel(TObject* obj)
183 {
184   fTopNodeRE = dynamic_cast<GeoTopNodeRnrEl*>(obj);
185
186   fVisOption->SetValue(fTopNodeRE->GetVisOption());
187   fVisLevel ->SetValue(fTopNodeRE->GetVisLevel());
188 }
189
190 /**************************************************************************/
191
192 void GeoTopNodeRnrElEditor::DoVisOption()
193 {
194   fTopNodeRE->SetVisOption(Int_t(fVisOption->GetValue()));
195   Update();
196 }
197
198 void GeoTopNodeRnrElEditor::DoVisLevel()
199 {
200   fTopNodeRE->SetVisLevel(Int_t(fVisLevel->GetValue()));
201   Update();
202 }