ROOT logo
// @(#)root/gl:$Id: TGLAnnotation.cxx 28885 2009-06-10 15:51:12Z matevz $
// Author:  Matevz and Alja Tadel  20/02/2009

/*************************************************************************
 * Copyright (C) 1995-2004, 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 "TGLAnnotation.h"

#include "TGLIncludes.h"
#include "TColor.h"
#include "TGLUtil.h"
#include "TGLCamera.h"
#include "TGLRnrCtx.h"
#include "TGLSelectRecord.h"
#include "TGLViewerBase.h"
#include "TObjString.h"
#include "TGFrame.h"
#include "TGTextEdit.h"
#include "TGButton.h"
#include "TGLViewer.h"

#include <KeySymbols.h>

//______________________________________________________________________________
//
//
// GL-overaly annotation.
//
//

ClassImp(TGLAnnotation);

//______________________________________________________________________________
TGLAnnotation::TGLAnnotation(TGLViewerBase *parent, const char *text, Float_t posx, Float_t posy, TGLVector3 ref) :
   TGLOverlayElement(TGLOverlayElement::kAnnotation),
   fMainFrame(0), fTextEdit(0),
   fParent(0),
   fText(text),
   fLabelFontSize(0.02),
   fBackColor(0x4872fa),
   fBackHighColor(0x488ffa),
   fTextColor(0xfbbf84),
   fTextHighColor(0xf1da44),
   fAlpha(0.6),
   fPosX(posx), fPosY(posy),
   fMouseX(0),  fMouseY(0),
   fInDrag(kFALSE),
   fActive(kFALSE)
{
   // Constructor.

   fPointer = ref;
   parent->AddOverlayElement(this);
   fParent = (TGLViewer*)parent;
}

//______________________________________________________________________________
TGLAnnotation::~TGLAnnotation()
{
   // Destructor.

   fParent->RemoveOverlayElement(this);
   delete fMainFrame;
}

//______________________________________________________________________
Bool_t TGLAnnotation::Handle(TGLRnrCtx&          rnrCtx,
                             TGLOvlSelectRecord& selRec,
                             Event_t*            event)
{
   // Handle overlay event.
   // Return TRUE if event was handled.

   if (selRec.GetN() < 2) return kFALSE;
   Int_t recID = selRec.GetItem(1);

   switch (event->fType)
   {
      case kButtonPress:
      {
         // Chech selRec ... if pressed in 'X', 'E'
         if (recID == 2)
         {
            delete this;
         }
         else if (recID == 3)
         {
            MakeEditor();
         }
         else
         {
            fMouseX = event->fX;
            fMouseY = event->fY;
            fInDrag = kTRUE;
         }
         return kTRUE;
      }
      case kButtonRelease:
      {
         fInDrag = kFALSE;
         return kTRUE;
      }
      case kMotionNotify:
      {
         if (fInDrag)
         {
            const TGLRect& vp = rnrCtx.RefCamera().RefViewport();
            fPosX += (Float_t)(event->fX - fMouseX) / vp.Width();
            fPosY -= (Float_t)(event->fY - fMouseY) / vp.Height();
            fMouseX = event->fX;
            fMouseY = event->fY;
         }
         return kTRUE;
      }
      case kGKeyPress:
      {
         switch (rnrCtx.GetEventKeySym())
         {
            case kKey_E: case kKey_e:
               MakeEditor();
               return kTRUE;
            case kKey_X: case kKey_x:
               delete this;
               return kTRUE;
            default:
               return kFALSE;
         }
      }
      default:
      {
         return kFALSE;
      }
   }
}

//______________________________________________________________________________
Bool_t TGLAnnotation::MouseEnter(TGLOvlSelectRecord& /*rec*/)
{
   // Mouse has entered overlay area.

   fActive = kTRUE;
   return kTRUE;
}

//______________________________________________________________________
void TGLAnnotation::MouseLeave()
{
   // Mouse has left overlay area.

   fActive = kFALSE;
}

