]>
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 | ||
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()"); | |
6e91772d | 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)); | |
b6b01ba3 | 69 | fDoubleSR->Connect("Toggled(Bool_t)", |
70 | "Alieve::TPCLoaderEditor", this, "DoDoubleSR()"); | |
e9a38ea3 | 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 | ||
89ec258e | 118 | // !!!! order changed, need TGTextEntry::SetText NO BLOODY EMIT. |
119 | fFile->SetToolTipText(gSystem->DirName(fM->fFile)); | |
120 | fFile->SetText(gSystem->BaseName(fM->fFile)); | |
e9a38ea3 | 121 | fEvent->SetValue(fM->fEvent); |
122 | fEvent->SetEnabled(fM->fEvent >= 0); | |
6e91772d | 123 | fDoubleSR->SetState(fM->fDoubleSR ? kButtonDown : kButtonUp); |
124 | ||
e9a38ea3 | 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; | |
fda47a05 | 142 | fi.fIniDir = StrDup(gSystem->DirName (fM->fFile)); |
143 | fi.fFilename = StrDup(gSystem->BaseName(fM->fFile)); | |
e9a38ea3 | 144 | fi.fFileTypes = tpcfiletypes; |
89ec258e | 145 | |
e9a38ea3 | 146 | new TGFileDialog(fClient->GetRoot(), gReve, kFDOpen, &fi); |
89ec258e | 147 | if (!fi.fFilename) |
148 | return; | |
149 | ||
150 | fFile->SetToolTipText(gSystem->DirName (fi.fFilename)); | |
151 | fFile->SetText (gSystem->BaseName(fi.fFilename)); | |
e9a38ea3 | 152 | } |
153 | ||
154 | void TPCLoaderEditor::FileChanged() | |
155 | { | |
89ec258e | 156 | fM->fFile = Form("%s/%s", fFile->GetToolTip()->GetText()->Data(), |
157 | fFile->GetText()); | |
e9a38ea3 | 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 | ||
6e91772d | 174 | void TPCLoaderEditor::DoDoubleSR() |
175 | { | |
176 | fM->SetDoubleSR(fDoubleSR->IsOn()); | |
177 | Update(); | |
178 | } | |
179 | ||
e9a38ea3 | 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 |