ROOT logo
// @(#)root/treeviewer:$Id: TTVLVContainer.cxx 40187 2011-07-11 12:46:50Z bellenot $
//Author : Andrei Gheata   16/08/00

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "TTVLVContainer.h"
#include "TTreeViewer.h"
#include "TGPicture.h"
#include "TGLabel.h"
#include "TGButton.h"
#include "TGTextEntry.h"
#include "TGToolTip.h"
#include "TList.h"


ClassImp(TGItemContext)

//////////////////////////////////////////////////////////////////////////
// TGItemContext  -  empty object used as context menu support for      //
// TGLVTreeEntries                                                      //
//////////////////////////////////////////////////////////////////////////

//______________________________________________________________________________
TGItemContext::TGItemContext()
{
   // Constructor

   fItem = 0;
}
//______________________________________________________________________________
void TGItemContext::Draw(Option_t *)
{
   // Draw item

   fItem->GetContainer()->GetViewer()->ProcessMessage(MK_MSG(kC_CONTAINER, kCT_ITEMDBLCLICK), kButton1, 0);
}
//______________________________________________________________________________
void TGItemContext::EditExpression()
{
   // Edit expression

   fItem->GetContainer()->GetViewer()->EditExpression();
}
//______________________________________________________________________________
void TGItemContext::Empty()
{
   // Empty item

   fItem->Empty();
}
//______________________________________________________________________________
void TGItemContext::RemoveItem()
{
   // Remove item

   fItem->GetContainer()->GetViewer()->RemoveItem();
}
//______________________________________________________________________________
void TGItemContext::Scan()
{
   // Scan item

   fItem->GetContainer()->GetViewer()->SetScanMode();
   fItem->GetContainer()->GetViewer()->ProcessMessage(MK_MSG(kC_CONTAINER, kCT_ITEMDBLCLICK), kButton1, 0);
}
//______________________________________________________________________________
void TGItemContext::SetExpression(const char *name, const char *alias, Bool_t cut)
{
   // Set item expression

   fItem->SetExpression(name, alias, cut);
}

ClassImp(TTVLVEntry)


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGTreeLVEntry is a TGLVEntry that has a name of a variable to be     //
// draw by the TTreeViewer GUI, and an alias for it.                    //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

