]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/Alieve/AliEveITSModuleStepper.cxx
Temporary fix to avoid xrootd thrashing
[u/mrichter/AliRoot.git] / EVE / Alieve / AliEveITSModuleStepper.cxx
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
4 /**************************************************************************
5  * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6  * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9
10 #include "AliEveITSModuleStepper.h"
11 #include "AliEveITSDigitsInfo.h"
12 #include "AliEveITSScaledModule.h"
13
14 #include <TEveManager.h>
15 #include <TEveGedEditor.h>
16 #include <TEveGridStepper.h>
17 #include <TEveGLText.h>
18 #include <TEveTrans.h>
19
20 #include <TObject.h>
21
22 #include <TBuffer3D.h>
23 #include <TBuffer3DTypes.h>
24 #include <TVirtualPad.h>
25 #include <TVirtualViewer3D.h>
26
27 #include <TGLRnrCtx.h>
28 #include <TGLSelectRecord.h>
29 #include <TGLText.h>
30 // #include <FTFont.h>
31 #include <TGLAxis.h>
32 #include <TGLViewer.h>
33
34
35 //______________________________________________________________________________
36 // AliEveITSModuleStepper
37 //
38
39 ClassImp(AliEveITSModuleStepper)
40
41 AliEveITSModuleStepper::AliEveITSModuleStepper(AliEveITSDigitsInfo* di) :
42   TEveElementList("ITS 2DStore", "AliEveITSModuleStepper", kTRUE),
43
44   fPosition(0),
45
46   fDigitsInfo(di),
47   fScaleInfo(0),
48
49   fSubDet(-1),
50
51   fStepper(0),
52   fAxis(0),
53   fText(0),
54   fTextSize(0.05),
55   fPagerGap(0.1),
56   fRnrFrame(kFALSE),
57
58   fExpandCell(0.85),
59   fModuleFrameCol(2),
60
61   fPaletteOffset(0.2),
62   fPaletteLength(0.6),
63
64   fWActive(-1),
65   fWWidth(0.025),
66   fWHeight(0.032),
67   fWOff(0.05),
68   fWCol(30),
69   fWActiveCol(45),
70   fFontCol(8)
71 {
72   // override member from base TEveElementList
73   fChildClass = AliEveITSScaledModule::Class();
74
75   SetMainColorPtr(&fWCol);
76
77   fDigitsInfo->IncRefCount();
78
79   fStepper = new TEveGridStepper();
80   fStepper->SetNs(5, 4);
81
82   fScaleInfo = new AliEveDigitScaleInfo();
83   fScaleInfo->IncRefCount();
84
85   fAxis = new TGLAxis();
86   fAxis->SetLineColor(4);
87   fAxis->SetTextColor(fFontCol);
88
89   fText = new TGLText();
90   fText->SetTextColor(fFontCol);
91   fText->SetGLTextFont(40);
92   fText->SetGLTextAngles(0, 0, 0);
93   fText->SetTextSize(fTextSize);
94
95   gEve->GetGLViewer()->AddOverlayElement(this);
96 }
97
98 AliEveITSModuleStepper::~AliEveITSModuleStepper()
99 {
100   gEve->GetGLViewer()->RemoveOverlayElement(this);
101
102    fScaleInfo->DecRefCount();
103   fDigitsInfo->DecRefCount();
104
105   delete fStepper;
106
107   delete fAxis;
108   delete fText;
109 }
110
111 /******************************************************************************/
112
113 void AliEveITSModuleStepper::Capacity()
114 {
115   Int_t N = fStepper->GetNx()*fStepper->GetNy();
116   if (N != GetNChildren())
117   {
118     DestroyElements();
119     for (Int_t m=0; m<N; m++)
120     {
121       AddElement(new AliEveITSScaledModule(m, fDigitsInfo, fScaleInfo));
122     }
123   }
124 }
125
126 /******************************************************************************/
127
128 void AliEveITSModuleStepper::SetFirst(Int_t first)
129 {
130   Int_t lastpage = fIDs.size()/Nxy();
131   if(fIDs.size() % Nxy() ) lastpage++;
132
133   Int_t first_lastpage = (lastpage -1)*Nxy();
134   if(first > first_lastpage) first = first_lastpage;
135   if(first < 0) first = 0;
136   fPosition = first;
137   Apply();
138 }
139
140 void AliEveITSModuleStepper::Start()
141 {
142   fPosition = 0;
143   Apply();
144 }
145
146 void AliEveITSModuleStepper::Next()
147 {
148   SetFirst(fPosition + Nxy());
149 }
150
151 void AliEveITSModuleStepper::Previous()
152 {
153   // move to the top left corner first
154   SetFirst(fPosition - Nxy());
155 }
156
157 void AliEveITSModuleStepper::End()
158 {
159   Int_t lastpage = fIDs.size()/Nxy();
160   if(fIDs.size() % Nxy() ) lastpage++;
161   fPosition = (lastpage -1)*Nxy();
162
163   fStepper->Reset();
164   Apply();
165 }
166
167 /******************************************************************************/
168
169 void AliEveITSModuleStepper::DisplayDet(Int_t det, Int_t layer)
170 {
171   fSubDet = det;
172   fIDs.clear();
173   AliEveITSModuleSelection sel = AliEveITSModuleSelection();
174   sel.SetType (det);
175   sel.SetLayer(layer);
176   fDigitsInfo->GetModuleIDs(&sel, fIDs);
177   //in reder menu define a space between left and right pager
178   fPagerGap = 1.2*TextLength(Form("%d/%d",GetPages(), GetPages()));
179   Start();
180 }
181
182 /******************************************************************************/
183
184 void AliEveITSModuleStepper::DisplayTheta(Float_t min, Float_t max)
185 {
186   fIDs.clear();
187   AliEveITSModuleSelection sel = AliEveITSModuleSelection();
188   sel.SetThetaRange(min, max);
189   fDigitsInfo->GetModuleIDs(&sel, fIDs);
190   Start();
191 }
192
193 /******************************************************************************/
194
195 Int_t AliEveITSModuleStepper::GetCurrentPage()
196 {
197   Int_t idx = fPosition +1;
198   Int_t n = idx/Nxy();
199   if(idx % Nxy()) n++;
200   return n;
201 }
202
203 /******************************************************************************/
204
205 Int_t AliEveITSModuleStepper::GetPages()
206 {
207   Int_t n = fIDs.size()/Nxy();
208   if(fIDs.size() % Nxy()) n++;
209   return n;
210 }
211
212 /******************************************************************************/
213
214 void  AliEveITSModuleStepper::Apply()
215 {
216   // printf("AliEveITSModuleStepper::Apply fPosition %d \n", fPosition);
217   gEve->DisableRedraw();
218   Capacity();
219
220   UInt_t idx = fPosition;
221   for(List_i childit=fChildren.begin(); childit!=fChildren.end(); ++childit)
222   {
223     if(idx < fIDs.size())
224     {
225       AliEveITSScaledModule* mod = dynamic_cast<AliEveITSScaledModule*>(*childit);
226       mod->SetID(fIDs[idx], kFALSE);
227       TEveTrans& tr = mod->RefHMTrans();
228       tr.UnitTrans();
229       tr.RotateLF(3,2,TMath::PiOver2());
230       tr.RotateLF(1,3,TMath::PiOver2());
231
232       // scaling
233       Float_t mz, mx;
234       Float_t* fp = mod->GetFrame()->GetFramePoints();
235       // switch x,z it will be rotated afterwards
236       mx = -2*fp[0];
237       mz = -2*fp[2];
238
239       // fit width first
240       Double_t sx = fStepper->GetDx();
241       Double_t sy = (mx*fStepper->GetDx())/mz;
242       if(sy > fStepper->GetDy())
243       {
244         //      printf("fit width \n");
245         sy =  fStepper->GetDy();
246         sx =  (mz*fStepper->GetDx())/mx;
247       }
248       Float_t scale = (fExpandCell*sx)/mz;
249       tr.Scale(scale, scale, scale);
250
251       Float_t  p[3];
252       fStepper->GetPosition(p);
253       tr.SetPos(p[0]+0.5*fStepper->GetDx(), p[1]+0.5*fStepper->GetDy(), p[2]+0.5*fStepper->GetDz());
254
255       if(mod->GetSubDetID() == 2)
256         mod->SetName(Form("SSD %d", idx));
257       else if(mod->GetSubDetID() == 1)
258         mod->SetName(Form("SDD %d", idx));
259       else
260         mod->SetName(Form("SPD %d", idx));
261       mod->SetRnrSelf(kTRUE);
262       mod->UpdateItems();
263
264       fStepper->Step();
265       idx++;
266     }
267     else {
268       (*childit)->SetRnrSelf(kFALSE);
269     }
270   }
271
272   fStepper->Reset();
273   ElementChanged();
274   gEve->EnableRedraw();
275 }
276
277 /******************************************************************************/
278
279 void AliEveITSModuleStepper::Render(TGLRnrCtx& rnrCtx)
280 {
281   // render everyting in relative coordinates
282   glMatrixMode(GL_PROJECTION);
283   glPushMatrix();
284   glLoadIdentity();
285   if (rnrCtx.Selection())
286   {
287     // Should be
288     // glLoadMatrix(rnrCtx.GetCamera()->GetProjMBase());
289     TGLRect rect(*rnrCtx.GetPickRectangle());
290     rnrCtx.GetCamera()->WindowToViewport(rect);
291     gluPickMatrix(rect.X(), rect.Y(), rect.Width(), rect.Height(),
292                   (Int_t*) rnrCtx.GetCamera()->RefViewport().CArr());
293   }
294
295   glMatrixMode(GL_MODELVIEW);
296   glPushMatrix();
297   glLoadIdentity();
298
299   GLboolean lightp;
300   glGetBooleanv(GL_LIGHTING, &lightp);
301   if (lightp) glDisable(GL_LIGHTING);
302
303   glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT);
304   glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
305   glDisable(GL_CULL_FACE);
306   glEnable(GL_BLEND);
307   glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
308   RenderMenu();
309   RenderPalette(fPaletteLength, 1.6*fWWidth, fWHeight*0.6);
310   glPopMatrix();
311   glPopAttrib();
312
313   if (lightp) glEnable(GL_LIGHTING);
314
315   glMatrixMode(GL_PROJECTION);
316   glPopMatrix();
317
318   glMatrixMode(GL_MODELVIEW);
319   RenderCellIDs();
320 }
321
322
323 /******************************************************************************/
324 // Protected sub-renderers
325 /******************************************************************************/
326
327 //______________________________________________________________________________
328 Float_t AliEveITSModuleStepper::TextLength(const char* txt)
329 {
330   Float_t llx, lly, llz, urx, ury, urz;
331   fText->BBox(txt, llx, lly, llz, urx, ury, urz);
332   return (urx-llx)*fTextSize;
333 }
334
335 //______________________________________________________________________________
336 void AliEveITSModuleStepper::RenderString(TString string, Int_t id)
337 {
338   Float_t txtY = fWHeight*0.5;
339   Float_t txtl = TextLength(string.Data());
340
341   if(id > 0) glLoadName(id);
342   if(id>0 && fWActive == id)
343     fText->SetTextColor(fWActiveCol);
344   else
345     fText->SetTextColor(fFontCol);
346
347
348   if(id>0)
349   {
350     if(fWActive == id)
351       fText->SetTextColor(fWActiveCol);
352     else
353       fText->SetTextColor(fFontCol);
354
355     glLoadName(id);
356     Float_t ss = fWWidth*0.4;
357     fText->PaintGLText(ss, txtY, -0.8, string.Data());
358     // box
359     Float_t bw =2*ss+txtl;
360     RenderFrame(bw,fWHeight*2,id);
361     glTranslatef( bw, 0, 0);
362   }
363   else
364   {
365     fText->SetTextColor(fFontCol);
366     fText->PaintGLText(0, txtY, -0.8, string.Data());
367     glTranslatef(txtl, 0, 0);
368   }
369 }
370
371 //______________________________________________________________________________
372 void AliEveITSModuleStepper::RenderFrame(Float_t dx, Float_t dy, Int_t id)
373 {
374   if(fRnrFrame == kFALSE)return;
375
376   glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT);
377   glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
378   UChar_t color[4];
379   if (fWActive == id)
380     TEveUtil::TEveUtil::ColorFromIdx(fWActiveCol, color);
381   else
382     TEveUtil:: TEveUtil::ColorFromIdx(fWCol, color);
383   glColor4ubv(color);
384
385   glBegin(GL_QUADS);
386   glVertex2f(0, 0);   glVertex2f(dx, 0);
387   glVertex2f(dx, dy); glVertex2f(0, dy);
388   glEnd();
389   glPopAttrib();
390 }
391
392 //______________________________________________________________________________
393 void AliEveITSModuleStepper::RenderSymbol(Float_t dx, Float_t dy, Int_t id)
394 {
395   glLoadName(id);
396
397   UChar_t color[4];
398   if (fWActive == id)
399     TEveUtil::TEveUtil::ColorFromIdx(fWActiveCol, color);
400   else
401     TEveUtil::TEveUtil::ColorFromIdx(fWCol, color);
402   glColor4ubv(color);
403
404   Float_t xs = dx/4, ys = dy/4;
405   if(id == 0) {
406     glBegin(GL_QUADS);
407     glVertex2f(0,ys); glVertex2f(0, ys*3);
408     glVertex2f(dx, ys*3); glVertex2f(dx, ys);
409     glEnd();
410     return;
411   }
412
413   glBegin(GL_TRIANGLES);
414   switch (id) {
415     case 1:
416     {
417       // left
418       //      glVertex2f(xs*2.5, ys*3); glVertex2f(xs*1.5, ys*2); glVertex2f(xs*2.5, ys);
419       glVertex2f(xs*3, ys*3); glVertex2f(xs*1, ys*2); glVertex2f(xs*3, ys);
420       break;
421     }
422     case 2:
423     {
424       //double left
425       glVertex2f(xs*2, ys*3); glVertex2f(xs, ys*2);    glVertex2f(xs*2, ys);
426       glVertex2f(xs*3, ys*3); glVertex2f(xs*2, ys*2);  glVertex2f(xs*3, ys);
427       break;
428     }
429     case 3:
430     {
431       // right
432       //glVertex2f(xs*1.5, ys); glVertex2f(xs*2.5, ys*2); glVertex2f(xs*1.5, ys*3);
433       glVertex2f(xs*1, ys); glVertex2f(xs*3, ys*2); glVertex2f(xs*1, ys*3);
434       break;
435     }
436     case 4:
437     {
438       // double right
439       glVertex2f(xs, ys);     glVertex2f(xs*2, ys*2);   glVertex2f(xs, ys*3);
440       glVertex2f(xs*2, ys);   glVertex2f(xs*3, ys*2);   glVertex2f(xs*2, ys*3);
441       break;
442     }
443     case 5:
444     {
445       // up
446       glVertex2f(xs, ys*2.5);  glVertex2f(xs*2, ys*3.5); glVertex2f(xs*3, ys*2.5);
447       break;
448     }
449     case 6:
450     {
451       // down
452       glVertex2f(xs, ys*1.5);  glVertex2f(xs*2, ys*0.5); glVertex2f(xs*3, ys*1.5);
453       break;
454     }
455
456     default:
457       break;
458   }
459   glEnd();
460   glLoadName(0);
461 }
462
463 //______________________________________________________________________________
464 void AliEveITSModuleStepper::RenderPalette(Float_t dx, Float_t x, Float_t y)
465 {
466   glPushMatrix();
467   glLoadIdentity();
468   glTranslatef(1 -x- dx, -1+y*4, 0);
469   AliEveITSModule* qs = dynamic_cast<AliEveITSModule*>(*BeginChildren());
470   TEveRGBAPalette* p = qs->GetPalette();
471   glBegin(GL_QUAD_STRIP);
472   glColor4ubv(p->ColorFromValue(p->GetMinVal()));
473   glVertex2f(0, 0);
474   glVertex2f(0, y);
475   if (p->GetMaxVal() > p->GetMinVal() + 1)
476   {
477     Float_t xs = dx/(p->GetMaxVal() - p->GetMinVal());
478     Float_t x0 = xs;
479     for(Int_t i=p->GetMinVal() + 1; i<p->GetMaxVal(); i++)
480     {
481       glColor4ubv(p->ColorFromValue(i));
482       glVertex2f(x0, 0);
483       glVertex2f(x0, y);
484       x0+=xs;
485     }
486   }
487   glColor4ubv(p->ColorFromValue(p->GetMaxVal()));
488   glVertex2f(dx, 0);
489   glVertex2f(dx, y);
490   glEnd();
491
492   if (p->GetMaxVal() > p->GetMinVal())
493   {
494     glRotatef(-90,1, 0, 0 );
495     Double_t v1[3] = {0., 0., 0.};
496     Double_t v2[3] = {dx, 0, 0.};
497     fAxis->SetLabelsSize(fTextSize/dx);
498     fAxis->PaintGLAxis(v1, v2, p->GetMinVal(), p->GetMaxVal(), 206);
499   }
500   glPopMatrix();
501 }
502
503 //______________________________________________________________________________
504 void AliEveITSModuleStepper::RenderMenu()
505 {
506   Float_t ww = 2*fWWidth;
507   Float_t wh = 2*fWHeight;
508
509   // transparent bar
510   Float_t a=0.3;
511   glColor4f(a, a, a, a);
512   Float_t H = 1.9*wh*(1+ 2*fWOff);
513   if(1) {
514     glBegin(GL_QUADS);
515     glVertex3f(-1, -1,   0.1); glVertex3f(-1, -1+H, 0.1);
516     glVertex3f(1 , -1+H, 0.1); glVertex3f( 1, -1  , 0.1);
517     glEnd();
518   }
519
520   Float_t y_base = -1 + wh*0.35;
521   glTranslatef(-1, y_base, 0.);
522   glPushName(0);
523   // pager
524   glPushMatrix();
525   glTranslatef(ww, 0, 0.);
526   fText->SetTextSize(fTextSize);
527   Float_t soff = ww*1.3;
528   glTranslatef(0, fWOff*wh, 0);
529   RenderSymbol(ww, wh, 2);
530   RenderFrame(ww,wh,2);
531   glTranslatef(soff, 0, 0);
532   RenderSymbol(ww, wh, 1);
533   RenderFrame(ww,wh,1);
534   glTranslatef(soff, 0, 0);
535   // text info
536   {
537     const char* txt =  Form("%d/%d ", GetCurrentPage(), GetPages());
538     Float_t dx = (fPagerGap - TextLength(txt))*0.5;
539     fText->SetTextColor(fFontCol);
540     fText->PaintGLText(dx, wh*0.25, -0.8, txt);
541   }
542   glTranslatef(fPagerGap, 0, 0);
543
544   RenderSymbol(ww, wh, 3);
545   RenderFrame(ww,wh,3);
546   glTranslatef(soff, 0, 0);
547   RenderSymbol(ww, wh, 4);
548   RenderFrame(ww,wh,4);
549   glTranslatef(2*ww, 0, 0);
550   glPopMatrix();
551
552   // scale info
553   glPushMatrix();
554   AliEveITSDigitsInfo* di = fDigitsInfo;
555   Int_t scale = fScaleInfo->GetScale() - 1;
556   AliEveITSScaledModule* sm = dynamic_cast<AliEveITSScaledModule*>(*BeginChildren());
557   Int_t cnx = 0, cnz = 0;
558   switch(sm->GetSubDetID())
559   {
560     case 0:
561       cnx = di->fSPDScaleX[scale], cnz = di->fSPDScaleZ[scale];
562       break;
563     case 1:
564       cnx = di->fSDDScaleX[scale], cnz = di->fSDDScaleZ[scale];
565       break;
566     case 2:
567       cnx = di->fSSDScale[scale], cnz = 1;
568       break;
569   }
570   glTranslatef(10*ww,0, 0);
571   RenderString(Form("Zoom: "));
572   glPushMatrix();
573   glTranslatef(0, 0.2*wh, 0);
574   RenderSymbol(ww, wh*0.9, 5);
575   glTranslatef(0, 0.4*wh, 0);
576   RenderFrame(ww, wh*0.5, 5);
577   glPopMatrix();
578   RenderSymbol(ww, wh*0.9, 6);
579   RenderFrame(ww, wh*0.5, 6);
580   glTranslatef(ww, 0, 0);
581   RenderString(Form("%dx%d ", cnx, cnz));
582   glPopMatrix();
583
584   //choose detector
585   glPushMatrix();
586   glTranslatef(18*ww, 0, 0);
587   Float_t bs = ww*0.2;
588   RenderString("SPD", 8);
589   glTranslatef(bs, 0, 0);
590   RenderString("SDD", 9);
591   glTranslatef(bs, 0, 0);
592   RenderString("SSD", 10);
593   glPopMatrix();
594
595   glPopName();
596 }
597
598 //______________________________________________________________________________
599 void AliEveITSModuleStepper::RenderCellIDs()
600 {
601   fText->SetTextSize(fStepper->GetDy()*0.1);
602   fText->SetTextColor(fFontCol);
603   Double_t x, y, z;
604   Double_t sx, sy, sz;
605   UInt_t idx = fPosition;
606   for (List_i childit=fChildren.begin(); childit!=fChildren.end(); ++childit)
607   {
608     if(idx < fIDs.size())
609     {
610       AliEveITSScaledModule* mod = dynamic_cast<AliEveITSScaledModule*>(*childit);
611       TEveTrans& tr = mod->RefHMTrans();
612       TString name = Form("%d",mod->GetID());
613       tr.GetPos(x,y,z);
614       x += fStepper->GetDx()*0.5;
615       y -= fStepper->GetDy()*0.5;
616       z += 0.4; // !!! MT hack - cross check with overlay rendering.
617       Float_t llx, lly, llz, urx, ury, urz;
618       fText->BBox(name, llx, lly, llz, urx, ury, urz);
619       tr.GetScale(sx, sy, sz);
620       fText->PaintGLText(x-(urx-llx)*sx, y, z, name);
621       idx++;
622     }
623   }
624 }
625
626
627 /******************************************************************************/
628 // Virtual event handlers from TGLOverlayElement
629 /******************************************************************************/
630
631 //______________________________________________________________________________
632 Bool_t AliEveITSModuleStepper::Handle(TGLRnrCtx          & /*rnrCtx*/,
633                                 TGLOvlSelectRecord & rec,
634                                 Event_t            * event)
635 {
636   // Handle overlay event.
637   // Return TRUE if event was handled.
638
639   switch (event->fType)
640   {
641     case kMotionNotify:
642     {
643       Int_t item = rec.GetN() < 2 ? -1 : (Int_t)rec.GetItem(1);
644       if (fWActive != item) {
645         fWActive = item;
646         return kTRUE;
647       } else {
648         return kFALSE;
649       }
650       break;
651     }
652     case kButtonPress:
653     {
654       if (event->fCode != kButton1) {
655         return kFALSE;
656       }
657       switch (rec.GetItem(1))
658       {
659         case 1:
660           Previous();
661           break;
662         case 2:
663           Start();
664           break;
665         case 3:
666           Next();
667           break;
668         case 4:
669           End();
670           break;
671         case 5:
672         {
673           AliEveDigitScaleInfo* si = fScaleInfo;
674           if(si->GetScale() < 5)
675           {
676             si->ScaleChanged(si->GetScale() + 1);
677             ElementChanged(kTRUE, kTRUE);
678           }
679           break;
680         }
681         case 6:
682         {
683           AliEveDigitScaleInfo* si = fScaleInfo;
684           if(si->GetScale() > 1)
685           {
686             si->ScaleChanged(si->GetScale() - 1);
687             ElementChanged(kTRUE, kTRUE);
688           }
689           break;
690         }
691         case 7:
692           gEve->GetEditor()->DisplayElement(*BeginChildren());
693           break;
694
695         case 8:
696             DisplayDet(0, -1);
697           break;
698         case 9:
699             DisplayDet(1, -1);
700           break;
701         case 10:
702             DisplayDet(2, -1);
703           break;
704         default:
705           break;
706       }
707       return kTRUE;
708       break;
709     }
710     default:
711       break;
712   } // end switch
713   return kFALSE;
714 }
715
716 //______________________________________________________________________________
717 Bool_t AliEveITSModuleStepper::MouseEnter(TGLOvlSelectRecord& /*rec*/)
718 {
719   return kTRUE;
720 }
721
722 //______________________________________________________________________________
723 void AliEveITSModuleStepper::MouseLeave()
724 {
725   // Mouse has left the element.
726
727   fWActive = -1;
728 }