3 #include <TGSplitter.h>
4 #include <TGListTree.h>
5 #include <TGTextEntry.h>
8 #include <TRootEmbeddedCanvas.h>
11 #include <TVirtualPad.h>
14 #include "AliTPCCalibQAChecker.h"
15 #include "AliTPCCalibViewerGUI.h"
16 #include "AliTPCCalibViewerGUItime.h"
18 #include "AliTPCCalibViewerGUIAlarms.h"
21 ClassImp(AliTPCCalibViewerGUIAlarms)
23 AliTPCCalibViewerGUIAlarms::AliTPCCalibViewerGUIAlarms(const TGWindow *p, UInt_t w, UInt_t h) :
24 TGCompositeFrame(p,w,h),
31 fCalibViewerGUItime(0x0)
38 //______________________________________________________________________________
39 AliTPCCalibViewerGUIAlarms::~AliTPCCalibViewerGUIAlarms()
44 // gClient->FreePicture("interrupt.xpm");
46 //______________________________________________________________________________
47 void AliTPCCalibViewerGUIAlarms::DrawGUI(const TGWindow */*p*/, UInt_t w, UInt_t h)
54 SetCleanup(kDeepCleanup);
56 // *****************************************************************************
57 // ************************* content of this MainFrame *************************
58 // *****************************************************************************
59 // top level container with horizontal layout
61 TGCompositeFrame *contLCR = new TGCompositeFrame(this, w, h, kHorizontalFrame | kFixedWidth | kFixedHeight);
62 AddFrame(contLCR, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
64 // ***********************************************************************
65 // ************************* content of contLCR *************************
66 // ***********************************************************************
68 TGCompositeFrame *contLeft = new TGCompositeFrame(contLCR, 200, 200, kVerticalFrame | kFixedWidth | kFitHeight);
69 contLCR->AddFrame(contLeft, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY, 5, 3, 3, 3));
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));
77 TGCompositeFrame *contRight = new TGCompositeFrame(contLCR, 150, 200, kVerticalFrame | kFixedWidth | kFitHeight);
78 contLCR->AddFrame(contRight, new TGLayoutHints(kLHintsTop | kLHintsRight | kLHintsExpandY, 3, 5, 3, 3));
81 TGCompositeFrame *contCenter = new TGCompositeFrame(contLCR, 200, 200, kVerticalFrame | kFixedWidth | kFitHeight);
82 contLCR->AddFrame(contCenter, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
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));
89 // ***********************************************************************
90 // ******************* left container ************************
91 // ***********************************************************************
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);
103 // ***********************************************************************
104 // ******************* center container ************************
105 // ***********************************************************************
108 TGCompositeFrame *contCenterTop = new TGCompositeFrame(contCenter, 200, 200, kVerticalFrame | kFixedWidth | kFitHeight);
109 contCenter->AddFrame(contCenterTop, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
112 TGCompositeFrame *contCenterBottom = new TGCompositeFrame(contCenter, 200, 100, kVerticalFrame | kFixedWidth | kFixedHeight);
113 contCenter->AddFrame(contCenterBottom, new TGLayoutHints( kLHintsExpandX, 0, 0, 0, 0));
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();
123 // alarm text on bottom
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));
130 // textCanvas->AddFrame(fAlarmText,new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 0, 0, 0, 0));
133 // ***********************************************************************
134 // ******************* right container ************************
135 // ***********************************************************************
137 TGGroupFrame *grpInfo = new TGGroupFrame(contRight, "Alarm Info", kVerticalFrame | kFitWidth | kFitHeight);
138 contRight->AddFrame(grpInfo, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 0));
141 SetWindowName("AliTPCCalibViewer GUI - Alarms");
143 Resize(GetDefaultSize());
147 //______________________________________________________________________________
148 void AliTPCCalibViewerGUIAlarms::AddSubItems(AliTPCCalibQAChecker *checker, TGListTreeItem *item)
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);
160 newitem->SetPictures(gClient->GetPicture("interrupt.xpm"),gClient->GetPicture("interrupt.xpm"));
164 //______________________________________________________________________________
165 void AliTPCCalibViewerGUIAlarms::InitBrowser()
171 AliError("Alarms not set!");
174 AddSubItems(fCalibChecker,0);
175 fAlarmTree->ClearViewPort();
177 //______________________________________________________________________________
178 void AliTPCCalibViewerGUIAlarms::UpdateSubItem(TGListTreeItem *item)
184 // printf("name: %s\n", item->GetText());
185 AliTPCCalibQAChecker *checker=dynamic_cast<AliTPCCalibQAChecker*>((TObject*)item->GetUserData());
187 item->SetColor(checker->GetQualityColor());
191 TGListTreeItem *nextItem=0x0;
192 if ( (nextItem=item->GetFirstChild()) ) UpdateSubItem(nextItem);
193 if ( (nextItem=item->GetNextSibling()) ) UpdateSubItem(nextItem);
195 //______________________________________________________________________________
196 void AliTPCCalibViewerGUIAlarms::UpdateBrowser()
201 UpdateSubItem(fAlarmTree->GetFirstItem());
202 fAlarmTree->ClearViewPort();
204 //______________________________________________________________________________
205 void AliTPCCalibViewerGUIAlarms::ResetBrowser()
210 if (!fAlarmTree->GetFirstItem()) return;
211 fAlarmTree->DeleteChildren(fAlarmTree->GetFirstItem());
212 fAlarmTree->DeleteItem(fAlarmTree->GetFirstItem());
213 fAlarmTree->ClearViewPort();
215 //______________________________________________________________________________
216 void AliTPCCalibViewerGUIAlarms::OpenSubItems(TGListTreeItem *item)
221 fAlarmTree->OpenItem(item);
222 TGListTreeItem *nextItem=0x0;
223 if ( (nextItem=item->GetFirstChild()) ) OpenSubItems(nextItem);
224 if ( (nextItem=item->GetNextSibling()) ) OpenSubItems(nextItem);
226 //______________________________________________________________________________
227 void AliTPCCalibViewerGUIAlarms::OpenAllItems()
232 if (!fAlarmTree->GetFirstItem()) return;
233 OpenSubItems(fAlarmTree->GetFirstItem());
234 fAlarmTree->ClearViewPort();
236 //______________________________________________________________________________
237 void AliTPCCalibViewerGUIAlarms::OnDoubleClick(TGListTreeItem* item, Int_t /*id*/)
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();
256 draw->SetText(((AliTPCCalibQAChecker*)item->GetUserData())->GetDrawString());
257 cuts->SetText(((AliTPCCalibQAChecker*)item->GetUserData())->GetCutsString());
258 opt->SetText(((AliTPCCalibQAChecker*)item->GetUserData())->GetDrawOptString());
260 //______________________________________________________________________________
261 void AliTPCCalibViewerGUIAlarms::OnClick(TGListTreeItem* item, Int_t /*id*/)
266 // printf("Clicked");
268 TVirtualPad *pad=gPad;
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());
281 //______________________________________________________________________________
282 AliTPCCalibViewerGUIAlarms* AliTPCCalibViewerGUIAlarms::Show()
287 TGMainFrame* frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 600);
288 frmMain->SetWindowName("AliTPCCalibViewer GUI");
289 frmMain->SetCleanup(kDeepCleanup);
291 AliTPCCalibViewerGUIAlarms* calibViewer1 = new AliTPCCalibViewerGUIAlarms(frmMain, 1000, 600);
292 frmMain->AddFrame(calibViewer1, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
294 frmMain->MapSubwindows();
296 frmMain->MapWindow();
300 //______________________________________________________________________________