// @(#)root/gui:$Id$
// Author: Fons Rademakers   17/01/98

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

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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGListView, TGLVContainer and TGLVEntry                              //
//                                                                      //
// A list view is a widget that can contain a number of items           //
// arranged in a grid or list. The items can be represented either      //
// by a string or by an icon.                                           //
//                                                                      //
// The TGListView is user callable. The other classes are service       //
// classes of the list view.                                            //
//                                                                      //
// A list view can generate the following events:                       //
// kC_CONTAINER, kCT_SELCHANGED, total items, selected items.           //
// kC_CONTAINER, kCT_ITEMCLICK, which button, location (y<<16|x).       //
// kC_CONTAINER, kCT_ITEMDBLCLICK, which button, location (y<<16|x).    //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TGListView.h"
#include "TGPicture.h"
#include "TGButton.h"
#include "TGScrollBar.h"
#include "TGResourcePool.h"
#include "TList.h"
#include "TSystem.h"
#include "TGMimeTypes.h"
#include "TObjString.h"
#include "Riostream.h"

const TGFont *TGLVEntry::fgDefaultFont = 0;
TGGC         *TGLVEntry::fgDefaultGC = 0;

const TGFont *TGListView::fgDefaultFont = 0;
TGGC         *TGListView::fgDefaultGC = 0;


ClassImp(TGLVEntry)
ClassImp(TGLVContainer)
ClassImp(TGListView)

//______________________________________________________________________________
TGLVEntry::TGLVEntry(const TGWindow *p, const TGPicture *bigpic,
                     const TGPicture *smallpic, TGString *name,
                     TGString **subnames, EListViewMode viewMode,
                     UInt_t options, ULong_t back) :
   TGFrame(p, 10, 10, options, back)
{
   // Create a list view item.

   fSelPic = 0;

   fCurrent  =
   fBigPic   = bigpic;
   fSmallPic = smallpic;

   fCheckMark  = fClient->GetPicture("checkmark_t.xpm");
   fChecked = kFALSE;

   fItemName = name;
   fSubnames = subnames;
   fUserData = 0;

   fCpos  =
   fJmode = 0;

   fActive = kFALSE;

   fFontStruct = GetDefaultFontStruct();
   fNormGC     = GetDefaultGC()();

   Int_t max_ascent, max_descent;
   fTWidth = gVirtualX->TextWidth(fFontStruct,
                                  fItemName ? fItemName->GetString() : "",
                                  fItemName ? fItemName->GetLength() : 0);
   gVirtualX->GetFontProperties(fFontStruct, max_ascent, max_descent);
   fTHeight = max_ascent + max_descent;

   if (fSubnames) {
      Int_t i;
      for (i = 0; fSubnames[i] != 0; ++i)
         ;
      fCtw = new int[i+1];
      fCtw[i] = 0;
      for (i = 0; fSubnames[i] != 0; ++i) {
         fCtw[i] = gVirtualX->TextWidth(fFontStruct, fSubnames[i]->GetString(),
                                        fSubnames[i]->GetLength());
      }
   } else {
      fCtw = 0;
   }

   fViewMode = (EListViewMode)-1;
   SetViewMode(viewMode);
}

//______________________________________________________________________________
TGLVEntry::TGLVEntry(const TGLVContainer *p, const TString& name,
                     const TString& cname, TGString **subnames,
                     UInt_t options, Pixel_t back) :
   TGFrame(p, 10, 10, options, back)
{
   // Create a list view item.
   //
   // name - is name of item.
   // cname - is name of icon. In most cases this is class name of object
   //         associated with this item.

   fSelPic = 0;

   fCurrent  =
   fBigPic   = fClient->GetMimeTypeList()->GetIcon(cname, kFALSE);
   fCheckMark  = fClient->GetPicture("checkmark_t.xpm");
   fChecked = kFALSE;

   if (!fBigPic) {
      fBigPic = fClient->GetPicture("doc_s.xpm");
   }
   fSmallPic = fClient->GetMimeTypeList()->GetIcon(cname, kTRUE);
   if (!fSmallPic) {
      fSmallPic = fClient->GetPicture("doc_t.xpm");
   }

   fItemName = new TGString(name);
   fSubnames = subnames;
   fUserData = 0;

   fCpos  =
   fJmode = 0;

   fActive = kFALSE;

   fFontStruct = GetDefaultFontStruct();
   fNormGC     = GetDefaultGC()();

   Int_t max_ascent, max_descent;
   fTWidth = gVirtualX->TextWidth(fFontStruct, fItemName->GetString(), fItemName->GetLength());
   gVirtualX->GetFontProperties(fFontStruct, max_ascent, max_descent);
   fTHeight = max_ascent + max_descent;

   if (fSubnames) {
      Int_t i;
      for (i = 0; fSubnames[i] != 0; ++i)
         ;
      fCtw = new int[i+1];
      fCtw[i] = 0;
      for (i = 0; fSubnames[i] != 0; ++i) {
         fCtw[i] = gVirtualX->TextWidth(fFontStruct, fSubnames[i]->GetString(),
                                        fSubnames[i]->GetLength());
      }
   } else {
      fCtw = 0;
   }

   fViewMode = (EListViewMode)-1;
   SetViewMode((EListViewMode)p->GetViewMode());
}

//______________________________________________________________________________
TGLVEntry::~TGLVEntry()
{
   // Delete a list view item.

   if (fItemName) delete fItemName;
   if (fSelPic) delete fSelPic;
   if (fSubnames) {
      for (Int_t i = 0; fSubnames[i] != 0; ++i) delete fSubnames[i];
      delete [] fSubnames;
      delete [] fCtw;
   }
}

//______________________________________________________________________________
void TGLVEntry::SetSubnames(const char* n1,const char* n2,const char* n3,
                            const char* n4,const char* n5,const char* n6,
                            const char* n7,const char* n8,const char* n9,
                            const char* n10,const char* n11,const char* n12)
{
   // Sets new subnames.

   if (fSubnames) {
      for (Int_t i = 0; fSubnames[i] != 0; ++i) delete fSubnames[i];
      delete [] fSubnames;
      delete [] fCtw;
   }

   Int_t ncol = 0;
   fSubnames = 0;

   if (n12 && strlen(n12)) ncol=12;
   else if (n11 && strlen(n11)) ncol=11;
   else if (n10 && strlen(n10)) ncol=10;
   else if (n9 && strlen(n9)) ncol=9;
   else if (n8 && strlen(n8)) ncol=8;
   else if (n7 && strlen(n7)) ncol=7;
   else if (n6 && strlen(n6)) ncol=6;
   else if (n5 && strlen(n5)) ncol=5;
   else if (n4 && strlen(n4)) ncol=4;
   else if (n3 && strlen(n3)) ncol=3;
   else if (n2 && strlen(n2)) ncol=2;
   else if (n1 && strlen(n1)) ncol=1;

   if (!ncol) return;

   fSubnames = new TGString* [ncol+1];

   if (ncol>11) fSubnames[11] = new TGString(n12);
   if (ncol>10) fSubnames[10] = new TGString(n11);
   if (ncol>9) fSubnames[9] = new TGString(n10);
   if (ncol>8) fSubnames[8] = new TGString(n9);
   if (ncol>7) fSubnames[7] = new TGString(n8);
   if (ncol>6) fSubnames[6] = new TGString(n7);
   if (ncol>5) fSubnames[5] = new TGString(n6);
   if (ncol>4) fSubnames[4] = new TGString(n5);
   if (ncol>3) fSubnames[3] = new TGString(n4);
   if (ncol>2) fSubnames[2] = new TGString(n3);
   if (ncol>1) fSubnames[1] = new TGString(n2);
   if (ncol>0) fSubnames[0] = new TGString(n1);
   fSubnames[ncol] = 0;

   fCtw = new int[ncol];
   fCtw[ncol-1] = 0;

   for (int i = 0; i<ncol; i++) {
      fCtw[i] = gVirtualX->TextWidth(fFontStruct, fSubnames[i]->GetString(),
                                     fSubnames[i]->GetLength());
   }
}

//______________________________________________________________________________
void TGLVEntry::Activate(Bool_t a)
{
   // Make list view item active.

   if (fActive == a) return;
   fActive = a;

   if (fActive) {
      fSelPic = new TGSelectedPicture(gClient, fCurrent);
   } else {
      if (fSelPic) delete fSelPic;
      fSelPic = 0;
   }
   DoRedraw();
}

//______________________________________________________________________________
void TGLVEntry::SetViewMode(EListViewMode viewMode)
{
   // Set the view mode for this list item.

   if (viewMode != fViewMode) {
      fViewMode = viewMode;
      if (viewMode == kLVLargeIcons)
         fCurrent = fBigPic;
      else
         fCurrent = fSmallPic;
      if (fActive) {
         if (fSelPic) delete fSelPic;
         fSelPic = new TGSelectedPicture(gClient, fCurrent);
      }
      gVirtualX->ClearWindow(fId);
      Resize(GetDefaultSize());
      fClient->NeedRedraw(this);
   }
}

//______________________________________________________________________________
void TGLVEntry::SetPictures(const TGPicture *bigpic, const TGPicture *smallpic)
{
   // change pictures

   if (!bigpic || !smallpic) return;

   gVirtualX->ClearWindow(fId);

   fBigPic = bigpic;
   fSmallPic = smallpic;
   fCurrent = fViewMode == kLVLargeIcons ? fBigPic : fSmallPic;

   if (fSelPic) delete fSelPic;
   fSelPic = new TGSelectedPicture(gClient, fCurrent);

   Resize();
   gVirtualX->ClearWindow(fId);
}

//______________________________________________________________________________
void TGLVEntry::DoRedraw()
{
   // Redraw list view item.
   // List view item is placed and layouted in the container frame,
   // but is drawn in viewport.

   DrawCopy(fId, 0, 0);
}

//______________________________________________________________________________
void TGLVEntry::DrawCopy(Handle_t id, Int_t x, Int_t y)
{
   // Draw list view item in other window.
   // List view item is placed and layout in the container frame,
   // but is drawn in viewport.

   Int_t ix, iy, lx, ly;
   Int_t max_ascent, max_descent;

   gVirtualX->GetFontProperties(fFontStruct, max_ascent, max_descent);
   fTWidth = gVirtualX->TextWidth(fFontStruct, fItemName->GetString(), fItemName->GetLength());
   fTHeight = max_ascent + max_descent;

   if (fViewMode == kLVLargeIcons) {
      ix = (fWidth - fCurrent->GetWidth()) >> 1;
      iy = 0;
      lx = (fWidth - fTWidth) >> 1;
      ly = fHeight - (fTHeight + 1) - 2;
   } else {
      ix = 0;
      iy = (fHeight - fCurrent->GetHeight()) >> 1;
      lx = fCurrent->GetWidth() + 2;
      ly = (fHeight - (fTHeight + 1)) >> 1;
   }

   if ((fChecked) && (fCheckMark)) {
      if (fViewMode == kLVLargeIcons) {
         fCheckMark->Draw(id, fNormGC, x + ix + 8, y + iy + 8);
         gVirtualX->SetForeground(fNormGC, fgWhitePixel);
         gVirtualX->FillRectangle(id, fNormGC, x + lx, y + ly, fTWidth, fTHeight + 1);
         gVirtualX->SetForeground(fNormGC, fgBlackPixel);
      }
      else {
         fCheckMark->Draw(id, fNormGC, x + ix, y + iy);
         gVirtualX->SetForeground(fNormGC, fgWhitePixel);
         gVirtualX->FillRectangle(id, fNormGC, x + lx, y, fWidth-lx, fHeight);
         gVirtualX->SetForeground(fNormGC, fgBlackPixel);
      }
   }
   // This if tries to print the elements with ... appened at the end if
   // the widht of the string is longer than that of the column
   if (fViewMode == kLVDetails && fSubnames && fCpos && fJmode && fCtw) {
      TString tmpString = *fItemName;
      Int_t ftmpWidth = gVirtualX->TextWidth(fFontStruct, tmpString,
                                             tmpString.Length());
      if ( ftmpWidth > (fCpos[0] - lx) ) {
         for (Int_t j = fItemName->Length() - 1 ; j > 0; j--) {
            tmpString =  (*fItemName)(0,j) + "...";
            ftmpWidth = gVirtualX->TextWidth(GetDefaultFontStruct(), tmpString,
                                             tmpString.Length());
            if ( ftmpWidth <= (fCpos[0] - lx) ) {
               break;
            }
         }
      }
      if (fActive) {
         if (fSelPic) fSelPic->Draw(id, fNormGC, x + ix, y + iy);
         gVirtualX->SetForeground(fNormGC, fgDefaultSelectedBackground);
         gVirtualX->FillRectangle(id, fNormGC, x + lx, y, fWidth-(lx+4), fHeight);
         gVirtualX->SetForeground(fNormGC, fClient->GetResourcePool()->GetSelectedFgndColor());
      } else {
         fCurrent->Draw(id, fNormGC, x + ix, y + iy);
         gVirtualX->SetForeground(fNormGC, fgWhitePixel);
         gVirtualX->FillRectangle(id, fNormGC, x + lx, y, fWidth-(lx+4), fHeight);
         gVirtualX->SetForeground(fNormGC, fgBlackPixel);
      }

      TGString tmpTGString(tmpString);
      tmpTGString.Draw(id, fNormGC, x+lx, y+ly + max_ascent);
   } else if (fViewMode == kLVLargeIcons) {
      if (fActive) {
         if (fSelPic) fSelPic->Draw(id, fNormGC, x + ix, y + iy);
         gVirtualX->SetForeground(fNormGC, fgDefaultSelectedBackground);
         gVirtualX->FillRectangle(id, fNormGC, x + lx, y + ly, fTWidth, fTHeight + 1);
         gVirtualX->SetForeground(fNormGC, fClient->GetResourcePool()->GetSelectedFgndColor());
      } else {
         fCurrent->Draw(id, fNormGC, x + ix, y + iy);
         gVirtualX->SetForeground(fNormGC, fgWhitePixel);
         gVirtualX->FillRectangle(id, fNormGC, x + lx, y + ly, fTWidth, fTHeight + 1);
         gVirtualX->SetForeground(fNormGC, fgBlackPixel);
      }
      fItemName->Draw(id, fNormGC, x+lx, y+ly + max_ascent);
   } else {
      if (fActive) {
         gVirtualX->SetForeground(fNormGC, fgDefaultSelectedBackground);
         gVirtualX->FillRectangle(id, fNormGC, x + lx, y, fWidth-lx, fHeight);
         gVirtualX->SetForeground(fNormGC, fClient->GetResourcePool()->GetSelectedFgndColor());
         if (fSelPic) fSelPic->Draw(id, fNormGC, x + ix, y + iy);
      } else {
         gVirtualX->SetForeground(fNormGC, fgWhitePixel);
         gVirtualX->FillRectangle(id, fNormGC, x + lx, y, fWidth-lx, fHeight);
         gVirtualX->SetForeground(fNormGC, fgBlackPixel);
         fCurrent->Draw(id, fNormGC, x + ix, y + iy);
      }
      fItemName->Draw(id, fNormGC, x+lx, y+ly + max_ascent);
   }

   if (fViewMode == kLVDetails) {
      if (fSubnames && fCpos && fJmode && fCtw) {
         int i;

         if (fActive) {
            gVirtualX->SetForeground(fNormGC, fClient->GetResourcePool()->GetSelectedFgndColor());
         } else {
            gVirtualX->SetForeground(fNormGC, fgBlackPixel);
         }
         // Again fixes the size of the strings
         for (i = 0; fSubnames[i] != 0; ++i) {
            TString tmpString = *fSubnames[i];
            Int_t ftmpWidth = gVirtualX->TextWidth(fFontStruct, tmpString,
                                                   tmpString.Length());
            if ( ftmpWidth > (fCpos[i+1] - fCpos[i]) ) {
               for (int j = fSubnames[i]->Length() - 1 ; j > 0; j--) {
                  tmpString =  (*fSubnames[i])(0,j) + "...";
                  ftmpWidth = gVirtualX->TextWidth(GetDefaultFontStruct(),
                                                   tmpString,
                                                   tmpString.Length());
                  if ( ftmpWidth <= (fCpos[i+1] - fCpos[i]) ) {
                     break;
                  }
               }
            }
            if (fCpos[i] == 0)
               break;
            if (fJmode[i] == kTextRight)
               lx = fCpos[i+1] - ftmpWidth - 2;
            else if (fJmode[i] == kTextCenterX)
               lx = (fCpos[i] + fCpos[i+1] - ftmpWidth) >> 1;
            else // default to TEXT_LEFT
               lx = fCpos[i] + 2;

            //if (x + lx < 0) continue; // out of left boundary or mess in name
            TGString tmpTGString(tmpString);
            tmpTGString.Draw(id, fNormGC, x + lx, y + ly + max_ascent);
         }
      }
   }
   gVirtualX->SetForeground(fNormGC, fgBlackPixel);
}

