#ifndef ROOT_TGaxis
#define ROOT_TGaxis

//+SEQ,CopyRight,T=NOINCLUDE.

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGaxis                                                               //
//                                                                      //
// Button to select an angle.                                           //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TNamed
//*KEEP,TNamed.
#include "TNamed.h"
//*KEND.
#endif
#ifndef ROOT_TLine
//*KEEP,TLine.
#include "TLine.h"
//*KEND.
#endif
#ifndef ROOT_TAttText
//*KEEP,TAttText.
#include "TAttText.h"
//*KEND.
#endif


class TGaxis : public TLine, public TAttText {

private:
    Int_t      fNdiv;                //Number of divisions
    Float_t    fWmin;                //Lowest value on the axis
    Float_t    fWmax;                //Highest value on the axis
    Float_t    fGridLength;          //Length of the grid in NDC
    Float_t    fTickSize;            //Size of primary tick mark in NDC
    Float_t    fLabelOffset;         //Offset of label wrt axis
    Float_t    fLabelSize;           //Size of labels in NDC
    Float_t    fTitleOffset;         //Offset of title wrt axis
    Float_t    fTitleSize;           //Size of title in NDC
    Int_t      fLabelFont;           //Font for labels
    TString    fChopt;               //Axis options
    TString    fName;                //axis name
    TString    fTitle;               //axis title
    TString    fTimeFormat;          //Time format, ex: 09/12/99 12:34:00

public:
        TGaxis();
        TGaxis(Float_t xmin,Float_t ymin,Float_t xmax,Float_t ymax,
               Float_t wmin,Float_t wmax,Int_t ndiv=510, Option_t *chopt="",
               Float_t gridlength = 0);
        virtual ~TGaxis();
        virtual void    AdjustBinSize(Float_t A1,  Float_t A2,  Int_t nold
                       ,Float_t &BinLow, Float_t &BinHigh, Int_t &nbins, Float_t &BinWidth);
        virtual void    CenterTitle(Bool_t center=kTRUE);
        virtual void    Draw(Option_t *chopt="");
        virtual void    DrawAxis(Float_t xmin,Float_t ymin,Float_t xmax,Float_t ymax,
                                 Float_t wmin,Float_t wmax,Int_t ndiv=510, Option_t *chopt="",
                                 Float_t gridlength = 0);
             Float_t    GetGridLength()   {return fGridLength;}
               Int_t    GetLabelFont()    {return fLabelFont;}
             Float_t    GetLabelOffset()  {return fLabelOffset;}
             Float_t    GetLabelSize()    {return fLabelSize;}
             Float_t    GetTitleOffset()  {return fTitleOffset;}
             Float_t    GetTitleSize()    {return fTitleSize;}
virtual const Text_t    *GetName() const  {return fName.Data();}
virtual const Text_t    *GetOption() const {return fChopt.Data();}
virtual const Text_t    *GetTitle() const {return fTitle.Data();}
               Int_t    GetNdiv()         {return fNdiv;}
             Float_t    GetWmin()         {return fWmin;}
             Float_t    GetWmax()         {return fWmax;}
             Float_t    GetTickSize()     {return fTickSize;}
                void    LabelsLimits(char *label, Int_t &first, Int_t &last);
        virtual void    Optimize(Float_t A1,  Float_t A2,  Int_t nold
                       ,Float_t &BinLow, Float_t &BinHigh, Int_t &nbins, Float_t &BWID);
        virtual void    Paint(Option_t *chopt="");
        virtual void    PaintAxis(Float_t xmin,Float_t ymin,Float_t xmax,Float_t ymax,
                                  Float_t &wmin,Float_t &wmax,Int_t &ndiv, Option_t *chopt="",
                                  Float_t gridlength = 0);
        virtual void    Rotate(Float_t X,  Float_t Y,  Float_t CFI, Float_t SFI
                              ,Float_t XT, Float_t YT, Float_t &U,   Float_t &V);
        virtual void    SavePrimitive(ofstream &out, Option_t *option);
                void    SetOption(Option_t *option="");
                void    SetLabelFont(Int_t labelfont) {fLabelFont = labelfont;} // *MENU*
                void    SetLabelOffset(Float_t labeloffset) {fLabelOffset = labeloffset;} // *MENU*
                void    SetLabelSize(Float_t labelsize) {fLabelSize = labelsize;} // *MENU*
        virtual void    SetName(Text_t *name); // *MENU*
                void    SetTickSize(Float_t ticksize) {fTickSize = ticksize;} // *MENU*
                void    SetGridLength(Float_t gridlength) {fGridLength = gridlength;}
                void    SetTimeFormat(const char *tformat);
        virtual void    SetTitle(const Text_t *title=""); // *MENU*
                void    SetTitleOffset(Float_t titleoffset=1) {fTitleOffset = titleoffset;} // *MENU*
                void    SetTitleSize(Float_t titlesize) {fTitleSize = titlesize;} // *MENU*
                void    SetWmin(Float_t wmin) {fWmin = wmin;}
                void    SetWmax(Float_t wmax) {fWmax = wmax;}

                ClassDef(TGaxis,1)  //Graphics axis
};

#endif