//______________________________________________________________________________
TTVLVEntry::TTVLVEntry(const TGWindow *p,
                             const TGPicture *bigpic, const TGPicture *smallpic,
                             TGString *name, TGString **subnames,
                             EListViewMode ViewMode)
              :TGLVEntry(p, bigpic, smallpic, name, subnames, ViewMode)
{
   // TGTreeLVEntry constructor.

   // both alias and true name are initialized to name
   fContainer = (TTVLVContainer *) p;

   fTip = 0;
   fIsCut = kFALSE;
   fTrueName = name->GetString();
   fContext = new TGItemContext();
   fContext->Associate(this);

   AddInput(kEnterWindowMask | kLeaveWindowMask);
}
//______________________________________________________________________________
TTVLVEntry::~TTVLVEntry()
{
   // TGTreeLVEntry destructor

   if (fTip) delete fTip;
   delete fContext;
}
//______________________________________________________________________________
const char *TTVLVEntry::ConvertAliases()
{
   // Convert all aliases into true names

   TList *list = GetContainer()->GetViewer()->ExpressionList();
   fConvName = fTrueName;
   TString start(fConvName);
   TIter next(list);
   TTVLVEntry* item;
   while (!FullConverted()) {
      next.Reset();
      start = fConvName;
      while ((item=(TTVLVEntry*)next())) {
         if (item != this)
            fConvName.ReplaceAll(item->GetAlias(), item->GetTrueName());
      }
      if (fConvName == start) {
         //the following line is deadcode reported by coverity because item=0
         //if (item) Warning(item->GetAlias(), "Cannot convert aliases for this expression.");
         return(fConvName.Data());
      }
   }
   return(fConvName.Data());
}
//______________________________________________________________________________
Bool_t TTVLVEntry::FullConverted()
{
   // Return true if converted name is alias free

   TList *list = GetContainer()->GetViewer()->ExpressionList();
   TIter next(list);
   TTVLVEntry* item;
   while ((item=(TTVLVEntry*)next())) {
      if (item != this) {
         if (fConvName.Contains(item->GetAlias())) return kFALSE;
      }
   }
   return kTRUE;
}
//______________________________________________________________________________
void TTVLVEntry::CopyItem(TTVLVEntry *dest)
{
   // Copy this item's name and alias to an other.

   if (!dest) return;
   dest->SetExpression(fTrueName.Data(), fAlias.Data(), fIsCut);
   TString alias = dest->GetAlias();
   if (!alias.BeginsWith("~") && !alias.Contains("empty")) dest->PrependTilde();
}
//______________________________________________________________________________
Bool_t TTVLVEntry::HandleCrossing(Event_t *event)
{
   // Handle mouse crossing event.

   if (fTip) {
      if (event->fType == kEnterNotify)
         fTip->Reset();
      else
         fTip->Hide();
   }
   return kTRUE;
}
//______________________________________________________________________________
Bool_t TTVLVEntry::HasAlias()
{
   // Check if alias name is not empty.

   if (fAlias.Length()) return kTRUE;
   return kFALSE;
}
//______________________________________________________________________________
void TTVLVEntry::PrependTilde()
{
   // Prepend a ~ to item alias

   fAlias = "~" + fAlias;
   SetItemName(fAlias.Data());
}
//______________________________________________________________________________
void TTVLVEntry::SetItemName(const char* name)
{
   // redraw this entry with new name

   if (fItemName) delete fItemName;
   fItemName = new TGString(name);
   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;
   gVirtualX->ClearWindow(fId);
   Resize(GetDefaultSize());
   fClient->NeedRedraw(this);
}
//______________________________________________________________________________
void TTVLVEntry::SetCutType(Bool_t type)
{
   // Set cut type

   if (fIsCut && type) return;
   if (!fIsCut && !type) return;
   if (type) {
      SetSmallPic(fClient->GetPicture("selection_t.xpm"));
      SetToolTipText("Selection expression. Drag to scissors to activate");
   } else
      SetSmallPic(fClient->GetPicture("expression_t.xpm"));
   fIsCut = type;
}
//______________________________________________________________________________
void TTVLVEntry::SetExpression(const char* name, const char* alias, Bool_t cutType)
{
   // Set the true name, alias and type of the expression, then refresh it

   SetItemName(alias);
   SetAlias(alias);
   SetTrueName(name);
   ULong_t *itemType = (ULong_t *) GetUserData();
   if (*itemType & TTreeViewer::kLTPackType) {
      if (strlen(name))
         SetSmallPic(fClient->GetPicture("pack_t.xpm"));
      else
         SetSmallPic(fClient->GetPicture("pack-empty_t.xpm"));
   }
   if ((*itemType & TTreeViewer::kLTDragType) && strlen(name) && !fIsCut)
      SetToolTipText("Double-click to draw. Drag and drop. Use Edit/Expression or context menu to edit.");
   if (*itemType & TTreeViewer::kLTDragType) SetCutType(cutType);
}
//______________________________________________________________________________
void TTVLVEntry::Empty()
{
   // clear all names and alias

   SetExpression("","-empty-");
   ULong_t *itemType = (ULong_t *) GetUserData();
   if (itemType && (*itemType & TTreeViewer::kLTDragType))
      SetToolTipText("User-defined expression/cut. Double-click to edit");
}
//______________________________________________________________________________
void TTVLVEntry::SetToolTipText(const char *text, Long_t delayms)
{
   // Set tool tip text associated with this item. The delay is in
   // milliseconds (minimum 250). To remove tool tip call method with text = 0

   if (fTip) {
      delete fTip;
      fTip = 0;
   }

   if (text && strlen(text))
      fTip = new TGToolTip(fClient->GetRoot(), this, text, delayms);
}
//______________________________________________________________________________
void TTVLVEntry::SetSmallPic(const TGPicture *spic)
{
   // Set small picture

   const TGPicture *cspic = fSmallPic;
   fSmallPic = spic;
   fCurrent = fSmallPic;
   if (fSelPic) delete fSelPic;
   fSelPic = 0;
   if (fActive) {
      fSelPic = new TGSelectedPicture(fClient, fCurrent);
   }
   DoRedraw();
   fClient->FreePicture(cspic);
}

ClassImp(TTVLVContainer)

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//   TTVLVContainer                                                     //
//                                                                      //
// This class represent the list view container for the.                //
// TreeView class. It is a TGLVContainer with item dragging             //
// capabilities for the TTVLVEntry objects inside.                      //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

