// @(#)root/eve:$Id$
// Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

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

#include "TEveUtil.h"
#include "TEveElement.h"
#include "TEveManager.h"
#include "TEveSelection.h"
#include "TEveGedEditor.h"
#include "TEveWindow.h"
#include "TEveWindowManager.h"

#include "TGFileBrowser.h"
#include "TBrowser.h"

#include <Riostream.h>

#include "TClass.h"
#include "TROOT.h"
#include "TStyle.h"
#include "TSystem.h"
#include "TRint.h"
#include "TVirtualX.h"
#include "TEnv.h"

#include "TApplication.h"
#include "TFile.h"
#include "TClassMenuItem.h"

#include "TColor.h"

#include "TGCanvas.h"
#include "TGSplitter.h"
#include "TGStatusBar.h"
#include "TGMenu.h"
#include "TGPicture.h"
#include "TGToolBar.h"
#include "TGLabel.h"
#include "TGXYLayout.h"
#include "TGNumberEntry.h"
#include <KeySymbols.h>

#include "TGLSAViewer.h"
#include "TGLSAFrame.h"
#include "TGTab.h"

#include "TGeoVolume.h"
#include "TGeoNode.h"


//==============================================================================
//==============================================================================
// TEveListTreeItem
//==============================================================================

//______________________________________________________________________________
//
// Special list-tree-item for Eve.
//
// Most state is picked directly from TEveElement, no need to store it
// locally nor to manage its consistency.
//
// Handles also selected/highlighted colors and, in the future,
// drag-n-drop.

ClassImp(TEveListTreeItem);

//______________________________________________________________________________
void TEveListTreeItem::NotSupported(const char* func) const
{
   // Warn about access to function members that should never be called.
   // TGListTree calls them in cases that are not used by Eve.

   Warning(Form("TEveListTreeItem::%s()", func), "not supported.");
}

//______________________________________________________________________________
Pixel_t TEveListTreeItem::GetActiveColor() const
{
   // Return highlight color corresponding to current state of TEveElement.

   switch (fElement->GetSelectedLevel())
   {
      case 1: return TColor::Number2Pixel(kBlue - 2);
      case 2: return TColor::Number2Pixel(kBlue - 6);
      case 3: return TColor::Number2Pixel(kCyan - 2);
      case 4: return TColor::Number2Pixel(kCyan - 6);
   }
   return TGFrame::GetDefaultSelectedBackground();
}

//______________________________________________________________________________
void TEveListTreeItem::Toggle()
{
   // Item's check-box state has been toggled ... forward to element's
   // render-state.

   fElement->SetRnrState(!IsChecked());
   fElement->ElementChanged(kTRUE, kTRUE);
}


//==============================================================================
//==============================================================================
// TEveGListTreeEditorFrame
//==============================================================================

//______________________________________________________________________________
//
// Composite GUI frame for parallel display of a TGListTree and TEveGedEditor.
//

ClassImp(TEveGListTreeEditorFrame);

TString TEveGListTreeEditorFrame::fgEditorClass("TEveGedEditor");

