// @(#)root/hist:$Id$
// Author: Rene Brun   30/08/99

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/
#ifndef ROOT_TVirtualHistPainter
#define ROOT_TVirtualHistPainter


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TVirtualHistPainter                                                  //
//                                                                      //
// Abstract base class for Histogram painters                           //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TObject.h"

class TClass;
class TH1;
class TF1;
class TList;

class TVirtualHistPainter : public TObject {

private:
   static TClass   *fgPainter; ///< Pointer to class painter

public:
   TVirtualHistPainter() { }
   ~TVirtualHistPainter() override { }
   Int_t      DistancetoPrimitive(Int_t px, Int_t py) override = 0;
   virtual void       DrawPanel() = 0;
   void       ExecuteEvent(Int_t event, Int_t px, Int_t py) override = 0;
   virtual TList     *GetContourList(Double_t contour) const = 0;
   char      *GetObjectInfo(Int_t px, Int_t py) const override = 0;
   virtual TList     *GetStack() const = 0;
   virtual Bool_t     IsInside(Int_t x, Int_t y) = 0;
   virtual Bool_t     IsInside(Double_t x, Double_t y) = 0;
   void       Paint(Option_t *option="") override = 0;
   virtual void       PaintStat(Int_t dostat, TF1 *fit) = 0;
   virtual void       ProcessMessage(const char *mess, const TObject *obj) = 0;
   virtual void       SetHighlight() = 0;
   virtual void       SetHistogram(TH1 *h) = 0;
   virtual void       SetStack(TList *stack) = 0;
   virtual Int_t      MakeCuts(char *cutsopt) = 0;
   virtual void       SetShowProjection(const char *option, Int_t nbins) = 0;
   virtual void       SetShowProjectionXY(const char *option, Int_t nbinsY, Int_t nbinsX) = 0;

   static TVirtualHistPainter *HistPainter(TH1 *obj);
   static void                 SetPainter(const char *painter);

   ClassDefOverride(TVirtualHistPainter,0)  //Abstract interface for histogram painters
};

#endif
