ROOT logo
// @(#)root/graf:$Id: TPaveText.cxx 24837 2008-07-15 16:25:49Z couet $
// Author: Rene Brun   20/10/95

/*************************************************************************
 * 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.             *
 *************************************************************************/

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#include "Riostream.h"
#include "TBufferFile.h"
#include "TROOT.h"
#include "TStyle.h"
#include "TPaveText.h"
#include "TPaveLabel.h"
#include "TVirtualPad.h"
#include "TMath.h"
#include "TLatex.h"
#include "TError.h"
#include "TColor.h"
#include "TClass.h"

ClassImp(TPaveText)


//______________________________________________________________________________
//  A PaveText is a Pave (see TPave) with text,lines or/and boxes.
//Begin_Html
/*
<img src="gif/pavetext.gif">
*/
//End_Html
//


//______________________________________________________________________________
TPaveText::TPaveText(): TPave(), TAttText()
{
   // pavetext default constructor.

   fLines = 0;
}


//______________________________________________________________________________
TPaveText::TPaveText(Double_t x1, Double_t y1,Double_t x2, Double_t  y2, Option_t *option)
           :TPave(x1,y1,x2,y2,4,option), TAttText(22,0,gStyle->GetTextColor(),gStyle->GetTextFont(),0)
{
   // pavetext normal constructor.
   //
   // a PaveText is a Pave with several lines of text
   // The Pave is by default defined bith bordersize=5 and option ="br".
   //  option = "T" Top frame
   //  option = "B" Bottom frame
   //  option = "R" Right frame
   //  option = "L" Left frame
   //  option = "NDC" x1,y1,x2,y2 are given in NDC
   //  option = "ARC" corners are rounded
   //
   // The individual text items are entered via AddText
   // By default, text items inherits from the default pavetext AttText.
   // A title can be added later to this pavetext via TPaveText::SetLabel.
   //
   //  IMPORTANT NOTE:
   //  Because TPave objects (and objects deriving from TPave) have their
   //  master coordinate system in NDC, one cannot use the TBox functions
   //  SetX1,SetY1,SetX2,SetY2 to change the corner coordinates. One should use
   //  instead SetX1NDC, SetY1NDC, SetX2NDC, SetY2NDC.

   fLines   = new TList;
   fMargin  = 0.05;
   fLongest = 0;
}


//______________________________________________________________________________
TPaveText::~TPaveText()
{
   // pavetext default destructor.

   if (!TestBit(kNotDeleted)) return;
   if (fLines) fLines->Delete();
   delete fLines;
   fLines = 0;
}


//______________________________________________________________________________
TPaveText::TPaveText(const TPaveText &pavetext) : TPave(), TAttText()
{
   // pavetext copy constructor.

   TBufferFile b(TBuffer::kWrite);
   TPaveText *p = (TPaveText*)(&pavetext);
   p->Streamer(b);
   b.SetReadMode();
   b.SetBufferOffset(0);
   fLines = 0;
   Streamer(b);
}

//______________________________________________________________________________
TPaveText& TPaveText::operator=(const TPaveText& pt)
{
   //assignment operator
   if(this!=&pt) {
      TPave::operator=(pt);
      TAttText::operator=(pt);
      fLabel=pt.fLabel;
      fLongest=pt.fLongest;
      fMargin=pt.fMargin;
      fLines=pt.fLines;
   }
   return *this;
}