//______________________________________________________________________________
TEveGListTreeEditorFrame::TEveGListTreeEditorFrame(const TGWindow* p, Int_t width, Int_t height) :
   TGMainFrame (p ? p : gClient->GetRoot(), width, height),
   fFrame      (0),
   fLTFrame    (0),
   fListTree   (0),
   fSplitter   (0),
   fEditor     (0),
   fCtxMenu    (0),
   fSignalsConnected (kFALSE)
{
   // Constructor.

   SetCleanup(kNoCleanup);

   fFrame = new TGCompositeFrame(this, width, height, kVerticalFrame);

   // List-tree
   fLTFrame  = new TGCompositeFrame(fFrame, width, 3*height/7, kVerticalFrame);
   fLTCanvas = new TGCanvas(fLTFrame, 10, 10, kSunkenFrame | kDoubleBorder);
   fListTree = new TGListTree(fLTCanvas->GetViewPort(), 10, 10, kHorizontalFrame);
   fListTree->SetCanvas(fLTCanvas);
   fListTree->Associate(fFrame);
   fListTree->SetColorMode(TGListTree::EColorMarkupMode(TGListTree::kColorUnderline | TGListTree::kColorBox));
   fListTree->SetAutoCheckBoxPic(kFALSE);
   fListTree->SetUserControl(kTRUE);
   fLTCanvas->SetContainer(fListTree);
   fLTFrame->AddFrame(fLTCanvas, new TGLayoutHints
                      (kLHintsNormal | kLHintsExpandX | kLHintsExpandY, 1, 1, 1, 1));
   fFrame  ->AddFrame(fLTFrame, new TGLayoutHints
                      (kLHintsNormal | kLHintsExpandX | kLHintsExpandY));

   // Splitter
   fSplitter = new TGHSplitter(fFrame);
   fFrame->AddFrame(fSplitter, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 1,1,2,2));

   // Editor
   fFrame->SetEditDisabled(kEditEnable);
   fFrame->SetEditable();
   fEditor = (TEveGedEditor*) gROOT->GetClass(fgEditorClass)->New();
   fEditor->SetGlobal(kFALSE);
   fEditor->ChangeOptions(fEditor->GetOptions() | kFixedHeight);
   fFrame->SetEditable(kEditDisable);
   fFrame->SetEditable(kFALSE);
   {
      TGFrameElement *el = 0;
      TIter next(fFrame->GetList());
      while ((el = (TGFrameElement *) next())) {
         if (el->fFrame == fEditor)
            if (el->fLayout) {
               el->fLayout->SetLayoutHints(kLHintsTop | kLHintsExpandX);
               el->fLayout->SetPadLeft(0); el->fLayout->SetPadRight(1);
               el->fLayout->SetPadTop(2);  el->fLayout->SetPadBottom(1);
               break;
            }
      }
   }
   fSplitter->SetFrame(fEditor, kFALSE);

   AddFrame(fFrame, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));

   fCtxMenu = new TContextMenu("", "");

   Layout();
   MapSubwindows();
   MapWindow();
}

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

   DisconnectSignals();

   delete fCtxMenu;

   // Should un-register editor, all items and list-tree from gEve ... eventually.

   delete fEditor;
   delete fSplitter;
   delete fListTree;
   delete fLTCanvas;
   delete fLTFrame;
   delete fFrame;
}

//______________________________________________________________________________
void TEveGListTreeEditorFrame::SetEditorClass(const char* edclass)
{
   // Set GED editor class.

   fgEditorClass = edclass;
}

//______________________________________________________________________________
void TEveGListTreeEditorFrame::ConnectSignals()
{
   // Connect list-tree signals.

   fListTree->Connect("MouseOver(TGListTreeItem*, UInt_t)", "TEveGListTreeEditorFrame",
                      this, "ItemBelowMouse(TGListTreeItem*, UInt_t)");
   fListTree->Connect("Clicked(TGListTreeItem*, Int_t, UInt_t, Int_t, Int_t)", "TEveGListTreeEditorFrame",
                      this, "ItemClicked(TGListTreeItem*, Int_t, UInt_t, Int_t, Int_t)");
   fListTree->Connect("DoubleClicked(TGListTreeItem*, Int_t)", "TEveGListTreeEditorFrame",
                      this, "ItemDblClicked(TGListTreeItem*, Int_t)");
   fListTree->Connect("KeyPressed(TGListTreeItem*, ULong_t, ULong_t)", "TEveGListTreeEditorFrame",
                      this, "ItemKeyPress(TGListTreeItem*, UInt_t, UInt_t)");

   fSignalsConnected = kTRUE;
}

//______________________________________________________________________________
void TEveGListTreeEditorFrame::DisconnectSignals()
{
   // Disconnect list-tree signals.

   if (!fSignalsConnected) return;

   fListTree->Disconnect("MouseOver(TGListTreeItem*, UInt_t)",
                      this, "ItemBelowMouse(TGListTreeItem*, UInt_t)");
   fListTree->Disconnect("Clicked(TGListTreeItem*, Int_t, UInt_t, Int_t, Int_t)",
                      this, "ItemClicked(TGListTreeItem*, Int_t, UInt_t, Int_t, Int_t)");
   fListTree->Disconnect("DoubleClicked(TGListTreeItem*, Int_t)",
                      this, "ItemDblClicked(TGListTreeItem*, Int_t)");
   fListTree->Disconnect("KeyPressed(TGListTreeItem*, ULong_t, ULong_t)",
                      this, "ItemKeyPress(TGListTreeItem*, UInt_t, UInt_t)");

   fSignalsConnected = kFALSE;
}

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

