ROOT logo
// @(#)root/gui:$Id$
// Author: Fons Rademakers   30/6/2000

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

    This source is based on Xclass95, a Win95-looking GUI toolkit.
    Copyright (C) 1996, 1997 David Barth, Ricky Ralston, Hector Peraza.

    Xclass95 is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

**************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGView                                                               //
//                                                                      //
// A TGView provides the infrastructure for text viewer and editor      //
// widgets. It provides a canvas (TGViewFrame) and (optionally) a       //
// vertical and horizontal scrollbar and methods for marking and        //
// scrolling.                                                           //
//                                                                      //
// The TGView (and derivatives) will generate the following             //
// event messages:                                                      //
// kC_TEXTVIEW, kTXT_ISMARKED, widget id, [true|false]                  //
// kC_TEXTVIEW, kTXT_DATACHANGE, widget id, 0                           //
// kC_TEXTVIEW, kTXT_CLICK2, widget id, position (y << 16) | x)         //
// kC_TEXTVIEW, kTXT_CLICK3, widget id, position (y << 16) | x)         //
// kC_TEXTVIEW, kTXT_F3, widget id, true                                //
// kC_TEXTVIEW, kTXT_OPEN, widget id, 0                                 //
// kC_TEXTVIEW, kTXT_CLOSE, widget id, 0                                //
// kC_TEXTVIEW, kTXT_SAVE, widget id, 0                                 //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TGView.h"
#include "TGScrollBar.h"
#include "TGResourcePool.h"
#include "TMath.h"
#include "KeySymbols.h"
#include "RConfigure.h"



ClassImp(TGViewFrame)

//______________________________________________________________________________
TGViewFrame::TGViewFrame(TGView *v, UInt_t w, UInt_t h, UInt_t options,
                         ULong_t back) :
   TGCompositeFrame(v, w, h, options | kOwnBackground, back)
{
   // Create a editor frame.

   fView = v;

   SetBackgroundColor(back);
      
   gVirtualX->GrabButton(fId, kAnyButton, kAnyModifier,
                         kButtonPressMask | kButtonReleaseMask |
                         kButtonMotionMask, kNone, kNone);

   AddInput(kKeyPressMask | kEnterWindowMask | kLeaveWindowMask |
            kFocusChangeMask);

   SetWindowAttributes_t wattr;
   wattr.fMask = kWAWinGravity | kWABitGravity;
   wattr.fBitGravity = 1; // NorthWestGravity
   wattr.fWinGravity = 1;
   gVirtualX->ChangeWindowAttributes(fId, &wattr);

   // guibuiding settings
   fEditDisabled = kEditDisableGrab | kEditDisableKeyEnable | kEditDisableBtnEnable;
}


ClassImp(TGView)

//______________________________________________________________________________
TGView::TGView(const TGWindow *p, UInt_t w, UInt_t h, Int_t id,
               UInt_t xMargin, UInt_t yMargin, UInt_t options,
               UInt_t sboptions, ULong_t back)
       : TGCompositeFrame(p, w, h, options, GetDefaultFrameBackground())
{
   // Create an editor view, containing an TGEditorFrame and (optionally)
   // a horizontal and vertical scrollbar.

   fWidgetId    = id;
   fMsgWindow   = p;
   fWidgetFlags = kWidgetWantFocus;

   fXMargin = xMargin;
   fYMargin = yMargin;
   fScrollVal.fX = 1;
   fScrollVal.fY = 1;
   fExposedRegion.Empty();

   fClipboard = fClient->GetResourcePool()->GetClipboard();

   fCanvas = new TGViewFrame(this, 10, 10, kChildFrame | kOwnBackground, back);
   AddFrame(fCanvas);

   if (!(sboptions & kNoHSB)) {
      fHsb = new TGHScrollBar(this, 10, 10, kChildFrame);
      AddFrame(fHsb);
      fHsb->Associate(this);
   } else {
      fHsb = 0;
   }

   if (!(sboptions & kNoVSB)) {
      fVsb = new TGVScrollBar(this, 10, 10, kChildFrame);
      AddFrame(fVsb);
      fVsb->Associate(this);
   } else {
      fVsb = 0;
   }

   fWhiteGC.SetGraphicsExposures(kTRUE);
   fWhiteGC.SetBackground(back);

   // sets for guibuilding   
   if (fVsb) {
      fVsb->SetEditDisabled(kEditDisableGrab | kEditDisableBtnEnable);
   }
   if (fHsb) {
      fHsb->SetEditDisabled(kEditDisableGrab  | kEditDisableBtnEnable);
   }

   fEditDisabled = kEditDisableLayout;

   // layout manager is not used
   delete fLayoutManager;
   fLayoutManager = 0;
}

