ROOT logo
#ifndef ALIMUONPAINTERMATRIX_H
#define ALIMUONPAINTERMATRIX_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* See cxx source for full Copyright notice                               */

// $Id$

/// \ingroup graphics
/// \class AliMUONPainterMatrix
/// \brief A matrix of AliMUONVPainter
/// 
// Author Laurent Aphecetche, Subatech

#ifndef ROOT_TObject
#  include "TObject.h"
#endif
#ifndef ROOT_TString
#  include "TString.h"
#endif
#ifndef ALIMUONATTPAINTER_H
#  include "AliMUONAttPainter.h"
#endif

class AliMUONVPainter;
class AliMUONVTrackerData;
class TObjArray;
class TCanvas;

class AliMUONPainterMatrix : public TObject
{
public:
  AliMUONPainterMatrix(const char* basename="", Int_t nx=1, Int_t ny=1);
  virtual ~AliMUONPainterMatrix();
  
  /// Adopt a painter in this matrix
  void Adopt(AliMUONVPainter* painter);
  
  using TObject::Clone;
  
  AliMUONPainterMatrix* Clone(const AliMUONAttPainter& attributes) const;

  void Connect(const char* sourceMethod, const char* destClassName, 
               void* destObject, const char* destMethod);
    
  /// Get our attributes
  const AliMUONAttPainter& Attributes() const { return fAttributes; }
  
  /// Compute the data range for this matrix
  void ComputeDataRange();
  
  /// Get the data range for this matrix
  void GetDataRange(Double_t& dataMin, Double_t& dataMax) const;

  /// Get matrix name
  virtual const char* GetName() const { return Name(); }

  /// Get our name
  virtual const char* Name() const;

  /// Base name (short name)
  const char* Basename() const { return fBasename.Data(); }
  
  const char* Whatname() const { return fWhatname.Data(); }
  
  void GetTypes(TObjArray& types) const;

  /// Number of painters to arrange in x-direction
  Int_t Nx() const { return fNx; }
  
  /// Number of painters to arrange in y-direction
  Int_t Ny() const { return fNy; }
  
  /// Get a painter
  AliMUONVPainter* Painter(Int_t index) const;

  /// Printout
  void Print(Option_t* opt="") const;
  
  AliMUONVTrackerData* Data() const;
  
  TString DataPattern() const;
  
  Int_t DataIndex() const;
  
  void SetData(const char* pattern, AliMUONVTrackerData* d, Int_t indexInData);
    
  /// Force a given data range for all painter groups belonging to this matrix
  void SetDataRange(Double_t min, Double_t max);
  
  void SetOutlined(const char* pattern, Bool_t value);

  void SetResponder(const char* pattern);
  
  /// Number of painters (should be <= Nx*Ny)
  Int_t Size() const;

  /// Normalize attributes
  AliMUONAttPainter Validate(const AliMUONAttPainter& att) const;
  
  static TString NameIt(const char* what, const char* basename, const AliMUONAttPainter& att);

  void Draw(Option_t* opt="");
  
  TCanvas* CreateCanvas(Int_t x=0, Int_t y=0, Int_t w=-1, Int_t h=-1);

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

  void UpdateAttributes();
  
private:
  TString fBasename; ///< base name of that matrix
  TString fWhatname; ///< data name
  Int_t fNx; ///< number of rows
  Int_t fNy; ///< number of columns
  TObjArray* fPainters; ///< painters in that matrix
  AliMUONAttPainter fAttributes; ///< attributes of our painter(s)
  
  ClassDef(AliMUONPainterMatrix,2) // Matrix of AliMUONVPainter
};