//______________________________________________________________________________
void TEveGListTreeEditorFrame::ReconfToHorizontal()
{
   // Reconfigure to horizontal layout, list-tree and editor side by side.

   UnmapWindow();

   fFrame->ChangeOptions(kHorizontalFrame);
   fLTFrame->ChangeOptions(kHorizontalFrame);
   fListTree->ChangeOptions(kVerticalFrame);

   TGFrameElement *el = 0;
   TIter next(fFrame->GetList());
   while ((el = (TGFrameElement *) next()))
   {
      if (el->fFrame == fSplitter)
      {
         // This is needed so that splitter window gets destroyed on server.
         fSplitter->ReparentWindow(fClient->GetDefaultRoot());
         delete fSplitter;
         el->fFrame = fSplitter = new TGVSplitter(fFrame);
         el->fLayout->SetLayoutHints(kLHintsLeft | kLHintsExpandY);
         el->fLayout->SetPadLeft(2); el->fLayout->SetPadRight (2);
         el->fLayout->SetPadTop (1); el->fLayout->SetPadBottom(1);
      }
      else if (el->fFrame == fEditor)
      {
         fEditor->ChangeOptions(fEditor->GetOptions() & (~kFixedHeight));
         fEditor->ChangeOptions(fEditor->GetOptions() |   kFixedWidth);
         el->fLayout->SetLayoutHints(kLHintsLeft | kLHintsExpandY);
      }
   }

   fEditor->Resize(fEditor->GetWidth() / 2 - 1, fEditor->GetHeight());
   fSplitter->SetFrame(fEditor, kFALSE);

   Layout();
   MapSubwindows();
   MapWindow();
}

//______________________________________________________________________________
void TEveGListTreeEditorFrame::ReconfToVertical()
{
   // Reconfigure to vertical layout, list-tree above the editor.

   UnmapWindow();

   fFrame->ChangeOptions(kVerticalFrame);
   fLTFrame->ChangeOptions(kVerticalFrame);
   fListTree->ChangeOptions(kHorizontalFrame);

   TGFrameElement *el = 0;
   TIter next(fFrame->GetList());
   while ((el = (TGFrameElement *) next()))
   {
      if (el->fFrame == fSplitter)
      {
         // This is needed so that splitter window gets destroyed on server.
         fSplitter->ReparentWindow(fClient->GetDefaultRoot());
         delete fSplitter;
         el->fFrame = fSplitter = new TGHSplitter(fFrame);
         el->fLayout->SetLayoutHints(kLHintsTop | kLHintsExpandX);
         el->fLayout->SetPadLeft(2); el->fLayout->SetPadRight (2);
         el->fLayout->SetPadTop (1); el->fLayout->SetPadBottom(1);
      }
      else if (el->fFrame == fEditor)
      {
         fEditor->ChangeOptions(fEditor->GetOptions() & (~kFixedWidth));
         fEditor->ChangeOptions(fEditor->GetOptions() |   kFixedHeight);
         el->fLayout->SetLayoutHints(kLHintsTop | kLHintsExpandX);
      }
   }

   fEditor->Resize(fEditor->GetWidth(), fEditor->GetHeight() / 2 - 1);
   fSplitter->SetFrame(fEditor, kFALSE);

   Layout();
   MapSubwindows();
   MapWindow();
}

//==============================================================================

//______________________________________________________________________________
void TEveGListTreeEditorFrame::ItemBelowMouse(TGListTreeItem *entry, UInt_t /*mask*/)
{
   // Different item is below mouse.

   TEveElement* el = entry ? (TEveElement*) entry->GetUserData() : 0;
   gEve->GetHighlight()->UserPickedElement(el, kFALSE);
}

//______________________________________________________________________________
void TEveGListTreeEditorFrame::ItemClicked(TGListTreeItem *item, Int_t btn, UInt_t mask, Int_t x, Int_t y)
{
   // Item has been clicked, based on mouse button do:
   // M1 - select, show in editor;
   // M2 - paste (call gEve->ElementPaste();
   // M3 - popup context menu.

   //printf("ItemClicked item %s List %d btn=%d, x=%d, y=%d\n",
   //  item->GetText(),fDisplayFrame->GetList()->GetEntries(), btn, x, y);

   static const TEveException eh("TEveGListTreeEditorFrame::ItemClicked ");

   TEveElement* el = (TEveElement*) item->GetUserData();
   if (el == 0) return;
   TObject* obj = el->GetObject(eh);

   switch (btn)
   {
      case 1:
         gEve->GetSelection()->UserPickedElement(el, mask & kKeyControlMask);
         break;

      case 2:
         if (gEve->ElementPaste(el))
            gEve->Redraw3D();
         break;

      case 3:
         // If control pressed, show menu for render-element itself.
         // event->fState & kKeyControlMask
         // ??? how do i get current event?
         // !!!!! Have this now ... fix.
         if (obj) fCtxMenu->Popup(x, y, obj);
         break;

      default:
         break;
   }
}