//______________________________________________________________________________
TGView::~TGView()
{
   // Delete view.

   if (!MustCleanup()) {
      delete fCanvas;
      delete fHsb;
      delete fVsb;
   }
}

//______________________________________________________________________________
void TGView::Clear(Option_t *)
{
   // Clear view.

   fScrolling = -1;

   fMousePos.fX = fMousePos.fY = -1;
   fVisible.fX  = fVisible.fY = 0;
   UpdateBackgroundStart();
   fVirtualSize = TGDimension(0, 0);

   gVirtualX->ClearArea(fCanvas->GetId(), 0, 0,
                        fCanvas->GetWidth(), fCanvas->GetHeight());
   Layout();
}

//______________________________________________________________________________
void TGView::SetVisibleStart(Int_t newTop, Int_t direction)
{
   // Scroll view in specified direction to make newTop the visible location.

   if (direction == kHorizontal) {
      if (newTop / fScrollVal.fX == fVisible.fX / fScrollVal.fX) {
         return;
      }
      ScrollCanvas(newTop, kHorizontal);
   } else {
      if (newTop / fScrollVal.fY == fVisible.fY / fScrollVal.fY) {
         return;
      }
      ScrollCanvas(newTop, kVertical);
   }
}

//______________________________________________________________________________
void TGView::DrawRegion(Int_t, Int_t, UInt_t, UInt_t)
{
   // Draw region.

   return;
}

//______________________________________________________________________________
void TGView::UpdateRegion(Int_t x, Int_t y, UInt_t w, UInt_t h)
{
   // update a part of view

   x = x < 0 ? 0 : x;
   y = y < 0 ? 0 : y;

   w = x + w > fCanvas->GetWidth() ? fCanvas->GetWidth() - x : w;
   h = y + h > fCanvas->GetHeight() ? fCanvas->GetHeight() - y : h;

   if (fExposedRegion.IsEmpty()) {
      fExposedRegion.fX = x;
      fExposedRegion.fY = y;
      fExposedRegion.fW = w;
      fExposedRegion.fH = h;
   } else {
      TGRectangle r(x, y, w, h);
      fExposedRegion.Merge(r);
   }

   fClient->NeedRedraw(this);
}

//______________________________________________________________________________
void TGView::UpdateBackgroundStart()
{
   // set some gc values

   fWhiteGC.SetTileStipXOrigin(-fVisible.fX);
   fWhiteGC.SetTileStipYOrigin(-fVisible.fY);
}

//______________________________________________________________________________
Bool_t TGView::HandleButton(Event_t *event)
{
   // handle button

   if (event->fType == kButtonPress) {
      int amount, ch;

      ch = fCanvas->GetHeight();

      if (fScrollVal.fY == 1) {
         amount = fScrollVal.fY * TMath::Max(ch/6, 1);
      } else {
         amount = fScrollVal.fY * 5;
      }

      if (event->fState & kKeyShiftMask) {
         amount = fScrollVal.fY;
      } else if (event->fState & kKeyControlMask) {
         amount = ch - TMath::Max(ch / 20, 1);
      }

      if (event->fCode == kButton4) {
         ScrollDown(amount);
         return kTRUE;
      } else if (event->fCode == kButton5) {
         ScrollUp(amount);
         return kTRUE;
      }
   }
   return kFALSE;
}

//______________________________________________________________________________
void TGView::DoRedraw()
{
   // redraw

   DrawBorder();

   if (!fExposedRegion.IsEmpty()) {
      DrawRegion(fExposedRegion.fX, fExposedRegion.fY, 
                 fExposedRegion.fW, fExposedRegion.fH);
      fExposedRegion.Empty();
   }
}