//______________________________________________________________________________
TTVLVContainer::TTVLVContainer(const TGWindow *p, UInt_t w, UInt_t h, UInt_t options)
          :TGLVContainer(p, w, h,options | kSunkenFrame)
{
   // TGLVContainer constructor

   fListView = 0;
   fViewer = 0;
   fExpressionList = new TList;
   fCursor = gVirtualX->CreateCursor(kMove);
   fDefaultCursor = gVirtualX->CreateCursor(kPointer);
   fMapSubwindows = kTRUE;
}

//______________________________________________________________________________
TTVLVContainer::~TTVLVContainer()
{
   // TGLVContainer destructor

   delete fExpressionList;
}

//______________________________________________________________________________
const char* TTVLVContainer::Cut()
{
   // return the cut entry

   TGFrameElement *el = (TGFrameElement *) fList->At(3);
   if (el) {
      TTVLVEntry *f = (TTVLVEntry *) el->fFrame;
      if (f) return f->ConvertAliases();
      return 0;
   }
   return 0;
}

//______________________________________________________________________________
TTVLVEntry * TTVLVContainer::ExpressionItem(Int_t index)
{
   // return the expression item at specific position

   TGFrameElement *el = (TGFrameElement *) fList->At(index);
   if (el) {
      TTVLVEntry *item = (TTVLVEntry *) el->fFrame;
      return item;
   }
   return 0;
}

//______________________________________________________________________________
TList* TTVLVContainer::ExpressionList()
{
   // return the list of user-defined expressions

   fExpressionList->Clear();
   TIter next(fList);
   TGFrameElement *el;
   while ((el = (TGFrameElement*)next())) {
      TTVLVEntry *item = (TTVLVEntry *)el->fFrame;
      if (item) {
         ULong_t *itemType = (ULong_t *) item->GetUserData();
         if ((*itemType & TTreeViewer::kLTExpressionType) &&
            (*itemType & TTreeViewer::kLTDragType)) fExpressionList->Add(item);
      }
   }
   return fExpressionList;
}

//______________________________________________________________________________
const char* TTVLVContainer::Ex()
{
   // return the expression on X

   TGFrameElement *el = (TGFrameElement *) fList->At(0);
   if (el) {
      TTVLVEntry *f = (TTVLVEntry *) el->fFrame;
      if (f) return f->ConvertAliases();
      return 0;
   }
   return 0;
}

//______________________________________________________________________________
const char* TTVLVContainer::Ey()
{
   // return the expression on Y

   TGFrameElement *el = (TGFrameElement *) fList->At(1);
   if (el) {
      TTVLVEntry *f = (TTVLVEntry *) el->fFrame;
      if (f) return f->ConvertAliases();
      return 0;
   }
   return 0;
}

//______________________________________________________________________________
const char* TTVLVContainer::Ez()
{
   // return the expression on Z

   TGFrameElement *el = (TGFrameElement *) fList->At(2);
   if (el) {
      TTVLVEntry *f = (TTVLVEntry *) el->fFrame;
      if (f) return f->ConvertAliases();
      return 0;
   }
   return 0;
}

