]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/Alieve/TPCLoaderEditor.cxx
Merge from EVE-dev.
[u/mrichter/AliRoot.git] / EVE / Alieve / TPCLoaderEditor.cxx
1 // $Header$
2
3 #include "TPCLoaderEditor.h"
4 #include <Alieve/TPCLoader.h>
5 #include <Reve/RGTopFrame.h>
6 #include <Reve/RGValuators.h>
7
8 #include <TSystem.h>
9 #include <TVirtualPad.h>
10 #include <TColor.h>
11
12 #include <TGLabel.h>
13 #include <TGButton.h>
14 #include <TGTextEntry.h>
15 #include <TGNumberEntry.h>
16 #include <TGFileDialog.h>
17 #include <TGToolTip.h>
18
19 using namespace Reve;
20 using namespace Alieve;
21
22 //______________________________________________________________________
23 // TPCLoaderEditor
24 //
25
26 ClassImp(TPCLoaderEditor)
27
28 TPCLoaderEditor::TPCLoaderEditor(const TGWindow *p, Int_t id, Int_t width, Int_t height,
29                                  UInt_t options, Pixel_t back) :
30   TGedFrame(p, id, width, height, options | kVerticalFrame, back)
31 {
32   fM = 0;
33   MakeTitle("TPCLoader");
34
35   Int_t labelW = 42;
36   {
37     TGHorizontalFrame* f = new TGHorizontalFrame(this);
38     TGHorizontalFrame* g = new TGHorizontalFrame(f, labelW, 0, kFixedWidth);
39     TGLabel* l = new TGLabel(g, "File: ");
40     g->AddFrame(l, new TGLayoutHints(kLHintsLeft, 0,0,4,0));
41     f->AddFrame(g);
42     fFile = new TGTextEntry(f);
43     fFile->SetWidth(140);
44     f->AddFrame(fFile);
45     fFile->Connect("DoubleClicked()",
46                    "Alieve::TPCLoaderEditor", this, "FileSelect()");
47     fFile->Connect("TextChanged(const char *)",
48                    "Alieve::TPCLoaderEditor", this, "FileChanged()");
49     fOpenFile = new TGTextButton(f, "Open");
50     f->AddFrame(fOpenFile);
51     fOpenFile->Connect("Clicked()",
52                        "Alieve::TPCLoaderEditor", this, "DoOpen()");
53     AddFrame(f);
54   }
55
56   fEvent = new RGValuator(this, "Event:", 110, 0);
57   fEvent->SetShowSlider(kFALSE);
58   fEvent->SetLabelWidth(labelW);
59   fEvent->SetNELength(6);
60   fEvent->Build();
61   fEvent->SetLimits(0, 1000);
62   fEvent->SetToolTip("Current event number");
63   fEvent->Connect("ValueSet(Double_t)",
64                   "Alieve::TPCLoaderEditor", this, "DoEvent()");
65   // Reuse Event for DoubleSR button
66   fDoubleSR = new TGCheckButton(fEvent, "Double SR");
67   fDoubleSR->SetToolTipText("Double sampling rate");
68   fEvent->AddFrame(fDoubleSR, new TGLayoutHints(kLHintsLeft, 12, 0, 1, 0));
69   fDoubleSR->Connect("Toggled(Bool_t)",
70                      "Alieve::TPCLoaderEditor", this, "DoDoubleSR()");
71   AddFrame(fEvent);
72
73   fUpdateSectors = new TGTextButton(this, "Update Sectors");
74   AddFrame(fUpdateSectors, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
75   fUpdateSectors->Connect("Clicked()",
76                      "Alieve::TPCLoaderEditor", this, "DoUpdateSectors()");
77   {
78     TGHorizontalFrame* f = new TGHorizontalFrame(this);
79     fCreateSectors3D = new TGTextButton(f, "Create 3D");
80     f->AddFrame(fCreateSectors3D, new TGLayoutHints(kLHintsExpandX, 0,4,0,0));
81     fCreateSectors3D->Connect("Clicked()",
82                      "Alieve::TPCLoaderEditor", this, "DoCreateSectors3D()");
83     fDeleteSectors3D = new TGTextButton(f, "Delete 3D");
84     f->AddFrame(fDeleteSectors3D, new TGLayoutHints(kLHintsExpandX, 4,0,0,0));
85     fDeleteSectors3D->Connect("Clicked()",
86                      "Alieve::TPCLoaderEditor", this, "DoDeleteSectors3D()");
87     AddFrame(f, new TGLayoutHints(kLHintsExpandX, 8,8,8,0));
88   }
89
90   // Register the editor.
91   TClass *cl = TPCLoader::Class();
92   TGedElement *ge = new TGedElement;
93   ge->fGedFrame = this;
94   ge->fCanvas = 0;
95   cl->GetEditorList()->Add(ge);
96 }
97
98 TPCLoaderEditor::~TPCLoaderEditor()
99 {}
100
101 /**************************************************************************/
102
103 void TPCLoaderEditor::SetModel(TVirtualPad* pad, TObject* obj, Int_t /*event*/)
104 {
105   fModel = 0;
106   fPad   = 0;
107
108   if (!obj || !obj->InheritsFrom(TPCLoader::Class()) || obj->InheritsFrom(TVirtualPad::Class())) {
109     SetActive(kFALSE);
110     return;
111   }
112
113   fModel = obj;
114   fPad   = pad;
115
116   fM = dynamic_cast<TPCLoader*>(fModel);
117
118   // !!!! order changed, need TGTextEntry::SetText NO BLOODY EMIT.
119   fFile->SetToolTipText(gSystem->DirName(fM->fFile));
120   fFile->SetText(gSystem->BaseName(fM->fFile));
121   fEvent->SetValue(fM->fEvent);
122   fEvent->SetEnabled(fM->fEvent >= 0);
123   fDoubleSR->SetState(fM->fDoubleSR  ? kButtonDown : kButtonUp);
124
125   SetActive();
126 }
127
128 /**************************************************************************/
129 /**************************************************************************/
130
131 namespace {
132 const char *tpcfiletypes[] = {
133    "Root files",  "*.root",
134    "All files",   "*.*",
135     0,               0
136 };
137 }
138
139 void TPCLoaderEditor::FileSelect()
140 {
141   TGFileInfo fi;
142   fi.fIniDir    = StrDup(gSystem->DirName (fM->fFile));
143   fi.fFilename  = StrDup(gSystem->BaseName(fM->fFile));
144   fi.fFileTypes = tpcfiletypes;
145
146   new TGFileDialog(fClient->GetRoot(), gReve, kFDOpen, &fi);
147   if (!fi.fFilename)
148     return;
149
150   fFile->SetToolTipText(gSystem->DirName (fi.fFilename));
151   fFile->SetText       (gSystem->BaseName(fi.fFilename));
152 }
153
154 void TPCLoaderEditor::FileChanged()
155 {
156   fM->fFile = Form("%s/%s", fFile->GetToolTip()->GetText()->Data(),
157                    fFile->GetText());
158 }
159
160 void TPCLoaderEditor::DoOpen()
161 {
162   fM->OpenFile();
163   SetModel(fPad, fModel, 0);
164 }
165
166 /**************************************************************************/
167
168 void TPCLoaderEditor::DoEvent()
169 {
170   fM->GotoEvent((Int_t) fEvent->GetValue());
171   SetModel(fPad, fModel, 0);
172 }
173
174 void TPCLoaderEditor::DoDoubleSR()
175 {
176   fM->SetDoubleSR(fDoubleSR->IsOn());
177   Update();
178 }
179
180 /**************************************************************************/
181
182 void TPCLoaderEditor::DoUpdateSectors()
183 {
184   fM->UpdateSectors();
185 }
186
187 void TPCLoaderEditor::DoCreateSectors3D()
188 {
189   fM->CreateSectors3D();
190 }
191
192
193 void TPCLoaderEditor::DoDeleteSectors3D()
194 {
195   fM->DeleteSectors3D();
196 }
197