]>
Commit | Line | Data |
---|---|---|
949d8707 | 1 | |
2 | #include <TGClient.h> | |
3 | #include <TGSplitter.h> | |
4 | #include <TGListTree.h> | |
5 | #include <TGTextEntry.h> | |
6 | #include <TGFrame.h> | |
7 | #include <TGLabel.h> | |
8 | #include <TRootEmbeddedCanvas.h> | |
9 | #include <TCanvas.h> | |
10 | #include <TPad.h> | |
11 | #include <TVirtualPad.h> | |
12 | ||
13 | #include "AliLog.h" | |
14 | #include "AliTPCCalibQAChecker.h" | |
15 | #include "AliTPCCalibViewerGUI.h" | |
16 | #include "AliTPCCalibViewerGUItime.h" | |
17 | ||
18 | #include "AliTPCCalibViewerGUIAlarms.h" | |
19 | ||
20 | ||
21 | ClassImp(AliTPCCalibViewerGUIAlarms) | |
22 | ||
23 | AliTPCCalibViewerGUIAlarms::AliTPCCalibViewerGUIAlarms(const TGWindow *p, UInt_t w, UInt_t h) : | |
24 | TGCompositeFrame(p,w,h), | |
25 | fCalibChecker(0x0), | |
26 | fAlarmTree(0x0), | |
27 | fMainCanvas(0x0), | |
28 | fTreeCanvas(0x0), | |
29 | fAlarmText(0x0), | |
30 | fCalibViewerGUI(0x0), | |
31 | fCalibViewerGUItime(0x0) | |
32 | { | |
33 | // | |
34 | // | |
35 | // | |
36 | DrawGUI(p,w,h); | |
37 | } | |
38 | //______________________________________________________________________________ | |
39 | AliTPCCalibViewerGUIAlarms::~AliTPCCalibViewerGUIAlarms() | |
40 | { | |
41 | // | |
42 | // | |
43 | // | |
44 | // gClient->FreePicture("interrupt.xpm"); | |
45 | } | |
46 | //______________________________________________________________________________ | |
47 | void AliTPCCalibViewerGUIAlarms::DrawGUI(const TGWindow */*p*/, UInt_t w, UInt_t h) | |
48 | { | |
49 | // | |
50 | // draw the GUI | |
51 | // | |
52 | ||
53 | //GUI elements | |
54 | SetCleanup(kDeepCleanup); | |
55 | ||
56 | // ***************************************************************************** | |
57 | // ************************* content of this MainFrame ************************* | |
58 | // ***************************************************************************** | |
59 | // top level container with horizontal layout | |
60 | ||
61 | TGCompositeFrame *contLCR = new TGCompositeFrame(this, w, h, kHorizontalFrame | kFixedWidth | kFixedHeight); | |
62 | AddFrame(contLCR, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0)); | |
63 | ||
64 | // *********************************************************************** | |
65 | // ************************* content of contLCR ************************* | |
66 | // *********************************************************************** | |
67 | // left container | |
68 | TGCompositeFrame *contLeft = new TGCompositeFrame(contLCR, 200, 200, kVerticalFrame | kFixedWidth | kFitHeight); | |
69 | contLCR->AddFrame(contLeft, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY, 5, 3, 3, 3)); | |
70 | ||
71 | // left vertical splitter | |
72 | TGVSplitter *splitLeft = new TGVSplitter(contLCR); | |
73 | splitLeft->SetFrame(contLeft, kTRUE); | |
74 | contLCR->AddFrame(splitLeft, new TGLayoutHints(kLHintsLeft | kLHintsExpandY, 0, 0, 0, 0)); | |
75 | ||
76 | // right container | |
77 | TGCompositeFrame *contRight = new TGCompositeFrame(contLCR, 150, 200, kVerticalFrame | kFixedWidth | kFitHeight); | |
78 | contLCR->AddFrame(contRight, new TGLayoutHints(kLHintsTop | kLHintsRight | kLHintsExpandY, 3, 5, 3, 3)); | |
79 | ||
80 | // center container | |
81 | TGCompositeFrame *contCenter = new TGCompositeFrame(contLCR, 200, 200, kVerticalFrame | kFixedWidth | kFitHeight); | |
82 | contLCR->AddFrame(contCenter, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0)); | |
83 | ||
84 | // right vertical splitter | |
85 | TGVSplitter *splitRight = new TGVSplitter(contLCR); | |
86 | splitRight->SetFrame(contRight, kFALSE); | |
87 | contLCR->AddFrame(splitRight, new TGLayoutHints(kLHintsLeft | kLHintsExpandY, 0, 0, 0, 0)); | |
88 | ||
89 | // *********************************************************************** | |
90 | // ******************* left container ************************ | |
91 | // *********************************************************************** | |
92 | ||
93 | //Alarm list view | |
94 | TGCanvas *treeCanvas = new TGCanvas(contLeft, 200, 200); | |
95 | fAlarmTree = new TGListTree(treeCanvas, kHorizontalFrame); | |
96 | contLeft->AddFrame(treeCanvas,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY | kLHintsTop)); | |
97 | fAlarmTree->Connect("DoubleClicked(TGListTreeItem*,Int_t)","AliTPCCalibViewerGUIAlarms",this, | |
98 | "OnDoubleClick(TGListTreeItem*,Int_t)"); | |
99 | fAlarmTree->Connect("Clicked(TGListTreeItem*,Int_t)","AliTPCCalibViewerGUIAlarms",this, | |
100 | "OnClick(TGListTreeItem*,Int_t)"); | |
101 | fAlarmTree->SetColorMode(TGListTree::kColorBox); | |
102 | ||
103 | // *********************************************************************** | |
104 | // ******************* center container ************************ | |
105 | // *********************************************************************** | |
106 | ||
107 | // top container | |
108 | TGCompositeFrame *contCenterTop = new TGCompositeFrame(contCenter, 200, 200, kVerticalFrame | kFixedWidth | kFitHeight); | |
109 | contCenter->AddFrame(contCenterTop, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0)); | |
110 | ||
111 | // bottom container | |
112 | TGCompositeFrame *contCenterBottom = new TGCompositeFrame(contCenter, 200, 100, kVerticalFrame | kFixedWidth | kFixedHeight); | |
113 | contCenter->AddFrame(contCenterBottom, new TGLayoutHints( kLHintsExpandX, 0, 0, 0, 0)); | |
114 | ||
115 | //-------------- | |
116 | // canvas on top | |
cc65e4f5 | 117 | TRootEmbeddedCanvas *cEmbed = new TRootEmbeddedCanvas("Alarm_Canvas", contCenterTop, 200, 200, kFitWidth | kFitHeight); |
949d8707 | 118 | contCenterTop->AddFrame(cEmbed, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0)); |
119 | // cEmbed->GetCanvas()->Connect("ProcessedEvent(Int_t, Int_t, Int_t, TObject*)", "AliTPCCalibViewerGUIAlarms", this, "MouseMove(Int_t, Int_t, Int_t, TObject*)"); | |
120 | cEmbed->GetCanvas()->SetToolTipText("Alarm histograms are displayed in this region."); | |
121 | fMainCanvas=cEmbed->GetCanvas(); | |
122 | //-------------- | |
123 | // alarm text on bottom | |
124 | // canvas | |
125 | TGCanvas *textCanvas = new TGCanvas(contCenterBottom, 200, 200); | |
126 | fAlarmText = new TGLabel(textCanvas->GetViewPort(),"Alarm descriptions can be found here"); | |
127 | textCanvas->SetContainer(fAlarmText); | |
128 | contCenterBottom->AddFrame(textCanvas,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY | kLHintsTop)); | |
129 | ||
130 | // textCanvas->AddFrame(fAlarmText,new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0)); | |
131 | ||
132 | ||
133 | // *********************************************************************** | |
134 | // ******************* right container ************************ | |
135 | // *********************************************************************** | |
136 | ||
137 | TGGroupFrame *grpInfo = new TGGroupFrame(contRight, "Alarm Info", kVerticalFrame | kFitWidth | kFitHeight); | |
138 | contRight->AddFrame(grpInfo, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0)); | |
139 | ||
140 | ||
141 | SetWindowName("AliTPCCalibViewer GUI - Alarms"); | |
142 | MapSubwindows(); | |
143 | Resize(GetDefaultSize()); | |
144 | MapWindow(); | |
145 | ||
146 | } | |
147 | //______________________________________________________________________________ | |
148 | void AliTPCCalibViewerGUIAlarms::AddSubItems(AliTPCCalibQAChecker *checker, TGListTreeItem *item) | |
149 | { | |
150 | // | |
151 | // | |
152 | // | |
153 | TGListTreeItem *newitem=fAlarmTree->AddItem(item,checker->GetName(),(void*)checker); | |
154 | newitem->SetColor(checker->GetQualityColor()); | |
155 | newitem->SetTipText(checker->GetTitle()); | |
156 | if (checker->HasSubCheckers()) { | |
157 | AliTPCCalibQAChecker *ch=0x0; | |
158 | while ( (ch=checker->NextSubChecker()) ) AddSubItems(ch,newitem); | |
159 | } else { | |
160 | newitem->SetPictures(gClient->GetPicture("interrupt.xpm"),gClient->GetPicture("interrupt.xpm")); | |
161 | } | |
162 | ||
163 | } | |
164 | //______________________________________________________________________________ | |
165 | void AliTPCCalibViewerGUIAlarms::InitBrowser() | |
166 | { | |
167 | // | |
168 | // | |
169 | // | |
170 | if (!fAlarmTree){ | |
171 | AliError("Alarms not set!"); | |
172 | return; | |
173 | } | |
174 | AddSubItems(fCalibChecker,0); | |
175 | fAlarmTree->ClearViewPort(); | |
176 | } | |
177 | //______________________________________________________________________________ | |
178 | void AliTPCCalibViewerGUIAlarms::UpdateSubItem(TGListTreeItem *item) | |
179 | { | |
180 | // | |
181 | // | |
182 | // | |
183 | ||
cc65e4f5 | 184 | // printf("name: %s\n", item->GetText()); |
949d8707 | 185 | AliTPCCalibQAChecker *checker=dynamic_cast<AliTPCCalibQAChecker*>((TObject*)item->GetUserData()); |
186 | if (checker){ | |
187 | item->SetColor(checker->GetQualityColor()); | |
188 | } else { | |
189 | item->ClearColor(); | |
190 | } | |
191 | TGListTreeItem *nextItem=0x0; | |
192 | if ( (nextItem=item->GetFirstChild()) ) UpdateSubItem(nextItem); | |
193 | if ( (nextItem=item->GetNextSibling()) ) UpdateSubItem(nextItem); | |
194 | } | |
195 | //______________________________________________________________________________ | |
196 | void AliTPCCalibViewerGUIAlarms::UpdateBrowser() | |
197 | { | |
198 | // | |
199 | // | |
200 | // | |
201 | UpdateSubItem(fAlarmTree->GetFirstItem()); | |
202 | fAlarmTree->ClearViewPort(); | |
203 | } | |
204 | //______________________________________________________________________________ | |
cc65e4f5 | 205 | void AliTPCCalibViewerGUIAlarms::ResetBrowser() |
206 | { | |
207 | // | |
208 | // | |
209 | // | |
210 | if (!fAlarmTree->GetFirstItem()) return; | |
211 | fAlarmTree->DeleteChildren(fAlarmTree->GetFirstItem()); | |
212 | fAlarmTree->DeleteItem(fAlarmTree->GetFirstItem()); | |
213 | fAlarmTree->ClearViewPort(); | |
214 | } | |
215 | //______________________________________________________________________________ | |
216 | void AliTPCCalibViewerGUIAlarms::OpenSubItems(TGListTreeItem *item) | |
217 | { | |
218 | // | |
219 | // | |
220 | // | |
221 | fAlarmTree->OpenItem(item); | |
222 | TGListTreeItem *nextItem=0x0; | |
223 | if ( (nextItem=item->GetFirstChild()) ) OpenSubItems(nextItem); | |
224 | if ( (nextItem=item->GetNextSibling()) ) OpenSubItems(nextItem); | |
225 | } | |
226 | //______________________________________________________________________________ | |
227 | void AliTPCCalibViewerGUIAlarms::OpenAllItems() | |
228 | { | |
229 | // | |
230 | // | |
231 | // | |
232 | if (!fAlarmTree->GetFirstItem()) return; | |
233 | OpenSubItems(fAlarmTree->GetFirstItem()); | |
234 | fAlarmTree->ClearViewPort(); | |
235 | } | |
236 | //______________________________________________________________________________ | |
37f2177e | 237 | void AliTPCCalibViewerGUIAlarms::OnDoubleClick(TGListTreeItem* item, Int_t /*id*/) |
949d8707 | 238 | { |
239 | // | |
240 | // | |
241 | // | |
242 | // printf("DoubleClicked"); | |
243 | if (!fCalibViewerGUI && !fCalibViewerGUItime) return; | |
244 | TGTextEntry *draw=0x0; | |
245 | TGTextEntry *cuts=0x0; | |
246 | TGTextEntry *opt=0x0; | |
247 | if (fCalibViewerGUI){ | |
248 | draw=fCalibViewerGUI->GetDrawEntry(); | |
249 | cuts=fCalibViewerGUI->GetCutsEntry(); | |
250 | opt=fCalibViewerGUI->GetDrawOptEntry(); | |
251 | } else if (fCalibViewerGUItime){ | |
252 | draw=fCalibViewerGUItime->GetDrawEntry(); | |
253 | cuts=fCalibViewerGUItime->GetCutsEntry(); | |
254 | opt=fCalibViewerGUItime->GetDrawOptEntry(); | |
255 | } | |
256 | draw->SetText(((AliTPCCalibQAChecker*)item->GetUserData())->GetDrawString()); | |
257 | cuts->SetText(((AliTPCCalibQAChecker*)item->GetUserData())->GetCutsString()); | |
258 | opt->SetText(((AliTPCCalibQAChecker*)item->GetUserData())->GetDrawOptString()); | |
259 | } | |
260 | //______________________________________________________________________________ | |
37f2177e | 261 | void AliTPCCalibViewerGUIAlarms::OnClick(TGListTreeItem* item, Int_t /*id*/) |
949d8707 | 262 | { |
263 | // | |
264 | // | |
265 | // | |
266 | // printf("Clicked"); | |
267 | ||
268 | TVirtualPad *pad=gPad; | |
269 | fMainCanvas->cd(); | |
270 | fMainCanvas->Clear(); | |
271 | AliTPCCalibQAChecker *checker=(AliTPCCalibQAChecker*)item->GetUserData(); | |
272 | checker->Draw("nobc"); | |
273 | TString text(checker->GetQualityDescription()); | |
274 | if (text.IsNull()) fAlarmText->SetText("No description available!"); | |
275 | else fAlarmText->SetText(text.Data()); | |
276 | gPad->Modified(); | |
277 | gPad->Update(); | |
278 | if (pad) pad->cd(); | |
279 | ||
280 | } | |
281 | //______________________________________________________________________________ | |
282 | AliTPCCalibViewerGUIAlarms* AliTPCCalibViewerGUIAlarms::Show() | |
283 | { | |
284 | // | |
285 | // | |
286 | // | |
287 | TGMainFrame* frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 600); | |
288 | frmMain->SetWindowName("AliTPCCalibViewer GUI"); | |
289 | frmMain->SetCleanup(kDeepCleanup); | |
290 | ||
291 | AliTPCCalibViewerGUIAlarms* calibViewer1 = new AliTPCCalibViewerGUIAlarms(frmMain, 1000, 600); | |
292 | frmMain->AddFrame(calibViewer1, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0)); | |
293 | ||
294 | frmMain->MapSubwindows(); | |
295 | frmMain->Resize(); | |
296 | frmMain->MapWindow(); | |
297 | ||
298 | return calibViewer1; | |
299 | } | |
300 | //______________________________________________________________________________ | |
301 |