//______________________________________________________________________________
const char* TTVLVContainer::ScanList()
{
   // return the cut entry

   TGFrameElement *el = (TGFrameElement *) fList->At(4);
   if (el) {
      TTVLVEntry *f = (TTVLVEntry *) el->fFrame;
      if (f) return f->GetTrueName();
      return 0;
   }
   return 0;
}

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

   int total, selected;

   if (event->fType == kButtonPress) {
      fXp = event->fX;
      fYp = event->fY;
      if (fLastActive) {
         fLastActive->Activate(kFALSE);
         fLastActive = 0;
      }
      total = selected = 0;

      TGFrameElement *el;
      TIter next(fList);
      while ((el = (TGFrameElement *) next())) {
         TTVLVEntry *f = (TTVLVEntry *) el->fFrame;
         ++total;
         if (f->GetId() == (Window_t)event->fUser[0]) {  // fUser[0] = subwindow
            f->Activate(kTRUE);
            if (f->GetTip()) (f->GetTip())->Hide();
            fX0 = f->GetX();
            fY0 = f->GetY();
            ++selected;
            fLastActive = f;
         } else {
            f->Activate(kFALSE);
         }
      }

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

      if (selected == 1 && event->fCode == 1) {
         ULong_t *itemType = (ULong_t *) fLastActive->GetUserData();
         if (*itemType & TTreeViewer::kLTDragType) {
            fDragging = kTRUE;
            gVirtualX->SetCursor(fId,fCursor);
            fXp = event->fX;
            fYp = event->fY;
         }
      }
   }

   if (event->fType == kButtonRelease) {
      if (fDragging) {
         fDragging = kFALSE;
         gVirtualX->SetCursor(fId,fDefaultCursor);
         fLastActive->Move(fX0,fY0);
         TGFrameElement *el;
         TIter next(fList);
         while ((el = (TGFrameElement *) next())) {
            TTVLVEntry *f = (TTVLVEntry *) el->fFrame;
            if ((f == fLastActive) || !f->IsActive()) continue;
            ULong_t *itemType = (ULong_t *) f->GetUserData();
            fLastActive->Activate(kFALSE);
            if (!(*itemType & TTreeViewer::kLTPackType)) {
               // dragging items to expressions
               ((TTVLVEntry *) fLastActive)->CopyItem(f);
               if (*itemType & TTreeViewer::kLTDragType)
                  f->SetToolTipText("Double-click to draw. Drag and drop. Use Edit/Expression or context menu to edit.");
            } else {
               if (strlen(((TTVLVEntry *) fLastActive)->GetTrueName())) {
                  // dragging to scan box
                  if (!strlen(f->GetTrueName())) {
                     f->SetTrueName(((TTVLVEntry *)fLastActive)->GetTrueName());
                     f->SetSmallPic(fClient->GetPicture("pack_t.xpm"));
                  } else {
                     TString name(2000);
                     TString dragged = ((TTVLVEntry *)fLastActive)->ConvertAliases();
                     name  = f->GetTrueName();
                     if ((name.Length()+dragged.Length()) < 228) {
                        name += ":";
                        name += dragged;
                        f->SetTrueName(name.Data());
                     } else {
                        Warning("HandleButton",
                                "Name too long. Can not add any more items to scan box.");
                     }
                  }
               }
            }
            fLastActive = f;
            if (fViewer) {
               char msg[2000];
               msg[0] = 0;
               snprintf(msg,2000, "Content : %s", f->GetTrueName());
               fViewer->Message(msg);
            }
         }
         if ((TMath::Abs(event->fX - fXp) < 2) && (TMath::Abs(event->fY - fYp) < 2)) {
            SendMessage(fMsgWindow, MK_MSG(kC_CONTAINER, kCT_ITEMCLICK),
                        event->fCode, (event->fYRoot << 16) | event->fXRoot);
         }
      } else {
         SendMessage(fMsgWindow, MK_MSG(kC_CONTAINER, kCT_ITEMCLICK),
                     event->fCode, (event->fYRoot << 16) | event->fXRoot);
      }
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TTVLVContainer::HandleMotion(Event_t *event)
{
   // Handle mouse motion events.

   Int_t xf0, xff, yf0, yff;
   Int_t xpos = event->fX - (fXp-fX0);
   Int_t ypos = event->fY - (fYp-fY0);

   if (fDragging) {
      TGFrameElement *el;
      ULong_t *itemType;
      TIter next(fList);
      while ((el = (TGFrameElement *) next())) {
         TTVLVEntry *f = (TTVLVEntry *) el->fFrame;
         if (f == fLastActive) {
            if (f->GetTip()) (f->GetTip())->Hide();
            continue;
         }
         xf0 = f->GetX();
         yf0 = f->GetY();
         xff = f->GetX() + f->GetWidth();
         yff = f->GetY() + f->GetHeight();
         itemType = (ULong_t *) f->GetUserData();
         if (*itemType & TTreeViewer::kLTExpressionType) {
            if (xpos>xf0 && xpos<xff && ypos>yf0 && ypos<yff) {
               f->Activate(kTRUE);
            } else {
               f->Activate(kFALSE);
            }
         }
      }
      if ((fXp - event->fX) > 10) {
         fListView->SetHsbPosition(0);
         fListView->SetVsbPosition(0);
      }
      fLastActive->Move(xpos, ypos);
      gVirtualX->RaiseWindow(fLastActive->GetId());
      SendMessage(fMsgWindow, MK_MSG(kC_CONTAINER,(EWidgetMessageTypes)4),event->fX, event->fY);
   }
   return kTRUE;
}

//______________________________________________________________________________
void TTVLVContainer::EmptyAll()
{
   // Clear all names and aliases for expression type items

   TGFrameElement *el;
   TIter next(fList);
   while ((el = (TGFrameElement *) next())) {
      TTVLVEntry *f = (TTVLVEntry *) el->fFrame;
      UInt_t *userData = (UInt_t *) f->GetUserData();
      if (*userData & TTreeViewer::kLTExpressionType) {
         if (*userData & TTreeViewer::kLTPackType) {
            f->SetSmallPic(fClient->GetPicture("pack-empty_t.xpm"));
            f->SetTrueName("");
         } else {
            f->Empty();
         }
      }
   }
}

//______________________________________________________________________________
void TTVLVContainer::RemoveNonStatic()
{
   // remove all non-static items from the list view, except expressions

   TGFrameElement *el;
   TIter next(fList);
   while ((el = (TGFrameElement *) next())) {
      TTVLVEntry *f = (TTVLVEntry *) el->fFrame;
      UInt_t *userData = (UInt_t *) f->GetUserData();
      if (!((*userData) & TTreeViewer::kLTExpressionType)) {
         RemoveItem(f);
      }
   }
   fLastActive = 0;
}

//______________________________________________________________________________
void TTVLVContainer::SelectItem(const char* name)
{
   // select an item

   if (fLastActive) {
      fLastActive->Activate(kFALSE);
      fLastActive = 0;
   }
   TGFrameElement *el;
   fSelected = 0;
   TIter next(fList);
   while ((el = (TGFrameElement *) next())) {
      TTVLVEntry *f = (TTVLVEntry *) el->fFrame;
      if (!strcmp(f->GetItemName()->GetString(),name)) {
         f->Activate(kTRUE);
         fLastActive = (TGLVEntry *) f;
         fSelected++;
      } else {
         f->Activate(kFALSE);
      }
   }
}

ClassImp(TGSelectBox)

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//   TGSelectBox                                                        //
//                                                                      //
// This class represent a specialized expression editor for             //
// TTVLVEntry 'true name' and 'alias' data members.                     //
// It is a singleton in order to be able to use it for several          //
// expressions.                                                         //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

enum ETransientFrameCommands {
   kTFDone,
   kTFCancel
};

TGSelectBox* TGSelectBox::fgInstance = 0;

//______________________________________________________________________________
TGSelectBox::TGSelectBox(const TGWindow *p, const TGWindow *main,
                         UInt_t w, UInt_t h)
            :TGTransientFrame(p, main, w, h)
{
   // TGSelectBox constructor

   if (!fgInstance) {
      fgInstance = this;
      fViewer = (TTreeViewer *)fMain;
      if (!fViewer) Error("TGSelectBox", "Must be started from viewer");
      fEntry = 0;
      fLayout = new TGLayoutHints(kLHintsTop | kLHintsCenterY | kLHintsExpandX, 0, 0, 0, 2);
      fBLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 2, 2, 2);
      fBLayout1= new TGLayoutHints(kLHintsTop | kLHintsRight, 2, 0, 2, 2);

      fLabel = new TGLabel(this, "");
      AddFrame(fLabel,fLayout);

      fTe = new TGTextEntry(this, new TGTextBuffer(2000));
      fTe->SetToolTipText("Type an expression using C++ syntax. Click other expression/leaves to paste them here.");
      AddFrame(fTe, fLayout);

      fLabelAlias = new TGLabel(this, "Alias");
      AddFrame(fLabelAlias,fLayout);

      fTeAlias = new TGTextEntry(this, new TGTextBuffer(100));
      fTeAlias->SetToolTipText("Define an alias for this expression. Do NOT use leading strings of other aliases.");
      AddFrame(fTeAlias, fLayout);

      fBf = new TGHorizontalFrame(this, 10, 10);

      fCANCEL = new TGTextButton(fBf, "&Cancel", kTFCancel);
      fCANCEL->Associate(this);
      fBf->AddFrame(fCANCEL, fBLayout);

      fDONE = new TGTextButton(fBf, "&Done", kTFDone);
      fDONE->Associate(this);
      fBf->AddFrame(fDONE, fBLayout1);

      AddFrame(fBf, fLayout);

      MapSubwindows();
      Resize(GetDefaultSize());

//      SetBackgroundColor(color);
      Window_t wdum;
      Int_t ax, ay;
      gVirtualX->TranslateCoordinates(main->GetId(), GetParent()->GetId(), 25,
                        (Int_t)(((TGFrame *) main)->GetHeight() - fHeight) >> 1,
                        ax, ay, wdum);
      MoveResize(ax, ay, w, GetDefaultHeight());
      MapWindow();
   }
}