//______________________________________________________________________________
TGDimension TGLVEntry::GetDefaultSize() const
{
   // Get default size of list item.

   TGDimension size;
   TGDimension isize(fCurrent ? fCurrent->GetWidth() : 0,
                     fCurrent ? fCurrent->GetHeight() : 0);
   TGDimension lsize(fTWidth, fTHeight+1);

   switch (fViewMode) {
      default:
      case kLVLargeIcons:
         size.fWidth = TMath::Max(isize.fWidth, lsize.fWidth);
         size.fHeight = isize.fHeight + lsize.fHeight + 6;
         break;

      case kLVSmallIcons:
      case kLVList:
      case kLVDetails:
         size.fWidth = isize.fWidth + lsize.fWidth + 4;
         size.fHeight = TMath::Max(isize.fHeight, lsize.fHeight);
         break;
   }
   return size;
}

//______________________________________________________________________________
FontStruct_t TGLVEntry::GetDefaultFontStruct()
{
   // Return the default font structure in use.

   if (!fgDefaultFont)
      fgDefaultFont = gClient->GetResourcePool()->GetIconFont();
   return fgDefaultFont->GetFontStruct();
}

//______________________________________________________________________________
const TGGC &TGLVEntry::GetDefaultGC()
{
   // Return the default graphics context in use.

   if (!fgDefaultGC) {
      fgDefaultGC = new TGGC(*gClient->GetResourcePool()->GetFrameGC());
      fgDefaultGC->SetFont(fgDefaultFont->GetFontHandle());
   }
   return *fgDefaultGC;
}


//______________________________________________________________________________
TGLVContainer::TGLVContainer(const TGWindow *p, UInt_t w, UInt_t h,
                             UInt_t options, ULong_t back) :
   TGContainer(p, w, h, options, back)
{
   // Create a list view container. This is the (large) frame that contains
   // all the list items. It will be shown through a TGViewPort (which is
   // created by the TGCanvas derived TGListView).

   fListView = 0;
   fLastActive = 0;
   fCpos = fJmode = 0;
   fMultiSelect = kFALSE;

   fViewMode = kLVLargeIcons;
   fItemLayout = new TGLayoutHints(kLHintsExpandY | kLHintsCenterX);

   SetLayoutManager(new TGTileLayout(this, 8));
}

//______________________________________________________________________________
TGLVContainer::TGLVContainer(TGCanvas *p,UInt_t options, ULong_t back) :
   TGContainer(p,options, back)
{
   // Create a list view container. This is the (large) frame that contains
   // all the list items. It will be shown through a TGViewPort (which is
   // created by the TGCanvas derived TGListView).

   fListView = 0;
   fLastActive = 0;
   fCpos = fJmode = 0;
   fMultiSelect = kFALSE;

   fViewMode = kLVLargeIcons;
   fItemLayout = new TGLayoutHints(kLHintsExpandY | kLHintsCenterX);

   SetLayoutManager(new TGTileLayout(this, 8));

   if (p->InheritsFrom(TGListView::Class())) fListView = (TGListView*)p;
}

//______________________________________________________________________________
TGLVContainer::~TGLVContainer()
{
   // Delete list view container.

   if (!MustCleanup()) {
      RemoveAll();
      delete fItemLayout;
   }
}

//______________________________________________________________________________
void  TGLVContainer::SetColHeaders(const char* n1,const char* n2,const char* n3,
                                   const char* n4,const char* n5,const char* n6,
                                   const char* n7,const char* n8,const char* n9,
                                   const char* n10,const char* n11,const char* n12)
{
   // set columns headers

   if (!fListView) return;

   Int_t ncol = -1;
   if (n12 && strlen(n12)) ncol=12;
   else if (n11 && strlen(n11)) ncol=11;
   else if (n10 && strlen(n10)) ncol=10;
   else if (n9 && strlen(n9)) ncol=9;
   else if (n8 && strlen(n8)) ncol=8;
   else if (n7 && strlen(n7)) ncol=7;
   else if (n6 && strlen(n6)) ncol=6;
   else if (n5 && strlen(n5)) ncol=5;
   else if (n4 && strlen(n4)) ncol=4;
   else if (n3 && strlen(n3)) ncol=3;
   else if (n2 && strlen(n2)) ncol=2;
   else if (n1 && strlen(n1)) ncol=1;

   if (ncol<0) return;

   fListView->SetHeaders(ncol);
   if (ncol>0) fListView->SetHeader(n1, kTextCenterX, kTextLeft , 0);
   if (ncol>1) fListView->SetHeader(n2, kTextCenterX, kTextLeft , 1);
   if (ncol>2) fListView->SetHeader(n3, kTextCenterX, kTextLeft , 2);
   if (ncol>3) fListView->SetHeader(n4, kTextCenterX, kTextLeft , 3);
   if (ncol>4) fListView->SetHeader(n5, kTextCenterX, kTextLeft , 4);
   if (ncol>5) fListView->SetHeader(n6, kTextCenterX, kTextLeft , 5);
   if (ncol>6) fListView->SetHeader(n7, kTextCenterX, kTextLeft , 6);
   if (ncol>7) fListView->SetHeader(n8, kTextCenterX, kTextLeft , 7);
   if (ncol>8) fListView->SetHeader(n9, kTextCenterX, kTextLeft , 8);
   if (ncol>9) fListView->SetHeader(n10, kTextCenterX, kTextLeft , 9);
   if (ncol>10) fListView->SetHeader(n11, kTextCenterX, kTextLeft , 10);
   if (ncol>11) fListView->SetHeader(n12, kTextCenterX, kTextLeft , 11);

   fListView->Layout();
}

//______________________________________________________________________________
void TGLVContainer::SetViewMode(EListViewMode viewMode)
{
   // Set list view mode for container.

   if (fViewMode != viewMode) {
      TGLayoutHints *oldLayout = fItemLayout;

      EListViewMode old = fViewMode;
      fViewMode = viewMode;
      if (fListView) fListView->SetViewMode(viewMode);

      if (viewMode == kLVLargeIcons)
         fItemLayout = new TGLayoutHints(kLHintsExpandY | kLHintsCenterX);
      else
         fItemLayout = new TGLayoutHints(kLHintsExpandX | kLHintsCenterY);

      TGFrameElement *el;
      TIter next(fList);
      while ((el = (TGFrameElement *) next())) {
         el->fLayout = fItemLayout;
         ((TGLVEntry *) el->fFrame)->SetViewMode(viewMode);
      }
      delete oldLayout;

      switch (viewMode) {
         default:
         case kLVLargeIcons:
            SetLayoutManager(new TGTileLayout(this, 8));
            break;

         case kLVSmallIcons:
            SetLayoutManager(new TGTileLayout(this, 2));
            break;

         case kLVList:
            SetLayoutManager(new TGListLayout(this, 2));
            break;

         case kLVDetails:
            SetLayoutManager(new TGListDetailsLayout(this, 2));
            break;
      }

      TGCanvas *canvas = (TGCanvas *) this->GetParent()->GetParent();

      // layout and adjust position after layout
      UInt_t height = fHeight;
      UInt_t width = fWidth;
      TGPosition pos = GetPagePosition();
      canvas->Layout();
      pos.fX = (pos.fX*fWidth)/width;
      pos.fY = (pos.fY*fHeight)/height;

      if (old == kLVList) { // switch x <-> y
         SetVsbPosition(pos.fX);
         SetHsbPosition(0);
      } else if (fViewMode == kLVList) {
         SetHsbPosition(pos.fY);
      } else {
         SetVsbPosition(pos.fY);
         SetHsbPosition(pos.fX);
      }
   }
}

//______________________________________________________________________________
void TGLVContainer::SetColumns(Int_t *cpos, Int_t *jmode)
{
   // Set column information for list items.

   fCpos  = cpos;
   fJmode = jmode;

   TGFrameElement *el;
   TIter next(fList);
   while ((el = (TGFrameElement *) next())) {
      ((TGLVEntry *) el->fFrame)->SetColumns(fCpos, fJmode);
   }
   Layout();
}

//______________________________________________________________________________
TGDimension TGLVContainer::GetMaxItemSize() const
{
   // Get size of largest item in container.

   TGDimension csize, maxsize(0,0);

   TGFrameElement *el;
   TIter next(fList);
   while ((el = (TGFrameElement *) next())) {
      csize = el->fFrame->GetDefaultSize();
      maxsize.fWidth  = TMath::Max(maxsize.fWidth, csize.fWidth);
      maxsize.fHeight = TMath::Max(maxsize.fHeight, csize.fHeight);
   }
   if (fViewMode == kLVLargeIcons) {
      maxsize.fWidth  += 8;
      maxsize.fHeight += 8;
   } else {
      maxsize.fWidth  += 2;
      maxsize.fHeight += 2;
   }
   return maxsize;
}

//______________________________________________________________________________
Int_t TGLVContainer::GetMaxSubnameWidth(Int_t idx) const
{
   // Get width of largest subname in container.

   if (idx == 0) {
      return GetMaxItemSize().fWidth;
   }

   Int_t width, maxwidth = 0;

   TGFrameElement *el;
   TIter next(fList);
   while ((el = (TGFrameElement *) next())) {
      TGLVEntry *entry = (TGLVEntry *) el->fFrame;
      width = entry->GetSubnameWidth(idx-1);
      maxwidth = TMath::Max(maxwidth, width);
   }
   return maxwidth;
}

//______________________________________________________________________________
void TGLVContainer::RemoveItemWithData(void *userData)
{
   // Remove item with fUserData == userData from container.

   TGFrameElement *el;
   TIter next(fList);
   while ((el = (TGFrameElement *) next())) {
      TGLVEntry *f = (TGLVEntry *) el->fFrame;
      if (f->GetUserData() == userData) {
         RemoveItem(f);
         break;
      }
   }
}

//______________________________________________________________________________
void TGLVContainer::ActivateItem(TGFrameElement* el)
{
   // Select/activate item.

   TGContainer::ActivateItem(el);
   fLastActive = (TGLVEntry*)el->fFrame;
}

//______________________________________________________________________________
void TGLVContainer::DeActivateItem(TGFrameElement* el)
{
   // Unselect/deactivate item.

   TGContainer::DeActivateItem(el);
   fLastActive = (TGLVEntry*)el->fFrame;
}

