]>
Commit | Line | Data |
---|---|---|
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 | |
19 | using namespace Reve; | |
20 | using namespace Alieve; | |
21 | ||
22 | //______________________________________________________________________ | |
23 | // TPCLoaderEditor | |
24 | // | |
25 | ||
26 | ClassImp(TPCLoaderEditor) | |
27 | ||
e8f20a25 | 28 | TPCLoaderEditor::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 | ||
110 | TPCLoaderEditor::~TPCLoaderEditor() | |
111 | {} | |
112 | ||
113 | /**************************************************************************/ | |
114 | ||
e8f20a25 | 115 | void 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 | ||
143 | namespace { | |
144 | const char *tpcfiletypes[] = { | |
145 | "Root files", "*.root", | |
146 | "All files", "*.*", | |
147 | 0, 0 | |
148 | }; | |
149 | } | |
150 | ||
151 | void 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 | ||
166 | void TPCLoaderEditor::FileChanged() | |
167 | { | |
89ec258e | 168 | fM->fFile = Form("%s/%s", fFile->GetToolTip()->GetText()->Data(), |
169 | fFile->GetText()); | |
e9a38ea3 | 170 | } |
171 | ||
172 | void TPCLoaderEditor::DoOpen() | |
173 | { | |
174 | fM->OpenFile(); | |
e8f20a25 | 175 | SetModel(fPad, fModel, 0); |
e9a38ea3 | 176 | } |
177 | ||
178 | /**************************************************************************/ | |
179 | ||
180 | void TPCLoaderEditor::DoEvent() | |
181 | { | |
182 | fM->GotoEvent((Int_t) fEvent->GetValue()); | |
e8f20a25 | 183 | SetModel(fPad, fModel, 0); |
e9a38ea3 | 184 | } |
185 | ||
6e91772d | 186 | void TPCLoaderEditor::DoDoubleSR() |
187 | { | |
188 | fM->SetDoubleSR(fDoubleSR->IsOn()); | |
189 | Update(); | |
190 | } | |
191 | ||
e9a38ea3 | 192 | /**************************************************************************/ |
193 | ||
194 | void TPCLoaderEditor::DoUpdateSectors() | |
195 | { | |
196 | fM->UpdateSectors(); | |
197 | } | |
198 | ||
199 | void TPCLoaderEditor::DoCreateSectors3D() | |
200 | { | |
201 | fM->CreateSectors3D(); | |
202 | } | |
203 | ||
204 | ||
205 | void TPCLoaderEditor::DoDeleteSectors3D() | |
206 | { | |
207 | fM->DeleteSectors3D(); | |
208 | } | |
209 |