//______________________________________________________________________________
TGSelectBox::~TGSelectBox()
{
   // TGSelectBox destructor

   fgInstance = 0;
   delete fLabel;
   delete fTe;
   delete fLabelAlias;
   delete fTeAlias;
   delete fDONE;
   delete fCANCEL;
   delete fBf;
   delete fLayout;
   delete fBLayout;
   delete fBLayout1;
}

//______________________________________________________________________________
void TGSelectBox::CloseWindow()
{
   // close the select box

   gVirtualX->UnmapWindow(GetId());
   delete this;
}

//______________________________________________________________________________
TGSelectBox * TGSelectBox::GetInstance()
{
   // return the pointer to the instantiated singleton

   return fgInstance;
}

//______________________________________________________________________________
void TGSelectBox::GrabPointer()
{
   // just focus the cursor inside

   Event_t event;
   event.fType = kButtonPress;
   event.fCode = kButton1;
   Int_t position = fTe->GetCursorPosition();
   fTe->HandleButton(&event);
   fTe->SetCursorPosition(position);
}

//______________________________________________________________________________
void TGSelectBox::SetLabel(const char* title)
{
   // Set label of selection box

   fLabel->SetText(new TGString(title));
}

//______________________________________________________________________________
void TGSelectBox::SaveText()
{
   // save the edited entry true name and alias

   if (fEntry) {

      Bool_t cutType;
      TString name(fTe->GetText());
      if (name.Length())
         fEntry->SetToolTipText("Double-click to draw. Drag and drop. Use Edit/Expression or context menu to edit.");
      else
         fEntry->SetToolTipText("User-defined expression/cut. Double-click to edit");
      // Set type of item to "cut" if containing boolean operators
      cutType = name.Contains("<") || name.Contains(">") || name.Contains("=") ||
                name.Contains("!") || name.Contains("&") || name.Contains("|");
      TString alias(fTeAlias->GetText());
      if (!alias.BeginsWith("~") && !alias.Contains("empty")) fTeAlias->InsertText("~", 0);
      fEntry->SetExpression(fTe->GetText(), fTeAlias->GetText(), cutType);

      if (fOldAlias.Contains("empty")) {
         fOldAlias = fTeAlias->GetText();
         return;
      }
      TList *list = fViewer->ExpressionList();
      TIter next(list);
      TTVLVEntry* item;
      while ((item=(TTVLVEntry*)next())) {
         if (item != fEntry) {
            name = item->GetTrueName();
            name.ReplaceAll(fOldAlias.Data(), fTeAlias->GetText());
            item->SetTrueName(name.Data());
         }
      }
   }
}