//______________________________________________________________________________
void TEveGListTreeEditorFrame::ItemDblClicked(TGListTreeItem* item, Int_t btn)
{
   // Item has been double-clicked, potentially expand the children.

   static const TEveException eh("TEveGListTreeEditorFrame::ItemDblClicked ");

   if (btn != 1) return;

   TEveElement* el = (TEveElement*) item->GetUserData();
   if (el == 0) return;

   el->ExpandIntoListTree(fListTree, item);

   TObject* obj = el->GetObject(eh);
   if (obj)
   {
      // Browse geonodes.
      if (obj->IsA()->InheritsFrom(TGeoNode::Class()))
      {
         TGeoNode* n = dynamic_cast<TGeoNode*>(obj);
         if (item->GetFirstChild() == 0 && n->GetNdaughters())
         {
            fListTree->DeleteChildren(item);
            for (Int_t i=0; i< n->GetNdaughters(); i++)
            {
               TString title;
               title.Form("%d : %s[%d]", i,
                          n->GetDaughter(i)->GetVolume()->GetName(),
                          n->GetDaughter(i)->GetNdaughters());

               TGListTreeItem* child = fListTree->AddItem(item, title.Data());
               child->SetUserData(n->GetDaughter(i));
            }
         }
      }
   }
}

//______________________________________________________________________________
void TEveGListTreeEditorFrame::ItemKeyPress(TGListTreeItem *entry, UInt_t keysym, UInt_t mask)
{
   // A key has been pressed for an item.
   //
   // Only <Delete>, <Enter> and <Return> keys are handled here,
   // otherwise the control is passed back to TGListTree.

   static const TEveException eh("TEveGListTreeEditorFrame::ItemKeyPress ");

   entry = fListTree->GetCurrent();
   if (entry == 0) return;

   TEveElement* el = (TEveElement*) entry->GetUserData();

   fListTree->SetEventHandled(); // Reset back to false in default case.

   switch (keysym)
   {
      case kKey_Delete:
      {
         if (entry->GetParent())
         {
            if (el->GetDenyDestroy() > 0 && el->GetNItems() == 1)
               throw(eh + "DestroyDenied set for this item.");

            TEveElement* parent = (TEveElement*) entry->GetParent()->GetUserData();

            if (parent)
            {
               gEve->RemoveElement(el, parent);
               gEve->Redraw3D();
            }
         }
         else
         {
            if (el->GetDenyDestroy() > 0)
               throw(eh + "DestroyDenied set for this top-level item.");
            gEve->RemoveFromListTree(el, fListTree, entry);
            gEve->Redraw3D();
         }
         break;
      }

      case kKey_Enter:
      case kKey_Return:
      {
         gEve->GetSelection()->UserPickedElement(el, mask & kKeyControlMask);
         break;
      }

      default:
      {
         fListTree->SetEventHandled(kFALSE);
         break;
      }
   }
}


//==============================================================================
//==============================================================================
// TEveBrowser
//==============================================================================

//______________________________________________________________________________
//
// Specialization of TRootBrowser for Eve.

ClassImp(TEveBrowser);

//______________________________________________________________________________
void TEveBrowser::SetupCintExport(TClass* cl)
{
   // Add "Export to CINT" into context-menu for class cl.

   TList* l = cl->GetMenuList();
   TClassMenuItem* n = new TClassMenuItem(TClassMenuItem::kPopupUserFunction, cl,
                                          "Export to CINT", "ExportToCINT", this, "const char*,TObject*", 1);

   l->AddFirst(n);
}