//______________________________________________________________________________
Bool_t TGLVContainer::HandleButton(Event_t* event)
{
   // Handle mouse button event in container.

   if ( !fMultiSelect ) {
      return TGContainer::HandleButton(event);
   }

   Int_t total = 0, selected = fSelected, page = 0;

   TGPosition pos = GetPagePosition();
   TGDimension dim = GetPageDimension();
   Int_t newpos;
   page = dim.fHeight/4;

   if (event->fCode == kButton4) {
      //scroll up
      newpos = pos.fY - page;
      if (newpos < 0) newpos = 0;
      fCanvas->SetVsbPosition(newpos);
      return kTRUE;
   }
   if (event->fCode == kButton5) {
      // scroll down
      newpos = fCanvas->GetVsbPosition() + page;
      fCanvas->SetVsbPosition(newpos);
      return kTRUE;
   }

   Int_t xx = pos.fX + event->fX; // translate coordinates
   Int_t yy = pos.fY + event->fY;

   if (event->fType == kButtonPress) {
      gVirtualX->SetInputFocus(fId);

      fXp = pos.fX + event->fX;
      fYp = pos.fY + event->fY;

      TGFrameElement *el;
      TIter next(fList);
      Bool_t select_frame = kFALSE;

      if (event->fState & kKeyShiftMask) {
         Bool_t inSelection = kFALSE;
         TGLVEntry* last = fLastActive;

         while ((el = (TGFrameElement *) next())) {
            select_frame = kFALSE;

            if (!fMapSubwindows) {
               if ((Int_t(el->fFrame->GetY()) + (Int_t)el->fFrame->GetHeight() > yy ) &&
                  (Int_t(el->fFrame->GetX()) + (Int_t)el->fFrame->GetWidth() > xx ) &&
                  (Int_t(el->fFrame->GetY()) < yy) &&
                  (Int_t(el->fFrame->GetX()) < xx))  {
                  select_frame = kTRUE;
               }
            } else {
               if (el->fFrame->GetId() == (Window_t)event->fUser[0]) {
                  select_frame = kTRUE;
               }
            }

            if (select_frame || last==el->fFrame)
               inSelection = !inSelection;
            if (inSelection || select_frame) {
               if ( !el->fFrame->IsActive() ) {
                  selected++;
                  ActivateItem(el);
               }
               Clicked(el->fFrame, event->fCode);
               Clicked(el->fFrame, event->fCode, event->fXRoot, event->fYRoot);
            }
            total++;
         }
      } else if (event->fState & kKeyControlMask) {
         // DO NOTHING!
      } else {
         UnSelectAll();
         total = selected = 0;
      }

      select_frame = kFALSE;
      while ((el = (TGFrameElement *) next())) {
         select_frame = kFALSE;

         if (!fMapSubwindows) {
            if ((Int_t(el->fFrame->GetY()) + (Int_t)el->fFrame->GetHeight() > yy ) &&
               (Int_t(el->fFrame->GetX()) + (Int_t)el->fFrame->GetWidth() > xx ) &&
               (Int_t(el->fFrame->GetY()) < yy) &&
               (Int_t(el->fFrame->GetX()) < xx))  {
               select_frame = kTRUE;
            }
         } else {
            if (el->fFrame->GetId() == (Window_t)event->fUser[0]) {
               select_frame = kTRUE;
            }
         }

         if (select_frame) {
            if ( el->fFrame->IsActive() ) {
               selected--;
               DeActivateItem(el);
            } else {
               selected++;
               ActivateItem(el);
            }
            Clicked(el->fFrame, event->fCode);
            Clicked(el->fFrame, event->fCode, event->fXRoot, event->fYRoot);
         }
         total++;
      }

      if (fTotal != total || fSelected != selected) {
         fTotal = total;
         fSelected = selected;
         SendMessage(fMsgWindow, MK_MSG(kC_CONTAINER, kCT_SELCHANGED),
                     fTotal, fSelected);
      }

      if ( selected == 0 ) {
         fDragging = kTRUE;
         fX0 = fXf = fXp;
         fY0 = fYf = fYp;
         //if (fMapSubwindows)
            gVirtualX->DrawRectangle(fId, GetLineGC()(), fX0, fY0, fXf-fX0,
                                     fYf-fY0);
      }
   }

   if (event->fType == kButtonRelease) {
      gVirtualX->SetInputFocus(fId);

      if (fDragging) {
         fDragging = kFALSE;
         fScrolling = kFALSE;

         if (gSystem) gSystem->RemoveTimer(fScrollTimer);
         //if (fMapSubwindows)
            gVirtualX->DrawRectangle(fId, GetLineGC()(), fX0, fY0, fXf-fX0,
                                     fYf-fY0);
      } else {
         SendMessage(fMsgWindow, MK_MSG(kC_CONTAINER, kCT_ITEMCLICK),
                     event->fCode, (event->fYRoot << 16) | event->fXRoot);
      }
   }
   fClient->NeedRedraw(this);
   return kTRUE;
}

//______________________________________________________________________________
TList *TGLVContainer::GetSelectedItems()
{
   // Get list of selected items in container.

   TGFrameElement *el;
   TIter next(fList);
   TList *ret = new TList();

   while ((el = (TGFrameElement *) next())) {
      if (el->fFrame->IsActive()) {
         ret->Add(new TObjString(((TGLVEntry*)el->fFrame)->GetItemName()->GetString()));
      }
   }
   return ret;
}

//______________________________________________________________________________
void TGLVContainer::LineLeft(Bool_t select)
{
   // Move current position one column left.

   // in details mode just move one line up
   if (fViewMode == kLVDetails) return LineUp(select);

   TGPosition pos = GetPagePosition();
   TGDimension dim = GetPageDimension();

   TGFrameElement *fe = (TGFrameElement*)fList->First();
   if (!fe) return; // empty list

   TGFrameElement *old = fLastActiveEl;

   if (fViewMode == kLVSmallIcons && fe == old) return;

   if (old) DeActivateItem(old);   //
   else fLastActiveEl = fe;

   TGDimension ms = fListView->GetMaxItemSize();
   Int_t dx = ms.fWidth;
   Int_t dy = ms.fHeight;

   Int_t y = fLastActiveEl->fFrame->GetY();
   Int_t x = fLastActiveEl->fFrame->GetX() - dx + 2;

   Int_t hw = pos.fX + dim.fWidth;

   TGHScrollBar *hb = GetHScrollbar();
   if (hb && hb->IsMapped()) {
      Int_t pg = (hb->GetPageSize()*GetWidth())/fViewPort->GetWidth();
      hw += pg;
   }
   if (x <= 0) { // move one line up
      x = hw;
      y = y - dy;
   }

   fe = FindFrame(x, y);
   if (fe && fe->fFrame->GetY() > fLastActiveEl->fFrame->GetY()) {
      // cannot go down with the left key
      x = hw;
      y = y - dy;
      fe = FindFrame(x, y);
   }
   if (fViewMode == kLVList) {
      if (fe && fe->fFrame->GetY() <= fLastActiveEl->fFrame->GetY() - (2 * dy)) {
         // avoid jumping more than one line up
         x = fe->fFrame->GetX() - dx;
         fe = FindFrame(x, y);
      }
      // cannot go down and/or right with the left key
      if (fe && fe->fFrame->GetY() >= fLastActiveEl->fFrame->GetY() &&
          fe->fFrame->GetX() >= fLastActiveEl->fFrame->GetX())
         fe = fLastActiveEl;
   }
   if (!fe || fe->fFrame->GetY() > fLastActiveEl->fFrame->GetY())
      fe = (TGFrameElement*)fList->First();
   if (!select) fSelected=1;

   ActivateItem(fe);
   AdjustPosition();
}

//______________________________________________________________________________
void TGLVContainer::LineRight(Bool_t select)
{
   // Move current position one column right.

   // in details mode just move one line down
   if (fViewMode == kLVDetails) return LineDown(select);

   TGPosition pos = GetPagePosition();
   TGDimension dim = GetPageDimension();

   TGFrameElement *fe = (TGFrameElement*)fList->Last();
   if (!fe) return;

   TGFrameElement *old = fLastActiveEl;

   if (fViewMode == kLVSmallIcons && fe == old) return;

   if (old) DeActivateItem(old);
   else fLastActiveEl = (TGFrameElement*)fList->First();

   TGDimension ms = fListView->GetMaxItemSize();
   Int_t dx = ms.fWidth;
   Int_t dy = ms.fHeight;

   Int_t y = fLastActiveEl->fFrame->GetY();
   Int_t x = fLastActiveEl->fFrame->GetX() + dx - 2;

   Int_t hw = pos.fX + dim.fWidth - dx;

   TGHScrollBar *hb =  GetHScrollbar();
   if (x > hw && (hb && !hb->IsMapped())) { // move one line down
      x = 0;
      y = y + dy;
   }

   fe = FindFrame(x, y);
   if (fe && fe->fFrame->GetY() < fLastActiveEl->fFrame->GetY()) {
      // cannot go up with the right key
      x = 0;
      y = y + dy;
      fe = FindFrame(x, y);
   }
   if (fViewMode == kLVList) {
      // cannot go up and/or left with the right key
      if (fe && fe->fFrame->GetY() <= fLastActiveEl->fFrame->GetY() &&
          fe->fFrame->GetX() <= fLastActiveEl->fFrame->GetX())
         fe = fLastActiveEl;
   }
   if (!fe || fe->fFrame->GetY() < fLastActiveEl->fFrame->GetY())
      fe = (TGFrameElement*)fList->Last();
   if (!select) fSelected = 1;

   ActivateItem(fe);
   AdjustPosition();
}

//______________________________________________________________________________
void TGLVContainer::LineUp(Bool_t select)
{
   // Make current position first line in window by scrolling up.

   TGFrameElement *fe = (TGFrameElement*)fList->First();
   if (!fe) return;

   TGFrameElement *old = fLastActiveEl;

   if (old) {
      DeActivateItem(old);
   } else {
      fLastActiveEl = (TGFrameElement*)fList->First();
   }

   TGDimension ms = fListView->GetMaxItemSize();
   Int_t dy = ms.fHeight;

   Int_t y = fLastActiveEl->fFrame->GetY() - dy;
   Int_t x = fLastActiveEl->fFrame->GetX();

   fe = FindFrame(x, y);
   if (!fe) fe = (TGFrameElement*)fList->First();
   if (fe->fFrame->GetY() > fLastActiveEl->fFrame->GetY()) fe = fLastActiveEl;
   if (!select) fSelected = 1;

   ActivateItem(fe);
   AdjustPosition();
}

//______________________________________________________________________________
void TGLVContainer::LineDown(Bool_t select)
{
   // Move one line down.

   TGFrameElement *fe = (TGFrameElement*)fList->Last();
   if (!fe) return;

   TGFrameElement *old = fLastActiveEl;

   if (old) DeActivateItem(old);
   else fLastActiveEl = (TGFrameElement*)fList->First();

   TGDimension ms = fListView->GetMaxItemSize();
   Int_t dy = ms.fHeight;

   Int_t y = fLastActiveEl->fFrame->GetY() + dy;
   Int_t x = fLastActiveEl->fFrame->GetX();

   fe = FindFrame(x, y);
   if (!fe) fe = (TGFrameElement*)fList->Last();
   if (fe->fFrame->GetY() < fLastActiveEl->fFrame->GetY()) fe = fLastActiveEl;
   if (!select) fSelected = 1;

   ActivateItem(fe);
   AdjustPosition();
}


//______________________________________________________________________________
TGDimension TGLVContainer::GetPageDimension() const
{
   // Returns page dimension.

   TGDimension ret;
   if (!fViewPort) return ret;

   ret.fWidth = fViewPort->GetWidth();
   ret.fHeight = fViewPort->GetHeight();
   return ret;
}

//______________________________________________________________________________
TGListView::TGListView(const TGWindow *p, UInt_t w, UInt_t h,
                       UInt_t options, ULong_t back) :
   TGCanvas(p, w, h, options, back)
{
   // Create a list view widget.

   fViewMode    = kLVLargeIcons;
   fNColumns    = 0;
   fColumns     = 0;
   fJmode       = 0;
   fColHeader   = 0;
   fColNames    = 0;
   fSplitHeader = 0;
   fJustChanged = kFALSE;
   fMinColumnSize = 25;
   fFontStruct = GetDefaultFontStruct();
   fNormGC     = GetDefaultGC()();
   if (fHScrollbar)
      fHScrollbar->Connect("PositionChanged(Int_t)", "TGListView",
                           this, "ScrollHeader(Int_t)");
   fHeader = new TGHeaderFrame(fVport, 20, 20, kChildFrame | kFixedWidth);

   SetDefaultHeaders();
}

//______________________________________________________________________________
TGListView::~TGListView()
{
   // Delete a list view widget.

   if (fNColumns) {
      delete [] fColumns;
      delete [] fJmode;
      for (int i = 0; i < fNColumns; i++) {
         delete fColHeader[i];
         delete fSplitHeader[i];
      }
      delete [] fColHeader;
      delete [] fColNames;
      delete [] fSplitHeader;
      delete fHeader;
   }
}

//______________________________________________________________________________
void TGListView::ScrollHeader(Int_t pos)
{
   // Scroll header buttons with horizontal scrollbar

   Int_t  i, xl = - pos;
   if (fViewMode == kLVDetails) {
      for (i = 0; i < fNColumns-1; ++i) {
         fColHeader[i]->Move(xl, 0);
         xl += fColHeader[i]->GetWidth();
         fSplitHeader[i]->Move(xl,fSplitHeader[i]->GetHeight());
      }
      fColHeader[i]->Move(xl, 0);
      xl += fColHeader[i]->GetWidth();
      fSplitHeader[i]->Move(xl,fSplitHeader[i]->GetHeight());
   }
}

//______________________________________________________________________________
void TGListView::SetHeaders(Int_t ncolumns)
{
   // Set number of headers, i.e. columns that will be shown in detailed view.
   // This method must be followed by exactly ncolumns SetHeader() calls,
   // making sure that every header (i.e. idx) is set (for and example see
   // SetDefaultHeaders()).

   if (ncolumns <= 0) {
      Error("SetHeaders", "number of columns must be > 0");
      return;
   }

   if (fNColumns) {
      delete [] fColumns;
      delete [] fJmode;
      for (int i = 0; i < fNColumns; i++) {
         if (fColHeader[i]) fColHeader[i]->DestroyWindow();
         delete fColHeader[i];
         delete fSplitHeader[i];
      }
      delete [] fColHeader;
      delete [] fSplitHeader;
      delete [] fColNames;
   }

   fNColumns  = ncolumns+1;    // one extra for the blank filler header
   fColumns   = new int[fNColumns];
   fJmode     = new int[fNColumns];
   fColHeader = new TGTextButton* [fNColumns];
   fColNames  = new TString [fNColumns];
   fSplitHeader = new TGVFileSplitter* [fNColumns];

   for (int i = 0; i < fNColumns; i++) {
      fColHeader[i] = 0;
      fJmode[i] = kTextLeft;
      fSplitHeader[i] = new TGVFileSplitter(fHeader, 10);
      fSplitHeader[i]->Connect("LayoutListView()", "TGListView",
                               this, "Layout()");
      fSplitHeader[i]->Connect("LayoutHeader(TGFrame *)", "TGListView",
                               this, "LayoutHeader(TGFrame *)");
      fSplitHeader[i]->Connect("DoubleClicked(TGVFileSplitter*)", "TGListView",
                               this, "SetDefaultColumnWidth(TGVFileSplitter*)");
   }

   // create blank filler header
   fColNames[fNColumns-1] = "";
   fColHeader[fNColumns-1] = new TGTextButton(fHeader, new TGHotString(""), -1,
                                    fNormGC, fFontStruct, kRaisedFrame |
                                    kDoubleBorder | kFixedWidth);
   fColHeader[fNColumns-1]->Associate(this);
   fColHeader[fNColumns-1]->SetTextJustify(kTextCenterX | kTextCenterY);
   fColHeader[fNColumns-1]->SetState(kButtonDisabled);
   fColHeader[fNColumns-1]->SetStyle(gClient->GetStyle());
   fJmode[fNColumns-1]   = kTextCenterX;
   fColumns[fNColumns-1] = 0;
   fSplitHeader[fNColumns-1]->SetFrame(fColHeader[fNColumns-1], kTRUE);
   fHeader->SetColumnsInfo(fNColumns, fColHeader, fSplitHeader);
   fJustChanged = kTRUE;
}

