Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TEveCaloLegoEditor.cxx
Go to the documentation of this file.
1 // @(#)root/eve:$Id$
2 // Author: Matevz Tadel 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 "TEveCaloLegoEditor.h"
13 #include "TEveCalo.h"
14 #include "TEveGValuators.h"
15 #include "TGComboBox.h"
16 
17 #include "TColor.h"
18 #include "TGColorSelect.h"
19 #include "TGLabel.h"
20 #include "TG3DLine.h"
21 
22 /** \class TEveCaloLegoEditor
23 \ingroup TEve
24 GUI editor for TEveCaloLego.
25 */
26 
27 ClassImp(TEveCaloLegoEditor);
28 
29 ////////////////////////////////////////////////////////////////////////////////
30 /// Constructor.
31 
32 TEveCaloLegoEditor::TEveCaloLegoEditor(const TGWindow *p, Int_t width, Int_t height,
33  UInt_t options, Pixel_t back) :
34  TGedFrame(p, width, height, options | kVerticalFrame, back),
35  fM(0),
36  fGridColor(0),
37  fFontColor(0),
38  fPlaneColor(0),
39  fTransparency(0),
40 
41  fProjection(0),
42  f2DMode(0),
43  fBoxMode(0),
44 
45  fCell2DTextMin(0),
46 
47  fRebinFrame(0),
48  fAutoRebin(0),
49  fPixelsPerBin(0),
50  fNormalizeRebin(0)
51 
52 {
53  MakeTitle("TEveCaloLego");
54 
55  { // grid color
56  TGHorizontalFrame* f = new TGHorizontalFrame(this);
57  TGLabel* lab = new TGLabel(f, "GridColor:");
58  f->AddFrame(lab, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 10, 1, 1));
59 
60  fGridColor = new TGColorSelect(f, 0, -1);
61  f->AddFrame(fGridColor, new TGLayoutHints(kLHintsLeft|kLHintsTop, 3, 1, 0, 1));
62  fGridColor->Connect("ColorSelected(Pixel_t)", "TEveCaloLegoEditor", this, "DoGridColor(Pixel_t)");
63 
64  AddFrame(f, new TGLayoutHints(kLHintsTop, 1, 1, 1, 0));
65  }
66  // axis
67  {
68  // font color
69  TGHorizontalFrame* f = new TGHorizontalFrame(this);
70  TGLabel* lab = new TGLabel(f, "FontColor:");
71  f->AddFrame(lab, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 8, 1, 1));
72 
73  fFontColor = new TGColorSelect(f, 0, -1);
74  f->AddFrame(fFontColor, new TGLayoutHints(kLHintsLeft|kLHintsTop, 3, 1, 0, 1));
75  fFontColor->Connect("ColorSelected(Pixel_t)", "TEveCaloLegoEditor", this, "DoFontColor(Pixel_t)");
76 
77  AddFrame(f, new TGLayoutHints(kLHintsTop, 1, 1, 1, 0));
78  }
79  {
80  // plane color
81  TGHorizontalFrame* f = new TGHorizontalFrame(this);
82  TGLabel* lab = new TGLabel(f, "PlaneColor:");
83  f->AddFrame(lab, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 1, 1, 1));
84 
85  fPlaneColor = new TGColorSelect(f, 0, -1);
86  f->AddFrame(fPlaneColor, new TGLayoutHints(kLHintsLeft|kLHintsTop, 3, 1, 0, 1));
87  fPlaneColor->Connect("ColorSelected(Pixel_t)", "TEveCaloLegoEditor", this, "DoPlaneColor(Pixel_t)");
88 
89  fTransparency = new TGNumberEntry(f, 0., 2, -1,
90  TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
91  TGNumberFormat::kNELLimitMinMax, 0, 100);
92  fTransparency->SetHeight(18);
93  fTransparency->GetNumberEntry()->SetToolTipText("Transparency: 0 is opaque, 100 fully transparent.");
94  f->AddFrame(fTransparency, new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
95  fTransparency->Connect("ValueSet(Long_t)","TEveCaloLegoEditor", this, "DoTransparency()");
96 
97  AddFrame(f, new TGLayoutHints(kLHintsTop, 1, 1, 1, 0));
98  }
99 
100  Int_t lw = 80;
101 
102  fProjection = MakeLabeledCombo("Project:", 1);
103  fProjection->AddEntry("Auto", TEveCaloLego::kAuto);
104  fProjection->AddEntry("3D", TEveCaloLego::k3D);
105  fProjection->AddEntry("2D", TEveCaloLego::k2D);
106  fProjection->Connect("Selected(Int_t)", "TEveCaloLegoEditor", this, "DoProjection()");
107 
108  f2DMode = MakeLabeledCombo("2DMode:", 4);
109  f2DMode->AddEntry("ValColor", TEveCaloLego::kValColor);
110  f2DMode->AddEntry("ValSize", TEveCaloLego::kValSize);
111  f2DMode->AddEntry("ValSizeOutline", TEveCaloLego::kValSizeOutline);
112  f2DMode->Connect("Selected(Int_t)", "TEveCaloLegoEditor", this, "Do2DMode()");
113 
114  fBoxMode = MakeLabeledCombo("Box:", 4);
115  fBoxMode->AddEntry("None", TEveCaloLego::kNone);
116  fBoxMode->AddEntry("Back", TEveCaloLego::kBack);
117  fBoxMode->AddEntry("FrontBack", TEveCaloLego::kFrontBack);
118  fBoxMode->Connect("Selected(Int_t)", "TEveCaloLegoEditor", this, "DoBoxMode()");
119 
120  fCell2DTextMin = new TEveGValuator(this, "Cell2DTexMin:", 90, 0);
121  fCell2DTextMin->SetLabelWidth(lw);
122  fCell2DTextMin->SetNELength(5);
123  fCell2DTextMin->SetShowSlider(kFALSE);
124  fCell2DTextMin->Build();
125  fCell2DTextMin->SetLimits(1, 1000);
126  fCell2DTextMin->SetToolTip("Draw cell values above N pixels.");
127  fCell2DTextMin->Connect("ValueSet(Double_t)", "TEveCaloLegoEditor", this, "DoCell2DTextMin()");
128  AddFrame(fCell2DTextMin, new TGLayoutHints(kLHintsTop, 1, 2, 1, 2));
129 
130  MakeRebinFrame();
131 }
132 
133 ////////////////////////////////////////////////////////////////////////////////
134 
135 void TEveCaloLegoEditor::MakeRebinFrame()
136 {
137  fRebinFrame = CreateEditorTabSubFrame("Rebin");
138 
139  fAutoRebin = new TGCheckButton(fRebinFrame, "AutoRebin");
140  fRebinFrame->AddFrame(fAutoRebin, new TGLayoutHints(kLHintsLeft, 3, 5, 3, 0));
141  fAutoRebin->Connect("Toggled(Bool_t)", "TEveCaloLegoEditor", this, "DoAutoRebin()");
142 
143  fNormalizeRebin = new TGCheckButton(fRebinFrame, "NormalizeRebin");
144  fRebinFrame->AddFrame(fNormalizeRebin, new TGLayoutHints(kLHintsLeft, 3, 5, 3, 0));
145  fNormalizeRebin->Connect("Toggled(Bool_t)", "TEveCaloLegoEditor", this, "DoNormalize()");
146 
147  fPixelsPerBin = new TEveGValuator(fRebinFrame, "PixelsPerBin:", 90, 0);
148  fPixelsPerBin->SetLabelWidth(80);
149  fPixelsPerBin->SetNELength(5);
150  fPixelsPerBin->SetShowSlider(kFALSE);
151  fPixelsPerBin->Build();
152  fPixelsPerBin->SetLimits(1, 50);
153  fPixelsPerBin->SetToolTip("Number of labels along the Z axis.");
154  fPixelsPerBin->Connect("ValueSet(Double_t)", "TEveCaloLegoEditor", this, "DoPixelsPerBin()");
155  fRebinFrame->AddFrame(fPixelsPerBin, new TGLayoutHints(kLHintsTop, 4, 2, 1, 2));
156 }
157 
158 ////////////////////////////////////////////////////////////////////////////////
159 /// Helper function. Creates TGComboBox with fixed size TGLabel.
160 
161 TGComboBox* TEveCaloLegoEditor::MakeLabeledCombo(const char* name, Int_t off)
162 {
163  UInt_t labelW = 60;
164  UInt_t labelH = 20;
165  TGHorizontalFrame* hf = new TGHorizontalFrame(this);
166  // label
167  TGCompositeFrame *labfr = new TGHorizontalFrame(hf, labelW, labelH, kFixedSize);
168  TGLabel* label = new TGLabel(labfr, name);
169  labfr->AddFrame(label, new TGLayoutHints(kLHintsLeft | kLHintsBottom));
170  hf->AddFrame(labfr, new TGLayoutHints(kLHintsLeft));
171  // combo
172  TGLayoutHints* clh = new TGLayoutHints(kLHintsLeft, 0,0,0,0);
173  TGComboBox* combo = new TGComboBox(hf);
174  combo->Resize(90, 20);
175  hf->AddFrame(combo, clh);
176 
177  AddFrame(hf, new TGLayoutHints(kLHintsTop, 1, 1, 1, off));
178  return combo;
179 }
180 
181 ////////////////////////////////////////////////////////////////////////////////
182 /// Set model object.
183 
184 void TEveCaloLegoEditor::SetModel(TObject* obj)
185 {
186  fM = dynamic_cast<TEveCaloLego*>(obj);
187 
188  fGridColor->SetColor(TColor::Number2Pixel(fM->GetGridColor() < 0 ? 0 : fM->GetGridColor()), kFALSE);
189  fFontColor->SetColor(TColor::Number2Pixel(fM->GetFontColor() < 0 ? 0 : fM->GetFontColor()), kFALSE);
190 
191  fPlaneColor->SetColor(TColor::Number2Pixel(fM->GetPlaneColor()), kFALSE);
192  fTransparency->SetNumber(fM->GetPlaneTransparency());
193 
194  fCell2DTextMin->SetValue(fM->GetDrawNumberCellPixels());
195 
196  fProjection->Select(fM->GetProjection(), kFALSE);
197  f2DMode->Select(fM->Get2DMode(), kFALSE);
198  fBoxMode->Select(fM->GetBoxMode(), kFALSE);
199 
200  fPixelsPerBin->SetValue(fM->GetPixelsPerBin());
201  fAutoRebin->SetState(fM->GetAutoRebin() ? kButtonDown : kButtonUp);
202  fNormalizeRebin->SetState(fM->GetNormalizeRebin() ? kButtonDown : kButtonUp);
203 }
204 
205 ////////////////////////////////////////////////////////////////////////////////
206 /// Slot for GridColor.
207 
208 void TEveCaloLegoEditor::DoGridColor(Pixel_t pixel)
209 {
210  fM->SetGridColor(Color_t(TColor::GetColor(pixel)));
211  Update();
212 }
213 
214 ////////////////////////////////////////////////////////////////////////////////
215 /// Slot for FontColor.
216 
217 void TEveCaloLegoEditor::DoFontColor(Pixel_t pixel)
218 {
219  fM->SetFontColor(Color_t(TColor::GetColor(pixel)));
220  Update();
221 }
222 
223 ////////////////////////////////////////////////////////////////////////////////
224 /// Slot for PlaneColor.
225 
226 void TEveCaloLegoEditor::DoPlaneColor(Pixel_t pixel)
227 {
228  fM->SetPlaneColor(Color_t(TColor::GetColor(pixel)));
229  Update();
230 }
231 
232 ////////////////////////////////////////////////////////////////////////////////
233 /// Slot for setting limit in pixels in which cell value is rendered.
234 
235 void TEveCaloLegoEditor::DoCell2DTextMin()
236 {
237  fM->SetDrawNumberCellPixels((Int_t)fCell2DTextMin->GetValue());
238  Update();
239 }
240 
241 
242 ////////////////////////////////////////////////////////////////////////////////
243 /// Slot for projection.
244 
245 void TEveCaloLegoEditor::DoProjection()
246 {
247  fM->SetProjection((TEveCaloLego::EProjection_e)fProjection->GetSelected());
248  Update();
249 }
250 
251 ////////////////////////////////////////////////////////////////////////////////
252 /// Slot for projection.
253 
254 void TEveCaloLegoEditor::Do2DMode()
255 {
256  fM->Set2DMode((TEveCaloLego::E2DMode_e)f2DMode->GetSelected());
257  Update();
258 }
259 
260 ////////////////////////////////////////////////////////////////////////////////
261 /// Slot for projection.
262 
263 void TEveCaloLegoEditor::DoBoxMode()
264 {
265  fM->SetBoxMode((TEveCaloLego::EBoxMode_e)fBoxMode->GetSelected());
266  Update();
267 }
268 
269 ////////////////////////////////////////////////////////////////////////////////
270 /// Slot for Transparency.
271 
272 void TEveCaloLegoEditor::DoTransparency()
273 {
274  fM->SetPlaneTransparency((Char_t)(fTransparency->GetNumber()));
275  Update();
276 }
277 
278 ////////////////////////////////////////////////////////////////////////////////
279 /// Slot for PixelsPerBin.
280 
281 void TEveCaloLegoEditor::DoPixelsPerBin()
282 {
283  fM->SetPixelsPerBin((Int_t)fPixelsPerBin->GetValue());
284  Update();
285 }
286 
287 ////////////////////////////////////////////////////////////////////////////////
288 
289 void TEveCaloLegoEditor::DoAutoRebin()
290 {
291  fM->SetAutoRebin(fAutoRebin->IsOn());
292  Update();
293 }
294 
295 ////////////////////////////////////////////////////////////////////////////////
296 
297 void TEveCaloLegoEditor::DoNormalize()
298 {
299  fM->SetNormalizeRebin(fNormalizeRebin->IsOn());
300  Update();
301 }