/**************************************************************************/
void TGLAnnotation::Render(TGLRnrCtx& rnrCtx)
{
   // Render the annotation.

   glDisable(GL_LIGHTING);

   glPushAttrib(GL_ENABLE_BIT | GL_LINE_BIT | GL_POINT_BIT);
   Float_t r, g, b;
   // button
   //
   {
      glMatrixMode(GL_PROJECTION);
      glPushMatrix();
      glLoadIdentity();
      if (rnrCtx.Selection())
      {
         TGLRect rect(*rnrCtx.GetPickRectangle());
         rnrCtx.GetCamera()->WindowToViewport(rect);
         gluPickMatrix(rect.X(), rect.Y(), rect.Width(), rect.Height(),
                       (Int_t*) rnrCtx.GetCamera()->RefViewport().CArr());
      }
      const TGLRect& vp = rnrCtx.RefCamera().RefViewport();
      glOrtho(vp.X(), vp.Width(), vp.Y(), vp.Height(), 0, 1);
      glMatrixMode(GL_MODELVIEW);
      glPushMatrix();
      glLoadIdentity();

      TGLCapabilitySwitch lights_off(GL_LIGHTING, kFALSE);
      glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
      glDisable(GL_CULL_FACE);
      glEnable(GL_BLEND);
      glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
      glShadeModel(GL_FLAT);
      glClearColor(0.0, 0.0, 0.0, 0.0);

      Float_t posX = vp.Width()  * fPosX;
      Float_t posY = vp.Height() * fPosY;

      // Text rendering
      Float_t cfs = fLabelFontSize*vp.Width();
      Int_t fs = TGLFontManager::GetFontSize(cfs);
      if (fLabelFont.GetMode() == TGLFont::kUndef)
      {
         rnrCtx.RegisterFont(fs, "arial",  TGLFont::kPixmap, fLabelFont);
      }
      else if (fLabelFont.GetSize() != fs)
      {
         rnrCtx.ReleaseFont(fLabelFont);
         rnrCtx.RegisterFont(fs, "arial",  TGLFont::kPixmap, fLabelFont);
      }

      // move to picked location
      glTranslatef(posX, posY, -0.99);

      glEnable(GL_POLYGON_OFFSET_FILL);
      glPolygonOffset(1, 1);

      glLineWidth(1);

      // get size of bg area
      Float_t ascent, descent, line_height;
      fLabelFont.MeasureBaseLineParams(ascent, descent, line_height);

      Float_t llx, lly, llz, urx, ury, urz;

      TObjArray* lines = fText.Tokenize("\n");
      Float_t width  = 0;
      Float_t height = 0;
      TIter  lit(lines);
      TObjString* osl;
      while ((osl = (TObjString*) lit()) != 0)
      {
         fLabelFont.BBox(osl->GetString().Data(), llx, lly, llz, urx, ury, urz);
         width = TMath::Max(width, urx);
         height += line_height + descent;
      }
      width  += 2 * descent;
      height += 2 * descent;

      // polygon background
      Float_t padT =  2;
      Int_t   padF = 10;
      Float_t padM = padF + 2 * padT;

      {
         glPushName(0);

         TColor::Pixel2RGB(fActive ? fBackHighColor : fBackColor, r, g, b);
         TGLUtil::Color4f(r, g, b, fAlpha);

         // bg plain
         glLoadName(1);
         glBegin(GL_QUADS);
         glVertex2f(0, 0);
         glVertex2f(0, height);
         glVertex2f(width, height);
         glVertex2f(width, 0);
         glEnd();

         // outline
         TColor::Pixel2RGB(fActive?fTextHighColor:fTextColor, r, g, b);
         TGLUtil::Color4f(r, g, b, fAlpha);

         glBegin(GL_LINE_LOOP);
         glVertex2f(0, 0);
         glVertex2f(0, height);
         glVertex2f(width, height);
         glVertex2f(width, 0);
         glEnd();

         // edit area
         if (fActive)
         {
            Float_t y = height;
            Float_t x = 0;
            TColor::Pixel2RGB(fBackHighColor, r, g, b);
            TGLUtil::Color4f(r, g, b, fAlpha);

            // edit button
            glLoadName(2);
            glBegin(GL_QUADS);
            glVertex2f(x + padM, y);
            glVertex2f(x,        y);
            glVertex2f(x,        y + padM);
            glVertex2f(x + padM, y + padM);
            glEnd();
            // close button
            glLoadName(3);
            x = padM;
            TColor::Pixel2RGB(fBackHighColor, r, g, b);
            TGLUtil::Color4f(r, g, b, fAlpha);
            glBegin(GL_QUADS);
            glVertex2f(x + padM, y);
            glVertex2f(x,        y);
            glVertex2f(x,        y + padM);
            glVertex2f(x + padM, y + padM);
            glEnd();

            // outlines
            TColor::Pixel2RGB(fTextHighColor, r, g, b);
            TGLUtil::Color4f(r, g, b, fAlpha);
            // left
            x = 0;
            glBegin(GL_LINE_LOOP);
            glVertex2f(x + padM, y);
            glVertex2f(x,        y);
            glVertex2f(x,        y + padM);
            glVertex2f(x + padM, y + padM);
            glEnd();
            // right
            x = padM;
            glBegin(GL_LINE_LOOP);
            glVertex2f(x + padM, y);
            glVertex2f(x,        y);
            glVertex2f(x,        y + padM);
            glVertex2f(x + padM, y + padM);
            glEnd();
         }
         glPopName();
      }

      glDisable(GL_POLYGON_OFFSET_FILL);

      // labels
      fLabelFont.PreRender();
      TColor::Pixel2RGB(fActive?fTextHighColor:fTextColor, r, g, b);
      TGLUtil::Color3f(r, g, b);
      TIter  next_base(lines);
      TObjString* os;
      glPushMatrix();
      glTranslatef(descent, height, 0);
      while ((os = (TObjString*) next_base()) != 0)
      {
         glTranslatef(0, -(line_height + descent), 0);
         fLabelFont.BBox(os->GetString().Data(), llx, lly, llz, urx, ury, urz);
         glRasterPos2i(0, 0);
         glBitmap(0, 0, 0, 0, 0, 0, 0);
         fLabelFont.Render(os->GetString().Data());
      }
      glPopMatrix();
      fLabelFont.PostRender();

      // menu
      if (fMenuFont.GetMode() == TGLFont::kUndef)
      {
         rnrCtx.RegisterFont(padF, "arial",  TGLFont::kPixmap, fMenuFont);
      }

      if (fActive)
      {
         TColor::Pixel2RGB(fTextHighColor, r, g, b);
         TGLUtil::Color3f(r, g, b);
         Float_t x = padT;
         Float_t y = height + padT + 0.5*padF;
         fMenuFont.PreRender();
         fMenuFont.RenderBitmap("X", x, y, 0, TGLFont::kLeft);
         x += padM + padT;
         fMenuFont.RenderBitmap("E", x, y, 0, TGLFont::kLeft);
         fMenuFont.PostRender();
      }

      glMatrixMode(GL_PROJECTION);
      glPopMatrix();
      glMatrixMode(GL_MODELVIEW);
      glPopMatrix();
   }

   // line
   //
   glLineWidth(2);
   TColor::Pixel2RGB(fActive ?fBackHighColor : fBackColor, r, g, b);
   TGLUtil::Color4f(r, g, b, fAlpha);
   glBegin(GL_LINES);
   TGLRect& vp = rnrCtx.RefCamera().RefViewport();
   TGLVertex3 v = rnrCtx.RefCamera().ViewportToWorld(TGLVertex3(fPosX*vp.Width(), fPosY*vp.Height(), 0));

   glVertex3dv(v.Arr());
   glVertex3dv(fPointer.Arr());
   glEnd();
   glPopAttrib();
}

