Marian + Jens
[u/mrichter/AliRoot.git] / TPC / AliTPCCalibViewerGUIAlarms.cxx
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
117   TRootEmbeddedCanvas *cEmbed = new TRootEmbeddedCanvas("Alarm_Canvas", contCenterTop, 200, 200, kFitWidth | kFitHeight);
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
184 //   printf("name: %s\n", item->GetText());
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 //______________________________________________________________________________
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 //______________________________________________________________________________
237 void AliTPCCalibViewerGUIAlarms::OnDoubleClick(TGListTreeItem* item, Int_t /*id*/)
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 //______________________________________________________________________________
261 void AliTPCCalibViewerGUIAlarms::OnClick(TGListTreeItem* item, Int_t /*id*/)
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