// @(#)root/graf:$Name:  $:$Id: TLegend.h,v 1.5 2002/10/31 07:27:34 brun Exp $
// Author: Matthew.Adam.Dobbs   06/09/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_TLegend
#define ROOT_TLegend


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TLegend        (a second attempt- the first was TPadLegend           //
// Matthew.Adam.Dobbs@Cern.CH, September 1999                           //
// Legend of markers/lines/boxes for histos & graphs                    //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TPave
#include "TPave.h"
#endif
#ifndef ROOT_TAttText
#include "TAttText.h"
#endif

class TObject;
class TList;
class TLegendEntry;

class TLegend : public TPave , public TAttText {
 public:
  TLegend();
  TLegend( Double_t x1, Double_t y1, Double_t x2, Double_t y2,
           const char* header = "", Option_t* option="brNDC" );
  virtual ~TLegend();
  TLegend( const TLegend &legend );
  TLegendEntry   *AddEntry(TObject* obj, const char* label = "", Option_t* option = "lpf" );
  TLegendEntry   *AddEntry(const char *name, const char* label = "", Option_t* option = "lpf" );
  virtual void    Clear( Option_t* option = "" ); // *MENU*
  virtual void    Copy( TObject &obj ) const;
  virtual void    DeleteEntry(); // *MENU*
  virtual void    Draw( Option_t* option = "" );
  virtual void    EditEntryAttFill(); // *MENU*
  virtual void    EditEntryAttLine(); // *MENU*
  virtual void    EditEntryAttMarker(); // *MENU*
  virtual void    EditEntryAttText(); // *MENU*
  TLegendEntry   *GetEntry() const;
  Float_t         GetEntrySeparation() const { return fEntrySeparation; }
  virtual const char *GetHeader() const;
  TList          *GetListOfPrimitives() const {return fPrimitives;}
  Float_t         GetMargin() const { return fMargin; }
  virtual void    InsertEntry( const char* objectName = "",const char* label = "",
                            Option_t* option = "lpf" ); // *MENU*
  virtual void    Paint( Option_t* option = "" );
  virtual void    PaintPrimitives();
  virtual void    Print( Option_t* option = "" ) const;
  virtual void    RecursiveRemove(TObject *obj);
  virtual void    SavePrimitive(ofstream &out, Option_t *option );
  void            SetDefaults() { fEntrySeparation = 0.1; fMargin = 0.25; }
  virtual void    SetEntryLabel( const char* label ); // *MENU*
  virtual void    SetEntryOption( Option_t* option ); // *MENU*
  void            SetEntrySeparation( Float_t entryseparation )
                  { fEntrySeparation = entryseparation; } // *MENU*
  virtual void    SetHeader( const char *header = "" );  // *MENU*
  void            SetMargin( Float_t margin ) { fMargin = margin; } // *MENU*

protected:
  TList     *fPrimitives;       // list of TLegendEntries
  Float_t    fEntrySeparation;  // separation between entries, as a fraction of
                                // the space allocated to one entry.
                                // Typical value is 0.1.
  Float_t    fMargin;           // fraction of total width used for symbol

  ClassDef(TLegend,1) // Legend of markers/lines/boxes to represent obj's
};

#endif