//______________________________________________________________________________
void TEveBrowser::CalculateReparentXY(TGObject* parent, Int_t& x, Int_t& y)
{
   // Calculate position of a widget for reparenting into parent.

   UInt_t   w, h;
   Window_t childdum;
   gVirtualX->GetWindowSize(parent->GetId(), x, y, w, h);
   gVirtualX->TranslateCoordinates(parent->GetId(),
                                   gClient->GetDefaultRoot()->GetId(),
                                   0, 0, x, y, childdum);
}

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

namespace
{
enum EEveMenu_e {
   kNewMainFrameSlot, kNewTabSlot,
   kNewViewer,  kNewScene,
   kNewBrowser, kNewCanvas, kNewCanvasExt, kNewTextEditor, kNewHtmlBrowser,
   kSel_PS_Ignore, kSel_PS_Element, kSel_PS_Projectable, kSel_PS_Compound,
   kSel_PS_PableCompound, kSel_PS_Master, kSel_PS_END,
   kHil_PS_Ignore, kHil_PS_Element, kHil_PS_Projectable, kHil_PS_Compound,
   kHil_PS_PableCompound, kHil_PS_Master, kHil_PS_END,
   kVerticalBrowser,
   kWinDecorNormal, kWinDecorHide, kWinDecorTitleBar, kWinDecorMiniBar
};

}

//______________________________________________________________________________
TEveBrowser::TEveBrowser(UInt_t w, UInt_t h) :
   TRootBrowser(0, "Eve Main Window", w, h, "", kFALSE),
   fFileBrowser(0),
   fEvePopup   (0),
   fSelPopup   (0),
   fHilPopup   (0)
{
   // Constructor.

   // Construct Eve menu.

   fEvePopup = new TGPopupMenu(gClient->GetRoot());
   fEvePopup->AddEntry("New &MainFrame Slot", kNewMainFrameSlot);
   fEvePopup->AddEntry("New &Tab Slot",       kNewTabSlot);
   fEvePopup->AddSeparator();
   fEvePopup->AddEntry("New &Viewer",         kNewViewer);
   fEvePopup->AddEntry("New &Scene",          kNewScene);
   fEvePopup->AddSeparator();
   fEvePopup->AddEntry("New &Browser",        kNewBrowser);
   fEvePopup->AddEntry("New &Canvas",         kNewCanvas);
   fEvePopup->AddEntry("New Canvas Ext",      kNewCanvasExt);
   fEvePopup->AddEntry("New Text &Editor",    kNewTextEditor);
   // fEvePopup->AddEntry("New HTML Browser", kNewHtmlBrowser);
   fEvePopup->AddSeparator();

   {
      fSelPopup = new TGPopupMenu(gClient->GetRoot());
      fSelPopup->AddEntry("Ignore",      kSel_PS_Ignore);
      fSelPopup->AddEntry("Element",     kSel_PS_Element);
      fSelPopup->AddEntry("Projectable", kSel_PS_Projectable);
      fSelPopup->AddEntry("Compound",    kSel_PS_Compound);
      fSelPopup->AddEntry("Projectable and Compound",
                          kSel_PS_PableCompound);
      fSelPopup->AddEntry("Master",      kSel_PS_Master);
      fSelPopup->RCheckEntry(kSel_PS_Ignore + gEve->GetSelection()->GetPickToSelect(),
                             kSel_PS_Ignore, kSel_PS_END - 1);
      fEvePopup->AddPopup("Selection", fSelPopup);
   }
   {
      fHilPopup = new TGPopupMenu(gClient->GetRoot());
      fHilPopup->AddEntry("Ignore",      kHil_PS_Ignore);
      fHilPopup->AddEntry("Element",     kHil_PS_Element);
      fHilPopup->AddEntry("Projectable", kHil_PS_Projectable);
      fHilPopup->AddEntry("Compound",    kHil_PS_Compound);
      fHilPopup->AddEntry("Projectable and Compound",
                          kHil_PS_PableCompound);
      fHilPopup->AddEntry("Master",      kHil_PS_Master);
      fHilPopup->RCheckEntry(kHil_PS_Ignore + gEve->GetHighlight()->GetPickToSelect(),
                             kHil_PS_Ignore, kHil_PS_END - 1);
      fEvePopup->AddPopup("Highlight", fHilPopup);
   }

   fEvePopup->AddSeparator();
   fEvePopup->AddEntry("Vertical browser", kVerticalBrowser);
   fEvePopup->CheckEntry(kVerticalBrowser);
   {
      TGPopupMenu *wd = new TGPopupMenu(gClient->GetRoot());
      wd->AddEntry("Normal",     kWinDecorNormal);
      wd->AddEntry("Hide",       kWinDecorHide);
      wd->AddEntry("Title bars", kWinDecorTitleBar);
      wd->AddEntry("Mini bars",  kWinDecorMiniBar);
      fEvePopup->AddPopup("Window decorations", wd);
   }

   fEvePopup->Connect("Activated(Int_t)", "TEveBrowser",
                       this, "EveMenu(Int_t)");

   fMenuBar->AddPopup("&Eve", fEvePopup, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));

   fPreMenuFrame->ChangeOptions(fPreMenuFrame->GetOptions() | kRaisedFrame);
   fTopMenuFrame->Layout();
   fTopMenuFrame->MapSubwindows();

   // Rename "Close Window" to "Close Eve"
   fMenuFile->GetEntry(kCloseWindow)->GetLabel()->SetString("Close Eve");
}

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