//______________________________________________________________________________
Bool_t TGView::HandleExpose(Event_t *event)
{
   // Handle expose events.

   if (event->fWindow == fCanvas->GetId()) {

      TGPosition pos(event->fX, event->fY);
      TGDimension dim(event->fWidth, event->fHeight);
      TGRectangle rect(pos, dim);

      if (fExposedRegion.IsEmpty()) {
         fExposedRegion = rect;
      } else {
         if (((!rect.fX && !fExposedRegion.fY) || 
              (!rect.fY && !fExposedRegion.fX)) && 
             ((rect.fX >= (int)fExposedRegion.fW) || 
              (rect.fY >= (int)fExposedRegion.fH))) {
            DrawRegion(rect.fX, rect.fY, rect.fW, rect.fY);
         } else {
            fExposedRegion.Merge(rect);
         }
      }

      fClient->NeedRedraw(this);
   } else {
      return TGCompositeFrame::HandleExpose(event);
   }

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGView::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
{
   // Process scrollbar messages.

   switch(GET_MSG(msg)) {
      case kC_HSCROLL:
         switch(GET_SUBMSG(msg)) {
            case kSB_SLIDERTRACK:
            case kSB_SLIDERPOS:
               SetVisibleStart(Int_t(parm1 * fScrollVal.fX), kHorizontal);
               break;
         }
         break;

      case kC_VSCROLL:
         switch(GET_SUBMSG(msg)) {
            case kSB_SLIDERTRACK:
            case kSB_SLIDERPOS:
               SetVisibleStart(Int_t(parm1 * fScrollVal.fY), kVertical);
               break;
         }
         break;

      default:
         break;
   }
   return kTRUE;
}

//______________________________________________________________________________
void TGView::Layout()
{
   // layout view

   Bool_t need_vsb, need_hsb;
   Int_t cw, ch;

   need_vsb = need_hsb = kFALSE;

   // test whether we need scrollbars
   cw = fWidth - (fBorderWidth << 1) - fXMargin - 1;
   ch = fHeight - (fBorderWidth << 1) - fYMargin - 1;

   fCanvas->SetWidth(cw);
   fCanvas->SetHeight(ch);
   ItemLayout();

   if ((Int_t)fVirtualSize.fWidth > cw) {
      if (fHsb) {
         need_hsb = kTRUE;
         if (fVsb) ch -= fVsb->GetDefaultWidth();
         if (ch < 0) ch = 0;
         fCanvas->SetHeight(ch);
         ItemLayout();
      }
   }

   if ((Int_t)fVirtualSize.fHeight > ch) {
      if (fVsb) {
         need_vsb = kTRUE;
         if (fHsb) cw -= fHsb->GetDefaultHeight();
         if (cw < 0) cw = 0;
         fCanvas->SetWidth(cw);
         ItemLayout();
      }
   }

   // re-check again (putting the scrollbar could have changed things)

   if ((Int_t)fVirtualSize.fWidth > cw) {
      if (!need_hsb) {
         need_hsb = kTRUE;
         if (fVsb) ch -= fVsb->GetDefaultWidth();
         if (ch < 0) ch = 0;
         fCanvas->SetHeight(ch);
         ItemLayout();
      }
   }

   if (fHsb) {
      if (need_hsb) {
         fHsb->MoveResize(fBorderWidth + fXMargin, ch + fBorderWidth + fYMargin,
                          cw, fHsb->GetDefaultHeight());
         fHsb->MapRaised();
      } else {
         fHsb->UnmapWindow();
         fHsb->SetPosition(0);
      }
   }

   if (fVsb) {
      if (need_vsb) {
         fVsb->MoveResize(cw + fBorderWidth + fXMargin,  fBorderWidth + fYMargin,
                          fVsb->GetDefaultWidth(), ch);
         fVsb->MapWindow();
      } else {
         fVsb->UnmapWindow();
         fVsb->SetPosition(0);
      }
   }
   fCanvas->MoveResize(fBorderWidth + fXMargin, fBorderWidth + fYMargin, cw, ch);

   if (fHsb) {
      fHsb->SetRange(fVirtualSize.fWidth / fScrollVal.fX, fCanvas->GetWidth() / fScrollVal.fX);
   }

   if (fVsb) {
      fVsb->SetRange(fVirtualSize.fHeight / fScrollVal.fY, fCanvas->GetHeight() / fScrollVal.fY);
   }
}

//______________________________________________________________________________
void TGView::DrawBorder()
{
   // Draw the border of the text edit widget.

   switch (fOptions & (kSunkenFrame | kRaisedFrame | kDoubleBorder)) {
      case kSunkenFrame | kDoubleBorder:
         if (gClient->GetStyle() < 2) {
            gVirtualX->DrawLine(fId, GetShadowGC()(), 0, 0, fWidth-2, 0);
            gVirtualX->DrawLine(fId, GetShadowGC()(), 0, 0, 0, fHeight-2);
            gVirtualX->DrawLine(fId, GetBlackGC()(), 1, 1, fWidth-3, 1);
            gVirtualX->DrawLine(fId, GetBlackGC()(), 1, 1, 1, fHeight-3);

            gVirtualX->DrawLine(fId, GetHilightGC()(), 0, fHeight-1, fWidth-1, fHeight-1);
            gVirtualX->DrawLine(fId, GetHilightGC()(), fWidth-1, fHeight-1, fWidth-1, 0);
            gVirtualX->DrawLine(fId, GetBckgndGC()(),  1, fHeight-2, fWidth-2, fHeight-2);
            gVirtualX->DrawLine(fId, GetBckgndGC()(),  fWidth-2, 1, fWidth-2, fHeight-2);
            break;
         }
      default:
         TGFrame::DrawBorder();
         break;
   }
}

//______________________________________________________________________________
void TGView::ScrollToPosition(TGLongPosition pos)
{
   // Scroll the canvas to pos.

   if (pos.fX < 0) pos.fX = 0;
   if (pos.fY < 0) pos.fY = 0;
   if (pos.fX != fHsb->GetPosition()) fHsb->SetPosition(pos.fX / fScrollVal.fX);
   if (pos.fY != fVsb->GetPosition()) fVsb->SetPosition(pos.fY / fScrollVal.fY);
}

//______________________________________________________________________________
void TGView::ScrollCanvas(Int_t new_top, Int_t direction)
{
   // Scroll the canvas to new_top in the kVertical or kHorizontal direction.

   Point_t points[4];
   Int_t xsrc, ysrc, xdest, ydest, cpyheight, cpywidth;

   if (new_top < 0) {
      return;
   }

   if (direction == kVertical) {
      if (new_top == fVisible.fY) {
         return;
      } 

      points[0].fX = points[3].fX = 0;
      points[1].fX = points[2].fX = fCanvas->GetWidth();
      xsrc = xdest = 0;
      cpywidth = 0;
      if (new_top < fVisible.fY) {
         ysrc = 0;
         ydest = Int_t(fVisible.fY - new_top);
         cpyheight = ydest;
         if (ydest > (Int_t)fCanvas->GetHeight()) {
            ydest = fCanvas->GetHeight();
         }

         points[1].fY = points[0].fY = 0;
         points[3].fY = points[2].fY = ydest; // -1;
      } else {
         ydest = 0;
         ysrc = Int_t(new_top - fVisible.fY);
         cpyheight= ysrc;
         if (ysrc > (Int_t)fCanvas->GetHeight()) {
            ysrc = fCanvas->GetHeight();
         }
         points[1].fY = points[0].fY = fCanvas->GetHeight()-ysrc; // +1;
         points[3].fY = points[2].fY = fCanvas->GetHeight();
      }
      fVisible.fY = new_top;

      if (fVisible.fY < 0) {
         fVisible.fY = 0;
      }
   } else {
      if (new_top == fVisible.fX) {
         return;
      }

      points[0].fY = points[1].fY = 0;
      points[2].fY = points[3].fY = fCanvas->GetHeight();
      ysrc = ydest = 0;
      cpyheight = 0;

      if (new_top < fVisible.fX) {
         xsrc = 0;
         xdest = Int_t(fVisible.fX - new_top);
         cpywidth = xdest;
         if (xdest < 0) {
            xdest = fCanvas->GetWidth();
         }
         points[0].fX = points[3].fX = 0;
         points[1].fX = points[2].fX = xdest ; // -1;
      } else {
         xdest = 0;
         xsrc =  Int_t(new_top - fVisible.fX);
         cpywidth = xsrc;
         if (xsrc > (Int_t)fCanvas->GetWidth()) {
            xsrc = fCanvas->GetWidth();
         }
         points[0].fX = points[3].fX = fCanvas->GetWidth()-xsrc; // +1;
         points[1].fX = points[2].fX = fCanvas->GetWidth();
      }
      fVisible.fX = new_top;
      if (fVisible.fX < 0) {
         fVisible.fX = 0;
      }
   }

   UpdateBackgroundStart();

#ifdef R__HAS_COCOA
   //With QuartzView it's quite tough to copy window's pixels to window.
   //TODO: non-optimal solution.
   DrawRegion(0, 0, GetWidth(), GetHeight());
#else
   // Copy the scrolled region to its new position
   gVirtualX->CopyArea(fCanvas->GetId(), fCanvas->GetId(), fWhiteGC(),
                       xsrc, ysrc, fCanvas->GetWidth()-cpywidth,
                       fCanvas->GetHeight()-cpyheight, xdest, ydest);

   UInt_t xdiff = points[2].fX - points[0].fX;
   UInt_t ydiff = points[2].fY - points[0].fY;

   // under windows we need to redraw larger area (why?)
#ifdef WIN32
   xdiff = xdiff << 1;
   ydiff = ydiff << 1;
#endif

   DrawRegion(points[0].fX, points[0].fY, xdiff, ydiff);
#endif
}

//______________________________________________________________________________
void TGView::ChangeBackground(Pixel_t col)
{
   // Change background color of the canvas frame.

   fCanvas->SetBackgroundColor(col);
   fWhiteGC.SetBackground(col);
   fWhiteGC.SetForeground(col);
   DrawRegion(0, 0, fCanvas->GetWidth(), fCanvas->GetHeight());
}

//______________________________________________________________________________
void TGView::SetBackgroundColor(Pixel_t col)
{
   // Set background color of the canvas frame.

   fCanvas->SetBackgroundColor(col);
   fWhiteGC.SetBackground(col);
   fWhiteGC.SetForeground(col);
}

//______________________________________________________________________________
void TGView::SetBackgroundPixmap(Pixmap_t p)
{
   // Set backgound  pixmap

   fCanvas->SetBackgroundPixmap(p);
}
 TGView.cxx:1
 TGView.cxx:2
 TGView.cxx:3
 TGView.cxx:4
 TGView.cxx:5
 TGView.cxx:6
 TGView.cxx:7
 TGView.cxx:8
 TGView.cxx:9
 TGView.cxx:10
 TGView.cxx:11
 TGView.cxx:12
 TGView.cxx:13
 TGView.cxx:14
 TGView.cxx:15
 TGView.cxx:16
 TGView.cxx:17
 TGView.cxx:18
 TGView.cxx:19
 TGView.cxx:20
 TGView.cxx:21
 TGView.cxx:22
 TGView.cxx:23
 TGView.cxx:24
 TGView.cxx:25
 TGView.cxx:26
 TGView.cxx:27
 TGView.cxx:28
 TGView.cxx:29
 TGView.cxx:30
 TGView.cxx:31
 TGView.cxx:32
 TGView.cxx:33
 TGView.cxx:34
 TGView.cxx:35
 TGView.cxx:36
 TGView.cxx:37
 TGView.cxx:38
 TGView.cxx:39
 TGView.cxx:40
 TGView.cxx:41
 TGView.cxx:42
 TGView.cxx:43
 TGView.cxx:44
 TGView.cxx:45
 TGView.cxx:46
 TGView.cxx:47
 TGView.cxx:48
 TGView.cxx:49
 TGView.cxx:50
 TGView.cxx:51
 TGView.cxx:52
 TGView.cxx:53
 TGView.cxx:54
 TGView.cxx:55
 TGView.cxx:56
 TGView.cxx:57
 TGView.cxx:58
 TGView.cxx:59
 TGView.cxx:60
 TGView.cxx:61
 TGView.cxx:62
 TGView.cxx:63
 TGView.cxx:64
 TGView.cxx:65
 TGView.cxx:66
 TGView.cxx:67
 TGView.cxx:68
 TGView.cxx:69
 TGView.cxx:70
 TGView.cxx:71
 TGView.cxx:72
 TGView.cxx:73
 TGView.cxx:74
 TGView.cxx:75
 TGView.cxx:76
 TGView.cxx:77
 TGView.cxx:78
 TGView.cxx:79
 TGView.cxx:80
 TGView.cxx:81
 TGView.cxx:82
 TGView.cxx:83
 TGView.cxx:84
 TGView.cxx:85
 TGView.cxx:86
 TGView.cxx:87
 TGView.cxx:88
 TGView.cxx:89
 TGView.cxx:90
 TGView.cxx:91
 TGView.cxx:92
 TGView.cxx:93
 TGView.cxx:94
 TGView.cxx:95
 TGView.cxx:96
 TGView.cxx:97
 TGView.cxx:98
 TGView.cxx:99
 TGView.cxx:100
 TGView.cxx:101
 TGView.cxx:102
 TGView.cxx:103
 TGView.cxx:104
 TGView.cxx:105
 TGView.cxx:106
 TGView.cxx:107
 TGView.cxx:108
 TGView.cxx:109
 TGView.cxx:110
 TGView.cxx:111
 TGView.cxx:112
 TGView.cxx:113
 TGView.cxx:114
 TGView.cxx:115
 TGView.cxx:116
 TGView.cxx:117
 TGView.cxx:118
 TGView.cxx:119
 TGView.cxx:120
 TGView.cxx:121
 TGView.cxx:122
 TGView.cxx:123
 TGView.cxx:124
 TGView.cxx:125
 TGView.cxx:126
 TGView.cxx:127
 TGView.cxx:128
 TGView.cxx:129
 TGView.cxx:130
 TGView.cxx:131
 TGView.cxx:132
 TGView.cxx:133
 TGView.cxx:134
 TGView.cxx:135
 TGView.cxx:136
 TGView.cxx:137
 TGView.cxx:138
 TGView.cxx:139
 TGView.cxx:140
 TGView.cxx:141
 TGView.cxx:142
 TGView.cxx:143
 TGView.cxx:144
 TGView.cxx:145
 TGView.cxx:146
 TGView.cxx:147
 TGView.cxx:148
 TGView.cxx:149
 TGView.cxx:150
 TGView.cxx:151
 TGView.cxx:152
 TGView.cxx:153
 TGView.cxx:154
 TGView.cxx:155
 TGView.cxx:156
 TGView.cxx:157
 TGView.cxx:158
 TGView.cxx:159
 TGView.cxx:160
 TGView.cxx:161
 TGView.cxx:162
 TGView.cxx:163
 TGView.cxx:164
 TGView.cxx:165
 TGView.cxx:166
 TGView.cxx:167
 TGView.cxx:168
 TGView.cxx:169
 TGView.cxx:170
 TGView.cxx:171
 TGView.cxx:172
 TGView.cxx:173
 TGView.cxx:174
 TGView.cxx:175
 TGView.cxx:176
 TGView.cxx:177
 TGView.cxx:178
 TGView.cxx:179
 TGView.cxx:180
 TGView.cxx:181
 TGView.cxx:182
 TGView.cxx:183
 TGView.cxx:184
 TGView.cxx:185
 TGView.cxx:186
 TGView.cxx:187
 TGView.cxx:188
 TGView.cxx:189
 TGView.cxx:190
 TGView.cxx:191
 TGView.cxx:192
 TGView.cxx:193
 TGView.cxx:194
 TGView.cxx:195
 TGView.cxx:196
 TGView.cxx:197
 TGView.cxx:198
 TGView.cxx:199
 TGView.cxx:200
 TGView.cxx:201
 TGView.cxx:202
 TGView.cxx:203
 TGView.cxx:204
 TGView.cxx:205
 TGView.cxx:206
 TGView.cxx:207
 TGView.cxx:208
 TGView.cxx:209
 TGView.cxx:210
 TGView.cxx:211
 TGView.cxx:212
 TGView.cxx:213
 TGView.cxx:214
 TGView.cxx:215
 TGView.cxx:216
 TGView.cxx:217
 TGView.cxx:218
 TGView.cxx:219
 TGView.cxx:220
 TGView.cxx:221
 TGView.cxx:222
 TGView.cxx:223
 TGView.cxx:224
 TGView.cxx:225
 TGView.cxx:226
 TGView.cxx:227
 TGView.cxx:228
 TGView.cxx:229
 TGView.cxx:230
 TGView.cxx:231
 TGView.cxx:232
 TGView.cxx:233
 TGView.cxx:234
 TGView.cxx:235
 TGView.cxx:236
 TGView.cxx:237
 TGView.cxx:238
 TGView.cxx:239
 TGView.cxx:240
 TGView.cxx:241
 TGView.cxx:242
 TGView.cxx:243
 TGView.cxx:244
 TGView.cxx:245
 TGView.cxx:246
 TGView.cxx:247
 TGView.cxx:248
 TGView.cxx:249
 TGView.cxx:250
 TGView.cxx:251
 TGView.cxx:252
 TGView.cxx:253
 TGView.cxx:254
 TGView.cxx:255
 TGView.cxx:256
 TGView.cxx:257
 TGView.cxx:258
 TGView.cxx:259
 TGView.cxx:260
 TGView.cxx:261
 TGView.cxx:262
 TGView.cxx:263
 TGView.cxx:264
 TGView.cxx:265
 TGView.cxx:266
 TGView.cxx:267
 TGView.cxx:268
 TGView.cxx:269
 TGView.cxx:270
 TGView.cxx:271
 TGView.cxx:272
 TGView.cxx:273
 TGView.cxx:274
 TGView.cxx:275
 TGView.cxx:276
 TGView.cxx:277
 TGView.cxx:278
 TGView.cxx:279
 TGView.cxx:280
 TGView.cxx:281
 TGView.cxx:282
 TGView.cxx:283
 TGView.cxx:284
 TGView.cxx:285
 TGView.cxx:286
 TGView.cxx:287
 TGView.cxx:288
 TGView.cxx:289
 TGView.cxx:290
 TGView.cxx:291
 TGView.cxx:292
 TGView.cxx:293
 TGView.cxx:294
 TGView.cxx:295
 TGView.cxx:296
 TGView.cxx:297
 TGView.cxx:298
 TGView.cxx:299
 TGView.cxx:300
 TGView.cxx:301
 TGView.cxx:302
 TGView.cxx:303
 TGView.cxx:304
 TGView.cxx:305
 TGView.cxx:306
 TGView.cxx:307
 TGView.cxx:308
 TGView.cxx:309
 TGView.cxx:310
 TGView.cxx:311
 TGView.cxx:312
 TGView.cxx:313
 TGView.cxx:314
 TGView.cxx:315
 TGView.cxx:316
 TGView.cxx:317
 TGView.cxx:318
 TGView.cxx:319
 TGView.cxx:320
 TGView.cxx:321
 TGView.cxx:322
 TGView.cxx:323
 TGView.cxx:324
 TGView.cxx:325
 TGView.cxx:326
 TGView.cxx:327
 TGView.cxx:328
 TGView.cxx:329
 TGView.cxx:330
 TGView.cxx:331
 TGView.cxx:332
 TGView.cxx:333
 TGView.cxx:334
 TGView.cxx:335
 TGView.cxx:336
 TGView.cxx:337
 TGView.cxx:338
 TGView.cxx:339
 TGView.cxx:340
 TGView.cxx:341
 TGView.cxx:342
 TGView.cxx:343
 TGView.cxx:344
 TGView.cxx:345
 TGView.cxx:346
 TGView.cxx:347
 TGView.cxx:348
 TGView.cxx:349
 TGView.cxx:350
 TGView.cxx:351
 TGView.cxx:352
 TGView.cxx:353
 TGView.cxx:354
 TGView.cxx:355
 TGView.cxx:356
 TGView.cxx:357
 TGView.cxx:358
 TGView.cxx:359
 TGView.cxx:360
 TGView.cxx:361
 TGView.cxx:362
 TGView.cxx:363
 TGView.cxx:364
 TGView.cxx:365
 TGView.cxx:366
 TGView.cxx:367
 TGView.cxx:368
 TGView.cxx:369
 TGView.cxx:370
 TGView.cxx:371
 TGView.cxx:372
 TGView.cxx:373
 TGView.cxx:374
 TGView.cxx:375
 TGView.cxx:376
 TGView.cxx:377
 TGView.cxx:378
 TGView.cxx:379
 TGView.cxx:380
 TGView.cxx:381
 TGView.cxx:382
 TGView.cxx:383
 TGView.cxx:384
 TGView.cxx:385
 TGView.cxx:386
 TGView.cxx:387
 TGView.cxx:388
 TGView.cxx:389
 TGView.cxx:390
 TGView.cxx:391
 TGView.cxx:392
 TGView.cxx:393
 TGView.cxx:394
 TGView.cxx:395
 TGView.cxx:396
 TGView.cxx:397
 TGView.cxx:398
 TGView.cxx:399
 TGView.cxx:400
 TGView.cxx:401
 TGView.cxx:402
 TGView.cxx:403
 TGView.cxx:404
 TGView.cxx:405
 TGView.cxx:406
 TGView.cxx:407
 TGView.cxx:408
 TGView.cxx:409
 TGView.cxx:410
 TGView.cxx:411
 TGView.cxx:412
 TGView.cxx:413
 TGView.cxx:414
 TGView.cxx:415
 TGView.cxx:416
 TGView.cxx:417
 TGView.cxx:418
 TGView.cxx:419
 TGView.cxx:420
 TGView.cxx:421
 TGView.cxx:422
 TGView.cxx:423
 TGView.cxx:424
 TGView.cxx:425
 TGView.cxx:426
 TGView.cxx:427
 TGView.cxx:428
 TGView.cxx:429
 TGView.cxx:430
 TGView.cxx:431
 TGView.cxx:432
 TGView.cxx:433
 TGView.cxx:434
 TGView.cxx:435
 TGView.cxx:436
 TGView.cxx:437
 TGView.cxx:438
 TGView.cxx:439
 TGView.cxx:440
 TGView.cxx:441
 TGView.cxx:442
 TGView.cxx:443
 TGView.cxx:444
 TGView.cxx:445
 TGView.cxx:446
 TGView.cxx:447
 TGView.cxx:448
 TGView.cxx:449
 TGView.cxx:450
 TGView.cxx:451
 TGView.cxx:452
 TGView.cxx:453
 TGView.cxx:454
 TGView.cxx:455
 TGView.cxx:456
 TGView.cxx:457
 TGView.cxx:458
 TGView.cxx:459
 TGView.cxx:460
 TGView.cxx:461
 TGView.cxx:462
 TGView.cxx:463
 TGView.cxx:464
 TGView.cxx:465
 TGView.cxx:466
 TGView.cxx:467
 TGView.cxx:468
 TGView.cxx:469
 TGView.cxx:470
 TGView.cxx:471
 TGView.cxx:472
 TGView.cxx:473
 TGView.cxx:474
 TGView.cxx:475
 TGView.cxx:476
 TGView.cxx:477
 TGView.cxx:478
 TGView.cxx:479
 TGView.cxx:480
 TGView.cxx:481
 TGView.cxx:482
 TGView.cxx:483
 TGView.cxx:484
 TGView.cxx:485
 TGView.cxx:486
 TGView.cxx:487
 TGView.cxx:488
 TGView.cxx:489
 TGView.cxx:490
 TGView.cxx:491
 TGView.cxx:492
 TGView.cxx:493
 TGView.cxx:494
 TGView.cxx:495
 TGView.cxx:496
 TGView.cxx:497
 TGView.cxx:498
 TGView.cxx:499
 TGView.cxx:500
 TGView.cxx:501
 TGView.cxx:502
 TGView.cxx:503
 TGView.cxx:504
 TGView.cxx:505
 TGView.cxx:506
 TGView.cxx:507
 TGView.cxx:508
 TGView.cxx:509
 TGView.cxx:510
 TGView.cxx:511
 TGView.cxx:512
 TGView.cxx:513
 TGView.cxx:514
 TGView.cxx:515
 TGView.cxx:516
 TGView.cxx:517
 TGView.cxx:518
 TGView.cxx:519
 TGView.cxx:520
 TGView.cxx:521
 TGView.cxx:522
 TGView.cxx:523
 TGView.cxx:524
 TGView.cxx:525
 TGView.cxx:526
 TGView.cxx:527
 TGView.cxx:528
 TGView.cxx:529
 TGView.cxx:530
 TGView.cxx:531
 TGView.cxx:532
 TGView.cxx:533
 TGView.cxx:534
 TGView.cxx:535
 TGView.cxx:536
 TGView.cxx:537
 TGView.cxx:538
 TGView.cxx:539
 TGView.cxx:540
 TGView.cxx:541
 TGView.cxx:542
 TGView.cxx:543
 TGView.cxx:544
 TGView.cxx:545
 TGView.cxx:546
 TGView.cxx:547
 TGView.cxx:548
 TGView.cxx:549
 TGView.cxx:550
 TGView.cxx:551
 TGView.cxx:552
 TGView.cxx:553
 TGView.cxx:554
 TGView.cxx:555
 TGView.cxx:556
 TGView.cxx:557
 TGView.cxx:558
 TGView.cxx:559
 TGView.cxx:560
 TGView.cxx:561
 TGView.cxx:562
 TGView.cxx:563
 TGView.cxx:564
 TGView.cxx:565
 TGView.cxx:566
 TGView.cxx:567
 TGView.cxx:568
 TGView.cxx:569
 TGView.cxx:570
 TGView.cxx:571
 TGView.cxx:572
 TGView.cxx:573
 TGView.cxx:574
 TGView.cxx:575
 TGView.cxx:576
 TGView.cxx:577
 TGView.cxx:578
 TGView.cxx:579
 TGView.cxx:580
 TGView.cxx:581
 TGView.cxx:582
 TGView.cxx:583
 TGView.cxx:584
 TGView.cxx:585
 TGView.cxx:586
 TGView.cxx:587
 TGView.cxx:588
 TGView.cxx:589
 TGView.cxx:590
 TGView.cxx:591
 TGView.cxx:592
 TGView.cxx:593