//______________________________________________________________________________
void TGLAnnotation::MakeEditor()
{
   // Show the annotation editor.

   if (fMainFrame == 0)
   {
      fMainFrame = new TGMainFrame(gClient->GetRoot(), 1000, 1000);
      fMainFrame->SetWindowName("Annotation Editor");

      TGVerticalFrame* vf = new TGVerticalFrame(fMainFrame);

      fTextEdit = new TGTextEdit(vf,  1000, 1000, kSunkenFrame);
      vf->AddFrame(fTextEdit,  new TGLayoutHints(kLHintsExpandX|kLHintsExpandY));

      TGHorizontalFrame* hf = new TGHorizontalFrame(vf);

      TGTextButton* btt1 = new TGTextButton(hf, "OK");
      hf->AddFrame(btt1, new TGLayoutHints(kLHintsExpandX, 2, 2, 2, 2));

      TGTextButton* btt2 = new TGTextButton(hf, "Cancel");
      hf->AddFrame(btt2, new TGLayoutHints(kLHintsExpandX, 2, 2, 2, 2));

      btt1->Connect("Clicked()", "TGLAnnotation", this, "UpdateText()");
      btt2->Connect("Clicked()", "TGLAnnotation", this, "CloseEditor()");

      vf->AddFrame(hf, new TGLayoutHints(kLHintsBottom | kLHintsRight | kLHintsExpandX, 2, 2, 5, 1));

      fMainFrame->AddFrame(vf,  new TGLayoutHints(kLHintsExpandX|kLHintsExpandY));
      fMainFrame->SetCleanup(kDeepCleanup);
      fMainFrame->MapSubwindows();
   }

   TGText *tgt = new TGText();
   tgt->LoadBuffer(fText.Data());
   fTextEdit->SetText(tgt);

   Int_t nrow = tgt->RowCount();
   Int_t h = nrow*20;
   Int_t w = fTextEdit->ReturnLongestLineWidth();
   fMainFrame->Resize(TMath::Max(100, w+30), TMath::Max(100, h+40));

   fMainFrame->Layout();
   fMainFrame->MapWindow();
}