#endif
 AliMUONPainterMatrix.h:1
 AliMUONPainterMatrix.h:2
 AliMUONPainterMatrix.h:3
 AliMUONPainterMatrix.h:4
 AliMUONPainterMatrix.h:5
 AliMUONPainterMatrix.h:6
 AliMUONPainterMatrix.h:7
 AliMUONPainterMatrix.h:8
 AliMUONPainterMatrix.h:9
 AliMUONPainterMatrix.h:10
 AliMUONPainterMatrix.h:11
 AliMUONPainterMatrix.h:12
 AliMUONPainterMatrix.h:13
 AliMUONPainterMatrix.h:14
 AliMUONPainterMatrix.h:15
 AliMUONPainterMatrix.h:16
 AliMUONPainterMatrix.h:17
 AliMUONPainterMatrix.h:18
 AliMUONPainterMatrix.h:19
 AliMUONPainterMatrix.h:20
 AliMUONPainterMatrix.h:21
 AliMUONPainterMatrix.h:22
 AliMUONPainterMatrix.h:23
 AliMUONPainterMatrix.h:24
 AliMUONPainterMatrix.h:25
 AliMUONPainterMatrix.h:26
 AliMUONPainterMatrix.h:27
 AliMUONPainterMatrix.h:28
 AliMUONPainterMatrix.h:29
 AliMUONPainterMatrix.h:30
 AliMUONPainterMatrix.h:31
 AliMUONPainterMatrix.h:32
 AliMUONPainterMatrix.h:33
 AliMUONPainterMatrix.h:34
 AliMUONPainterMatrix.h:35
 AliMUONPainterMatrix.h:36
 AliMUONPainterMatrix.h:37
 AliMUONPainterMatrix.h:38
 AliMUONPainterMatrix.h:39
 AliMUONPainterMatrix.h:40
 AliMUONPainterMatrix.h:41
 AliMUONPainterMatrix.h:42
 AliMUONPainterMatrix.h:43
 AliMUONPainterMatrix.h:44
 AliMUONPainterMatrix.h:45
 AliMUONPainterMatrix.h:46
 AliMUONPainterMatrix.h:47
 AliMUONPainterMatrix.h:48
 AliMUONPainterMatrix.h:49
 AliMUONPainterMatrix.h:50
 AliMUONPainterMatrix.h:51
 AliMUONPainterMatrix.h:52
 AliMUONPainterMatrix.h:53
 AliMUONPainterMatrix.h:54
 AliMUONPainterMatrix.h:55
 AliMUONPainterMatrix.h:56
 AliMUONPainterMatrix.h:57
 AliMUONPainterMatrix.h:58
 AliMUONPainterMatrix.h:59
 AliMUONPainterMatrix.h:60
 AliMUONPainterMatrix.h:61
 AliMUONPainterMatrix.h:62
 AliMUONPainterMatrix.h:63
 AliMUONPainterMatrix.h:64
 AliMUONPainterMatrix.h:65
 AliMUONPainterMatrix.h:66
 AliMUONPainterMatrix.h:67
 AliMUONPainterMatrix.h:68
 AliMUONPainterMatrix.h:69
 AliMUONPainterMatrix.h:70
 AliMUONPainterMatrix.h:71
 AliMUONPainterMatrix.h:72
 AliMUONPainterMatrix.h:73
 AliMUONPainterMatrix.h:74
 AliMUONPainterMatrix.h:75
 AliMUONPainterMatrix.h:76
 AliMUONPainterMatrix.h:77
 AliMUONPainterMatrix.h:78
 AliMUONPainterMatrix.h:79
 AliMUONPainterMatrix.h:80
 AliMUONPainterMatrix.h:81
 AliMUONPainterMatrix.h:82
 AliMUONPainterMatrix.h:83
 AliMUONPainterMatrix.h:84
 AliMUONPainterMatrix.h:85
 AliMUONPainterMatrix.h:86
 AliMUONPainterMatrix.h:87
 AliMUONPainterMatrix.h:88
 AliMUONPainterMatrix.h:89
 AliMUONPainterMatrix.h:90
 AliMUONPainterMatrix.h:91
 AliMUONPainterMatrix.h:92
 AliMUONPainterMatrix.h:93
 AliMUONPainterMatrix.h:94
 AliMUONPainterMatrix.h:95
 AliMUONPainterMatrix.h:96
 AliMUONPainterMatrix.h:97
 AliMUONPainterMatrix.h:98
 AliMUONPainterMatrix.h:99
 AliMUONPainterMatrix.h:100
 AliMUONPainterMatrix.h:101
 AliMUONPainterMatrix.h:102
 AliMUONPainterMatrix.h:103
 AliMUONPainterMatrix.h:104
 AliMUONPainterMatrix.h:105
 AliMUONPainterMatrix.h:106
 AliMUONPainterMatrix.h:107
 AliMUONPainterMatrix.h:108
 AliMUONPainterMatrix.h:109
 AliMUONPainterMatrix.h:110
 AliMUONPainterMatrix.h:111
 AliMUONPainterMatrix.h:112
 AliMUONPainterMatrix.h:113
 AliMUONPainterMatrix.h:114
 AliMUONPainterMatrix.h:115
 AliMUONPainterMatrix.h:116
 AliMUONPainterMatrix.h:117
 AliMUONPainterMatrix.h:118
 AliMUONPainterMatrix.h:119
 AliMUONPainterMatrix.h:120
 AliMUONPainterMatrix.h:121
 AliMUONPainterMatrix.h:122
 AliMUONPainterMatrix.h:123
 AliMUONPainterMatrix.h:124
 AliMUONPainterMatrix.h:125
 AliMUONPainterMatrix.h:126