ROOT logo
// $Id$
// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

#ifndef AliEveITSModuleStepper_H
#define AliEveITSModuleStepper_H

#include <TEveElement.h>
#include <TGLOverlay.h>
#include <TEveGridStepper.h>
#include <TGLFontManager.h>

#include <vector>


class TEveRGBAPalette;
class AliEveITSDigitsInfo;
class AliEveDigitScaleInfo;

class TGLAxis;


class AliEveITSModuleStepper : public TEveElementList,
			       public TGLOverlayElement
{
public:
  typedef std::vector<UInt_t>           vpInt_t;
  typedef std::vector<UInt_t>::iterator vpInt_i;

  AliEveITSModuleStepper(AliEveITSDigitsInfo* di);
  virtual ~AliEveITSModuleStepper();

  TEveGridStepper* GetStepper()                   { return fStepper; }
  void             SetStepper(TEveGridStepper* s) { fStepper = s; Apply(); }

  // overlay
  virtual  Bool_t MouseEnter(TGLOvlSelectRecord& selRec);
  virtual  Bool_t Handle(TGLRnrCtx& rnrCtx, TGLOvlSelectRecord& selRec, Event_t* event);
  virtual  void   MouseLeave();

 // menu callbacks
  void     DisplayDet(Int_t det, Int_t layer = -1);
  Int_t    GetCurrentPage() const;
  Int_t    GetPages();
  void     Start();
  void     Next();
  void     Previous();
  void     End();
  void     Apply();
  void     Capacity();

  virtual void    Render(TGLRnrCtx& rnrCtx);

protected:
  AliEveITSDigitsInfo    *fDigitsInfo; // Source of data and geometry.
  AliEveDigitScaleInfo   *fScaleInfo;  // Parameters for digit-scaling.
  TEveGridStepper        *fStepper;    // Module placement.

  vpInt_t                 fModuleIDs;  // Vector of module IDs to be displayed.
  UInt_t                  fPosition;  // Position of top corner ITS module in vector fIDs.
  Int_t                   fSubDet;    // Sub-det, 0~SPD, 1~SDD, 2~SSD.

  mutable TGLFont         fModuleFont; // Pixmap font for module ids.
  mutable TGLFont         fTextFont;   // Texture font for text tool bar.
  mutable TGLFont         fSymbolFont; // Webdings font for pager and scale actions. 
  TGLAxis*                fAxis;

  Float_t                 fMenuHeight; // Height of a tool bar.
  Int_t                   fTextSize;   // Size of texture for menu font.
  Color_t                 fTextCol;    // Default text color in menu.
  Color_t                 fActiveCol;  // Color of selected menu item.

  Int_t                   fActiveID;   // Id of active menu item.

  // ITS module ID navigation
  Int_t  Nxy()            const { return fStepper->GetNx()*fStepper->GetNy(); }
  void   AddToList(Int_t modID) { fModuleIDs.push_back(modID);}
  void   ResetList()            { fModuleIDs.clear();}
  void   SetFirst(Int_t first);


private:
  AliEveITSModuleStepper(const AliEveITSModuleStepper&);            // Not implemented
  AliEveITSModuleStepper& operator=(const AliEveITSModuleStepper&); // Not implemented

  // GUI
  void   RenderModuleIDs();
  void   RenderText(const char* tex ,Int_t id, const TGLFont &font, Float_t step=-1);
  void   RenderPalette(TEveRGBAPalette* p);
  void   RenderMenu(Int_t currP, Int_t MaxP, Int_t scaleX, Int_t scaleZ);

  ClassDef(AliEveITSModuleStepper, 0); // Display scaled ITS modules in a paged layout, also providing GL-overaly control GUI.
};

