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