//______________________________________________________________________________
void TGLAnnotation::CloseEditor()
{
   // Close the annotation editor.

   fMainFrame->UnmapWindow();
}

//______________________________________________________________________________
void TGLAnnotation::UpdateText()
{
   // Modify the annotation text from the text-edit widget.

   fText = fTextEdit->GetText()->AsString();
   fParent->RequestDraw();
}
 TGLAnnotation.cxx:1
 TGLAnnotation.cxx:2
 TGLAnnotation.cxx:3
 TGLAnnotation.cxx:4
 TGLAnnotation.cxx:5
 TGLAnnotation.cxx:6
 TGLAnnotation.cxx:7
 TGLAnnotation.cxx:8
 TGLAnnotation.cxx:9
 TGLAnnotation.cxx:10
 TGLAnnotation.cxx:11
 TGLAnnotation.cxx:12
 TGLAnnotation.cxx:13
 TGLAnnotation.cxx:14
 TGLAnnotation.cxx:15
 TGLAnnotation.cxx:16
 TGLAnnotation.cxx:17
 TGLAnnotation.cxx:18
 TGLAnnotation.cxx:19
 TGLAnnotation.cxx:20
 TGLAnnotation.cxx:21
 TGLAnnotation.cxx:22
 TGLAnnotation.cxx:23
 TGLAnnotation.cxx:24
 TGLAnnotation.cxx:25
 TGLAnnotation.cxx:26
 TGLAnnotation.cxx:27
 TGLAnnotation.cxx:28
 TGLAnnotation.cxx:29
 TGLAnnotation.cxx:30
 TGLAnnotation.cxx:31
 TGLAnnotation.cxx:32
 TGLAnnotation.cxx:33
 TGLAnnotation.cxx:34
 TGLAnnotation.cxx:35
 TGLAnnotation.cxx:36
 TGLAnnotation.cxx:37
 TGLAnnotation.cxx:38
 TGLAnnotation.cxx:39
 TGLAnnotation.cxx:40
 TGLAnnotation.cxx:41
 TGLAnnotation.cxx:42
 TGLAnnotation.cxx:43
 TGLAnnotation.cxx:44
 TGLAnnotation.cxx:45
 TGLAnnotation.cxx:46
 TGLAnnotation.cxx:47
 TGLAnnotation.cxx:48
 TGLAnnotation.cxx:49
 TGLAnnotation.cxx:50
 TGLAnnotation.cxx:51
 TGLAnnotation.cxx:52
 TGLAnnotation.cxx:53
 TGLAnnotation.cxx:54
 TGLAnnotation.cxx:55
 TGLAnnotation.cxx:56
 TGLAnnotation.cxx:57
 TGLAnnotation.cxx:58
 TGLAnnotation.cxx:59
 TGLAnnotation.cxx:60
 TGLAnnotation.cxx:61
 TGLAnnotation.cxx:62
 TGLAnnotation.cxx:63
 TGLAnnotation.cxx:64
 TGLAnnotation.cxx:65
 TGLAnnotation.cxx:66
 TGLAnnotation.cxx:67
 TGLAnnotation.cxx:68
 TGLAnnotation.cxx:69
 TGLAnnotation.cxx:70
 TGLAnnotation.cxx:71
 TGLAnnotation.cxx:72
 TGLAnnotation.cxx:73
 TGLAnnotation.cxx:74
 TGLAnnotation.cxx:75
 TGLAnnotation.cxx:76
 TGLAnnotation.cxx:77
 TGLAnnotation.cxx:78
 TGLAnnotation.cxx:79
 TGLAnnotation.cxx:80
 TGLAnnotation.cxx:81
 TGLAnnotation.cxx:82
 TGLAnnotation.cxx:83
 TGLAnnotation.cxx:84
 TGLAnnotation.cxx:85
 TGLAnnotation.cxx:86
 TGLAnnotation.cxx:87
 TGLAnnotation.cxx:88
 TGLAnnotation.cxx:89
 TGLAnnotation.cxx:90
 TGLAnnotation.cxx:91
 TGLAnnotation.cxx:92
 TGLAnnotation.cxx:93
 TGLAnnotation.cxx:94
 TGLAnnotation.cxx:95
 TGLAnnotation.cxx:96
 TGLAnnotation.cxx:97
 TGLAnnotation.cxx:98
 TGLAnnotation.cxx:99
 TGLAnnotation.cxx:100
 TGLAnnotation.cxx:101
 TGLAnnotation.cxx:102
 TGLAnnotation.cxx:103
 TGLAnnotation.cxx:104
 TGLAnnotation.cxx:105
 TGLAnnotation.cxx:106
 TGLAnnotation.cxx:107
 TGLAnnotation.cxx:108
 TGLAnnotation.cxx:109
 TGLAnnotation.cxx:110
 TGLAnnotation.cxx:111
 TGLAnnotation.cxx:112
 TGLAnnotation.cxx:113
 TGLAnnotation.cxx:114
 TGLAnnotation.cxx:115
 TGLAnnotation.cxx:116
 TGLAnnotation.cxx:117
 TGLAnnotation.cxx:118
 TGLAnnotation.cxx:119
 TGLAnnotation.cxx:120
 TGLAnnotation.cxx:121
 TGLAnnotation.cxx:122
 TGLAnnotation.cxx:123
 TGLAnnotation.cxx:124
 TGLAnnotation.cxx:125
 TGLAnnotation.cxx:126
 TGLAnnotation.cxx:127
 TGLAnnotation.cxx:128
 TGLAnnotation.cxx:129
 TGLAnnotation.cxx:130
 TGLAnnotation.cxx:131
 TGLAnnotation.cxx:132
 TGLAnnotation.cxx:133
 TGLAnnotation.cxx:134
 TGLAnnotation.cxx:135
 TGLAnnotation.cxx:136
 TGLAnnotation.cxx:137
 TGLAnnotation.cxx:138
 TGLAnnotation.cxx:139
 TGLAnnotation.cxx:140
 TGLAnnotation.cxx:141
 TGLAnnotation.cxx:142
 TGLAnnotation.cxx:143
 TGLAnnotation.cxx:144
 TGLAnnotation.cxx:145
 TGLAnnotation.cxx:146
 TGLAnnotation.cxx:147
 TGLAnnotation.cxx:148
 TGLAnnotation.cxx:149
 TGLAnnotation.cxx:150
 TGLAnnotation.cxx:151
 TGLAnnotation.cxx:152
 TGLAnnotation.cxx:153
 TGLAnnotation.cxx:154
 TGLAnnotation.cxx:155
 TGLAnnotation.cxx:156
 TGLAnnotation.cxx:157
 TGLAnnotation.cxx:158
 TGLAnnotation.cxx:159
 TGLAnnotation.cxx:160
 TGLAnnotation.cxx:161
 TGLAnnotation.cxx:162
 TGLAnnotation.cxx:163
 TGLAnnotation.cxx:164
 TGLAnnotation.cxx:165
 TGLAnnotation.cxx:166
 TGLAnnotation.cxx:167
 TGLAnnotation.cxx:168
 TGLAnnotation.cxx:169
 TGLAnnotation.cxx:170
 TGLAnnotation.cxx:171
 TGLAnnotation.cxx:172
 TGLAnnotation.cxx:173
 TGLAnnotation.cxx:174
 TGLAnnotation.cxx:175
 TGLAnnotation.cxx:176
 TGLAnnotation.cxx:177
 TGLAnnotation.cxx:178
 TGLAnnotation.cxx:179
 TGLAnnotation.cxx:180
 TGLAnnotation.cxx:181
 TGLAnnotation.cxx:182
 TGLAnnotation.cxx:183
 TGLAnnotation.cxx:184
 TGLAnnotation.cxx:185
 TGLAnnotation.cxx:186
 TGLAnnotation.cxx:187
 TGLAnnotation.cxx:188
 TGLAnnotation.cxx:189
 TGLAnnotation.cxx:190
 TGLAnnotation.cxx:191
 TGLAnnotation.cxx:192
 TGLAnnotation.cxx:193
 TGLAnnotation.cxx:194
 TGLAnnotation.cxx:195
 TGLAnnotation.cxx:196
 TGLAnnotation.cxx:197
 TGLAnnotation.cxx:198
 TGLAnnotation.cxx:199
 TGLAnnotation.cxx:200
 TGLAnnotation.cxx:201
 TGLAnnotation.cxx:202
 TGLAnnotation.cxx:203
 TGLAnnotation.cxx:204
 TGLAnnotation.cxx:205
 TGLAnnotation.cxx:206
 TGLAnnotation.cxx:207
 TGLAnnotation.cxx:208
 TGLAnnotation.cxx:209
 TGLAnnotation.cxx:210
 TGLAnnotation.cxx:211
 TGLAnnotation.cxx:212
 TGLAnnotation.cxx:213
 TGLAnnotation.cxx:214
 TGLAnnotation.cxx:215
 TGLAnnotation.cxx:216
 TGLAnnotation.cxx:217
 TGLAnnotation.cxx:218
 TGLAnnotation.cxx:219
 TGLAnnotation.cxx:220
 TGLAnnotation.cxx:221
 TGLAnnotation.cxx:222
 TGLAnnotation.cxx:223
 TGLAnnotation.cxx:224
 TGLAnnotation.cxx:225
 TGLAnnotation.cxx:226
 TGLAnnotation.cxx:227
 TGLAnnotation.cxx:228
 TGLAnnotation.cxx:229
 TGLAnnotation.cxx:230
 TGLAnnotation.cxx:231
 TGLAnnotation.cxx:232
 TGLAnnotation.cxx:233
 TGLAnnotation.cxx:234
 TGLAnnotation.cxx:235
 TGLAnnotation.cxx:236
 TGLAnnotation.cxx:237
 TGLAnnotation.cxx:238
 TGLAnnotation.cxx:239
 TGLAnnotation.cxx:240
 TGLAnnotation.cxx:241
 TGLAnnotation.cxx:242
 TGLAnnotation.cxx:243
 TGLAnnotation.cxx:244
 TGLAnnotation.cxx:245
 TGLAnnotation.cxx:246
 TGLAnnotation.cxx:247
 TGLAnnotation.cxx:248
 TGLAnnotation.cxx:249
 TGLAnnotation.cxx:250
 TGLAnnotation.cxx:251
 TGLAnnotation.cxx:252
 TGLAnnotation.cxx:253
 TGLAnnotation.cxx:254
 TGLAnnotation.cxx:255
 TGLAnnotation.cxx:256
 TGLAnnotation.cxx:257
 TGLAnnotation.cxx:258
 TGLAnnotation.cxx:259
 TGLAnnotation.cxx:260
 TGLAnnotation.cxx:261
 TGLAnnotation.cxx:262
 TGLAnnotation.cxx:263
 TGLAnnotation.cxx:264
 TGLAnnotation.cxx:265
 TGLAnnotation.cxx:266
 TGLAnnotation.cxx:267
 TGLAnnotation.cxx:268
 TGLAnnotation.cxx:269
 TGLAnnotation.cxx:270
 TGLAnnotation.cxx:271
 TGLAnnotation.cxx:272
 TGLAnnotation.cxx:273
 TGLAnnotation.cxx:274
 TGLAnnotation.cxx:275
 TGLAnnotation.cxx:276
 TGLAnnotation.cxx:277
 TGLAnnotation.cxx:278
 TGLAnnotation.cxx:279
 TGLAnnotation.cxx:280
 TGLAnnotation.cxx:281
 TGLAnnotation.cxx:282
 TGLAnnotation.cxx:283
 TGLAnnotation.cxx:284
 TGLAnnotation.cxx:285
 TGLAnnotation.cxx:286
 TGLAnnotation.cxx:287
 TGLAnnotation.cxx:288
 TGLAnnotation.cxx:289
 TGLAnnotation.cxx:290
 TGLAnnotation.cxx:291
 TGLAnnotation.cxx:292
 TGLAnnotation.cxx:293
 TGLAnnotation.cxx:294
 TGLAnnotation.cxx:295
 TGLAnnotation.cxx:296
 TGLAnnotation.cxx:297
 TGLAnnotation.cxx:298
 TGLAnnotation.cxx:299
 TGLAnnotation.cxx:300
 TGLAnnotation.cxx:301
 TGLAnnotation.cxx:302
 TGLAnnotation.cxx:303
 TGLAnnotation.cxx:304
 TGLAnnotation.cxx:305
 TGLAnnotation.cxx:306
 TGLAnnotation.cxx:307
 TGLAnnotation.cxx:308
 TGLAnnotation.cxx:309
 TGLAnnotation.cxx:310
 TGLAnnotation.cxx:311
 TGLAnnotation.cxx:312
 TGLAnnotation.cxx:313
 TGLAnnotation.cxx:314
 TGLAnnotation.cxx:315
 TGLAnnotation.cxx:316
 TGLAnnotation.cxx:317
 TGLAnnotation.cxx:318
 TGLAnnotation.cxx:319
 TGLAnnotation.cxx:320
 TGLAnnotation.cxx:321
 TGLAnnotation.cxx:322
 TGLAnnotation.cxx:323
 TGLAnnotation.cxx:324
 TGLAnnotation.cxx:325
 TGLAnnotation.cxx:326
 TGLAnnotation.cxx:327
 TGLAnnotation.cxx:328
 TGLAnnotation.cxx:329
 TGLAnnotation.cxx:330
 TGLAnnotation.cxx:331
 TGLAnnotation.cxx:332
 TGLAnnotation.cxx:333
 TGLAnnotation.cxx:334
 TGLAnnotation.cxx:335
 TGLAnnotation.cxx:336
 TGLAnnotation.cxx:337
 TGLAnnotation.cxx:338
 TGLAnnotation.cxx:339
 TGLAnnotation.cxx:340
 TGLAnnotation.cxx:341
 TGLAnnotation.cxx:342
 TGLAnnotation.cxx:343
 TGLAnnotation.cxx:344
 TGLAnnotation.cxx:345
 TGLAnnotation.cxx:346
 TGLAnnotation.cxx:347
 TGLAnnotation.cxx:348
 TGLAnnotation.cxx:349
 TGLAnnotation.cxx:350
 TGLAnnotation.cxx:351
 TGLAnnotation.cxx:352
 TGLAnnotation.cxx:353
 TGLAnnotation.cxx:354
 TGLAnnotation.cxx:355
 TGLAnnotation.cxx:356
 TGLAnnotation.cxx:357
 TGLAnnotation.cxx:358
 TGLAnnotation.cxx:359
 TGLAnnotation.cxx:360
 TGLAnnotation.cxx:361
 TGLAnnotation.cxx:362
 TGLAnnotation.cxx:363
 TGLAnnotation.cxx:364
 TGLAnnotation.cxx:365
 TGLAnnotation.cxx:366
 TGLAnnotation.cxx:367
 TGLAnnotation.cxx:368
 TGLAnnotation.cxx:369
 TGLAnnotation.cxx:370
 TGLAnnotation.cxx:371
 TGLAnnotation.cxx:372
 TGLAnnotation.cxx:373
 TGLAnnotation.cxx:374
 TGLAnnotation.cxx:375
 TGLAnnotation.cxx:376
 TGLAnnotation.cxx:377
 TGLAnnotation.cxx:378
 TGLAnnotation.cxx:379
 TGLAnnotation.cxx:380
 TGLAnnotation.cxx:381
 TGLAnnotation.cxx:382
 TGLAnnotation.cxx:383
 TGLAnnotation.cxx:384
 TGLAnnotation.cxx:385
 TGLAnnotation.cxx:386
 TGLAnnotation.cxx:387
 TGLAnnotation.cxx:388
 TGLAnnotation.cxx:389
 TGLAnnotation.cxx:390
 TGLAnnotation.cxx:391
 TGLAnnotation.cxx:392
 TGLAnnotation.cxx:393
 TGLAnnotation.cxx:394
 TGLAnnotation.cxx:395
 TGLAnnotation.cxx:396
 TGLAnnotation.cxx:397
 TGLAnnotation.cxx:398
 TGLAnnotation.cxx:399
 TGLAnnotation.cxx:400
 TGLAnnotation.cxx:401
 TGLAnnotation.cxx:402
 TGLAnnotation.cxx:403
 TGLAnnotation.cxx:404
 TGLAnnotation.cxx:405
 TGLAnnotation.cxx:406
 TGLAnnotation.cxx:407
 TGLAnnotation.cxx:408
 TGLAnnotation.cxx:409
 TGLAnnotation.cxx:410
 TGLAnnotation.cxx:411
 TGLAnnotation.cxx:412
 TGLAnnotation.cxx:413
 TGLAnnotation.cxx:414
 TGLAnnotation.cxx:415
 TGLAnnotation.cxx:416
 TGLAnnotation.cxx:417
 TGLAnnotation.cxx:418
 TGLAnnotation.cxx:419
 TGLAnnotation.cxx:420
 TGLAnnotation.cxx:421
 TGLAnnotation.cxx:422
 TGLAnnotation.cxx:423
 TGLAnnotation.cxx:424
 TGLAnnotation.cxx:425
 TGLAnnotation.cxx:426
 TGLAnnotation.cxx:427
 TGLAnnotation.cxx:428
 TGLAnnotation.cxx:429
 TGLAnnotation.cxx:430
 TGLAnnotation.cxx:431
 TGLAnnotation.cxx:432
 TGLAnnotation.cxx:433
 TGLAnnotation.cxx:434
 TGLAnnotation.cxx:435
 TGLAnnotation.cxx:436
 TGLAnnotation.cxx:437
 TGLAnnotation.cxx:438
 TGLAnnotation.cxx:439
 TGLAnnotation.cxx:440
 TGLAnnotation.cxx:441
 TGLAnnotation.cxx:442