//______________________________________________________________________________
void TGSelectBox::SetEntry(TTVLVEntry *entry)
{
   // connect one entry

   fEntry = entry;
   fTe->SetText(entry->GetTrueName());
   fTeAlias->SetText(entry->GetAlias());
   fOldAlias = entry->GetAlias();
}

//______________________________________________________________________________
void TGSelectBox::InsertText(const char* text)
{
   // Insert text in text entry

   Int_t start = fTe->GetCursorPosition();
   fTe->InsertText(text, fTe->GetCursorPosition());
   fTe->SetCursorPosition(start+strlen(text));
}

//______________________________________________________________________________
Bool_t TGSelectBox::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
{
   // Message interpreter

   switch (GET_MSG(msg)) {
      case kC_TEXTENTRY:
         switch (GET_SUBMSG(msg)) {
            case kTE_ENTER:
               if (ValidateAlias()) SaveText();
               break;
            default:
               break;
         }
         break;
      case kC_COMMAND:
         switch (GET_SUBMSG(msg)) {
            case kCM_BUTTON:
               switch (parm1) {
                  case kTFDone:
                     if (!ValidateAlias()) break;
                     SaveText();
                     CloseWindow();
                     break;
                  case kTFCancel:
                     CloseWindow();
                     break;
                  default:
                     break;
               }
               break;
            default:
               break;
         }
         break;
      default:
         if (parm2) break;       // just to avoid warning on CC compiler
         break;
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGSelectBox::ValidateAlias()
{
   // return true if edited alias is not a leading string of other expression aliases

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