//______________________________________________________________________________
void TEveBrowser::EveMenu(Int_t id)
{
   // Handle events from Eve menu.

   switch (id)
   {
      case kNewMainFrameSlot: {
         TEveWindowSlot* ew_slot = TEveWindow::CreateWindowMainFrame(0);
         gEve->GetWindowManager()->SelectWindow(ew_slot);
         break;
      }
      case kNewTabSlot: {
         TEveWindowSlot* ew_slot = TEveWindow::CreateWindowInTab(GetTabRight(), 0);
         gEve->GetWindowManager()->SelectWindow(ew_slot);
         break;
      }
      case kNewViewer: {
         gEve->SpawnNewViewer("Viewer Pepe");
         break;
      }
      case kNewScene: {
         gEve->SpawnNewScene("Scena Mica");
         break;
      }
      case kNewBrowser: {
         gROOT->ProcessLineFast("new TBrowser");
         break;
      }
      case kNewCanvas: {
         StartEmbedding(1);
         gROOT->ProcessLineFast("new TCanvas");
         StopEmbedding();
         SetTabTitle("Canvas", 1);
         break;
      }
      case kNewCanvasExt: {
         gROOT->ProcessLineFast("new TCanvas");
         break;
      }
      case kNewTextEditor: {
         StartEmbedding(1);
         gROOT->ProcessLineFast(Form("new TGTextEditor((const char *)0, (const TGWindow *)0x%lx)", (ULong_t)gClient->GetRoot()));
         StopEmbedding();
         SetTabTitle("Editor", 1);
         break;
      }
      case kNewHtmlBrowser: {
         gSystem->Load("libGuiHtml");
         if (gSystem->Load("libRHtml") >= 0)
         {
            StartEmbedding(1);
            gROOT->ProcessLine(Form("new TGHtmlBrowser(\"http://root.cern.ch/root/html/ClassIndex.html\", \
                              (const TGWindow *)0x%lx)", (ULong_t)gClient->GetRoot()));
            StopEmbedding();
            SetTabTitle("HTML", 1);
         }
         break;
      }
      case kSel_PS_Ignore:
      case kSel_PS_Element:
      case kSel_PS_Projectable:
      case kSel_PS_Compound:
      case kSel_PS_PableCompound:
      case kSel_PS_Master: {
         gEve->GetSelection()->SetPickToSelect(id - kSel_PS_Ignore);
         fSelPopup->RCheckEntry(kSel_PS_Ignore + gEve->GetSelection()->GetPickToSelect(),
                                kSel_PS_Ignore, kSel_PS_END - 1);
         break;
      }
      case kHil_PS_Ignore:
      case kHil_PS_Element:
      case kHil_PS_Projectable:
      case kHil_PS_Compound:
      case kHil_PS_PableCompound:
      case kHil_PS_Master: {
         gEve->GetHighlight()->SetPickToSelect(id - kHil_PS_Ignore);
         fHilPopup->RCheckEntry(kHil_PS_Ignore + gEve->GetHighlight()->GetPickToSelect(),
                                kHil_PS_Ignore, kHil_PS_END - 1);
         break;
      }
      case kVerticalBrowser: {
         if (fEvePopup->IsEntryChecked(kVerticalBrowser)) {
            gEve->GetLTEFrame()->ReconfToHorizontal();
            fEvePopup->UnCheckEntry(kVerticalBrowser);
         } else {
            gEve->GetLTEFrame()->ReconfToVertical();
            fEvePopup->CheckEntry(kVerticalBrowser);
         }
         break;
      }
      case kWinDecorNormal: {
         gEve->GetWindowManager()->ShowNormalEveDecorations();
         break;
      }
      case kWinDecorHide: {
         gEve->GetWindowManager()->HideAllEveDecorations();
         break;
      }
      case kWinDecorTitleBar: {
         gEve->GetWindowManager()->SetShowTitleBars(kTRUE);
         break;
      }
      case kWinDecorMiniBar: {
         gEve->GetWindowManager()->SetShowTitleBars(kFALSE);
         break;
      }

      default: {
         break;
      }
   }
}

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