//______________________________________________________________________________
void TGListView::SetHeader(const char *s, Int_t hmode, Int_t cmode, Int_t idx)
{
   // Set header button idx [0-fNColumns>, hmode is the x text alignmode
   // (ETextJustification) for the header text and cmode is the x text
   // alignmode for the item text.

   if (idx < 0 || idx >= fNColumns-1) {
      Error("SetHeader", "header index must be [0 - %d>", fNColumns-1);
      return;
   }
   delete fColHeader[idx];

   fColNames[idx] = s;
   fColHeader[idx] = new TGTextButton(fHeader, new TGHotString(s), idx,
                                      fNormGC, fFontStruct, kRaisedFrame |
                                      kDoubleBorder | kFixedWidth);
   TString txt = s;
   txt.ToLower();
   if (txt.Contains("modified")) txt += " date";
   if (txt.Contains("attributes")) txt = "type";
   fColHeader[idx]->SetToolTipText(Form("Click to sort by %s", txt.Data()));
   fColHeader[idx]->Associate(this);
   fColHeader[idx]->SetTextJustify(hmode | kTextCenterY);
   fSplitHeader[idx]->SetFrame(fColHeader[idx], kTRUE);

   fColHeader[idx]->SetStyle(gClient->GetStyle());

   // fJmode and fColumns contain values for columns idx > 0. idx==0 is
   // the small icon with the object name
   if (idx > 0)
      fJmode[idx-1] = cmode;

   if (!fColHeader[0]) return;
   int xl = fColHeader[0]->GetDefaultWidth() + 10 + fSplitHeader[0]->GetDefaultWidth();
   for (int i = 1; i < fNColumns; i++) {
      fColumns[i-1] = xl;
      if (!fColHeader[i]) break;
      xl += fColHeader[i]->GetDefaultWidth() + fSplitHeader[i]->GetDefaultWidth();
   }
}

//______________________________________________________________________________
const char *TGListView::GetHeader(Int_t idx) const
{
   // Returns name of header idx. If illegal idx or header not set for idx
   // 0 is returned.

   if (idx >= 0 && idx < fNColumns-1 && fColHeader[idx])
      return (const char*) fColNames[idx];
   return 0;
}

//______________________________________________________________________________
void TGListView::SetDefaultHeaders()
{
   // Default headers are: Name, Attributes, Size, Owner, Group, Modified.
   // The default is good for file system items.

   SetHeaders(6);
   SetHeader("Name",       kTextLeft,    kTextLeft,    0);
   SetHeader("Attributes", kTextCenterX, kTextCenterX, 1);
   SetHeader("Size",       kTextRight,   kTextRight,   2);
   SetHeader("Owner",      kTextCenterX, kTextCenterX, 3);
   SetHeader("Group",      kTextCenterX, kTextCenterX, 4);
   SetHeader("Modified",   kTextCenterX, kTextCenterX, 5);
}

//______________________________________________________________________________
void TGListView::SetViewMode(EListViewMode viewMode)
{
   // Set list view mode.

   TGLVContainer *container;

   if (fViewMode != viewMode) {
      fJustChanged = kTRUE;
      fViewMode = viewMode;
      container = (TGLVContainer *) fVport->GetContainer();
      if (container) container->SetViewMode(viewMode);
      Layout();
   }
}

//______________________________________________________________________________
void TGListView::SetContainer(TGFrame *f)
{
   // Set list view container. Container must be at least of type
   // TGLVContainer.

   if (f->InheritsFrom(TGLVContainer::Class())) {
      TGCanvas::SetContainer(f);
      ((TGLVContainer *) f)->SetColumns(fColumns, fJmode);
      ((TGLVContainer *) f)->SetListView(this);
   } else
      Error("SetContainer", "frame must inherit from TGLVContainer");
}

//______________________________________________________________________________
void TGListView::SetIncrements(Int_t hInc, Int_t vInc)
{
   // Set horizontal and vertical scrollbar increments.

   fHScrollbar->SetSmallIncrement(hInc);
   fVScrollbar->SetSmallIncrement(vInc);
}

//______________________________________________________________________________
void TGListView::SetDefaultColumnWidth(TGVFileSplitter* splitter)
{
   // Set default column width of the columns headers.

   TGLVContainer *container = (TGLVContainer *) fVport->GetContainer();

   if (!container) {
      Error("SetDefaultColumnWidth", "no listview container set yet");
      return;
   }
   container->ClearViewPort();

   for (int i = 0; i < fNColumns; ++i) {
      if ( fSplitHeader[i] == splitter ) {
         TString dt = fColHeader[i]->GetString();
         UInt_t bsize = gVirtualX->TextWidth(fColHeader[i]->GetFontStruct(),
                                             dt.Data(), dt.Length());
         UInt_t w = TMath::Max(fColHeader[i]->GetDefaultWidth(), bsize + 20);
         if (i == 0) w = TMath::Max(fMaxSize.fWidth + 10, w);
         if (i > 0)  w = TMath::Max(container->GetMaxSubnameWidth(i) + 40, (Int_t)w);
         fColHeader[i]->Resize(w, fColHeader[i]->GetHeight());
         Layout();
      }
   }
}

//______________________________________________________________________________
void TGListView::ResizeColumns()
{
   // Resize column headers to show whole item names.

   for (int i = 0; i < fNColumns; ++i) {
      TGLVContainer *container = (TGLVContainer *) fVport->GetContainer();
      if (!container) {
         Error("ResizeColumns", "no listview container set yet");
         return;
      }
      fMaxSize = container->GetMaxItemSize();
      SetDefaultColumnWidth(fSplitHeader[i]);
   }
}

//______________________________________________________________________________
void TGListView::Layout()
{
   // Layout list view components (container and contents of container).

   Int_t  i, xl = 0;
   UInt_t w, h = 0;

   TGLVContainer *container = (TGLVContainer *) fVport->GetContainer();

   if (!container) {
      Error("Layout", "no listview container set yet");
      return;
   }

   fMaxSize = container->GetMaxItemSize();

   if (fViewMode == kLVDetails) {
      h = fColHeader[0]->GetDefaultHeight()-4;
      fHeader->MoveResize(0, 0, fWidth, h);
      fHeader->MapWindow();
      for (i = 0; i < fNColumns-1; ++i) {
         fColHeader[i]->SetText(fColNames[i]);

         if ( fJustChanged ) {
            w = TMath::Min(fMaxSize.fWidth + 10, fColHeader[i]->GetDefaultWidth());
            if (w < fMinColumnSize) w = fColHeader[i]->GetDefaultWidth();
            if (i == 0) w = TMath::Max(fMaxSize.fWidth + 10, w);
            if (i > 0)  w = TMath::Max(container->GetMaxSubnameWidth(i) + 40, (Int_t)w);
         } else {
            w = fColHeader[i]->GetWidth();
         }
         w = TMath::Max(fMinColumnSize, w);
         if ( fColHeader[i]->GetDefaultWidth() > w ) {
            for (int j = fColNames[i].Length() - 1 ; j > 0; j--) {
               fColHeader[i]->SetText( fColNames[i](0,j) + "..." );
               if ( fColHeader[i]->GetDefaultWidth() < w )
                  break;
            }
         }

         fColHeader[i]->MoveResize(xl, 0, w, h);
         fColHeader[i]->MapWindow();
         xl += w;
         fSplitHeader[i]->Move(xl, 0);
         fSplitHeader[i]->MapWindow();
         fColumns[i] = xl-2;  // -2 is fSep in the layout routine
      }
      fColHeader[i]->MoveResize(xl, 0, fVport->GetWidth()-xl, h);
      fColHeader[i]->MapWindow();
      fSplitHeader[i]->Move(fVport->GetWidth(), fSplitHeader[i]->GetHeight());
      fSplitHeader[i]->MapWindow();
      fVScrollbar->RaiseWindow();

      container->SetColumns(fColumns, fJmode);

   } else {
      for (i = 0; i < fNColumns; ++i) {
         fColHeader[i]->UnmapWindow();
         fSplitHeader[i]->UnmapWindow();
      }
      fHeader->UnmapWindow();
   }
   // coverity[returned_null]
   // coverity[dereference]
   TGLayoutManager *lm = container->GetLayoutManager();
   lm->SetDefaultWidth(xl);
   TGCanvas::Layout();

   if (fViewMode == kLVDetails) {
      container->Resize(container->GetWidth(), container->GetHeight()+h);
      fVScrollbar->SetRange((Int_t)container->GetHeight(),
                            (Int_t)fVport->GetHeight());
      if (fJustChanged) {
         fVport->MoveResize(fBorderWidth, fBorderWidth, fVport->GetWidth(),
                            fVport->GetHeight());
         container->Move(0, h);
      } else {
         container->DrawRegion(0, 0, fVport->GetWidth(), fVport->GetHeight());
      }
      fColHeader[i]->MoveResize(xl, 0, fVport->GetWidth()-xl, h);
      fColHeader[i]->MapWindow();
   } else {
      fVport->MoveResize(fBorderWidth, fBorderWidth, fVport->GetWidth(),
                         fVport->GetHeight());
      container->Move(0, 0);
   }

   fJustChanged = kFALSE;
}

//______________________________________________________________________________
void TGListView::LayoutHeader(TGFrame *head)
{
   // Layout list view components (container and contents of container).

   Int_t  i, xl = 0;
   UInt_t w, h = 0;
   static Int_t oldPos = 0;
   if (head == 0) oldPos = 0;

   TGLVContainer *container = (TGLVContainer *) fVport->GetContainer();

   if (!container) {
      Error("Layout", "no listview container set yet");
      return;
   }
   fMaxSize = container->GetMaxItemSize();
   Int_t posx = container->GetPagePosition().fX;

   if (fViewMode == kLVDetails) {
      h = fColHeader[0]->GetDefaultHeight()-4;
      fHeader->MoveResize(0, 0, fWidth, h);
      fHeader->MapWindow();
      for (i = 0; i < fNColumns-1; ++i) {
         fColHeader[i]->SetText(fColNames[i]);

         if ( fJustChanged ) {
            w = TMath::Min(fMaxSize.fWidth + 10, fColHeader[i]->GetDefaultWidth());
            if (w < fMinColumnSize) w = fColHeader[i]->GetDefaultWidth();
            if (i == 0) w = TMath::Max(fMaxSize.fWidth + 10, w);
            if (i > 0)  w = TMath::Max(container->GetMaxSubnameWidth(i) + 40, (Int_t)w);
         } else {
            w = fColHeader[i]->GetWidth();
         }
         w = TMath::Max(fMinColumnSize, w);
         if ( fColHeader[i]->GetDefaultWidth() > w ) {
            for (int j = fColNames[i].Length() - 1 ; j > 0; j--) {
               fColHeader[i]->SetText( fColNames[i](0,j) + "..." );
               if ( fColHeader[i]->GetDefaultWidth() < w )
                  break;
            }
         }

         if ((TGFrame *)fColHeader[i] == head) {
            if (oldPos > 0) {
               gVirtualX->DrawLine(container->GetId(), container->GetLineGC()(),
                                   oldPos - posx, 0, oldPos - posx, fVport->GetHeight());
            }
            gVirtualX->DrawLine(container->GetId(), container->GetLineGC()(),
                                xl + w - posx, 0, xl + w - posx, fVport->GetHeight());
            oldPos = xl + w;
         }

         fColHeader[i]->MoveResize(xl - posx, 0, w, h);
         fColHeader[i]->MapWindow();
         xl += w;
         fSplitHeader[i]->Move(xl, 0);
         fSplitHeader[i]->MapWindow();
         fColumns[i] = xl-2;  // -2 is fSep in the layout routine
      }
      fColHeader[i]->MoveResize(xl - posx, 0, fVport->GetWidth()-xl, h);
      fColHeader[i]->MapWindow();
      fSplitHeader[i]->Move(fVport->GetWidth(),  fSplitHeader[i]->GetHeight());
      fSplitHeader[i]->MapWindow();
      fVScrollbar->RaiseWindow();
   }
   fJustChanged = kFALSE;
}

//______________________________________________________________________________
Bool_t TGListView::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
{
   // Handle messages generated by the list view components.

   TGLVContainer *cnt = (TGLVContainer*)GetContainer();

   const TGLVEntry *entry;
   void *p = 0;

   entry = (TGLVEntry *) cnt->GetNextSelected(&p);

   switch (GET_SUBMSG(msg)) {
      case kCT_ITEMCLICK:
         if ((cnt->NumSelected() == 1) && (entry != 0)) {
            Int_t x = (Int_t)(parm2 & 0xffff);
            Int_t y = (Int_t)((parm2 >> 16) & 0xffff);
            Clicked((TGLVEntry*)entry, (Int_t)parm1);
            Clicked((TGLVEntry*)entry, (Int_t)parm1, x, y);
         }
         break;
      case kCT_ITEMDBLCLICK:
         if ((cnt->NumSelected() == 1) && (entry!=0)) {
            Int_t x = (Int_t)(parm2 & 0xffff);
            Int_t y = (Int_t)((parm2 >> 16) & 0xffff);
            DoubleClicked((TGLVEntry*)entry, (Int_t)parm1);
            DoubleClicked((TGLVEntry*)entry, (Int_t)parm1, x, y);
         }
         break;
      case kCT_SELCHANGED:
         SelectionChanged();
         break;
      default:
         break;
   }
   return TGCanvas::ProcessMessage(msg, parm1, parm2);
}

//______________________________________________________________________________
void TGListView::Clicked(TGLVEntry *entry, Int_t btn)
{
   // Emit Clicked() signal.

   Long_t args[2];

   args[0] = (Long_t)entry;
   args[1] = btn;

   Emit("Clicked(TGLVEntry*,Int_t)", args);
}

//______________________________________________________________________________
void TGListView::Clicked(TGLVEntry *entry, Int_t btn, Int_t x, Int_t y)
{
   // Emit Clicked() signal.

   Long_t args[4];

   args[0] = (Long_t)entry;
   args[1] = btn;
   args[2] = x;
   args[3] = y;

   Emit("Clicked(TGLVEntry*,Int_t,Int_t,Int_t)", args);
}

//______________________________________________________________________________
void TGListView::DoubleClicked(TGLVEntry *entry, Int_t btn)
{
   // Emit DoubleClicked() signal.

   Long_t args[2];

   args[0] = (Long_t)entry;
   args[1] = btn;

   Emit("DoubleClicked(TGLVEntry*,Int_t)", args);
}