#endif
 AliEveITSModuleStepper.h:1
 AliEveITSModuleStepper.h:2
 AliEveITSModuleStepper.h:3
 AliEveITSModuleStepper.h:4
 AliEveITSModuleStepper.h:5
 AliEveITSModuleStepper.h:6
 AliEveITSModuleStepper.h:7
 AliEveITSModuleStepper.h:8
 AliEveITSModuleStepper.h:9
 AliEveITSModuleStepper.h:10
 AliEveITSModuleStepper.h:11
 AliEveITSModuleStepper.h:12
 AliEveITSModuleStepper.h:13
 AliEveITSModuleStepper.h:14
 AliEveITSModuleStepper.h:15
 AliEveITSModuleStepper.h:16
 AliEveITSModuleStepper.h:17
 AliEveITSModuleStepper.h:18
 AliEveITSModuleStepper.h:19
 AliEveITSModuleStepper.h:20
 AliEveITSModuleStepper.h:21
 AliEveITSModuleStepper.h:22
 AliEveITSModuleStepper.h:23
 AliEveITSModuleStepper.h:24
 AliEveITSModuleStepper.h:25
 AliEveITSModuleStepper.h:26
 AliEveITSModuleStepper.h:27
 AliEveITSModuleStepper.h:28
 AliEveITSModuleStepper.h:29
 AliEveITSModuleStepper.h:30
 AliEveITSModuleStepper.h:31
 AliEveITSModuleStepper.h:32
 AliEveITSModuleStepper.h:33
 AliEveITSModuleStepper.h:34
 AliEveITSModuleStepper.h:35
 AliEveITSModuleStepper.h:36
 AliEveITSModuleStepper.h:37
 AliEveITSModuleStepper.h:38
 AliEveITSModuleStepper.h:39
 AliEveITSModuleStepper.h:40
 AliEveITSModuleStepper.h:41
 AliEveITSModuleStepper.h:42
 AliEveITSModuleStepper.h:43
 AliEveITSModuleStepper.h:44
 AliEveITSModuleStepper.h:45
 AliEveITSModuleStepper.h:46
 AliEveITSModuleStepper.h:47
 AliEveITSModuleStepper.h:48
 AliEveITSModuleStepper.h:49
 AliEveITSModuleStepper.h:50
 AliEveITSModuleStepper.h:51
 AliEveITSModuleStepper.h:52
 AliEveITSModuleStepper.h:53
 AliEveITSModuleStepper.h:54
 AliEveITSModuleStepper.h:55
 AliEveITSModuleStepper.h:56
 AliEveITSModuleStepper.h:57
 AliEveITSModuleStepper.h:58
 AliEveITSModuleStepper.h:59
 AliEveITSModuleStepper.h:60
 AliEveITSModuleStepper.h:61
 AliEveITSModuleStepper.h:62
 AliEveITSModuleStepper.h:63
 AliEveITSModuleStepper.h:64
 AliEveITSModuleStepper.h:65
 AliEveITSModuleStepper.h:66
 AliEveITSModuleStepper.h:67
 AliEveITSModuleStepper.h:68
 AliEveITSModuleStepper.h:69
 AliEveITSModuleStepper.h:70
 AliEveITSModuleStepper.h:71
 AliEveITSModuleStepper.h:72
 AliEveITSModuleStepper.h:73
 AliEveITSModuleStepper.h:74
 AliEveITSModuleStepper.h:75
 AliEveITSModuleStepper.h:76
 AliEveITSModuleStepper.h:77
 AliEveITSModuleStepper.h:78
 AliEveITSModuleStepper.h:79
 AliEveITSModuleStepper.h:80
 AliEveITSModuleStepper.h:81
 AliEveITSModuleStepper.h:82
 AliEveITSModuleStepper.h:83
 AliEveITSModuleStepper.h:84
 AliEveITSModuleStepper.h:85
 AliEveITSModuleStepper.h:86
 AliEveITSModuleStepper.h:87
 AliEveITSModuleStepper.h:88
 AliEveITSModuleStepper.h:89
 AliEveITSModuleStepper.h:90
 AliEveITSModuleStepper.h:91
 AliEveITSModuleStepper.h:92
 AliEveITSModuleStepper.h:93
 AliEveITSModuleStepper.h:94
 AliEveITSModuleStepper.h:95
 AliEveITSModuleStepper.h:96
 AliEveITSModuleStepper.h:97
 AliEveITSModuleStepper.h:98
 AliEveITSModuleStepper.h:99
 AliEveITSModuleStepper.h:100