//______________________________________________________________________________
void TEveBrowser::InitPlugins(Option_t *opt)
{
   // Initialize standard plugins.

   TString o(opt);

   // File Browser plugin ... we have to process it here.
   if (o.Contains('F'))
   {
      StartEmbedding(0);
      TGFileBrowser *fb = MakeFileBrowser();
      fb->BrowseObj(gROOT);
      fb->Show();
      fFileBrowser = fb;
      StopEmbedding("Files");
      o.ReplaceAll("F", ".");
   }

   TRootBrowser::InitPlugins(o);
}

//______________________________________________________________________________
TGFileBrowser* TEveBrowser::MakeFileBrowser(Bool_t make_default)
{
   // Create a file-browser. Caller should provide Start/StopEmbedding() calls
   // and populate the new browser.
   // If flag make_default is kTRUE, the default file-browser is set to the
   // newly created browser.

   TBrowserImp    imp;
   TBrowser      *tb = new TBrowser("Pipi", "Strel", &imp);
   TGFileBrowser *fb = new TGFileBrowser(gClient->GetRoot(), tb, 200, 500);
   tb->SetBrowserImp((TBrowserImp *)this);
   fb->SetBrowser(tb);
   fb->SetNewBrowser(this);
   gROOT->GetListOfBrowsers()->Remove(tb);
   // This guy is never used and stays in list-of-cleanups after destruction.
   // So let's just delete it now.
   delete tb->GetContextMenu();

   if (make_default)
      fFileBrowser = fb;

   return fb;
}

//______________________________________________________________________________
TGFileBrowser* TEveBrowser::GetFileBrowser() const
{
  // Returns the default file-browser.

  return fFileBrowser;
}

//______________________________________________________________________________
void TEveBrowser::SetFileBrowser(TGFileBrowser* b)
{
  // Set the default file browser.

  fFileBrowser = b;
}

//______________________________________________________________________________
void TEveBrowser::ReallyDelete()
{
   // Override from TRootBrowser. We need to be more brutal as fBrowser is
   // not set in Eve case.

   delete this;
}

//______________________________________________________________________________
void TEveBrowser::CloseTab(Int_t id)
{
   // Virtual from TRootBrowser. Need to intercept closing of Eve tabs.

   // Check if this is an Eve window and destroy accordingly.
   TGCompositeFrame *pcf = fTabRight->GetTabContainer(id);
   if (pcf)
   {
      TGFrameElement *fe = (TGFrameElement *) pcf->GetList()->First();
      if (fe)
      {
         TEveCompositeFrame *ecf = dynamic_cast<TEveCompositeFrame*>(fe->fFrame);
         if (ecf)
         {
            ecf->GetEveWindow()->DestroyWindowAndSlot();
            return;
         }
      }
   }

   // Fallback to standard tab destruction
   TRootBrowser::CloseTab(id);
}

//______________________________________________________________________________
void TEveBrowser::CloseWindow()
{
   // Virtual from TGMainFrame. Calls TEveManager::Terminate().

   TEveManager::Terminate();
}

//______________________________________________________________________________
void TEveBrowser::HideBottomTab()
{
   // Hide the bottom tab (usually holding command-line widget).

   fV2->HideFrame(fHSplitter);
   fV2->HideFrame(fH2);
}

//______________________________________________________________________________
void TEveBrowser::SanitizeTabCounts()
{
   // TRootBrowser keeps (somewhat unnecessarily) counters for number ob tabs
   // on each position. Eve bastardizes the right tab so we have to fix the counters
   // when a new window is added ... it doesn't seem to be needed when it is removed.

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