//______________________________________________________________________________
void TGListView::DoubleClicked(TGLVEntry *entry, Int_t btn, Int_t x, Int_t y)
{
   // Emit DoubleClicked() signal.

   Long_t args[4];

   args[0] = (Long_t)entry;
   args[1] = btn;
   args[2] = x;
   args[3] = y;

   Emit("DoubleClicked(TGLVEntry*,Int_t,Int_t,Int_t)", args);
}

//______________________________________________________________________________
FontStruct_t TGListView::GetDefaultFontStruct()
{
   // Return the default font structure in use.

   if (!fgDefaultFont)
      fgDefaultFont = gClient->GetResourcePool()->GetIconFont();
   return fgDefaultFont->GetFontStruct();
}

//______________________________________________________________________________
const TGGC &TGListView::GetDefaultGC()
{
   // Return the default graphics context in use.

   if (!fgDefaultGC) {
      fgDefaultGC = new TGGC(*gClient->GetResourcePool()->GetFrameGC());
      fgDefaultGC->SetFont(fgDefaultFont->GetFontHandle());
   }
   return *fgDefaultGC;
}

//______________________________________________________________________________
void TGListView::SavePrimitive(std::ostream &out, Option_t *option /*= ""*/)
{
   // Save a list view widget as a C++ statement(s) on output stream out.

   if (fBackground != GetDefaultFrameBackground()) SaveUserColor(out, option);

   out << std::endl << "   // list view" << std::endl;
   out <<"   TGListView *";
   out << GetName() << " = new TGListView(" << fParent->GetName()
       << "," << GetWidth() << "," << GetHeight();

   if (fBackground == GetDefaultFrameBackground()) {
      if (GetOptions() == (kSunkenFrame | kDoubleBorder)) {
         out <<");" << std::endl;
      } else {
         out << "," << GetOptionString() <<");" << std::endl;
      }
   } else {
      out << "," << GetOptionString() << ",ucolor);" << std::endl;
   }
   if (option && strstr(option, "keep_names"))
      out << "   " << GetName() << "->SetName(\"" << GetName() << "\");" << std::endl;

   GetContainer()->SavePrimitive(out, option);

   out << std::endl;
   out << "   " << GetName() << "->SetContainer(" << GetContainer()->GetName()
                << ");" << std::endl;
   out << "   " << GetName() << "->SetViewMode(";
   switch (fViewMode) {
      case kLVLargeIcons:
         out << "kLVLargeIcons";
         break;
      case kLVSmallIcons:
         out << "kLVSmallIcons";
         break;
      case kLVList:
         out << "kLVList";
         break;
      case kLVDetails:
         out << "kLVDetails";
         break;
   }
   out << ");" << std::endl;

   out << "   " << GetContainer()->GetName() << "->Resize();" << std::endl;

   if (fHScrollbar && fHScrollbar->IsMapped()) {
   out << "   " << GetName() << "->SetHsbPosition(" << GetHsbPosition()
       << ");" << std::endl;
   }

   if (fVScrollbar && fVScrollbar->IsMapped()) {
   out << "   " << GetName() << "->SetVsbPosition(" << GetVsbPosition()
       << ");" << std::endl;
   }
}

