AliRoot Core  3dc7879 (3dc7879)
AliTPCCalibViewerGUIAlarms.cxx
Go to the documentation of this file.
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"
17 
19 
20 
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 //______________________________________________________________________________
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 //______________________________________________________________________________
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 //______________________________________________________________________________
166 {
167  //
168  //
169  //
170  if (!fAlarmTree){
171  AliError("Alarms not set!");
172  return;
173  }
175  fAlarmTree->ClearViewPort();
176 }
177 //______________________________________________________________________________
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 //______________________________________________________________________________
197 {
198  //
199  //
200  //
201  UpdateSubItem(fAlarmTree->GetFirstItem());
202  fAlarmTree->ClearViewPort();
203 }
204 //______________________________________________________________________________
206 {
207  //
208  //
209  //
210  if (!fAlarmTree->GetFirstItem()) return;
211  fAlarmTree->DeleteChildren(fAlarmTree->GetFirstItem());
212  fAlarmTree->DeleteItem(fAlarmTree->GetFirstItem());
213  fAlarmTree->ClearViewPort();
214 }
215 //______________________________________________________________________________
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 //______________________________________________________________________________
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){
251  } else if (fCalibViewerGUItime){
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 //______________________________________________________________________________
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 
TGTextEntry * GetDrawOptEntry()
AliTPCCalibViewerGUI * fCalibViewerGUI
void OpenSubItems(TGListTreeItem *item)
TGTextEntry * GetCutsEntry()
static AliTPCCalibViewerGUIAlarms * Show()
Float_t p[]
Definition: kNNTest.C:133
Color_t GetQualityColor() const
AliTPCCalibQAChecker * fCalibChecker
void UpdateSubItem(TGListTreeItem *item)
AliTPCCalibQAChecker * NextSubChecker()
AliTPCCalibViewerGUIAlarms(const TGWindow *p, UInt_t w, UInt_t h)
void OnClick(TGListTreeItem *item, Int_t id)
void OnDoubleClick(TGListTreeItem *item, Int_t id)
AliTPCCalibViewerGUItime * fCalibViewerGUItime
pointer to gui
#define AliError(message)
Definition: AliLog.h:591
Bool_t HasSubCheckers() const
const char * GetQualityDescription() const
void AddSubItems(AliTPCCalibQAChecker *fChecker, TGListTreeItem *item)
void DrawGUI(const TGWindow *, UInt_t w, UInt_t h)
pointer to gui time
virtual void Draw(Option_t *option="")
TGTextEntry * GetDrawEntry()