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