//______________________________________________________________________________
void TGLVContainer::SavePrimitive(std::ostream &out, Option_t *option /*= ""*/)
{
   // Save a list view container as a C++ statement(s) on output stream out.

   if (fBackground != GetDefaultFrameBackground()) SaveUserColor(out, option);

   out << std::endl << "   // list view container" << std::endl;
   out << "   TGLVContainer *";

   if ((fParent->GetParent())->InheritsFrom(TGCanvas::Class())) {
      out << GetName() << " = new TGLVContainer(" << GetCanvas()->GetName();
   } else {
      out << GetName() << " = new TGLVContainer(" << fParent->GetName();
      out << "," << GetWidth() << "," << GetHeight();
   }
   if (fBackground == GetDefaultFrameBackground()) {
      if (GetOptions() == (kSunkenFrame | kDoubleBorder)) {
         out <<");" << std::endl;
      } else {
         out << "," << GetOptionString() <<");" << std::endl;
      }
   } else {
      out << "," << GetOptionString() << ",ucolor);" << std::endl;
   }
   if (option && strstr(option, "keep_names"))
      out << "   " << GetName() << "->SetName(\"" << GetName() << "\");" << std::endl;
}
 TGListView.cxx:1
 TGListView.cxx:2
 TGListView.cxx:3
 TGListView.cxx:4
 TGListView.cxx:5
 TGListView.cxx:6
 TGListView.cxx:7
 TGListView.cxx:8
 TGListView.cxx:9
 TGListView.cxx:10
 TGListView.cxx:11
 TGListView.cxx:12
 TGListView.cxx:13
 TGListView.cxx:14
 TGListView.cxx:15
 TGListView.cxx:16
 TGListView.cxx:17
 TGListView.cxx:18
 TGListView.cxx:19
 TGListView.cxx:20
 TGListView.cxx:21
 TGListView.cxx:22
 TGListView.cxx:23
 TGListView.cxx:24
 TGListView.cxx:25
 TGListView.cxx:26
 TGListView.cxx:27
 TGListView.cxx:28
 TGListView.cxx:29
 TGListView.cxx:30
 TGListView.cxx:31
 TGListView.cxx:32
 TGListView.cxx:33
 TGListView.cxx:34
 TGListView.cxx:35
 TGListView.cxx:36
 TGListView.cxx:37
 TGListView.cxx:38
 TGListView.cxx:39
 TGListView.cxx:40
 TGListView.cxx:41
 TGListView.cxx:42
 TGListView.cxx:43
 TGListView.cxx:44
 TGListView.cxx:45
 TGListView.cxx:46
 TGListView.cxx:47
 TGListView.cxx:48
 TGListView.cxx:49
 TGListView.cxx:50
 TGListView.cxx:51
 TGListView.cxx:52
 TGListView.cxx:53
 TGListView.cxx:54
 TGListView.cxx:55
 TGListView.cxx:56
 TGListView.cxx:57
 TGListView.cxx:58
 TGListView.cxx:59
 TGListView.cxx:60
 TGListView.cxx:61
 TGListView.cxx:62
 TGListView.cxx:63
 TGListView.cxx:64
 TGListView.cxx:65
 TGListView.cxx:66
 TGListView.cxx:67
 TGListView.cxx:68
 TGListView.cxx:69
 TGListView.cxx:70
 TGListView.cxx:71
 TGListView.cxx:72
 TGListView.cxx:73
 TGListView.cxx:74
 TGListView.cxx:75
 TGListView.cxx:76
 TGListView.cxx:77
 TGListView.cxx:78
 TGListView.cxx:79
 TGListView.cxx:80
 TGListView.cxx:81
 TGListView.cxx:82
 TGListView.cxx:83
 TGListView.cxx:84
 TGListView.cxx:85
 TGListView.cxx:86
 TGListView.cxx:87
 TGListView.cxx:88
 TGListView.cxx:89
 TGListView.cxx:90
 TGListView.cxx:91
 TGListView.cxx:92
 TGListView.cxx:93
 TGListView.cxx:94
 TGListView.cxx:95
 TGListView.cxx:96
 TGListView.cxx:97
 TGListView.cxx:98
 TGListView.cxx:99
 TGListView.cxx:100
 TGListView.cxx:101
 TGListView.cxx:102
 TGListView.cxx:103
 TGListView.cxx:104
 TGListView.cxx:105
 TGListView.cxx:106
 TGListView.cxx:107
 TGListView.cxx:108
 TGListView.cxx:109
 TGListView.cxx:110
 TGListView.cxx:111
 TGListView.cxx:112
 TGListView.cxx:113
 TGListView.cxx:114
 TGListView.cxx:115
 TGListView.cxx:116
 TGListView.cxx:117
 TGListView.cxx:118
 TGListView.cxx:119
 TGListView.cxx:120
 TGListView.cxx:121
 TGListView.cxx:122
 TGListView.cxx:123
 TGListView.cxx:124
 TGListView.cxx:125
 TGListView.cxx:126
 TGListView.cxx:127
 TGListView.cxx:128
 TGListView.cxx:129
 TGListView.cxx:130
 TGListView.cxx:131
 TGListView.cxx:132
 TGListView.cxx:133
 TGListView.cxx:134
 TGListView.cxx:135
 TGListView.cxx:136
 TGListView.cxx:137
 TGListView.cxx:138
 TGListView.cxx:139
 TGListView.cxx:140
 TGListView.cxx:141
 TGListView.cxx:142
 TGListView.cxx:143
 TGListView.cxx:144
 TGListView.cxx:145
 TGListView.cxx:146
 TGListView.cxx:147
 TGListView.cxx:148
 TGListView.cxx:149
 TGListView.cxx:150
 TGListView.cxx:151
 TGListView.cxx:152
 TGListView.cxx:153
 TGListView.cxx:154
 TGListView.cxx:155
 TGListView.cxx:156
 TGListView.cxx:157
 TGListView.cxx:158
 TGListView.cxx:159
 TGListView.cxx:160
 TGListView.cxx:161
 TGListView.cxx:162
 TGListView.cxx:163
 TGListView.cxx:164
 TGListView.cxx:165
 TGListView.cxx:166
 TGListView.cxx:167
 TGListView.cxx:168
 TGListView.cxx:169
 TGListView.cxx:170
 TGListView.cxx:171
 TGListView.cxx:172
 TGListView.cxx:173
 TGListView.cxx:174
 TGListView.cxx:175
 TGListView.cxx:176
 TGListView.cxx:177
 TGListView.cxx:178
 TGListView.cxx:179
 TGListView.cxx:180
 TGListView.cxx:181
 TGListView.cxx:182
 TGListView.cxx:183
 TGListView.cxx:184
 TGListView.cxx:185
 TGListView.cxx:186
 TGListView.cxx:187
 TGListView.cxx:188
 TGListView.cxx:189
 TGListView.cxx:190
 TGListView.cxx:191
 TGListView.cxx:192
 TGListView.cxx:193
 TGListView.cxx:194
 TGListView.cxx:195
 TGListView.cxx:196
 TGListView.cxx:197
 TGListView.cxx:198
 TGListView.cxx:199
 TGListView.cxx:200
 TGListView.cxx:201
 TGListView.cxx:202
 TGListView.cxx:203
 TGListView.cxx:204
 TGListView.cxx:205
 TGListView.cxx:206
 TGListView.cxx:207
 TGListView.cxx:208
 TGListView.cxx:209
 TGListView.cxx:210
 TGListView.cxx:211
 TGListView.cxx:212
 TGListView.cxx:213
 TGListView.cxx:214
 TGListView.cxx:215
 TGListView.cxx:216
 TGListView.cxx:217
 TGListView.cxx:218
 TGListView.cxx:219
 TGListView.cxx:220
 TGListView.cxx:221
 TGListView.cxx:222
 TGListView.cxx:223
 TGListView.cxx:224
 TGListView.cxx:225
 TGListView.cxx:226
 TGListView.cxx:227
 TGListView.cxx:228
 TGListView.cxx:229
 TGListView.cxx:230
 TGListView.cxx:231
 TGListView.cxx:232
 TGListView.cxx:233
 TGListView.cxx:234
 TGListView.cxx:235
 TGListView.cxx:236
 TGListView.cxx:237
 TGListView.cxx:238
 TGListView.cxx:239
 TGListView.cxx:240
 TGListView.cxx:241
 TGListView.cxx:242
 TGListView.cxx:243
 TGListView.cxx:244
 TGListView.cxx:245
 TGListView.cxx:246
 TGListView.cxx:247
 TGListView.cxx:248
 TGListView.cxx:249
 TGListView.cxx:250
 TGListView.cxx:251
 TGListView.cxx:252
 TGListView.cxx:253
 TGListView.cxx:254
 TGListView.cxx:255
 TGListView.cxx:256
 TGListView.cxx:257
 TGListView.cxx:258
 TGListView.cxx:259
 TGListView.cxx:260
 TGListView.cxx:261
 TGListView.cxx:262
 TGListView.cxx:263
 TGListView.cxx:264
 TGListView.cxx:265
 TGListView.cxx:266
 TGListView.cxx:267
 TGListView.cxx:268
 TGListView.cxx:269
 TGListView.cxx:270
 TGListView.cxx:271
 TGListView.cxx:272
 TGListView.cxx:273
 TGListView.cxx:274
 TGListView.cxx:275
 TGListView.cxx:276
 TGListView.cxx:277
 TGListView.cxx:278
 TGListView.cxx:279
 TGListView.cxx:280
 TGListView.cxx:281
 TGListView.cxx:282
 TGListView.cxx:283
 TGListView.cxx:284
 TGListView.cxx:285
 TGListView.cxx:286
 TGListView.cxx:287
 TGListView.cxx:288
 TGListView.cxx:289
 TGListView.cxx:290
 TGListView.cxx:291
 TGListView.cxx:292
 TGListView.cxx:293
 TGListView.cxx:294
 TGListView.cxx:295
 TGListView.cxx:296
 TGListView.cxx:297
 TGListView.cxx:298
 TGListView.cxx:299
 TGListView.cxx:300
 TGListView.cxx:301
 TGListView.cxx:302
 TGListView.cxx:303
 TGListView.cxx:304
 TGListView.cxx:305
 TGListView.cxx:306
 TGListView.cxx:307
 TGListView.cxx:308
 TGListView.cxx:309
 TGListView.cxx:310
 TGListView.cxx:311
 TGListView.cxx:312
 TGListView.cxx:313
 TGListView.cxx:314
 TGListView.cxx:315
 TGListView.cxx:316
 TGListView.cxx:317
 TGListView.cxx:318
 TGListView.cxx:319
 TGListView.cxx:320
 TGListView.cxx:321
 TGListView.cxx:322
 TGListView.cxx:323
 TGListView.cxx:324
 TGListView.cxx:325
 TGListView.cxx:326
 TGListView.cxx:327
 TGListView.cxx:328
 TGListView.cxx:329
 TGListView.cxx:330
 TGListView.cxx:331
 TGListView.cxx:332
 TGListView.cxx:333
 TGListView.cxx:334
 TGListView.cxx:335
 TGListView.cxx:336
 TGListView.cxx:337
 TGListView.cxx:338
 TGListView.cxx:339
 TGListView.cxx:340
 TGListView.cxx:341
 TGListView.cxx:342
 TGListView.cxx:343
 TGListView.cxx:344
 TGListView.cxx:345
 TGListView.cxx:346
 TGListView.cxx:347
 TGListView.cxx:348
 TGListView.cxx:349
 TGListView.cxx:350
 TGListView.cxx:351
 TGListView.cxx:352
 TGListView.cxx:353
 TGListView.cxx:354
 TGListView.cxx:355
 TGListView.cxx:356
 TGListView.cxx:357
 TGListView.cxx:358
 TGListView.cxx:359
 TGListView.cxx:360
 TGListView.cxx:361
 TGListView.cxx:362
 TGListView.cxx:363
 TGListView.cxx:364
 TGListView.cxx:365
 TGListView.cxx:366
 TGListView.cxx:367
 TGListView.cxx:368
 TGListView.cxx:369
 TGListView.cxx:370
 TGListView.cxx:371
 TGListView.cxx:372
 TGListView.cxx:373
 TGListView.cxx:374
 TGListView.cxx:375
 TGListView.cxx:376
 TGListView.cxx:377
 TGListView.cxx:378
 TGListView.cxx:379
 TGListView.cxx:380
 TGListView.cxx:381
 TGListView.cxx:382
 TGListView.cxx:383
 TGListView.cxx:384
 TGListView.cxx:385
 TGListView.cxx:386
 TGListView.cxx:387
 TGListView.cxx:388
 TGListView.cxx:389
 TGListView.cxx:390
 TGListView.cxx:391
 TGListView.cxx:392
 TGListView.cxx:393
 TGListView.cxx:394
 TGListView.cxx:395
 TGListView.cxx:396
 TGListView.cxx:397
 TGListView.cxx:398
 TGListView.cxx:399
 TGListView.cxx:400
 TGListView.cxx:401
 TGListView.cxx:402
 TGListView.cxx:403
 TGListView.cxx:404
 TGListView.cxx:405
 TGListView.cxx:406
 TGListView.cxx:407
 TGListView.cxx:408
 TGListView.cxx:409
 TGListView.cxx:410
 TGListView.cxx:411
 TGListView.cxx:412
 TGListView.cxx:413
 TGListView.cxx:414
 TGListView.cxx:415
 TGListView.cxx:416
 TGListView.cxx:417
 TGListView.cxx:418
 TGListView.cxx:419
 TGListView.cxx:420
 TGListView.cxx:421
 TGListView.cxx:422
 TGListView.cxx:423
 TGListView.cxx:424
 TGListView.cxx:425
 TGListView.cxx:426
 TGListView.cxx:427
 TGListView.cxx:428
 TGListView.cxx:429
 TGListView.cxx:430
 TGListView.cxx:431
 TGListView.cxx:432
 TGListView.cxx:433
 TGListView.cxx:434
 TGListView.cxx:435
 TGListView.cxx:436
 TGListView.cxx:437
 TGListView.cxx:438
 TGListView.cxx:439
 TGListView.cxx:440
 TGListView.cxx:441
 TGListView.cxx:442
 TGListView.cxx:443
 TGListView.cxx:444
 TGListView.cxx:445
 TGListView.cxx:446
 TGListView.cxx:447
 TGListView.cxx:448
 TGListView.cxx:449
 TGListView.cxx:450
 TGListView.cxx:451
 TGListView.cxx:452
 TGListView.cxx:453
 TGListView.cxx:454
 TGListView.cxx:455
 TGListView.cxx:456
 TGListView.cxx:457
 TGListView.cxx:458
 TGListView.cxx:459
 TGListView.cxx:460
 TGListView.cxx:461
 TGListView.cxx:462
 TGListView.cxx:463
 TGListView.cxx:464
 TGListView.cxx:465
 TGListView.cxx:466
 TGListView.cxx:467
 TGListView.cxx:468
 TGListView.cxx:469
 TGListView.cxx:470
 TGListView.cxx:471
 TGListView.cxx:472
 TGListView.cxx:473
 TGListView.cxx:474
 TGListView.cxx:475
 TGListView.cxx:476
 TGListView.cxx:477
 TGListView.cxx:478
 TGListView.cxx:479
 TGListView.cxx:480
 TGListView.cxx:481
 TGListView.cxx:482
 TGListView.cxx:483
 TGListView.cxx:484
 TGListView.cxx:485
 TGListView.cxx:486
 TGListView.cxx:487
 TGListView.cxx:488
 TGListView.cxx:489
 TGListView.cxx:490
 TGListView.cxx:491
 TGListView.cxx:492
 TGListView.cxx:493
 TGListView.cxx:494
 TGListView.cxx:495
 TGListView.cxx:496
 TGListView.cxx:497
 TGListView.cxx:498
 TGListView.cxx:499
 TGListView.cxx:500
 TGListView.cxx:501
 TGListView.cxx:502
 TGListView.cxx:503
 TGListView.cxx:504
 TGListView.cxx:505
 TGListView.cxx:506
 TGListView.cxx:507
 TGListView.cxx:508
 TGListView.cxx:509
 TGListView.cxx:510
 TGListView.cxx:511
 TGListView.cxx:512
 TGListView.cxx:513
 TGListView.cxx:514
 TGListView.cxx:515
 TGListView.cxx:516
 TGListView.cxx:517
 TGListView.cxx:518
 TGListView.cxx:519
 TGListView.cxx:520
 TGListView.cxx:521
 TGListView.cxx:522
 TGListView.cxx:523
 TGListView.cxx:524
 TGListView.cxx:525
 TGListView.cxx:526
 TGListView.cxx:527
 TGListView.cxx:528
 TGListView.cxx:529
 TGListView.cxx:530
 TGListView.cxx:531
 TGListView.cxx:532
 TGListView.cxx:533
 TGListView.cxx:534
 TGListView.cxx:535
 TGListView.cxx:536
 TGListView.cxx:537
 TGListView.cxx:538
 TGListView.cxx:539
 TGListView.cxx:540
 TGListView.cxx:541
 TGListView.cxx:542
 TGListView.cxx:543
 TGListView.cxx:544
 TGListView.cxx:545
 TGListView.cxx:546
 TGListView.cxx:547
 TGListView.cxx:548
 TGListView.cxx:549
 TGListView.cxx:550
 TGListView.cxx:551
 TGListView.cxx:552
 TGListView.cxx:553
 TGListView.cxx:554
 TGListView.cxx:555
 TGListView.cxx:556
 TGListView.cxx:557
 TGListView.cxx:558
 TGListView.cxx:559
 TGListView.cxx:560
 TGListView.cxx:561
 TGListView.cxx:562
 TGListView.cxx:563
 TGListView.cxx:564
 TGListView.cxx:565
 TGListView.cxx:566
 TGListView.cxx:567
 TGListView.cxx:568
 TGListView.cxx:569
 TGListView.cxx:570
 TGListView.cxx:571
 TGListView.cxx:572
 TGListView.cxx:573
 TGListView.cxx:574
 TGListView.cxx:575
 TGListView.cxx:576
 TGListView.cxx:577
 TGListView.cxx:578
 TGListView.cxx:579
 TGListView.cxx:580
 TGListView.cxx:581
 TGListView.cxx:582
 TGListView.cxx:583
 TGListView.cxx:584
 TGListView.cxx:585
 TGListView.cxx:586
 TGListView.cxx:587
 TGListView.cxx:588
 TGListView.cxx:589
 TGListView.cxx:590
 TGListView.cxx:591
 TGListView.cxx:592
 TGListView.cxx:593
 TGListView.cxx:594
 TGListView.cxx:595
 TGListView.cxx:596
 TGListView.cxx:597
 TGListView.cxx:598
 TGListView.cxx:599
 TGListView.cxx:600
 TGListView.cxx:601
 TGListView.cxx:602
 TGListView.cxx:603
 TGListView.cxx:604
 TGListView.cxx:605
 TGListView.cxx:606
 TGListView.cxx:607
 TGListView.cxx:608
 TGListView.cxx:609
 TGListView.cxx:610
 TGListView.cxx:611
 TGListView.cxx:612
 TGListView.cxx:613
 TGListView.cxx:614
 TGListView.cxx:615
 TGListView.cxx:616
 TGListView.cxx:617
 TGListView.cxx:618
 TGListView.cxx:619
 TGListView.cxx:620
 TGListView.cxx:621
 TGListView.cxx:622
 TGListView.cxx:623
 TGListView.cxx:624
 TGListView.cxx:625
 TGListView.cxx:626
 TGListView.cxx:627
 TGListView.cxx:628
 TGListView.cxx:629
 TGListView.cxx:630
 TGListView.cxx:631
 TGListView.cxx:632
 TGListView.cxx:633
 TGListView.cxx:634
 TGListView.cxx:635
 TGListView.cxx:636
 TGListView.cxx:637
 TGListView.cxx:638
 TGListView.cxx:639
 TGListView.cxx:640
 TGListView.cxx:641
 TGListView.cxx:642
 TGListView.cxx:643
 TGListView.cxx:644
 TGListView.cxx:645
 TGListView.cxx:646
 TGListView.cxx:647
 TGListView.cxx:648
 TGListView.cxx:649
 TGListView.cxx:650
 TGListView.cxx:651
 TGListView.cxx:652
 TGListView.cxx:653
 TGListView.cxx:654
 TGListView.cxx:655
 TGListView.cxx:656
 TGListView.cxx:657
 TGListView.cxx:658
 TGListView.cxx:659
 TGListView.cxx:660
 TGListView.cxx:661
 TGListView.cxx:662
 TGListView.cxx:663
 TGListView.cxx:664
 TGListView.cxx:665
 TGListView.cxx:666
 TGListView.cxx:667
 TGListView.cxx:668
 TGListView.cxx:669
 TGListView.cxx:670
 TGListView.cxx:671
 TGListView.cxx:672
 TGListView.cxx:673
 TGListView.cxx:674
 TGListView.cxx:675
 TGListView.cxx:676
 TGListView.cxx:677
 TGListView.cxx:678
 TGListView.cxx:679
 TGListView.cxx:680
 TGListView.cxx:681
 TGListView.cxx:682
 TGListView.cxx:683
 TGListView.cxx:684
 TGListView.cxx:685
 TGListView.cxx:686
 TGListView.cxx:687
 TGListView.cxx:688
 TGListView.cxx:689
 TGListView.cxx:690
 TGListView.cxx:691
 TGListView.cxx:692
 TGListView.cxx:693
 TGListView.cxx:694
 TGListView.cxx:695
 TGListView.cxx:696
 TGListView.cxx:697
 TGListView.cxx:698
 TGListView.cxx:699
 TGListView.cxx:700
 TGListView.cxx:701
 TGListView.cxx:702
 TGListView.cxx:703
 TGListView.cxx:704
 TGListView.cxx:705
 TGListView.cxx:706
 TGListView.cxx:707
 TGListView.cxx:708
 TGListView.cxx:709
 TGListView.cxx:710
 TGListView.cxx:711
 TGListView.cxx:712
 TGListView.cxx:713
 TGListView.cxx:714
 TGListView.cxx:715
 TGListView.cxx:716
 TGListView.cxx:717
 TGListView.cxx:718
 TGListView.cxx:719
 TGListView.cxx:720
 TGListView.cxx:721
 TGListView.cxx:722
 TGListView.cxx:723
 TGListView.cxx:724
 TGListView.cxx:725
 TGListView.cxx:726
 TGListView.cxx:727
 TGListView.cxx:728
 TGListView.cxx:729
 TGListView.cxx:730
 TGListView.cxx:731
 TGListView.cxx:732
 TGListView.cxx:733
 TGListView.cxx:734
 TGListView.cxx:735
 TGListView.cxx:736
 TGListView.cxx:737
 TGListView.cxx:738
 TGListView.cxx:739
 TGListView.cxx:740
 TGListView.cxx:741
 TGListView.cxx:742
 TGListView.cxx:743
 TGListView.cxx:744
 TGListView.cxx:745
 TGListView.cxx:746
 TGListView.cxx:747
 TGListView.cxx:748
 TGListView.cxx:749
 TGListView.cxx:750
 TGListView.cxx:751
 TGListView.cxx:752
 TGListView.cxx:753
 TGListView.cxx:754
 TGListView.cxx:755
 TGListView.cxx:756
 TGListView.cxx:757
 TGListView.cxx:758
 TGListView.cxx:759
 TGListView.cxx:760
 TGListView.cxx:761
 TGListView.cxx:762
 TGListView.cxx:763
 TGListView.cxx:764
 TGListView.cxx:765
 TGListView.cxx:766
 TGListView.cxx:767
 TGListView.cxx:768
 TGListView.cxx:769
 TGListView.cxx:770
 TGListView.cxx:771
 TGListView.cxx:772
 TGListView.cxx:773
 TGListView.cxx:774
 TGListView.cxx:775
 TGListView.cxx:776
 TGListView.cxx:777
 TGListView.cxx:778
 TGListView.cxx:779
 TGListView.cxx:780
 TGListView.cxx:781
 TGListView.cxx:782
 TGListView.cxx:783
 TGListView.cxx:784
 TGListView.cxx:785
 TGListView.cxx:786
 TGListView.cxx:787
 TGListView.cxx:788
 TGListView.cxx:789
 TGListView.cxx:790
 TGListView.cxx:791
 TGListView.cxx:792
 TGListView.cxx:793
 TGListView.cxx:794
 TGListView.cxx:795
 TGListView.cxx:796
 TGListView.cxx:797
 TGListView.cxx:798
 TGListView.cxx:799
 TGListView.cxx:800
 TGListView.cxx:801
 TGListView.cxx:802
 TGListView.cxx:803
 TGListView.cxx:804
 TGListView.cxx:805
 TGListView.cxx:806
 TGListView.cxx:807
 TGListView.cxx:808
 TGListView.cxx:809
 TGListView.cxx:810
 TGListView.cxx:811
 TGListView.cxx:812
 TGListView.cxx:813
 TGListView.cxx:814
 TGListView.cxx:815
 TGListView.cxx:816
 TGListView.cxx:817
 TGListView.cxx:818
 TGListView.cxx:819
 TGListView.cxx:820
 TGListView.cxx:821
 TGListView.cxx:822
 TGListView.cxx:823
 TGListView.cxx:824
 TGListView.cxx:825
 TGListView.cxx:826
 TGListView.cxx:827
 TGListView.cxx:828
 TGListView.cxx:829
 TGListView.cxx:830
 TGListView.cxx:831
 TGListView.cxx:832
 TGListView.cxx:833
 TGListView.cxx:834
 TGListView.cxx:835
 TGListView.cxx:836
 TGListView.cxx:837
 TGListView.cxx:838
 TGListView.cxx:839
 TGListView.cxx:840
 TGListView.cxx:841
 TGListView.cxx:842
 TGListView.cxx:843
 TGListView.cxx:844
 TGListView.cxx:845
 TGListView.cxx:846
 TGListView.cxx:847
 TGListView.cxx:848
 TGListView.cxx:849
 TGListView.cxx:850
 TGListView.cxx:851
 TGListView.cxx:852
 TGListView.cxx:853
 TGListView.cxx:854
 TGListView.cxx:855
 TGListView.cxx:856
 TGListView.cxx:857
 TGListView.cxx:858
 TGListView.cxx:859
 TGListView.cxx:860
 TGListView.cxx:861
 TGListView.cxx:862
 TGListView.cxx:863
 TGListView.cxx:864
 TGListView.cxx:865
 TGListView.cxx:866
 TGListView.cxx:867
 TGListView.cxx:868
 TGListView.cxx:869
 TGListView.cxx:870
 TGListView.cxx:871
 TGListView.cxx:872
 TGListView.cxx:873
 TGListView.cxx:874
 TGListView.cxx:875
 TGListView.cxx:876
 TGListView.cxx:877
 TGListView.cxx:878
 TGListView.cxx:879
 TGListView.cxx:880
 TGListView.cxx:881
 TGListView.cxx:882
 TGListView.cxx:883
 TGListView.cxx:884
 TGListView.cxx:885
 TGListView.cxx:886
 TGListView.cxx:887
 TGListView.cxx:888
 TGListView.cxx:889
 TGListView.cxx:890
 TGListView.cxx:891
 TGListView.cxx:892
 TGListView.cxx:893
 TGListView.cxx:894
 TGListView.cxx:895
 TGListView.cxx:896
 TGListView.cxx:897
 TGListView.cxx:898
 TGListView.cxx:899
 TGListView.cxx:900
 TGListView.cxx:901
 TGListView.cxx:902
 TGListView.cxx:903
 TGListView.cxx:904
 TGListView.cxx:905
 TGListView.cxx:906
 TGListView.cxx:907
 TGListView.cxx:908
 TGListView.cxx:909
 TGListView.cxx:910
 TGListView.cxx:911
 TGListView.cxx:912
 TGListView.cxx:913
 TGListView.cxx:914
 TGListView.cxx:915
 TGListView.cxx:916
 TGListView.cxx:917
 TGListView.cxx:918
 TGListView.cxx:919
 TGListView.cxx:920
 TGListView.cxx:921
 TGListView.cxx:922
 TGListView.cxx:923
 TGListView.cxx:924
 TGListView.cxx:925
 TGListView.cxx:926
 TGListView.cxx:927
 TGListView.cxx:928
 TGListView.cxx:929
 TGListView.cxx:930
 TGListView.cxx:931
 TGListView.cxx:932
 TGListView.cxx:933
 TGListView.cxx:934
 TGListView.cxx:935
 TGListView.cxx:936
 TGListView.cxx:937
 TGListView.cxx:938
 TGListView.cxx:939
 TGListView.cxx:940
 TGListView.cxx:941
 TGListView.cxx:942
 TGListView.cxx:943
 TGListView.cxx:944
 TGListView.cxx:945
 TGListView.cxx:946
 TGListView.cxx:947
 TGListView.cxx:948
 TGListView.cxx:949
 TGListView.cxx:950
 TGListView.cxx:951
 TGListView.cxx:952
 TGListView.cxx:953
 TGListView.cxx:954
 TGListView.cxx:955
 TGListView.cxx:956
 TGListView.cxx:957
 TGListView.cxx:958
 TGListView.cxx:959
 TGListView.cxx:960
 TGListView.cxx:961
 TGListView.cxx:962
 TGListView.cxx:963
 TGListView.cxx:964
 TGListView.cxx:965
 TGListView.cxx:966
 TGListView.cxx:967
 TGListView.cxx:968
 TGListView.cxx:969
 TGListView.cxx:970
 TGListView.cxx:971
 TGListView.cxx:972
 TGListView.cxx:973
 TGListView.cxx:974
 TGListView.cxx:975
 TGListView.cxx:976
 TGListView.cxx:977
 TGListView.cxx:978
 TGListView.cxx:979
 TGListView.cxx:980
 TGListView.cxx:981
 TGListView.cxx:982
 TGListView.cxx:983
 TGListView.cxx:984
 TGListView.cxx:985
 TGListView.cxx:986
 TGListView.cxx:987
 TGListView.cxx:988
 TGListView.cxx:989
 TGListView.cxx:990
 TGListView.cxx:991
 TGListView.cxx:992
 TGListView.cxx:993
 TGListView.cxx:994
 TGListView.cxx:995
 TGListView.cxx:996
 TGListView.cxx:997
 TGListView.cxx:998
 TGListView.cxx:999
 TGListView.cxx:1000
 TGListView.cxx:1001
 TGListView.cxx:1002
 TGListView.cxx:1003
 TGListView.cxx:1004
 TGListView.cxx:1005
 TGListView.cxx:1006
 TGListView.cxx:1007
 TGListView.cxx:1008
 TGListView.cxx:1009
 TGListView.cxx:1010
 TGListView.cxx:1011
 TGListView.cxx:1012
 TGListView.cxx:1013
 TGListView.cxx:1014
 TGListView.cxx:1015
 TGListView.cxx:1016
 TGListView.cxx:1017
 TGListView.cxx:1018
 TGListView.cxx:1019
 TGListView.cxx:1020
 TGListView.cxx:1021
 TGListView.cxx:1022
 TGListView.cxx:1023
 TGListView.cxx:1024
 TGListView.cxx:1025
 TGListView.cxx:1026
 TGListView.cxx:1027
 TGListView.cxx:1028
 TGListView.cxx:1029
 TGListView.cxx:1030
 TGListView.cxx:1031
 TGListView.cxx:1032
 TGListView.cxx:1033
 TGListView.cxx:1034
 TGListView.cxx:1035
 TGListView.cxx:1036
 TGListView.cxx:1037
 TGListView.cxx:1038
 TGListView.cxx:1039
 TGListView.cxx:1040
 TGListView.cxx:1041
 TGListView.cxx:1042
 TGListView.cxx:1043
 TGListView.cxx:1044
 TGListView.cxx:1045
 TGListView.cxx:1046
 TGListView.cxx:1047
 TGListView.cxx:1048
 TGListView.cxx:1049
 TGListView.cxx:1050
 TGListView.cxx:1051
 TGListView.cxx:1052
 TGListView.cxx:1053
 TGListView.cxx:1054
 TGListView.cxx:1055
 TGListView.cxx:1056
 TGListView.cxx:1057
 TGListView.cxx:1058
 TGListView.cxx:1059
 TGListView.cxx:1060
 TGListView.cxx:1061
 TGListView.cxx:1062
 TGListView.cxx:1063
 TGListView.cxx:1064
 TGListView.cxx:1065
 TGListView.cxx:1066
 TGListView.cxx:1067
 TGListView.cxx:1068
 TGListView.cxx:1069
 TGListView.cxx:1070
 TGListView.cxx:1071
 TGListView.cxx:1072
 TGListView.cxx:1073
 TGListView.cxx:1074
 TGListView.cxx:1075
 TGListView.cxx:1076
 TGListView.cxx:1077
 TGListView.cxx:1078
 TGListView.cxx:1079
 TGListView.cxx:1080
 TGListView.cxx:1081
 TGListView.cxx:1082
 TGListView.cxx:1083
 TGListView.cxx:1084
 TGListView.cxx:1085
 TGListView.cxx:1086
 TGListView.cxx:1087
 TGListView.cxx:1088
 TGListView.cxx:1089
 TGListView.cxx:1090
 TGListView.cxx:1091
 TGListView.cxx:1092
 TGListView.cxx:1093
 TGListView.cxx:1094
 TGListView.cxx:1095
 TGListView.cxx:1096
 TGListView.cxx:1097
 TGListView.cxx:1098
 TGListView.cxx:1099
 TGListView.cxx:1100
 TGListView.cxx:1101
 TGListView.cxx:1102
 TGListView.cxx:1103
 TGListView.cxx:1104
 TGListView.cxx:1105
 TGListView.cxx:1106
 TGListView.cxx:1107
 TGListView.cxx:1108
 TGListView.cxx:1109
 TGListView.cxx:1110
 TGListView.cxx:1111
 TGListView.cxx:1112
 TGListView.cxx:1113
 TGListView.cxx:1114
 TGListView.cxx:1115
 TGListView.cxx:1116
 TGListView.cxx:1117
 TGListView.cxx:1118
 TGListView.cxx:1119
 TGListView.cxx:1120
 TGListView.cxx:1121
 TGListView.cxx:1122
 TGListView.cxx:1123
 TGListView.cxx:1124
 TGListView.cxx:1125
 TGListView.cxx:1126
 TGListView.cxx:1127
 TGListView.cxx:1128
 TGListView.cxx:1129
 TGListView.cxx:1130
 TGListView.cxx:1131
 TGListView.cxx:1132
 TGListView.cxx:1133
 TGListView.cxx:1134
 TGListView.cxx:1135
 TGListView.cxx:1136
 TGListView.cxx:1137
 TGListView.cxx:1138
 TGListView.cxx:1139
 TGListView.cxx:1140
 TGListView.cxx:1141
 TGListView.cxx:1142
 TGListView.cxx:1143
 TGListView.cxx:1144
 TGListView.cxx:1145
 TGListView.cxx:1146
 TGListView.cxx:1147
 TGListView.cxx:1148
 TGListView.cxx:1149
 TGListView.cxx:1150
 TGListView.cxx:1151
 TGListView.cxx:1152
 TGListView.cxx:1153
 TGListView.cxx:1154
 TGListView.cxx:1155
 TGListView.cxx:1156
 TGListView.cxx:1157
 TGListView.cxx:1158
 TGListView.cxx:1159
 TGListView.cxx:1160
 TGListView.cxx:1161
 TGListView.cxx:1162
 TGListView.cxx:1163
 TGListView.cxx:1164
 TGListView.cxx:1165
 TGListView.cxx:1166
 TGListView.cxx:1167
 TGListView.cxx:1168
 TGListView.cxx:1169
 TGListView.cxx:1170
 TGListView.cxx:1171
 TGListView.cxx:1172
 TGListView.cxx:1173
 TGListView.cxx:1174
 TGListView.cxx:1175
 TGListView.cxx:1176
 TGListView.cxx:1177
 TGListView.cxx:1178
 TGListView.cxx:1179
 TGListView.cxx:1180
 TGListView.cxx:1181
 TGListView.cxx:1182
 TGListView.cxx:1183
 TGListView.cxx:1184
 TGListView.cxx:1185
 TGListView.cxx:1186
 TGListView.cxx:1187
 TGListView.cxx:1188
 TGListView.cxx:1189
 TGListView.cxx:1190
 TGListView.cxx:1191
 TGListView.cxx:1192
 TGListView.cxx:1193
 TGListView.cxx:1194
 TGListView.cxx:1195
 TGListView.cxx:1196
 TGListView.cxx:1197
 TGListView.cxx:1198
 TGListView.cxx:1199
 TGListView.cxx:1200
 TGListView.cxx:1201
 TGListView.cxx:1202
 TGListView.cxx:1203
 TGListView.cxx:1204
 TGListView.cxx:1205
 TGListView.cxx:1206
 TGListView.cxx:1207
 TGListView.cxx:1208
 TGListView.cxx:1209
 TGListView.cxx:1210
 TGListView.cxx:1211
 TGListView.cxx:1212
 TGListView.cxx:1213
 TGListView.cxx:1214
 TGListView.cxx:1215
 TGListView.cxx:1216
 TGListView.cxx:1217
 TGListView.cxx:1218
 TGListView.cxx:1219
 TGListView.cxx:1220
 TGListView.cxx:1221
 TGListView.cxx:1222
 TGListView.cxx:1223
 TGListView.cxx:1224
 TGListView.cxx:1225
 TGListView.cxx:1226
 TGListView.cxx:1227
 TGListView.cxx:1228
 TGListView.cxx:1229
 TGListView.cxx:1230
 TGListView.cxx:1231
 TGListView.cxx:1232
 TGListView.cxx:1233
 TGListView.cxx:1234
 TGListView.cxx:1235
 TGListView.cxx:1236
 TGListView.cxx:1237
 TGListView.cxx:1238
 TGListView.cxx:1239
 TGListView.cxx:1240
 TGListView.cxx:1241
 TGListView.cxx:1242
 TGListView.cxx:1243
 TGListView.cxx:1244
 TGListView.cxx:1245
 TGListView.cxx:1246
 TGListView.cxx:1247
 TGListView.cxx:1248
 TGListView.cxx:1249
 TGListView.cxx:1250
 TGListView.cxx:1251
 TGListView.cxx:1252
 TGListView.cxx:1253
 TGListView.cxx:1254
 TGListView.cxx:1255
 TGListView.cxx:1256
 TGListView.cxx:1257
 TGListView.cxx:1258
 TGListView.cxx:1259
 TGListView.cxx:1260
 TGListView.cxx:1261
 TGListView.cxx:1262
 TGListView.cxx:1263
 TGListView.cxx:1264
 TGListView.cxx:1265
 TGListView.cxx:1266
 TGListView.cxx:1267
 TGListView.cxx:1268
 TGListView.cxx:1269
 TGListView.cxx:1270
 TGListView.cxx:1271
 TGListView.cxx:1272
 TGListView.cxx:1273
 TGListView.cxx:1274
 TGListView.cxx:1275
 TGListView.cxx:1276
 TGListView.cxx:1277
 TGListView.cxx:1278
 TGListView.cxx:1279
 TGListView.cxx:1280
 TGListView.cxx:1281
 TGListView.cxx:1282
 TGListView.cxx:1283
 TGListView.cxx:1284
 TGListView.cxx:1285
 TGListView.cxx:1286
 TGListView.cxx:1287
 TGListView.cxx:1288
 TGListView.cxx:1289
 TGListView.cxx:1290
 TGListView.cxx:1291
 TGListView.cxx:1292
 TGListView.cxx:1293
 TGListView.cxx:1294
 TGListView.cxx:1295
 TGListView.cxx:1296
 TGListView.cxx:1297
 TGListView.cxx:1298
 TGListView.cxx:1299
 TGListView.cxx:1300
 TGListView.cxx:1301
 TGListView.cxx:1302
 TGListView.cxx:1303
 TGListView.cxx:1304
 TGListView.cxx:1305
 TGListView.cxx:1306
 TGListView.cxx:1307
 TGListView.cxx:1308
 TGListView.cxx:1309
 TGListView.cxx:1310
 TGListView.cxx:1311
 TGListView.cxx:1312
 TGListView.cxx:1313
 TGListView.cxx:1314
 TGListView.cxx:1315
 TGListView.cxx:1316
 TGListView.cxx:1317
 TGListView.cxx:1318
 TGListView.cxx:1319
 TGListView.cxx:1320
 TGListView.cxx:1321
 TGListView.cxx:1322
 TGListView.cxx:1323
 TGListView.cxx:1324
 TGListView.cxx:1325
 TGListView.cxx:1326
 TGListView.cxx:1327
 TGListView.cxx:1328
 TGListView.cxx:1329
 TGListView.cxx:1330
 TGListView.cxx:1331
 TGListView.cxx:1332
 TGListView.cxx:1333
 TGListView.cxx:1334
 TGListView.cxx:1335
 TGListView.cxx:1336
 TGListView.cxx:1337
 TGListView.cxx:1338
 TGListView.cxx:1339
 TGListView.cxx:1340
 TGListView.cxx:1341
 TGListView.cxx:1342
 TGListView.cxx:1343
 TGListView.cxx:1344
 TGListView.cxx:1345
 TGListView.cxx:1346
 TGListView.cxx:1347
 TGListView.cxx:1348
 TGListView.cxx:1349
 TGListView.cxx:1350
 TGListView.cxx:1351
 TGListView.cxx:1352
 TGListView.cxx:1353
 TGListView.cxx:1354
 TGListView.cxx:1355
 TGListView.cxx:1356
 TGListView.cxx:1357
 TGListView.cxx:1358
 TGListView.cxx:1359
 TGListView.cxx:1360
 TGListView.cxx:1361
 TGListView.cxx:1362
 TGListView.cxx:1363
 TGListView.cxx:1364
 TGListView.cxx:1365
 TGListView.cxx:1366
 TGListView.cxx:1367
 TGListView.cxx:1368
 TGListView.cxx:1369
 TGListView.cxx:1370
 TGListView.cxx:1371
 TGListView.cxx:1372
 TGListView.cxx:1373
 TGListView.cxx:1374
 TGListView.cxx:1375
 TGListView.cxx:1376
 TGListView.cxx:1377
 TGListView.cxx:1378
 TGListView.cxx:1379
 TGListView.cxx:1380
 TGListView.cxx:1381
 TGListView.cxx:1382
 TGListView.cxx:1383
 TGListView.cxx:1384
 TGListView.cxx:1385
 TGListView.cxx:1386
 TGListView.cxx:1387
 TGListView.cxx:1388
 TGListView.cxx:1389
 TGListView.cxx:1390
 TGListView.cxx:1391
 TGListView.cxx:1392
 TGListView.cxx:1393
 TGListView.cxx:1394
 TGListView.cxx:1395
 TGListView.cxx:1396
 TGListView.cxx:1397
 TGListView.cxx:1398
 TGListView.cxx:1399
 TGListView.cxx:1400
 TGListView.cxx:1401
 TGListView.cxx:1402
 TGListView.cxx:1403
 TGListView.cxx:1404
 TGListView.cxx:1405
 TGListView.cxx:1406
 TGListView.cxx:1407
 TGListView.cxx:1408
 TGListView.cxx:1409
 TGListView.cxx:1410
 TGListView.cxx:1411
 TGListView.cxx:1412
 TGListView.cxx:1413
 TGListView.cxx:1414
 TGListView.cxx:1415
 TGListView.cxx:1416
 TGListView.cxx:1417
 TGListView.cxx:1418
 TGListView.cxx:1419
 TGListView.cxx:1420
 TGListView.cxx:1421
 TGListView.cxx:1422
 TGListView.cxx:1423
 TGListView.cxx:1424
 TGListView.cxx:1425
 TGListView.cxx:1426
 TGListView.cxx:1427
 TGListView.cxx:1428
 TGListView.cxx:1429
 TGListView.cxx:1430
 TGListView.cxx:1431
 TGListView.cxx:1432
 TGListView.cxx:1433
 TGListView.cxx:1434
 TGListView.cxx:1435
 TGListView.cxx:1436
 TGListView.cxx:1437
 TGListView.cxx:1438
 TGListView.cxx:1439
 TGListView.cxx:1440
 TGListView.cxx:1441
 TGListView.cxx:1442
 TGListView.cxx:1443
 TGListView.cxx:1444
 TGListView.cxx:1445
 TGListView.cxx:1446
 TGListView.cxx:1447
 TGListView.cxx:1448
 TGListView.cxx:1449
 TGListView.cxx:1450
 TGListView.cxx:1451
 TGListView.cxx:1452
 TGListView.cxx:1453
 TGListView.cxx:1454
 TGListView.cxx:1455
 TGListView.cxx:1456
 TGListView.cxx:1457
 TGListView.cxx:1458
 TGListView.cxx:1459
 TGListView.cxx:1460
 TGListView.cxx:1461
 TGListView.cxx:1462
 TGListView.cxx:1463
 TGListView.cxx:1464
 TGListView.cxx:1465
 TGListView.cxx:1466
 TGListView.cxx:1467
 TGListView.cxx:1468
 TGListView.cxx:1469
 TGListView.cxx:1470
 TGListView.cxx:1471
 TGListView.cxx:1472
 TGListView.cxx:1473
 TGListView.cxx:1474
 TGListView.cxx:1475
 TGListView.cxx:1476
 TGListView.cxx:1477
 TGListView.cxx:1478
 TGListView.cxx:1479
 TGListView.cxx:1480
 TGListView.cxx:1481
 TGListView.cxx:1482
 TGListView.cxx:1483
 TGListView.cxx:1484
 TGListView.cxx:1485
 TGListView.cxx:1486
 TGListView.cxx:1487
 TGListView.cxx:1488
 TGListView.cxx:1489
 TGListView.cxx:1490
 TGListView.cxx:1491
 TGListView.cxx:1492
 TGListView.cxx:1493
 TGListView.cxx:1494
 TGListView.cxx:1495
 TGListView.cxx:1496
 TGListView.cxx:1497
 TGListView.cxx:1498
 TGListView.cxx:1499
 TGListView.cxx:1500
 TGListView.cxx:1501
 TGListView.cxx:1502
 TGListView.cxx:1503
 TGListView.cxx:1504
 TGListView.cxx:1505
 TGListView.cxx:1506
 TGListView.cxx:1507
 TGListView.cxx:1508
 TGListView.cxx:1509
 TGListView.cxx:1510
 TGListView.cxx:1511
 TGListView.cxx:1512
 TGListView.cxx:1513
 TGListView.cxx:1514
 TGListView.cxx:1515
 TGListView.cxx:1516
 TGListView.cxx:1517
 TGListView.cxx:1518
 TGListView.cxx:1519
 TGListView.cxx:1520
 TGListView.cxx:1521
 TGListView.cxx:1522
 TGListView.cxx:1523
 TGListView.cxx:1524
 TGListView.cxx:1525
 TGListView.cxx:1526
 TGListView.cxx:1527
 TGListView.cxx:1528
 TGListView.cxx:1529
 TGListView.cxx:1530
 TGListView.cxx:1531
 TGListView.cxx:1532
 TGListView.cxx:1533
 TGListView.cxx:1534
 TGListView.cxx:1535
 TGListView.cxx:1536
 TGListView.cxx:1537
 TGListView.cxx:1538
 TGListView.cxx:1539
 TGListView.cxx:1540
 TGListView.cxx:1541
 TGListView.cxx:1542
 TGListView.cxx:1543
 TGListView.cxx:1544
 TGListView.cxx:1545
 TGListView.cxx:1546
 TGListView.cxx:1547
 TGListView.cxx:1548
 TGListView.cxx:1549
 TGListView.cxx:1550
 TGListView.cxx:1551
 TGListView.cxx:1552
 TGListView.cxx:1553
 TGListView.cxx:1554
 TGListView.cxx:1555
 TGListView.cxx:1556
 TGListView.cxx:1557
 TGListView.cxx:1558
 TGListView.cxx:1559
 TGListView.cxx:1560
 TGListView.cxx:1561
 TGListView.cxx:1562
 TGListView.cxx:1563
 TGListView.cxx:1564
 TGListView.cxx:1565
 TGListView.cxx:1566
 TGListView.cxx:1567
 TGListView.cxx:1568
 TGListView.cxx:1569
 TGListView.cxx:1570
 TGListView.cxx:1571
 TGListView.cxx:1572
 TGListView.cxx:1573
 TGListView.cxx:1574
 TGListView.cxx:1575
 TGListView.cxx:1576
 TGListView.cxx:1577
 TGListView.cxx:1578
 TGListView.cxx:1579
 TGListView.cxx:1580
 TGListView.cxx:1581
 TGListView.cxx:1582
 TGListView.cxx:1583
 TGListView.cxx:1584
 TGListView.cxx:1585
 TGListView.cxx:1586
 TGListView.cxx:1587
 TGListView.cxx:1588
 TGListView.cxx:1589
 TGListView.cxx:1590
 TGListView.cxx:1591
 TGListView.cxx:1592
 TGListView.cxx:1593
 TGListView.cxx:1594
 TGListView.cxx:1595
 TGListView.cxx:1596
 TGListView.cxx:1597
 TGListView.cxx:1598
 TGListView.cxx:1599
 TGListView.cxx:1600
 TGListView.cxx:1601
 TGListView.cxx:1602
 TGListView.cxx:1603
 TGListView.cxx:1604
 TGListView.cxx:1605
 TGListView.cxx:1606
 TGListView.cxx:1607
 TGListView.cxx:1608
 TGListView.cxx:1609
 TGListView.cxx:1610
 TGListView.cxx:1611
 TGListView.cxx:1612
 TGListView.cxx:1613
 TGListView.cxx:1614
 TGListView.cxx:1615
 TGListView.cxx:1616
 TGListView.cxx:1617
 TGListView.cxx:1618
 TGListView.cxx:1619
 TGListView.cxx:1620
 TGListView.cxx:1621
 TGListView.cxx:1622
 TGListView.cxx:1623
 TGListView.cxx:1624
 TGListView.cxx:1625
 TGListView.cxx:1626
 TGListView.cxx:1627
 TGListView.cxx:1628
 TGListView.cxx:1629
 TGListView.cxx:1630
 TGListView.cxx:1631
 TGListView.cxx:1632
 TGListView.cxx:1633
 TGListView.cxx:1634
 TGListView.cxx:1635
 TGListView.cxx:1636
 TGListView.cxx:1637
 TGListView.cxx:1638
 TGListView.cxx:1639
 TGListView.cxx:1640
 TGListView.cxx:1641
 TGListView.cxx:1642
 TGListView.cxx:1643
 TGListView.cxx:1644
 TGListView.cxx:1645
 TGListView.cxx:1646
 TGListView.cxx:1647
 TGListView.cxx:1648
 TGListView.cxx:1649
 TGListView.cxx:1650
 TGListView.cxx:1651
 TGListView.cxx:1652
 TGListView.cxx:1653
 TGListView.cxx:1654
 TGListView.cxx:1655
 TGListView.cxx:1656
 TGListView.cxx:1657
 TGListView.cxx:1658
 TGListView.cxx:1659
 TGListView.cxx:1660
 TGListView.cxx:1661
 TGListView.cxx:1662
 TGListView.cxx:1663
 TGListView.cxx:1664
 TGListView.cxx:1665
 TGListView.cxx:1666
 TGListView.cxx:1667
 TGListView.cxx:1668
 TGListView.cxx:1669
 TGListView.cxx:1670
 TGListView.cxx:1671
 TGListView.cxx:1672
 TGListView.cxx:1673
 TGListView.cxx:1674
 TGListView.cxx:1675
 TGListView.cxx:1676
 TGListView.cxx:1677
 TGListView.cxx:1678
 TGListView.cxx:1679
 TGListView.cxx:1680
 TGListView.cxx:1681
 TGListView.cxx:1682
 TGListView.cxx:1683
 TGListView.cxx:1684
 TGListView.cxx:1685
 TGListView.cxx:1686
 TGListView.cxx:1687
 TGListView.cxx:1688
 TGListView.cxx:1689
 TGListView.cxx:1690
 TGListView.cxx:1691
 TGListView.cxx:1692
 TGListView.cxx:1693
 TGListView.cxx:1694
 TGListView.cxx:1695
 TGListView.cxx:1696
 TGListView.cxx:1697
 TGListView.cxx:1698
 TGListView.cxx:1699
 TGListView.cxx:1700
 TGListView.cxx:1701
 TGListView.cxx:1702
 TGListView.cxx:1703
 TGListView.cxx:1704
 TGListView.cxx:1705
 TGListView.cxx:1706
 TGListView.cxx:1707
 TGListView.cxx:1708
 TGListView.cxx:1709
 TGListView.cxx:1710
 TGListView.cxx:1711
 TGListView.cxx:1712
 TGListView.cxx:1713
 TGListView.cxx:1714
 TGListView.cxx:1715
 TGListView.cxx:1716
 TGListView.cxx:1717
 TGListView.cxx:1718
 TGListView.cxx:1719
 TGListView.cxx:1720
 TGListView.cxx:1721
 TGListView.cxx:1722
 TGListView.cxx:1723
 TGListView.cxx:1724
 TGListView.cxx:1725
 TGListView.cxx:1726
 TGListView.cxx:1727
 TGListView.cxx:1728
 TGListView.cxx:1729
 TGListView.cxx:1730
 TGListView.cxx:1731
 TGListView.cxx:1732
 TGListView.cxx:1733
 TGListView.cxx:1734
 TGListView.cxx:1735
 TGListView.cxx:1736
 TGListView.cxx:1737
 TGListView.cxx:1738
 TGListView.cxx:1739
 TGListView.cxx:1740
 TGListView.cxx:1741
 TGListView.cxx:1742
 TGListView.cxx:1743
 TGListView.cxx:1744
 TGListView.cxx:1745
 TGListView.cxx:1746
 TGListView.cxx:1747
 TGListView.cxx:1748
 TGListView.cxx:1749
 TGListView.cxx:1750
 TGListView.cxx:1751
 TGListView.cxx:1752
 TGListView.cxx:1753
 TGListView.cxx:1754
 TGListView.cxx:1755
 TGListView.cxx:1756
 TGListView.cxx:1757
 TGListView.cxx:1758
 TGListView.cxx:1759
 TGListView.cxx:1760
 TGListView.cxx:1761
 TGListView.cxx:1762
 TGListView.cxx:1763
 TGListView.cxx:1764
 TGListView.cxx:1765