//______________________________________________________________________________
TBox *TPaveText::AddBox(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
{
   // Add a new graphics box to this pavetext.

   if (!gPad->IsEditable()) return 0;
   TBox *newbox = new TBox(x1,y1,x2,y2);

   if (!fLines) fLines = new TList;
   fLines->Add(newbox);
   return newbox;
}


//______________________________________________________________________________
TLine *TPaveText::AddLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
{
   // Add a new graphics line to this pavetext.

   if (!gPad->IsEditable()) return 0;
   TLine *newline = new TLine(x1,y1,x2,y2);

   if (!fLines) fLines = new TList;
   fLines->Add(newline);
   return newline;
}


//______________________________________________________________________________
TText *TPaveText::AddText(Double_t x1, Double_t y1, const char *text)
{
   // Add a new Text line to this pavetext at given coordinates.

   TLatex *newtext = new TLatex(x1,y1,text);
   newtext->SetTextAlign(0);
   newtext->SetTextColor(0);
   newtext->SetTextFont(0);
   newtext->SetTextSize(0);
   Int_t nch = strlen(text);
   if (nch > fLongest) fLongest = nch;

   if (!fLines) fLines = new TList;
   fLines->Add(newtext);
   return newtext;
}


//______________________________________________________________________________
TText *TPaveText::AddText(const char *text)
{
   // Add a new Text line to this pavetext.

   return AddText(0,0,text);
}


//______________________________________________________________________________
void TPaveText::Clear(Option_t *)
{
   // Clear all lines in this pavetext.

   if (!fLines) return;
   fLines->Delete();
   fLongest = 0;
}


//______________________________________________________________________________
void TPaveText::DeleteText()
{
   // Delete text at the mouse position.

   if (!gPad->IsEditable()) return;
   if (!fLines) return;
   Double_t ymouse, yobj;
   TObject *obj = GetObject(ymouse, yobj);             //get object pointed by the mouse
   if (!obj) return;
   if (!obj->InheritsFrom(TText::Class())) return;
   fLines->Remove(obj);
   delete obj;
}


//______________________________________________________________________________
void TPaveText::Draw(Option_t *option)
{
   // Draw this pavetext with its current attributes.

   AppendPad(option);
}


//______________________________________________________________________________
void TPaveText::DrawFile(const char *filename, Option_t *option)
{
   // Draw lines in filename in this pavetext.

   ReadFile(filename);

   AppendPad(option);
}


//______________________________________________________________________________
void TPaveText::EditText()
{
   // Edit text at the mouse position.

   if (!gPad->IsEditable()) return;
   Double_t ymouse, yobj;
   TObject *obj = GetObject(ymouse, yobj);             //get object pointed by the mouse
   if (!obj) return;
   if (!obj->InheritsFrom(TText::Class())) return;
   TText *text = (TText*)obj;
   gROOT->SetSelectedPrimitive(text);
   gROOT->ProcessLine(Form("((TCanvas*)0x%lx)->SetSelected((TObject*)0x%lx)",gPad->GetCanvas(),text));
   gROOT->ProcessLine(Form("((TCanvas*)0x%lx)->Selected((TVirtualPad*)0x%lx,(TObject*)0x%lx,1)",gPad->GetCanvas(),gPad,text));
   text->SetTextAttributes();
}


//______________________________________________________________________________
TText *TPaveText::GetLine(Int_t number) const
{
   // Get Pointer to line number in this pavetext.

   TText *line;
   TIter next(fLines);
   Int_t nlines = 0;
   while ((line = (TText*) next())) {
      if (nlines == number) return line;
      nlines++;
   }
   return 0;
}


//______________________________________________________________________________
TText *TPaveText::GetLineWith(const char *text) const
{
   // Get Pointer to first containing string text in this pavetext.

   TText *line;
   TIter next(fLines);
   while ((line = (TText*) next())) {
      if (strstr(line->GetTitle(),text)) return line;
   }
   return 0;
}


//______________________________________________________________________________
TObject *TPaveText::GetObject(Double_t &ymouse, Double_t &yobj) const
{
   // Get object pointed by the mouse in this pavetext.

   if (!fLines) return 0;
   Int_t nlines = GetSize();
   if (nlines == 0) return 0;

   // Evaluate text size as a function of the number of lines

   ymouse   = gPad->AbsPixeltoY(gPad->GetEventY());
   Double_t yspace   = (fY2 - fY1)/Double_t(nlines);
   Double_t textsize = GetTextSize();
   Double_t y1,y,dy;
   if (textsize == 0)  {
      y1       = gPad->GetY1();
   }
   Double_t ytext = fY2 + 0.5*yspace;
   Int_t valign;

   // Iterate over all lines
   // Copy pavetext attributes to line attributes if line attributes not set
   dy = fY2 - fY1;
   TObject *line;
   TText *linet;
   TLine *linel;
   TBox  *lineb;
   TIter next(fLines);
   while ((line = (TObject*) next())) {
   // Next primitive is a line
      if (line->IsA() == TLine::Class()) {
         linel = (TLine*)line;
         y1 = linel->GetY1();   if (y1 == 0) y1 = ytext; else y1 = fY1 + y1*dy;
         if (TMath::Abs(y1-ymouse) < 0.2*yspace) {yobj = y1; return line;}
         continue;
      }
   // Next primitive is a box
      if (line->IsA() == TBox::Class()) {
         lineb = (TBox*)line;
         y1 = lineb->GetY1();   if (y1 == 0) y1 = ytext; else y1 = fY1 + y1*dy;
         if (TMath::Abs(y1-ymouse) < 0.4*yspace) {yobj = y1; return line;}
         continue;
      }
   // Next primitive is a text
      if (line->InheritsFrom(TText::Class())) {
         linet = (TText*)line;
         ytext -= yspace;
         Double_t yl     = linet->GetY();
         Short_t talign = linet->GetTextAlign();
         if (talign == 0) talign = GetTextAlign();
         if (yl > 0 && yl <1) {
            ytext = fY1 + yl*dy;
         }
         valign = linet->GetTextAlign()%10;
         y = ytext;
         if (valign == 1) y = ytext -0.5*yspace;
         if (valign == 3) y = ytext +0.5*yspace;

         if (TMath::Abs(y-ymouse) < 0.5*yspace) {yobj = y; return line;}
      }
   }
   return 0;
}


//______________________________________________________________________________
Int_t TPaveText::GetSize() const
{
   //  return number of text lines (ignoring Tlines, etc)

   Int_t nlines = 0;
   TIter next(fLines);
   TObject *line;
   while ((line = (TObject*) next())) {
      if (line->InheritsFrom(TText::Class())) nlines++;
   }
   return nlines;
}


//______________________________________________________________________________
void TPaveText::InsertLine()
{
   // Add a new lineine at the mouse position.

   if (!gPad->IsEditable()) return;
   Double_t ymouse, yobj;
   TObject *obj = GetObject(ymouse, yobj); //get object pointed by the mouse
   Double_t yline = (ymouse-fY1)/(fY2-fY1);
   TLine *newline = AddLine(0,yline,0,yline);
   if (obj) {
      fLines->Remove(newline);        //remove line from last position
      if (yobj < ymouse) fLines->AddBefore(obj,newline);
      else               fLines->AddAfter(obj,newline);
   }
}


//______________________________________________________________________________
void TPaveText::InsertText(const char *text)
{
   // Add a new Text line at the mouse position.

   if (!gPad->IsEditable()) return;
   Double_t ymouse, yobj;
   TObject *obj = GetObject(ymouse, yobj); //get object pointed by the mouse
   TText *newtext = AddText(0,0,text);     //create new text object
   if (obj) {
      fLines->Remove(newtext);        //remove text from last position
      if (yobj < ymouse) fLines->AddBefore(obj,newtext); //insert new text at right position
      else               fLines->AddAfter(obj,newtext);  //insert new text at right position
   }
}


//______________________________________________________________________________
void TPaveText::Paint(Option_t *option)
{
   // Paint this pavetext with its current attributes.

   // Draw the pave
   TPave::ConvertNDCtoPad();
   TPave::PaintPave(fX1,fY1,fX2,fY2,GetBorderSize(),option);
   PaintPrimitives(kPaveText);
}


//______________________________________________________________________________
void TPaveText::PaintPrimitives(Int_t mode)
{
   // Paint list of primitives in this pavetext.

   if (!fLines) return;
   Double_t dx = fX2 - fX1;
   Double_t dy = fY2 - fY1;
   Double_t textsize = GetTextSize();
   Int_t nlines = GetSize();
   if (nlines == 0) nlines = 5;

   // Evaluate text size as a function of the number of lines

   Double_t x1,y1,x2,y2;
   y1       = gPad->GetY1();
   y2       = gPad->GetY2();
   Float_t margin  = fMargin*dx;
   Double_t yspace = dy/Double_t(nlines);
   Double_t textsave = textsize;
   TObject *line;
   TText *linet;
   TLatex *latex;
   TIter next(fLines);
   Double_t longest = 0;
   Double_t w;
   if (textsize == 0)  {
      textsize = 0.85*yspace/(y2 - y1);
      while ((line = (TObject*) next())) {
         if (line->IsA() == TLatex::Class()) {
            latex = (TLatex*)line;
            Float_t tangle = latex->GetTextAngle();
            if (latex->GetTextSize() != 0) continue;
            Style_t tfont = latex->GetTextFont();
            if (tfont == 0) latex->SetTextFont(GetTextFont());
            latex->SetTextSize(textsize);
            w = latex->GetXsize();
            latex->SetTextSize(0);
            latex->SetTextAngle(tangle); //text angle was redefined in GetXsize !
            if (w > longest) longest = w;
            latex->SetTextFont(tfont);
         }
      }
      if (longest > 0.92*dx) textsize *= 0.92*dx/longest;
      if (mode == kDiamond) textsize *= 0.66;
      SetTextSize(textsize);
   }
   Double_t yfont;
   if (GetTextFont()%10 > 2)
      yfont = (gPad->PixeltoY(Int_t(-textsize))-gPad->PixeltoY(0))/(y2-y1)*dy;
   else
      yfont = textsize*dy;
   Double_t ytext = fY2 + 0.5*yspace;
   Double_t xtext = 0;
   Int_t halign;

   // Iterate over all lines
   // Copy pavetext attributes to line attributes if line attributes not set
   TLine *linel;
   TBox  *lineb;
   next.Reset();
   while ((line = (TObject*) next())) {
   // Next primitive is a line
      if (line->IsA() == TLine::Class()) {
         linel = (TLine*)line;
         x1 = linel->GetX1();   if (x1 == 0) x1 = fX1; else x1 = fX1 + x1*dx;
         x2 = linel->GetX2();   if (x2 == 0) x2 = fX2; else x2 = fX1 + x2*dx;
         y1 = linel->GetY1();   if (y1 == 0) y1 = ytext; else y1 = fY1 + y1*dy;
         y2 = linel->GetY2();   if (y2 == 0) y2 = ytext; else y2 = fY1 + y2*dy;
         linel->PaintLine(x1,y1,x2,y2);
         continue;
      }
   // Next primitive is a box
      if (line->IsA() == TBox::Class()) {
         lineb = (TBox*)line;
         x1 = lineb->GetX1();
         if (x1) x1 = fX1 + x1*dx;
         else    x1 = fX1 + gPad->PixeltoX(1) - gPad->PixeltoX(0);
         x2 = lineb->GetX2();
         if (x2) x2 = fX1 + x2*dx;
         else    x2 = fX2;
         y1 = lineb->GetY1();   if (y1 == 0) y1 = ytext; else y1 = fY1 + y1*dy;
         y2 = lineb->GetY2();   if (y2 == 0) y2 = ytext; else y2 = fY1 + y2*dy;
         lineb->PaintBox(x1,y1,x2,y2);
         continue;
      }
   // Next primitive is a text
      if (line->IsA() == TText::Class()) {
         linet = (TText*)line;
         ytext -= yspace;
         Double_t xl    = linet->GetX();
         Double_t yl    = linet->GetY();
         Short_t talign = linet->GetTextAlign();
         Color_t tcolor = linet->GetTextColor();
         Style_t tfont  = linet->GetTextFont();
         Size_t  tsize  = linet->GetTextSize();
         if (talign == 0) linet->SetTextAlign(GetTextAlign());
         if (tcolor == 0) linet->SetTextColor(GetTextColor());
         if (tfont  == 0) linet->SetTextFont(GetTextFont());
         if (tsize  == 0) linet->SetTextSize(GetTextSize());
         if (xl > 0 && xl <1) {
            xtext = fX1 + xl*dx;
         } else {
            halign = linet->GetTextAlign()/10;
            if (halign == 1) xtext = fX1 + margin;
            if (halign == 2) xtext = 0.5*(fX1+fX2);
            if (halign == 3) xtext = fX2 - margin;
         }
         if (yl > 0 && yl <1) ytext = fY1 + yl*dy;
         linet->PaintText(xtext,ytext,linet->GetTitle());
         linet->SetTextAlign(talign);
         linet->SetTextColor(tcolor);
         linet->SetTextFont(tfont);
         linet->SetTextSize(tsize);
      }
   // Next primitive is a Latex text
      if (line->IsA() == TLatex::Class()) {
         latex = (TLatex*)line;
         ytext -= yspace;
         Double_t xl    = latex->GetX();
         Double_t yl    = latex->GetY();
         Short_t talign = latex->GetTextAlign();
         Color_t tcolor = latex->GetTextColor();
         Style_t tfont  = latex->GetTextFont();
         Size_t  tsize  = latex->GetTextSize();
         if (talign == 0) latex->SetTextAlign(GetTextAlign());
         if (tcolor == 0) latex->SetTextColor(GetTextColor());
         if (tfont  == 0) latex->SetTextFont(GetTextFont());
         if (tsize  == 0) latex->SetTextSize(GetTextSize());
         if (xl > 0 && xl <1) {
            xtext = fX1 + xl*dx;
         } else {
            halign = latex->GetTextAlign()/10;
            if (halign == 1) xtext = fX1 + margin;
            if (halign == 2) xtext = 0.5*(fX1+fX2);
            if (halign == 3) xtext = fX2 - margin;
         }
         if (yl > 0 && yl <1) ytext = fY1 + yl*dy;
         latex->PaintLatex(xtext,ytext,latex->GetTextAngle(),
                           latex->GetTextSize(),
                           latex->GetTitle());
         latex->SetTextAlign(talign);
         latex->SetTextColor(tcolor);
         latex->SetTextFont(tfont);
         latex->SetTextSize(tsize);
         latex->SetX(xl);  // PaintLatex modifies fX and fY
         latex->SetY(yl);
      }
   }

   SetTextSize(textsave);

   // if a label create & paint a pavetext title
   if (fLabel.Length() > 0) {
      dy = gPad->GetY2() - gPad->GetY1();
      x1 = fX1 + 0.25*dx;
      x2 = fX2 - 0.25*dx;
      y1 = fY2 - 0.02*dy;
      y2 = fY2 + 0.02*dy;
      TPaveLabel *title = new TPaveLabel(x1,y1,x2,y2,fLabel.Data(),GetDrawOption());
      title->SetFillColor(GetFillColor());
      title->SetTextColor(GetTextColor());
      title->SetTextFont(GetTextFont());
      title->Paint();
      delete title;
   }
}


//______________________________________________________________________________
void TPaveText::Print(Option_t *option) const
{
   // Dump this pavetext with its attributes.

   TPave::Print(option);
   if (fLines) fLines->Print();
}


//______________________________________________________________________________
void TPaveText::ReadFile(const char *filename, Option_t *option, Int_t nlines, Int_t fromline)
{
   // Read lines of filename in this pavetext.
   //
   //  Read from line number fromline a total of nlines
   //
   //  Note that this function changes the default text alignment to left/center

   Int_t ival;
   Float_t val;
   TText *lastline = 0;
   TString opt = option;
   if (!opt.Contains("+")) {
      Clear();
      fLongest = 0;
   }
   SetTextAlign(12);
   // Get file name
   Int_t nch = strlen(filename);
   if (nch == 0) return;

   char *fname = StrDup(filename);
   if (fname[nch-1] == ';') { nch--; fname[nch]=0;}

   ifstream file(fname,ios::in);
   if (!file.good()) {
      Error("ReadFile", "illegal file name");
      delete [] fname;
      return;
   }

   const int linesize = 255;
   char currentline[linesize];
   char *ss, *sclose, *s= 0;

   Int_t kline = 0;
   while (1) {
      file.getline(currentline,linesize);
      if (file.eof())break;
      if (kline >= fromline && kline < fromline+nlines) {
         s = currentline;
         if (strstr(s,"+SetText")) {
            ss = s+8;
            sclose = strstr(ss,")");
            if (!sclose) continue;
            *sclose = 0;
            lastline = (TText*)fLines->Last();
            if (!lastline) continue;
            if (strstr(ss,"Color(")) {
               sscanf(ss+6,"%d",&ival);
               lastline->SetTextColor(ival);
               continue;
            }
            if (strstr(ss,"Align(")) {
               sscanf(ss+6,"%d",&ival);
               lastline->SetTextAlign(ival);
               continue;
            }
            if (strstr(ss,"Font(")) {
               sscanf(ss+5,"%d",&ival);
               lastline->SetTextFont(ival);
               continue;
            }
            if (strstr(ss,"Size(")) {
               sscanf(ss+5,"%f",&val);
               lastline->SetTextSize(val);
               continue;
            }
            if (strstr(ss,"Angle(")) {
               sscanf(ss+6,"%f",&val);
               lastline->SetTextAngle(val);
               continue;
            }
         }
         AddText(s);
      }
      kline++;
   }
   file.close();
   delete [] fname;
}


//______________________________________________________________________________
void TPaveText::SaveLines(ostream &out, const char *name)
{
   // Save lines of this pavetext as C++ statements on output stream out

   if (!fLines) return;
   Int_t nlines = GetSize();
   if (nlines == 0) return;

   // Iterate over all lines
   char quote = '"';
   TObject *line;
   TText *linet;
   TLatex *latex;
   TLine *linel;
   TBox  *lineb;
   TIter next(fLines);
   while ((line = (TObject*) next())) {
   // Next primitive is a line
      if (line->IsA() == TLine::Class()) {
         linel = (TLine*)line;
         if (gROOT->ClassSaved(TLine::Class())) {
            out<<"   ";
         } else {
            out<<"   TLine *";
         }
         out<<"line = "<<name<<"->AddLine("
            <<linel->GetX1()<<","<<linel->GetY1()<<","<<linel->GetX2()<<","<<linel->GetY2()<<");"<<endl;
         if (linel->GetLineColor() != 1) {
            if (linel->GetLineColor() > 228) {
               TColor::SaveColor(out, linel->GetLineColor());
               out<<"   line->SetLineColor(ci);" << endl;
            } else
               out<<"   line->SetLineColor("<<linel->GetLineColor()<<");"<<endl;
         }
         if (linel->GetLineStyle() != 1) {
            out<<"   line->SetLineStyle("<<linel->GetLineStyle()<<");"<<endl;
         }
         if (linel->GetLineWidth() != 1) {
            out<<"   line->SetLineWidth("<<linel->GetLineWidth()<<");"<<endl;
         }
         continue;
      }
   // Next primitive is a box
      if (line->IsA() == TBox::Class()) {
         lineb = (TBox*)line;
         if (gROOT->ClassSaved(TBox::Class())) {
            out<<"   ";
         } else {
            out<<"   TBox *";
         }
         out<<"box = "<<name<<"->AddBox("
            <<lineb->GetX1()<<","<<lineb->GetY1()<<","<<lineb->GetX2()<<","<<lineb->GetY2()<<");"<<endl;
         if (lineb->GetFillColor() != 18) {
            if (lineb->GetFillColor() > 228) {
               TColor::SaveColor(out, lineb->GetFillColor());
               out<<"   box->SetFillColor(ci);" << endl;
            } else
               out<<"   box->SetFillColor("<<lineb->GetFillColor()<<");"<<endl;
         }
         if (lineb->GetFillStyle() != 1001) {
            out<<"   box->SetFillStyle("<<lineb->GetFillStyle()<<");"<<endl;
         }
         if (lineb->GetLineColor() != 1) {
            if (lineb->GetLineColor() > 228) {
               TColor::SaveColor(out, lineb->GetLineColor());
               out<<"   box->SetLineColor(ci);" << endl;
            } else
               out<<"   box->SetLineColor("<<lineb->GetLineColor()<<");"<<endl;
         }
         if (lineb->GetLineStyle() != 1) {
            out<<"   box->SetLineStyle("<<lineb->GetLineStyle()<<");"<<endl;
         }
         if (lineb->GetLineWidth() != 1) {
            out<<"   box->SetLineWidth("<<lineb->GetLineWidth()<<");"<<endl;
         }
         continue;
      }
   // Next primitive is a text
      if (line->IsA() == TText::Class()) {
         linet = (TText*)line;
         if (gROOT->ClassSaved(TText::Class())) {
            out<<"   ";
         } else {
            out<<"   TText *";
         }
         if (!linet->GetX() && !linet->GetY()) {
            TString s = linet->GetTitle();
            s.ReplaceAll("\"","\\\"");
            out<<"text = "<<name<<"->AddText("
               <<quote<<s.Data()<<quote<<");"<<endl;
         } else {
            out<<"text = "<<name<<"->AddText("
               <<linet->GetX()<<","<<linet->GetY()<<","<<quote<<linet->GetTitle()<<quote<<");"<<endl;
         }
         if (linet->GetTextColor()) {
            if (linet->GetTextColor() > 228) {
               TColor::SaveColor(out, linet->GetTextColor());
               out<<"   text->SetTextColor(ci);" << endl;
            } else
               out<<"   text->SetTextColor("<<linet->GetTextColor()<<");"<<endl;
         }
         if (linet->GetTextFont()) {
            out<<"   text->SetTextFont("<<linet->GetTextFont()<<");"<<endl;
         }
         if (linet->GetTextSize()) {
            out<<"   text->SetTextSize("<<linet->GetTextSize()<<");"<<endl;
         }
         if (linet->GetTextAngle() != GetTextAngle()) {
            out<<"   text->SetTextAngle("<<linet->GetTextAngle()<<");"<<endl;
         }
         if (linet->GetTextAlign()) {
            out<<"   text->SetTextAlign("<<linet->GetTextAlign()<<");"<<endl;
         }
      }
   // Next primitive is a Latex text
      if (line->IsA() == TLatex::Class()) {
         latex = (TLatex*)line;
         if (gROOT->ClassSaved(TLatex::Class())) {
            out<<"   ";
         } else {
            out<<"   TText *";
         }
         if (!latex->GetX() && !latex->GetY()) {
            TString sl = latex->GetTitle();
            sl.ReplaceAll("\"","\\\"");
            out<<"text = "<<name<<"->AddText("
               <<quote<<sl.Data()<<quote<<");"<<endl;
         } else {
            out<<"text = "<<name<<"->AddText("
               <<latex->GetX()<<","<<latex->GetY()<<","<<quote<<latex->GetTitle()<<quote<<");"<<endl;
         }
         if (latex->GetTextColor()) {
            if (latex->GetTextColor() > 228) {
               TColor::SaveColor(out, latex->GetTextColor());
               out<<"   text->SetTextColor(ci);" << endl;
            } else
               out<<"   text->SetTextColor("<<latex->GetTextColor()<<");"<<endl;
         }
         if (latex->GetTextFont()) {
            out<<"   text->SetTextFont("<<latex->GetTextFont()<<");"<<endl;
         }
         if (latex->GetTextSize()) {
            out<<"   text->SetTextSize("<<latex->GetTextSize()<<");"<<endl;
         }
         if (latex->GetTextAngle() != GetTextAngle()) {
            out<<"   text->SetTextAngle("<<latex->GetTextAngle()<<");"<<endl;
         }
         if (latex->GetTextAlign()) {
            out<<"   text->SetTextAlign("<<latex->GetTextAlign()<<");"<<endl;
         }
      }
   }
}


//______________________________________________________________________________
void TPaveText::SavePrimitive(ostream &out, Option_t * /*= ""*/)
{
   // Save primitive as a C++ statement(s) on output stream out

   char quote = '"';
   out<<"   "<<endl;
   if (gROOT->ClassSaved(TPaveText::Class())) {
      out<<"   ";
   } else {
      out<<"   "<<ClassName()<<" *";
   }
   if (fOption.Contains("NDC")) {
      out<<"pt = new "<<ClassName()<<"("<<fX1NDC<<","<<fY1NDC<<","<<fX2NDC<<","<<fY2NDC
      <<","<<quote<<fOption<<quote<<");"<<endl;
   } else {
      out<<"pt = new "<<ClassName()<<"("<<gPad->PadtoX(fX1)<<","<<gPad->PadtoY(fY1)<<","<<gPad->PadtoX(fX2)<<","<<gPad->PadtoY(fY2)
      <<","<<quote<<fOption<<quote<<");"<<endl;
   }
   if (strcmp(GetName(),"TPave")) {
      out<<"   pt->SetName("<<quote<<GetName()<<quote<<");"<<endl;
   }
   if (fLabel.Length() > 0) {
      out<<"   pt->SetLabel("<<quote<<fLabel<<quote<<");"<<endl;
   }
   if (fBorderSize != 4) {
      out<<"   pt->SetBorderSize("<<fBorderSize<<");"<<endl;
   }
   SaveFillAttributes(out,"pt",0,1001);
   SaveLineAttributes(out,"pt",1,1,1);
   SaveTextAttributes(out,"pt",22,0,1,62,0);
   SaveLines(out,"pt");
   out<<"   pt->Draw();"<<endl;
}


//______________________________________________________________________________
void TPaveText::SetAllWith(const char *text, Option_t *option, Double_t value)
{
   // Set attribute option for all lines containing string text.
   //
   // Possible options are all the AttText attributes
   //       Align, Color, Font, Size and Angle

   TString opt=option;
   opt.ToLower();
   TText *line;
   TIter next(fLines);
   while ((line = (TText*) next())) {
      if (strstr(line->GetTitle(),text)) {
         if (opt == "align") line->SetTextAlign(Int_t(value));
         if (opt == "color") line->SetTextColor(Int_t(value));
         if (opt == "font")  line->SetTextFont(Int_t(value));
         if (opt == "size")  line->SetTextSize(value);
         if (opt == "angle") line->SetTextAngle(value);
      }
   }
}


//______________________________________________________________________________
void TPaveText::Streamer(TBuffer &R__b)
{
   // Stream an object of class TPaveText.

   if (R__b.IsReading()) {
      UInt_t R__s, R__c;
      Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
      if (R__v > 1) {
         R__b.ReadClassBuffer(TPaveText::Class(), this, R__v, R__s, R__c);
         return;
      }
      //====process old versions before automatic schema evolution
      TPave::Streamer(R__b);
      TAttText::Streamer(R__b);
      if (R__v > 1) fLabel.Streamer(R__b);
      R__b >> fLongest;
      R__b >> fMargin;
      R__b >> fLines;
      R__b.CheckByteCount(R__s, R__c, TPaveText::IsA());
      //====end of old versions

   } else {
      R__b.WriteClassBuffer(TPaveText::Class(),this);
   }
}

//______________________________________________________________________________
void TPaveText::UseCurrentStyle()
{
   // Replace current attributes by current style.

   if (gStyle->IsReading()) {
      SetTextFont(gStyle->GetTextFont());
      SetTextSize(gStyle->GetTextSize());
      SetTextColor(gStyle->GetTextColor());
   } else {
      gStyle->SetTextColor(GetTextColor());
      gStyle->SetTextFont(GetTextFont());
      gStyle->SetTextSize(GetTextSize());
   }
}
 TPaveText.cxx:1
 TPaveText.cxx:2
 TPaveText.cxx:3
 TPaveText.cxx:4
 TPaveText.cxx:5
 TPaveText.cxx:6
 TPaveText.cxx:7
 TPaveText.cxx:8
 TPaveText.cxx:9
 TPaveText.cxx:10
 TPaveText.cxx:11
 TPaveText.cxx:12
 TPaveText.cxx:13
 TPaveText.cxx:14
 TPaveText.cxx:15
 TPaveText.cxx:16
 TPaveText.cxx:17
 TPaveText.cxx:18
 TPaveText.cxx:19
 TPaveText.cxx:20
 TPaveText.cxx:21
 TPaveText.cxx:22
 TPaveText.cxx:23
 TPaveText.cxx:24
 TPaveText.cxx:25
 TPaveText.cxx:26
 TPaveText.cxx:27
 TPaveText.cxx:28
 TPaveText.cxx:29
 TPaveText.cxx:30
 TPaveText.cxx:31
 TPaveText.cxx:32
 TPaveText.cxx:33
 TPaveText.cxx:34
 TPaveText.cxx:35
 TPaveText.cxx:36
 TPaveText.cxx:37
 TPaveText.cxx:38
 TPaveText.cxx:39
 TPaveText.cxx:40
 TPaveText.cxx:41
 TPaveText.cxx:42
 TPaveText.cxx:43
 TPaveText.cxx:44
 TPaveText.cxx:45
 TPaveText.cxx:46
 TPaveText.cxx:47
 TPaveText.cxx:48
 TPaveText.cxx:49
 TPaveText.cxx:50
 TPaveText.cxx:51
 TPaveText.cxx:52
 TPaveText.cxx:53
 TPaveText.cxx:54
 TPaveText.cxx:55
 TPaveText.cxx:56
 TPaveText.cxx:57
 TPaveText.cxx:58
 TPaveText.cxx:59
 TPaveText.cxx:60
 TPaveText.cxx:61
 TPaveText.cxx:62
 TPaveText.cxx:63
 TPaveText.cxx:64
 TPaveText.cxx:65
 TPaveText.cxx:66
 TPaveText.cxx:67
 TPaveText.cxx:68
 TPaveText.cxx:69
 TPaveText.cxx:70
 TPaveText.cxx:71
 TPaveText.cxx:72
 TPaveText.cxx:73
 TPaveText.cxx:74
 TPaveText.cxx:75
 TPaveText.cxx:76
 TPaveText.cxx:77
 TPaveText.cxx:78
 TPaveText.cxx:79
 TPaveText.cxx:80
 TPaveText.cxx:81
 TPaveText.cxx:82
 TPaveText.cxx:83
 TPaveText.cxx:84
 TPaveText.cxx:85
 TPaveText.cxx:86
 TPaveText.cxx:87
 TPaveText.cxx:88
 TPaveText.cxx:89
 TPaveText.cxx:90
 TPaveText.cxx:91
 TPaveText.cxx:92
 TPaveText.cxx:93
 TPaveText.cxx:94
 TPaveText.cxx:95
 TPaveText.cxx:96
 TPaveText.cxx:97
 TPaveText.cxx:98
 TPaveText.cxx:99
 TPaveText.cxx:100
 TPaveText.cxx:101
 TPaveText.cxx:102
 TPaveText.cxx:103
 TPaveText.cxx:104
 TPaveText.cxx:105
 TPaveText.cxx:106
 TPaveText.cxx:107
 TPaveText.cxx:108
 TPaveText.cxx:109
 TPaveText.cxx:110
 TPaveText.cxx:111
 TPaveText.cxx:112
 TPaveText.cxx:113
 TPaveText.cxx:114
 TPaveText.cxx:115
 TPaveText.cxx:116
 TPaveText.cxx:117
 TPaveText.cxx:118
 TPaveText.cxx:119
 TPaveText.cxx:120
 TPaveText.cxx:121
 TPaveText.cxx:122
 TPaveText.cxx:123
 TPaveText.cxx:124
 TPaveText.cxx:125
 TPaveText.cxx:126
 TPaveText.cxx:127
 TPaveText.cxx:128
 TPaveText.cxx:129
 TPaveText.cxx:130
 TPaveText.cxx:131
 TPaveText.cxx:132
 TPaveText.cxx:133
 TPaveText.cxx:134
 TPaveText.cxx:135
 TPaveText.cxx:136
 TPaveText.cxx:137
 TPaveText.cxx:138
 TPaveText.cxx:139
 TPaveText.cxx:140
 TPaveText.cxx:141
 TPaveText.cxx:142
 TPaveText.cxx:143
 TPaveText.cxx:144
 TPaveText.cxx:145
 TPaveText.cxx:146
 TPaveText.cxx:147
 TPaveText.cxx:148
 TPaveText.cxx:149
 TPaveText.cxx:150
 TPaveText.cxx:151
 TPaveText.cxx:152
 TPaveText.cxx:153
 TPaveText.cxx:154
 TPaveText.cxx:155
 TPaveText.cxx:156
 TPaveText.cxx:157
 TPaveText.cxx:158
 TPaveText.cxx:159
 TPaveText.cxx:160
 TPaveText.cxx:161
 TPaveText.cxx:162
 TPaveText.cxx:163
 TPaveText.cxx:164
 TPaveText.cxx:165
 TPaveText.cxx:166
 TPaveText.cxx:167
 TPaveText.cxx:168
 TPaveText.cxx:169
 TPaveText.cxx:170
 TPaveText.cxx:171
 TPaveText.cxx:172
 TPaveText.cxx:173
 TPaveText.cxx:174
 TPaveText.cxx:175
 TPaveText.cxx:176
 TPaveText.cxx:177
 TPaveText.cxx:178
 TPaveText.cxx:179
 TPaveText.cxx:180
 TPaveText.cxx:181
 TPaveText.cxx:182
 TPaveText.cxx:183
 TPaveText.cxx:184
 TPaveText.cxx:185
 TPaveText.cxx:186
 TPaveText.cxx:187
 TPaveText.cxx:188
 TPaveText.cxx:189
 TPaveText.cxx:190
 TPaveText.cxx:191
 TPaveText.cxx:192
 TPaveText.cxx:193
 TPaveText.cxx:194
 TPaveText.cxx:195
 TPaveText.cxx:196
 TPaveText.cxx:197
 TPaveText.cxx:198
 TPaveText.cxx:199
 TPaveText.cxx:200
 TPaveText.cxx:201
 TPaveText.cxx:202
 TPaveText.cxx:203
 TPaveText.cxx:204
 TPaveText.cxx:205
 TPaveText.cxx:206
 TPaveText.cxx:207
 TPaveText.cxx:208
 TPaveText.cxx:209
 TPaveText.cxx:210
 TPaveText.cxx:211
 TPaveText.cxx:212
 TPaveText.cxx:213
 TPaveText.cxx:214
 TPaveText.cxx:215
 TPaveText.cxx:216
 TPaveText.cxx:217
 TPaveText.cxx:218
 TPaveText.cxx:219
 TPaveText.cxx:220
 TPaveText.cxx:221
 TPaveText.cxx:222
 TPaveText.cxx:223
 TPaveText.cxx:224
 TPaveText.cxx:225
 TPaveText.cxx:226
 TPaveText.cxx:227
 TPaveText.cxx:228
 TPaveText.cxx:229
 TPaveText.cxx:230
 TPaveText.cxx:231
 TPaveText.cxx:232
 TPaveText.cxx:233
 TPaveText.cxx:234
 TPaveText.cxx:235
 TPaveText.cxx:236
 TPaveText.cxx:237
 TPaveText.cxx:238
 TPaveText.cxx:239
 TPaveText.cxx:240
 TPaveText.cxx:241
 TPaveText.cxx:242
 TPaveText.cxx:243
 TPaveText.cxx:244
 TPaveText.cxx:245
 TPaveText.cxx:246
 TPaveText.cxx:247
 TPaveText.cxx:248
 TPaveText.cxx:249
 TPaveText.cxx:250
 TPaveText.cxx:251
 TPaveText.cxx:252
 TPaveText.cxx:253
 TPaveText.cxx:254
 TPaveText.cxx:255
 TPaveText.cxx:256
 TPaveText.cxx:257
 TPaveText.cxx:258
 TPaveText.cxx:259
 TPaveText.cxx:260
 TPaveText.cxx:261
 TPaveText.cxx:262
 TPaveText.cxx:263
 TPaveText.cxx:264
 TPaveText.cxx:265
 TPaveText.cxx:266
 TPaveText.cxx:267
 TPaveText.cxx:268
 TPaveText.cxx:269
 TPaveText.cxx:270
 TPaveText.cxx:271
 TPaveText.cxx:272
 TPaveText.cxx:273
 TPaveText.cxx:274
 TPaveText.cxx:275
 TPaveText.cxx:276
 TPaveText.cxx:277
 TPaveText.cxx:278
 TPaveText.cxx:279
 TPaveText.cxx:280
 TPaveText.cxx:281
 TPaveText.cxx:282
 TPaveText.cxx:283
 TPaveText.cxx:284
 TPaveText.cxx:285
 TPaveText.cxx:286
 TPaveText.cxx:287
 TPaveText.cxx:288
 TPaveText.cxx:289
 TPaveText.cxx:290
 TPaveText.cxx:291
 TPaveText.cxx:292
 TPaveText.cxx:293
 TPaveText.cxx:294
 TPaveText.cxx:295
 TPaveText.cxx:296
 TPaveText.cxx:297
 TPaveText.cxx:298
 TPaveText.cxx:299
 TPaveText.cxx:300
 TPaveText.cxx:301
 TPaveText.cxx:302
 TPaveText.cxx:303
 TPaveText.cxx:304
 TPaveText.cxx:305
 TPaveText.cxx:306
 TPaveText.cxx:307
 TPaveText.cxx:308
 TPaveText.cxx:309
 TPaveText.cxx:310
 TPaveText.cxx:311
 TPaveText.cxx:312
 TPaveText.cxx:313
 TPaveText.cxx:314
 TPaveText.cxx:315
 TPaveText.cxx:316
 TPaveText.cxx:317
 TPaveText.cxx:318
 TPaveText.cxx:319
 TPaveText.cxx:320
 TPaveText.cxx:321
 TPaveText.cxx:322
 TPaveText.cxx:323
 TPaveText.cxx:324
 TPaveText.cxx:325
 TPaveText.cxx:326
 TPaveText.cxx:327
 TPaveText.cxx:328
 TPaveText.cxx:329
 TPaveText.cxx:330
 TPaveText.cxx:331
 TPaveText.cxx:332
 TPaveText.cxx:333
 TPaveText.cxx:334
 TPaveText.cxx:335
 TPaveText.cxx:336
 TPaveText.cxx:337
 TPaveText.cxx:338
 TPaveText.cxx:339
 TPaveText.cxx:340
 TPaveText.cxx:341
 TPaveText.cxx:342
 TPaveText.cxx:343
 TPaveText.cxx:344
 TPaveText.cxx:345
 TPaveText.cxx:346
 TPaveText.cxx:347
 TPaveText.cxx:348
 TPaveText.cxx:349
 TPaveText.cxx:350
 TPaveText.cxx:351
 TPaveText.cxx:352
 TPaveText.cxx:353
 TPaveText.cxx:354
 TPaveText.cxx:355
 TPaveText.cxx:356
 TPaveText.cxx:357
 TPaveText.cxx:358
 TPaveText.cxx:359
 TPaveText.cxx:360
 TPaveText.cxx:361
 TPaveText.cxx:362
 TPaveText.cxx:363
 TPaveText.cxx:364
 TPaveText.cxx:365
 TPaveText.cxx:366
 TPaveText.cxx:367
 TPaveText.cxx:368
 TPaveText.cxx:369
 TPaveText.cxx:370
 TPaveText.cxx:371
 TPaveText.cxx:372
 TPaveText.cxx:373
 TPaveText.cxx:374
 TPaveText.cxx:375
 TPaveText.cxx:376
 TPaveText.cxx:377
 TPaveText.cxx:378
 TPaveText.cxx:379
 TPaveText.cxx:380
 TPaveText.cxx:381
 TPaveText.cxx:382
 TPaveText.cxx:383
 TPaveText.cxx:384
 TPaveText.cxx:385
 TPaveText.cxx:386
 TPaveText.cxx:387
 TPaveText.cxx:388
 TPaveText.cxx:389
 TPaveText.cxx:390
 TPaveText.cxx:391
 TPaveText.cxx:392
 TPaveText.cxx:393
 TPaveText.cxx:394
 TPaveText.cxx:395
 TPaveText.cxx:396
 TPaveText.cxx:397
 TPaveText.cxx:398
 TPaveText.cxx:399
 TPaveText.cxx:400
 TPaveText.cxx:401
 TPaveText.cxx:402
 TPaveText.cxx:403
 TPaveText.cxx:404
 TPaveText.cxx:405
 TPaveText.cxx:406
 TPaveText.cxx:407
 TPaveText.cxx:408
 TPaveText.cxx:409
 TPaveText.cxx:410
 TPaveText.cxx:411
 TPaveText.cxx:412
 TPaveText.cxx:413
 TPaveText.cxx:414
 TPaveText.cxx:415
 TPaveText.cxx:416
 TPaveText.cxx:417
 TPaveText.cxx:418
 TPaveText.cxx:419
 TPaveText.cxx:420
 TPaveText.cxx:421
 TPaveText.cxx:422
 TPaveText.cxx:423
 TPaveText.cxx:424
 TPaveText.cxx:425
 TPaveText.cxx:426
 TPaveText.cxx:427
 TPaveText.cxx:428
 TPaveText.cxx:429
 TPaveText.cxx:430
 TPaveText.cxx:431
 TPaveText.cxx:432
 TPaveText.cxx:433
 TPaveText.cxx:434
 TPaveText.cxx:435
 TPaveText.cxx:436
 TPaveText.cxx:437
 TPaveText.cxx:438
 TPaveText.cxx:439
 TPaveText.cxx:440
 TPaveText.cxx:441
 TPaveText.cxx:442
 TPaveText.cxx:443
 TPaveText.cxx:444
 TPaveText.cxx:445
 TPaveText.cxx:446
 TPaveText.cxx:447
 TPaveText.cxx:448
 TPaveText.cxx:449
 TPaveText.cxx:450
 TPaveText.cxx:451
 TPaveText.cxx:452
 TPaveText.cxx:453
 TPaveText.cxx:454
 TPaveText.cxx:455
 TPaveText.cxx:456
 TPaveText.cxx:457
 TPaveText.cxx:458
 TPaveText.cxx:459
 TPaveText.cxx:460
 TPaveText.cxx:461
 TPaveText.cxx:462
 TPaveText.cxx:463
 TPaveText.cxx:464
 TPaveText.cxx:465
 TPaveText.cxx:466
 TPaveText.cxx:467
 TPaveText.cxx:468
 TPaveText.cxx:469
 TPaveText.cxx:470
 TPaveText.cxx:471
 TPaveText.cxx:472
 TPaveText.cxx:473
 TPaveText.cxx:474
 TPaveText.cxx:475
 TPaveText.cxx:476
 TPaveText.cxx:477
 TPaveText.cxx:478
 TPaveText.cxx:479
 TPaveText.cxx:480
 TPaveText.cxx:481
 TPaveText.cxx:482
 TPaveText.cxx:483
 TPaveText.cxx:484
 TPaveText.cxx:485
 TPaveText.cxx:486
 TPaveText.cxx:487
 TPaveText.cxx:488
 TPaveText.cxx:489
 TPaveText.cxx:490
 TPaveText.cxx:491
 TPaveText.cxx:492
 TPaveText.cxx:493
 TPaveText.cxx:494
 TPaveText.cxx:495
 TPaveText.cxx:496
 TPaveText.cxx:497
 TPaveText.cxx:498
 TPaveText.cxx:499
 TPaveText.cxx:500
 TPaveText.cxx:501
 TPaveText.cxx:502
 TPaveText.cxx:503
 TPaveText.cxx:504
 TPaveText.cxx:505
 TPaveText.cxx:506
 TPaveText.cxx:507
 TPaveText.cxx:508
 TPaveText.cxx:509
 TPaveText.cxx:510
 TPaveText.cxx:511
 TPaveText.cxx:512
 TPaveText.cxx:513
 TPaveText.cxx:514
 TPaveText.cxx:515
 TPaveText.cxx:516
 TPaveText.cxx:517
 TPaveText.cxx:518
 TPaveText.cxx:519
 TPaveText.cxx:520
 TPaveText.cxx:521
 TPaveText.cxx:522
 TPaveText.cxx:523
 TPaveText.cxx:524
 TPaveText.cxx:525
 TPaveText.cxx:526
 TPaveText.cxx:527
 TPaveText.cxx:528
 TPaveText.cxx:529
 TPaveText.cxx:530
 TPaveText.cxx:531
 TPaveText.cxx:532
 TPaveText.cxx:533
 TPaveText.cxx:534
 TPaveText.cxx:535
 TPaveText.cxx:536
 TPaveText.cxx:537
 TPaveText.cxx:538
 TPaveText.cxx:539
 TPaveText.cxx:540
 TPaveText.cxx:541
 TPaveText.cxx:542
 TPaveText.cxx:543
 TPaveText.cxx:544
 TPaveText.cxx:545
 TPaveText.cxx:546
 TPaveText.cxx:547
 TPaveText.cxx:548
 TPaveText.cxx:549
 TPaveText.cxx:550
 TPaveText.cxx:551
 TPaveText.cxx:552
 TPaveText.cxx:553
 TPaveText.cxx:554
 TPaveText.cxx:555
 TPaveText.cxx:556
 TPaveText.cxx:557
 TPaveText.cxx:558
 TPaveText.cxx:559
 TPaveText.cxx:560
 TPaveText.cxx:561
 TPaveText.cxx:562
 TPaveText.cxx:563
 TPaveText.cxx:564
 TPaveText.cxx:565
 TPaveText.cxx:566
 TPaveText.cxx:567
 TPaveText.cxx:568
 TPaveText.cxx:569
 TPaveText.cxx:570
 TPaveText.cxx:571
 TPaveText.cxx:572
 TPaveText.cxx:573
 TPaveText.cxx:574
 TPaveText.cxx:575
 TPaveText.cxx:576
 TPaveText.cxx:577
 TPaveText.cxx:578
 TPaveText.cxx:579
 TPaveText.cxx:580
 TPaveText.cxx:581
 TPaveText.cxx:582
 TPaveText.cxx:583
 TPaveText.cxx:584
 TPaveText.cxx:585
 TPaveText.cxx:586
 TPaveText.cxx:587
 TPaveText.cxx:588
 TPaveText.cxx:589
 TPaveText.cxx:590
 TPaveText.cxx:591
 TPaveText.cxx:592
 TPaveText.cxx:593
 TPaveText.cxx:594
 TPaveText.cxx:595
 TPaveText.cxx:596
 TPaveText.cxx:597
 TPaveText.cxx:598
 TPaveText.cxx:599
 TPaveText.cxx:600
 TPaveText.cxx:601
 TPaveText.cxx:602
 TPaveText.cxx:603
 TPaveText.cxx:604
 TPaveText.cxx:605
 TPaveText.cxx:606
 TPaveText.cxx:607
 TPaveText.cxx:608
 TPaveText.cxx:609
 TPaveText.cxx:610
 TPaveText.cxx:611
 TPaveText.cxx:612
 TPaveText.cxx:613
 TPaveText.cxx:614
 TPaveText.cxx:615
 TPaveText.cxx:616
 TPaveText.cxx:617
 TPaveText.cxx:618
 TPaveText.cxx:619
 TPaveText.cxx:620
 TPaveText.cxx:621
 TPaveText.cxx:622
 TPaveText.cxx:623
 TPaveText.cxx:624
 TPaveText.cxx:625
 TPaveText.cxx:626
 TPaveText.cxx:627
 TPaveText.cxx:628
 TPaveText.cxx:629
 TPaveText.cxx:630
 TPaveText.cxx:631
 TPaveText.cxx:632
 TPaveText.cxx:633
 TPaveText.cxx:634
 TPaveText.cxx:635
 TPaveText.cxx:636
 TPaveText.cxx:637
 TPaveText.cxx:638
 TPaveText.cxx:639
 TPaveText.cxx:640
 TPaveText.cxx:641
 TPaveText.cxx:642
 TPaveText.cxx:643
 TPaveText.cxx:644
 TPaveText.cxx:645
 TPaveText.cxx:646
 TPaveText.cxx:647
 TPaveText.cxx:648
 TPaveText.cxx:649
 TPaveText.cxx:650
 TPaveText.cxx:651
 TPaveText.cxx:652
 TPaveText.cxx:653
 TPaveText.cxx:654
 TPaveText.cxx:655
 TPaveText.cxx:656
 TPaveText.cxx:657
 TPaveText.cxx:658
 TPaveText.cxx:659
 TPaveText.cxx:660
 TPaveText.cxx:661
 TPaveText.cxx:662
 TPaveText.cxx:663
 TPaveText.cxx:664
 TPaveText.cxx:665
 TPaveText.cxx:666
 TPaveText.cxx:667
 TPaveText.cxx:668
 TPaveText.cxx:669
 TPaveText.cxx:670
 TPaveText.cxx:671
 TPaveText.cxx:672
 TPaveText.cxx:673
 TPaveText.cxx:674
 TPaveText.cxx:675
 TPaveText.cxx:676
 TPaveText.cxx:677
 TPaveText.cxx:678
 TPaveText.cxx:679
 TPaveText.cxx:680
 TPaveText.cxx:681
 TPaveText.cxx:682
 TPaveText.cxx:683
 TPaveText.cxx:684
 TPaveText.cxx:685
 TPaveText.cxx:686
 TPaveText.cxx:687
 TPaveText.cxx:688
 TPaveText.cxx:689
 TPaveText.cxx:690
 TPaveText.cxx:691
 TPaveText.cxx:692
 TPaveText.cxx:693
 TPaveText.cxx:694
 TPaveText.cxx:695
 TPaveText.cxx:696
 TPaveText.cxx:697
 TPaveText.cxx:698
 TPaveText.cxx:699
 TPaveText.cxx:700
 TPaveText.cxx:701
 TPaveText.cxx:702
 TPaveText.cxx:703
 TPaveText.cxx:704
 TPaveText.cxx:705
 TPaveText.cxx:706
 TPaveText.cxx:707
 TPaveText.cxx:708
 TPaveText.cxx:709
 TPaveText.cxx:710
 TPaveText.cxx:711
 TPaveText.cxx:712
 TPaveText.cxx:713
 TPaveText.cxx:714
 TPaveText.cxx:715
 TPaveText.cxx:716
 TPaveText.cxx:717
 TPaveText.cxx:718
 TPaveText.cxx:719
 TPaveText.cxx:720
 TPaveText.cxx:721
 TPaveText.cxx:722
 TPaveText.cxx:723
 TPaveText.cxx:724
 TPaveText.cxx:725
 TPaveText.cxx:726
 TPaveText.cxx:727
 TPaveText.cxx:728
 TPaveText.cxx:729
 TPaveText.cxx:730
 TPaveText.cxx:731
 TPaveText.cxx:732
 TPaveText.cxx:733
 TPaveText.cxx:734
 TPaveText.cxx:735
 TPaveText.cxx:736
 TPaveText.cxx:737
 TPaveText.cxx:738
 TPaveText.cxx:739
 TPaveText.cxx:740
 TPaveText.cxx:741
 TPaveText.cxx:742
 TPaveText.cxx:743
 TPaveText.cxx:744
 TPaveText.cxx:745
 TPaveText.cxx:746
 TPaveText.cxx:747
 TPaveText.cxx:748
 TPaveText.cxx:749
 TPaveText.cxx:750
 TPaveText.cxx:751
 TPaveText.cxx:752
 TPaveText.cxx:753
 TPaveText.cxx:754
 TPaveText.cxx:755
 TPaveText.cxx:756
 TPaveText.cxx:757
 TPaveText.cxx:758
 TPaveText.cxx:759
 TPaveText.cxx:760
 TPaveText.cxx:761
 TPaveText.cxx:762
 TPaveText.cxx:763
 TPaveText.cxx:764
 TPaveText.cxx:765
 TPaveText.cxx:766
 TPaveText.cxx:767
 TPaveText.cxx:768
 TPaveText.cxx:769
 TPaveText.cxx:770
 TPaveText.cxx:771
 TPaveText.cxx:772
 TPaveText.cxx:773
 TPaveText.cxx:774
 TPaveText.cxx:775
 TPaveText.cxx:776
 TPaveText.cxx:777
 TPaveText.cxx:778
 TPaveText.cxx:779
 TPaveText.cxx:780
 TPaveText.cxx:781
 TPaveText.cxx:782
 TPaveText.cxx:783
 TPaveText.cxx:784
 TPaveText.cxx:785
 TPaveText.cxx:786
 TPaveText.cxx:787
 TPaveText.cxx:788
 TPaveText.cxx:789
 TPaveText.cxx:790
 TPaveText.cxx:791
 TPaveText.cxx:792
 TPaveText.cxx:793
 TPaveText.cxx:794
 TPaveText.cxx:795
 TPaveText.cxx:796
 TPaveText.cxx:797
 TPaveText.cxx:798
 TPaveText.cxx:799
 TPaveText.cxx:800
 TPaveText.cxx:801
 TPaveText.cxx:802
 TPaveText.cxx:803
 TPaveText.cxx:804
 TPaveText.cxx:805
 TPaveText.cxx:806
 TPaveText.cxx:807
 TPaveText.cxx:808
 TPaveText.cxx:809
 TPaveText.cxx:810
 TPaveText.cxx:811
 TPaveText.cxx:812
 TPaveText.cxx:813
 TPaveText.cxx:814
 TPaveText.cxx:815
 TPaveText.cxx:816
 TPaveText.cxx:817
 TPaveText.cxx:818
 TPaveText.cxx:819
 TPaveText.cxx:820
 TPaveText.cxx:821
 TPaveText.cxx:822
 TPaveText.cxx:823
 TPaveText.cxx:824
 TPaveText.cxx:825
 TPaveText.cxx:826
 TPaveText.cxx:827
 TPaveText.cxx:828
 TPaveText.cxx:829
 TPaveText.cxx:830
 TPaveText.cxx:831
 TPaveText.cxx:832
 TPaveText.cxx:833
 TPaveText.cxx:834
 TPaveText.cxx:835
 TPaveText.cxx:836
 TPaveText.cxx:837
 TPaveText.cxx:838
 TPaveText.cxx:839
 TPaveText.cxx:840
 TPaveText.cxx:841
 TPaveText.cxx:842
 TPaveText.cxx:843
 TPaveText.cxx:844
 TPaveText.cxx:845
 TPaveText.cxx:846
 TPaveText.cxx:847
 TPaveText.cxx:848
 TPaveText.cxx:849
 TPaveText.cxx:850
 TPaveText.cxx:851
 TPaveText.cxx:852
 TPaveText.cxx:853
 TPaveText.cxx:854
 TPaveText.cxx:855
 TPaveText.cxx:856
 TPaveText.cxx:857
 TPaveText.cxx:858
 TPaveText.cxx:859
 TPaveText.cxx:860
 TPaveText.cxx:861
 TPaveText.cxx:862
 TPaveText.cxx:863
 TPaveText.cxx:864
 TPaveText.cxx:865
 TPaveText.cxx:866
 TPaveText.cxx:867
 TPaveText.cxx:868
 TPaveText.cxx:869
 TPaveText.cxx:870
 TPaveText.cxx:871
 TPaveText.cxx:872
 TPaveText.cxx:873
 TPaveText.cxx:874
 TPaveText.cxx:875
 TPaveText.cxx:876
 TPaveText.cxx:877
 TPaveText.cxx:878
 TPaveText.cxx:879
 TPaveText.cxx:880
 TPaveText.cxx:881
 TPaveText.cxx:882
 TPaveText.cxx:883
 TPaveText.cxx:884
 TPaveText.cxx:885
 TPaveText.cxx:886
 TPaveText.cxx:887
 TPaveText.cxx:888
 TPaveText.cxx:889
 TPaveText.cxx:890
 TPaveText.cxx:891
 TPaveText.cxx:892
 TPaveText.cxx:893
 TPaveText.cxx:894
 TPaveText.cxx:895
 TPaveText.cxx:896
 TPaveText.cxx:897
 TPaveText.cxx:898
 TPaveText.cxx:899
 TPaveText.cxx:900
 TPaveText.cxx:901
 TPaveText.cxx:902
 TPaveText.cxx:903
 TPaveText.cxx:904
 TPaveText.cxx:905
 TPaveText.cxx:906
 TPaveText.cxx:907
 TPaveText.cxx:908
 TPaveText.cxx:909
 TPaveText.cxx:910
 TPaveText.cxx:911
 TPaveText.cxx:912
 TPaveText.cxx:913
 TPaveText.cxx:914
 TPaveText.cxx:915
 TPaveText.cxx:916
 TPaveText.cxx:917
 TPaveText.cxx:918
 TPaveText.cxx:919
 TPaveText.cxx:920
 TPaveText.cxx:921
 TPaveText.cxx:922