ca5d87a120dfd4e39bf61c2e9dca825ff256dfaf
[u/mrichter/AliRoot.git] / EVE / EveDet / AliEveTOFSectorEditor.cxx
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
4 /**************************************************************************
5  * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6  * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9
10 #include "AliEveTOFSectorEditor.h"
11 #include <EveDet/AliEveTOFSector.h>
12
13 #include <TVirtualPad.h>
14 #include <TColor.h>
15 #include <TEveGValuators.h>
16
17 #include <TGLabel.h>
18 #include <TGButton.h>
19 #include <TGNumberEntry.h>
20 #include <TGColorSelect.h>
21 #include <TGSlider.h>
22 #include <TGDoubleSlider.h>
23
24
25 //______________________________________________________________________________
26 // AliEveTOFSectorEditor
27 //
28
29 ClassImp(AliEveTOFSectorEditor)
30
31 AliEveTOFSectorEditor::AliEveTOFSectorEditor(const TGWindow *p, Int_t width, Int_t height,
32                                              UInt_t options, Pixel_t back) :
33   TGedFrame(p, width, height, options | kVerticalFrame, back),
34   fM(0),
35   fSectorID(0), fAutoTrans(0),
36   fPlate(0), fPlate0(0), fPlate1(0), fPlate2(0), fPlate3(0), fPlate4(0),
37   fThreshold(0), fMaxVal(0)
38 {
39
40   fPlate = new TGCheckButton*[5];
41   for (Int_t ii=0; ii<5; ii++) fPlate[ii] = new TGCheckButton;
42
43   //fPriority = 40;
44   MakeTitle("AliEveTOFSector");
45
46   fSectorID = new TEveGValuator(this, "SectorID", 110, 0);
47   fSectorID->SetLabelWidth(60);
48   fSectorID->SetShowSlider(kFALSE);
49   fSectorID->SetNELength(4);
50   fSectorID->Build();
51   fSectorID->SetLimits(0, 17);
52   fSectorID->SetToolTip("The 18 Tof Sector's");
53   fSectorID->Connect("ValueSet(Double_t)",
54                      "AliEveTOFSectorEditor", this, "DoSectorID()");
55   // Reuse sectorID for auto-transformation button
56   fAutoTrans = new TGCheckButton(fSectorID, "AutoTrans");
57   fAutoTrans->SetToolTipText("Automatically set transformation to true position");
58   fSectorID->AddFrame(fAutoTrans, new TGLayoutHints(kLHintsLeft, 12, 0, 1, 0));
59   fAutoTrans->Connect("Toggled(Bool_t)","AliEveTOFSectorEditor", this, "DoAutoTrans()");
60   AddFrame(fSectorID, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
61
62   // Create widgets
63   // fXYZZ = new TGSomeWidget(this, ...);
64   // AddFrame(fXYZZ, new TGLayoutHints(...));
65   // fXYZZ->Connect("SignalName()", "AliEveTOFSectorEditor", this, "DoXYZZ()"); {
66   TGHorizontalFrame* f = new TGHorizontalFrame(this);
67
68   Int_t nPlate = 0;
69   fPlate0 = new TGCheckButton(f, "Plate0");
70   f->AddFrame(fPlate0, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
71   fPlate0->Connect("Toggled(Bool_t)","AliEveTOFSectorEditor", this, "DoPlate0()");
72   //fPlate0->Connect("Toggled(Bool_t)","AliEveTOFSectorEditor", this, "DoPlate(Int_t)");
73
74   nPlate = 1;
75   fPlate1 = new TGCheckButton(f, "Plate 1");
76   f->AddFrame(fPlate1, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
77   fPlate1->Connect("Toggled(Bool_t)","AliEveTOFSectorEditor", this, "DoPlate1()");
78   //fPlate1->Connect("Toggled(Bool_t)","AliEveTOFSectorEditor", this, "DoPlate(Int_t)");
79
80   nPlate = 2;
81   fPlate2 = new TGCheckButton(f, "Plate 2");
82   f->AddFrame(fPlate2, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
83   fPlate2->Connect("Toggled(Bool_t)","AliEveTOFSectorEditor", this, "DoPlate2()");
84   //fPlate2->Connect("Toggled(Bool_t)","AliEveTOFSectorEditor", this, "DoPlate(Int_t)");
85
86   nPlate = 3;
87   fPlate3 = new TGCheckButton(f, "Plate 3");
88   f->AddFrame(fPlate3, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
89   fPlate3->Connect("Toggled(Bool_t)","AliEveTOFSectorEditor", this, "DoPlate3()");
90   //fPlate3->Connect("Toggled(Bool_t)","AliEveTOFSectorEditor", this, "DoPlate(Int_t)");
91
92   nPlate = 4;
93   fPlate4 = new TGCheckButton(f, "Plate 4");
94   f->AddFrame(fPlate4, new TGLayoutHints(kLHintsTop, 3, 1, 1, 0));
95   fPlate4->Connect("Toggled(Bool_t)","AliEveTOFSectorEditor", this, "DoPlate4()");
96   //fPlate4->Connect("Toggled(Bool_t)","AliEveTOFSectorEditor", this, "DoPlate(Int_t)");
97
98   fPlate[0] = fPlate0;
99   fPlate[1] = fPlate1;
100   fPlate[2] = fPlate2;
101   fPlate[3] = fPlate3;
102   fPlate[4] = fPlate4;
103
104   AddFrame(f, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
105
106   fThreshold = new TEveGValuator(this, "Threshold", 200, 0);
107   fThreshold->SetNELength(4);
108   fThreshold->SetLabelWidth(60);
109   fThreshold->Build();
110   fThreshold->GetSlider()->SetWidth(120);
111   fThreshold->SetLimits(0,250);
112   fThreshold->Connect("ValueSet(Double_t)",
113                       "AliEveTOFSectorEditor", this, "DoThreshold()");
114   AddFrame(fThreshold, new TGLayoutHints(kLHintsTop, 1, 1, 2, 1));
115
116   fMaxVal = new TEveGValuator(this,"MaxVal", 200, 0);
117   fMaxVal->SetNELength(4);
118   fMaxVal->SetLabelWidth(60);
119   fMaxVal->Build();
120   fMaxVal->GetSlider()->SetWidth(60);
121   fMaxVal->SetLimits(0, 500);
122   fMaxVal->Connect("ValueSet(Double_t)",
123                    "AliEveTOFSectorEditor", this, "DoMaxVal()");
124   AddFrame(fMaxVal, new TGLayoutHints(kLHintsTop, 1, 1, 2, 1));
125
126 }
127
128 AliEveTOFSectorEditor::~AliEveTOFSectorEditor()
129 {
130   delete [] fPlate;
131 }
132
133 /******************************************************************************/
134
135 void AliEveTOFSectorEditor::SetModel(TObject* obj)
136 {
137   fM = dynamic_cast<AliEveTOFSector*>(obj);
138
139   fSectorID->SetValue(fM->GetSectorID());
140   fAutoTrans->SetState(fM->GetAutoTrans()  ? kButtonDown : kButtonUp);
141
142   fPlate0->SetState(fM->GetPlate(0) ? kButtonDown : kButtonUp);
143   fPlate1->SetState(fM->GetPlate(1) ? kButtonDown : kButtonUp);
144   fPlate2->SetState(fM->GetPlate(2) ? kButtonDown : kButtonUp);
145   fPlate3->SetState(fM->GetPlate(3) ? kButtonDown : kButtonUp);
146   fPlate4->SetState(fM->GetPlate(4) ? kButtonDown : kButtonUp);
147 }
148
149 /******************************************************************************/
150 void AliEveTOFSectorEditor::DoSectorID()
151 {
152   fM->SetSectorID((Int_t) fSectorID->GetValue());
153   Update();
154 }
155
156 void AliEveTOFSectorEditor::DoAutoTrans()
157 {
158   fM->SetAutoTrans(fAutoTrans->IsOn());
159   Update();
160 }
161
162 /******************************************************************************/
163
164 void AliEveTOFSectorEditor::DoPlate(Int_t nPlate)
165 {
166   fM->SetPlate(nPlate, fPlate[nPlate]->IsOn());
167   Update();
168 }
169
170 void AliEveTOFSectorEditor::DoPlate0()
171 {
172   fM->SetPlate(0, fPlate0->IsOn());
173   Update();
174 }
175
176 void AliEveTOFSectorEditor::DoPlate1()
177 {
178   fM->SetPlate(1, fPlate1->IsOn());
179   Update();
180 }
181
182 void AliEveTOFSectorEditor::DoPlate2()
183 {
184   fM->SetPlate(2, fPlate2->IsOn());
185   Update();
186 }
187 void AliEveTOFSectorEditor::DoPlate3()
188 {
189   fM->SetPlate(3, fPlate3->IsOn());
190   Update();
191 }
192
193 void AliEveTOFSectorEditor::DoPlate4()
194 {
195   fM->SetPlate(4, fPlate4->IsOn());
196   Update();
197 }
198
199
200 void AliEveTOFSectorEditor::DoThreshold()
201 {
202   fM->SetThreshold((Short_t) fThreshold->GetValue());
203   fThreshold->SetValue(fM->GetThreshold());
204   Update();
205 }
206
207 void AliEveTOFSectorEditor::DoMaxVal()
208 {
209   fM->SetMaxVal((Int_t) fMaxVal->GetValue());
210   fMaxVal->SetValue(fM->GetMaxVal());
211   Update();
212 }