// @(#)root/gui:$Id$
// Author: Bertrand Bellenot   26/09/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.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TRootBrowser                                                         //
//                                                                      //
// This class creates a ROOT object browser, constitued by three main   //
// tabs.                                                                //
//                                                                      //
// All tabs can 'swallow' frames, thanks to the new method:             //
//   ExecPlugin(const char *name = 0, const char *fname = 0,            //
//              const char *cmd = 0, Int_t pos = kRight,                //
//              Int_t subpos = -1)                                      //
// allowing to select plugins (can be a macro or a command)             //
// to be executed, and where to embed the frame created by              //
// the plugin (tab and tab element). Examples:                          //
//                                                                      //
// create a new browser:                                                //
// TBrowser b;                                                          //
//                                                                      //
// create a new TCanvas in a new top right tab element:                 //
// b.ExecPlugin("Canvas", 0, "new TCanvas()");                          //
//                                                                      //
// create a new top right tab element embedding the                     //
// TGMainFrame created by the macro 'myMacro.C':                        //
// b.ExecPlugin("MyPlugin", "myMacro.C");                               //
//                                                                      //
// create a new bottom tab element embedding the                        //
// TGMainFrame created by the macro 'myMacro.C':                        //
// b.ExecPlugin("MyPlugin", "myMacro.C", 0, TRootBrowser::kBottom);     //
//                                                                      //
// this browser implementation can be selected via the env              //
// 'Browser.Name' in .rootrc, (TRootBrowser or TRootBrowserLite)        //
// the default being TRootBrowserLite (old browser)                     //
// a list of options (plugins) for the new TRootBrowser is also         //
// specified via the env 'Browser.Options' in .rootrc, the default      //
// being: FECI                                                          //
// Here is the list of available options:                               //
// F: File browser E: Text Editor H: HTML browser C: Canvas I: I/O      //
// redirection P: Proof G: GL viewer                                    //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TROOT.h"
#include "TSystem.h"
#include "TApplication.h"
#include "TBrowser.h"
#include "TGClient.h"
#include "TGFrame.h"
#include "TGTab.h"
#include "TGMenu.h"
#include "TGLayout.h"
#include "TGSplitter.h"
#include "TGStatusBar.h"
#include "Varargs.h"
#include "TInterpreter.h"
#include "TBrowser.h"
#include "TGFileDialog.h"
#include "TObjString.h"
#include "TVirtualPad.h"
#include "TEnv.h"
#include <KeySymbols.h>

#include "RConfigure.h"

#include "TRootBrowser.h"
#include "TGFileBrowser.h"
#include "TGInputDialog.h"
#include "TRootHelpDialog.h"
#include "TVirtualPadEditor.h"
#include "HelpText.h"
#include "Getline.h"

#ifdef WIN32
#include <TWin32SplashThread.h>
#endif

static const char *gOpenFileTypes[] = {
   "ROOT files",   "*.root",
   "All files",    "*",
   0,              0
};

static const char *gPluginFileTypes[] = {
   "ROOT files",   "*.C",
   "All files",    "*",
   0,              0
};

//_____________________________________________________________________________
//
// TRootBrowser
//
// The main ROOT object browser.
//_____________________________________________________________________________

ClassImp(TRootBrowser)

//______________________________________________________________________________
TRootBrowser::TRootBrowser(TBrowser *b, const char *name, UInt_t width,
                           UInt_t height, Option_t *opt, Bool_t initshow) :
   TGMainFrame(gClient->GetDefaultRoot(), width, height), TBrowserImp(b)
{
   // Create browser with a specified width and height.

   fShowCloseTab = kTRUE;
   fActBrowser = 0;
   fIconPic = 0;
   CreateBrowser(name);
   Resize(width, height);
   if (initshow) {
      InitPlugins(opt);
      MapWindow();
   }
   TQObject::Connect("TCanvas", "ProcessedEvent(Int_t,Int_t,Int_t,TObject*)",
                     "TRootBrowser", this,
                     "EventInfo(Int_t, Int_t, Int_t, TObject*)");
   gVirtualX->SetInputFocus(GetId());
}

//______________________________________________________________________________
TRootBrowser::TRootBrowser(TBrowser *b, const char *name, Int_t x, Int_t y,
                           UInt_t width, UInt_t height, Option_t *opt,
                           Bool_t initshow) :
   TGMainFrame(gClient->GetDefaultRoot(), width, height), TBrowserImp(b)
{
   // Create browser with a specified width and height and at position x, y.

   fShowCloseTab = kTRUE;
   fActBrowser = 0;
   fIconPic = 0;
   CreateBrowser(name);
   MoveResize(x, y, width, height);
   SetWMPosition(x, y);
   if (initshow) {
      InitPlugins(opt);
      MapWindow();
   }
   TQObject::Connect("TCanvas", "ProcessedEvent(Int_t,Int_t,Int_t,TObject*)",
                     "TRootBrowser", this,
                     "EventInfo(Int_t, Int_t, Int_t, TObject*)");
   gVirtualX->SetInputFocus(GetId());
}


//______________________________________________________________________________
void TRootBrowser::CreateBrowser(const char *name)
{

   // Create the actual interface.

   fVf = new TGVerticalFrame(this, 100, 100);

   fLH0 = new TGLayoutHints(kLHintsNormal);
   fLH1 = new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0);
   fLH2 = new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0, 0, 1, 1);
   fLH3 = new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX);
   fLH4 = new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX | kLHintsExpandY,2,2,2,2);
   fLH5 = new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX | kLHintsExpandY);
   fLH6 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX);
   fLH7 = new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandY);

   // Menubar Frame
   fTopMenuFrame = new TGHorizontalFrame(fVf, 100, 20);

   fPreMenuFrame = new TGHorizontalFrame(fTopMenuFrame, 0, 20, kRaisedFrame);
   fMenuBar   = new TGMenuBar(fPreMenuFrame, 10, 10, kHorizontalFrame);
   fMenuFile  = new TGPopupMenu(gClient->GetDefaultRoot());
   fMenuFile->AddEntry("&Browse...\tCtrl+B", kBrowse);
   fMenuFile->AddEntry("&Open...\tCtrl+O", kOpenFile);
   fMenuFile->AddSeparator();

   fMenuHelp = new TGPopupMenu(fClient->GetRoot());
   fMenuHelp->AddEntry("&About ROOT...",        kHelpAbout);
   fMenuHelp->AddSeparator();
   fMenuHelp->AddEntry("Help On Browser...",    kHelpOnBrowser);
   fMenuHelp->AddEntry("Help On Canvas...",     kHelpOnCanvas);
   fMenuHelp->AddEntry("Help On Menus...",      kHelpOnMenus);
   fMenuHelp->AddEntry("Help On Graphics Editor...", kHelpOnGraphicsEd);
   fMenuHelp->AddEntry("Help On Objects...",    kHelpOnObjects);
   fMenuHelp->AddEntry("Help On PostScript...", kHelpOnPS);
   fMenuHelp->AddEntry("Help On Remote Session...", kHelpOnRemote);
   fMenuFile->AddPopup("Browser Help...", fMenuHelp);

   fMenuFile->AddSeparator();
   fMenuFile->AddEntry("&Clone\tCtrl+N", kClone);
   fMenuFile->AddSeparator();
   fMenuFile->AddEntry("New &Editor\tCtrl+E", kNewEditor);
   fMenuFile->AddEntry("New &Canvas\tCtrl+C", kNewCanvas);
   fMenuFile->AddEntry("New &HTML\tCtrl+H", kNewHtml);
   fMenuFile->AddSeparator();
   fMenuExecPlugin = new TGPopupMenu(fClient->GetRoot());
   fMenuExecPlugin->AddEntry("&Macro...", kExecPluginMacro);
   fMenuExecPlugin->AddEntry("&Command...", kExecPluginCmd);
   fMenuFile->AddPopup("Execute &Plugin...", fMenuExecPlugin);
   fMenuFile->AddSeparator();
   fMenuFile->AddEntry("Close &Tab\tCtrl+T", kCloseTab);
   fMenuFile->AddEntry("Close &Window\tCtrl+W", kCloseWindow);
   fMenuFile->AddSeparator();
   fMenuFile->AddEntry("&Quit Root\tCtrl+Q", kQuitRoot);
   fMenuBar->AddPopup("&Browser", fMenuFile, fLH1);
   fMenuFile->Connect("Activated(Int_t)", "TRootBrowser", this,
                      "HandleMenu(Int_t)");
   fPreMenuFrame->AddFrame(fMenuBar, fLH2);
   fTopMenuFrame->AddFrame(fPreMenuFrame, fLH0);

   fMenuFrame = new TGHorizontalFrame(fTopMenuFrame, 100, 20, kRaisedFrame);
   fTopMenuFrame->AddFrame(fMenuFrame, fLH5);

   fVf->AddFrame(fTopMenuFrame, fLH3);
   fActMenuBar = fMenuBar;

   // Toolbar Frame
   fToolbarFrame = new TGHorizontalFrame(fVf, 100, 20, kHorizontalFrame |
                                         kRaisedFrame);
   fVf->AddFrame(fToolbarFrame, fLH3);

   fHf = new TGHorizontalFrame(fVf, 100, 100);
   // Tabs & co...
#if defined(R__HAS_COCOA)
   fV1 = new TGVerticalFrame(fHf, 252, 100, kFixedWidth);
#else
   fV1 = new TGVerticalFrame(fHf, 250, 100, kFixedWidth);
#endif
   fV2 = new TGVerticalFrame(fHf, 600, 100);
   fH1 = new TGHorizontalFrame(fV2, 100, 100);
   fH2 = new TGHorizontalFrame(fV2, 100, 100, kFixedHeight);

   // Left tab
   fTabLeft = new TGTab(fV1,100,100);
   //fTabLeft->AddTab("Tab 1");
   fTabLeft->Resize(fTabLeft->GetDefaultSize());
   fV1->AddFrame(fTabLeft, fLH4);

   // Vertical splitter
   fVSplitter = new TGVSplitter(fHf, 4, 4);
   fVSplitter->SetFrame(fV1, kTRUE);
   fHf->AddFrame(fV1, fLH7);
   fHf->AddFrame(fVSplitter, fLH7);

   // Right tab
   fTabRight = new TGTab(fH1, 500, 100);
   //fTabRight->AddTab("Tab 1");
   fTabRight->Resize(fTabRight->GetDefaultSize());
   fH1->AddFrame(fTabRight, fLH5);
   fTabRight->Connect("Selected(Int_t)", "TRootBrowser", this, "DoTab(Int_t)");
   fTabRight->Connect("CloseTab(Int_t)", "TRootBrowser", this, "CloseTab(Int_t)");
   fV2->AddFrame(fH1, fLH4);

   // Horizontal splitter
   fHSplitter = new TGHSplitter(fV2, 4, 4);
   fV2->AddFrame(fHSplitter, fLH3);

   // Bottom tab
   fTabBottom = new TGTab(fH2, 100, 100);
   //fTabBottom->AddTab("Tab 1");
   fH2->AddFrame(fTabBottom, fLH4);
   fV2->AddFrame(fH2, fLH3);

   fHSplitter->SetFrame(fH2, kFALSE);
   fHf->AddFrame(fV2, fLH5);
   fVf->AddFrame(fHf, fLH5);
   AddFrame(fVf, fLH5);

   // status bar
   fStatusBar = new TGStatusBar(this, 400, 20);
   int parts[] = { 33, 10, 10, 47 };
   fStatusBar->SetParts(parts, 4);
   AddFrame(fStatusBar, fLH6);

   fNbInitPlugins = 0;
   fEditFrame = 0;
   fEditTab   = 0;
   fEditPos   = -1;
   fEditSubPos= -1;
   fNbTab[0]  = fNbTab[1] = fNbTab[2] = 0;
   fCrTab[0]  = fCrTab[1] = fCrTab[2] = -1;

   // Set a name to the main frame
   SetWindowName(name);
   SetIconName(name);
   fIconPic = SetIconPixmap("rootdb_s.xpm");
   SetClassHints("ROOT", "Browser");

   if (!strcmp(gROOT->GetDefCanvasName(), "c1"))
      gROOT->SetDefCanvasName("Canvas_1");

   SetWMSizeHints(600, 350, 10000, 10000, 2, 2);
   MapSubwindows();
   Resize(GetDefaultSize());
   AddInput(kKeyPressMask | kKeyReleaseMask);

   fVf->HideFrame(fToolbarFrame);
}

//______________________________________________________________________________
TRootBrowser::~TRootBrowser()
{
   // Clean up all widgets, frames and layouthints that were used

   if (fIconPic) gClient->FreePicture(fIconPic);
   delete fLH0;
   delete fLH1;
   delete fLH2;
   delete fLH3;
   delete fLH4;
   delete fLH5;
   delete fLH6;
   delete fLH7;
   delete fMenuHelp;
   delete fMenuExecPlugin;
   delete fMenuFile;
   delete fMenuBar;
   delete fMenuFrame;
   delete fPreMenuFrame;
   delete fTopMenuFrame;
   delete fToolbarFrame;
   delete fVSplitter;
   delete fHSplitter;
   delete fTabLeft;
   delete fTabRight;
   delete fTabBottom;
   delete fH1;
   delete fH2;
   delete fV1;
   delete fV2;
   delete fHf;
   delete fStatusBar;
   delete fVf;
}

//______________________________________________________________________________
void TRootBrowser::Add(TObject *obj, const char *name, Int_t check)
{
   // Add items to the actual browser. This function has to be called
   // by the Browse() member function of objects when they are
   // called by a browser. If check < 0 (default) no check box is drawn,
   // if 0 then unchecked checkbox is added, if 1 checked checkbox is added.

   if (obj->InheritsFrom("TObjectSpy"))
      return;
   if (fActBrowser)
      fActBrowser->Add(obj, name, check);
}

//______________________________________________________________________________
void TRootBrowser::BrowseObj(TObject *obj)
{
   // Browse object. This, in turn, will trigger the calling of
   // TRootBrowser::Add() which will fill the IconBox and the tree.
   // Emits signal "BrowseObj(TObject*)".

   if (fActBrowser)
      fActBrowser->BrowseObj(obj);
   Emit("BrowseObj(TObject*)", (Long_t)obj);
}

//______________________________________________________________________________
void TRootBrowser::CloneBrowser()
{
   // Clone the browser. A new Browser will be created, with the same
   // plugins executed in the current one.

   Int_t loop = 1;
   TBrowserPlugin *plugin = 0;
   TBrowser *b = new TBrowser();
   TIter next(&fPlugins);
   while ((plugin = (TBrowserPlugin *)next())) {
      if (loop > fNbInitPlugins)
         b->ExecPlugin(plugin->GetName(), "", plugin->fCommand.Data(), plugin->fTab,
                       plugin->fSubTab);
      ++loop;
   }
}

//______________________________________________________________________________
void TRootBrowser::CloseTab(Int_t id)
{
   // Remove tab element id from right tab.

   RemoveTab(kRight, id);
}

//______________________________________________________________________________
void TRootBrowser::CloseTabs()
{
   // Properly close the mainframes embedded in the different tabs

   TGFrameElement *el;
   TGCompositeFrame *container;
   Int_t i;
   Disconnect(fMenuFile, "Activated(Int_t)", this, "HandleMenu(Int_t)");
   Disconnect(fTabRight, "Selected(Int_t)", this, "DoTab(Int_t)");
   if (fPlugins.IsEmpty()) return;
   fActBrowser = 0;
   for (i=0;i<fTabLeft->GetNumberOfTabs();i++) {
      container = fTabLeft->GetTabContainer(i);
      if (!container) continue;
      el = (TGFrameElement *)container->GetList()->First();
      if (el && el->fFrame) {
         el->fFrame->SetFrameElement(0);
         if (el->fFrame->InheritsFrom("TVirtualPadEditor")) {
            TVirtualPadEditor::Terminate();
         }
         else if (el->fFrame->InheritsFrom("TGMainFrame")) {
            ((TGMainFrame *)el->fFrame)->CloseWindow();
            gSystem->ProcessEvents();
         }
         else
            delete el->fFrame;
         el->fFrame = 0;
         if (el->fLayout && (el->fLayout != fgDefaultHints) &&
            (el->fLayout->References() > 0)) {
            el->fLayout->RemoveReference();
            if (!el->fLayout->References()) {
               delete el->fLayout;
            }
         }
         container->GetList()->Remove(el);
         delete el;
      }
   }
   for (i=0;i<fTabRight->GetNumberOfTabs();i++) {
      container = fTabRight->GetTabContainer(i);
      if (!container) continue;
      el = (TGFrameElement *)container->GetList()->First();
      if (el && el->fFrame) {
         el->fFrame->SetFrameElement(0);
         if (el->fFrame->InheritsFrom("TGMainFrame")) {
            Bool_t sleep = (el->fFrame->InheritsFrom("TRootCanvas")) ? kTRUE : kFALSE;
            ((TGMainFrame *)el->fFrame)->CloseWindow();
            if (sleep)
               gSystem->Sleep(150);
            gSystem->ProcessEvents();
         }
         else
            delete el->fFrame;
         el->fFrame = 0;
         if (el->fLayout && (el->fLayout != fgDefaultHints) &&
            (el->fLayout->References() > 0)) {
            el->fLayout->RemoveReference();
            if (!el->fLayout->References()) {
               delete el->fLayout;
            }
         }
         container->GetList()->Remove(el);
         delete el;
      }
   }
   for (i=0;i<fTabBottom->GetNumberOfTabs();i++) {
      container = fTabBottom->GetTabContainer(i);
      if (!container) continue;
      el = (TGFrameElement *)container->GetList()->First();
      if (el && el->fFrame) {
         el->fFrame->SetFrameElement(0);
         if (el->fFrame->InheritsFrom("TGMainFrame")) {
            ((TGMainFrame *)el->fFrame)->CloseWindow();
            gSystem->ProcessEvents();
         }
         else
            delete el->fFrame;
         el->fFrame = 0;
         if (el->fLayout && (el->fLayout != fgDefaultHints) &&
            (el->fLayout->References() > 0)) {
            el->fLayout->RemoveReference();
            if (!el->fLayout->References()) {
               delete el->fLayout;
            }
         }
         container->GetList()->Remove(el);
         delete el;
      }
   }
   fPlugins.Delete();
   Emit("CloseWindow()");
}

//______________________________________________________________________________
void TRootBrowser::CloseWindow()
{
   // Called when window is closed via the window manager.

   TQObject::Disconnect("TCanvas", "ProcessedEvent(Int_t,Int_t,Int_t,TObject*)",
                        this, "EventInfo(Int_t, Int_t, Int_t, TObject*)");
   CloseTabs();
   DeleteWindow();
}

//______________________________________________________________________________
void TRootBrowser::DoTab(Int_t id)
{
   // Handle Tab navigation.

   TGTab *sender = (TGTab *)gTQSender;
   if ((sender) && (sender == fTabRight)) {
      SwitchMenus(sender->GetTabContainer(id));
   }
}

//______________________________________________________________________________
void TRootBrowser::EventInfo(Int_t event, Int_t px, Int_t py, TObject *selected)
{
   // Display a tooltip with infos about the primitive below the cursor.

   const Int_t kTMAX=256;
   static char atext[kTMAX];
   if (selected == 0 || event == kMouseLeave) {
      SetStatusText("", 0);
      SetStatusText("", 1);
      SetStatusText("", 2);
      SetStatusText("", 3);
      return;
   }
   SetStatusText(selected->GetTitle(), 0);
   SetStatusText(selected->GetName(), 1);
   if (event == kKeyPress)
      snprintf(atext, kTMAX, "%c", (char) px);
   else
      snprintf(atext, kTMAX, "%d,%d", px, py);
   SetStatusText(atext, 2);
   SetStatusText(selected->GetObjectInfo(px,py), 3);
}

//______________________________________________________________________________
Long_t TRootBrowser::ExecPlugin(const char *name, const char *fname,
                                const char *cmd, Int_t pos, Int_t subpos)
{
   // Execute a macro and embed the created frame in the tab "pos"
   // and tab element "subpos".

   Long_t retval = 0;
   TBrowserPlugin *p;
   TString command, pname;
   StartEmbedding(pos, subpos);
   if (cmd && strlen(cmd)) {
      command = cmd;
      if (name) pname = name;
      else pname = TString::Format("Plugin %d", fPlugins.GetSize());
      p = new TBrowserPlugin(pname.Data(), command.Data(), pos, subpos);
   }
   else if (fname && strlen(fname)) {
      pname = name ? name : gSystem->BaseName(fname);
      Ssiz_t t = pname.Last('.');
      if (t > 0) pname.Remove(t);
      command.Form("gROOT->Macro(\"%s\");", gSystem->UnixPathName(fname));
      p = new TBrowserPlugin(pname.Data(), command.Data(), pos, subpos);
   }
   else return 0;
   fPlugins.Add(p);
   retval = gROOT->ProcessLine(command.Data());
   if (command.Contains("new TCanvas")) {
      pname = gPad->GetName();
      p->SetName(pname.Data());
   }
   SetTabTitle(pname.Data(), pos, subpos);
   StopEmbedding();
   return retval;
}

//______________________________________________________________________________
Option_t *TRootBrowser::GetDrawOption() const
{
   // Returns drawing option.

   if (fActBrowser)
      return fActBrowser->GetDrawOption();
   return 0;
}

//______________________________________________________________________________
TGTab* TRootBrowser::GetTab(Int_t pos) const
{
   // Returns the TGTab at position pos.

   switch (pos) {
      case kLeft:   return fTabLeft;
      case kRight:  return fTabRight;
      case kBottom: return fTabBottom;
      default:      return 0;
   }
}

//______________________________________________________________________________
Bool_t TRootBrowser::HandleKey(Event_t *event)
{
   // Handle keyboard events.

   char   input[10];
   UInt_t keysym;

   if (event->fType == kGKeyPress) {
      gVirtualX->LookupString(event, input, sizeof(input), keysym);

      if (!event->fState && (EKeySym)keysym == kKey_F5) {
         Refresh(kTRUE);
         return kTRUE;
      }
      switch ((EKeySym)keysym) {   // ignore these keys
         case kKey_Shift:
         case kKey_Control:
         case kKey_Meta:
         case kKey_Alt:
         case kKey_CapsLock:
         case kKey_NumLock:
         case kKey_ScrollLock:
            return kTRUE;
         default:
            break;
      }
      if (event->fState & kKeyControlMask) {   // Cntrl key modifier pressed
         switch ((EKeySym)keysym & ~0x20) {   // treat upper and lower the same
            case kKey_B:
               fMenuFile->Activated(kBrowse);
               return kTRUE;
            case kKey_O:
               fMenuFile->Activated(kOpenFile);
               return kTRUE;
            case kKey_E:
               fMenuFile->Activated(kNewEditor);
               return kTRUE;
            case kKey_C:
               fMenuFile->Activated(kNewCanvas);
               return kTRUE;
            case kKey_H:
               fMenuFile->Activated(kNewHtml);
               return kTRUE;
            case kKey_N:
               fMenuFile->Activated(kClone);
               return kTRUE;
            case kKey_T:
               fMenuFile->Activated(kCloseTab);
               return kTRUE;
            case kKey_W:
               fMenuFile->Activated(kCloseWindow);
               return kTRUE;
            case kKey_Q:
               fMenuFile->Activated(kQuitRoot);
               return kTRUE;
            default:
               break;
         }
      }
   }
   return TGMainFrame::HandleKey(event);
}

//______________________________________________________________________________
void TRootBrowser::HandleMenu(Int_t id)
{
   // Handle menu entries events.

   TRootHelpDialog *hd;
   TString cmd;
   static Int_t eNr = 1;
   TGPopupMenu *sender = (TGPopupMenu *)gTQSender;
   if (sender != fMenuFile)
      return;
   switch (id) {
      case kBrowse:
         new TBrowser();
         break;
      case kOpenFile:
         {
            Bool_t newfile = kFALSE;
            static TString dir(".");
            TGFileInfo fi;
            fi.fFileTypes = gOpenFileTypes;
            fi.fIniDir    = StrDup(dir);
            new TGFileDialog(gClient->GetDefaultRoot(), this,
                             kFDOpen,&fi);
            dir = fi.fIniDir;
            if (fi.fMultipleSelection && fi.fFileNamesList) {
               TObjString *el;
               TIter next(fi.fFileNamesList);
               while ((el = (TObjString *) next())) {
                  gROOT->ProcessLine(Form("new TFile(\"%s\");",
                                     gSystem->UnixPathName(el->GetString())));
               }
               newfile = kTRUE;
            }
            else if (fi.fFilename) {
               gROOT->ProcessLine(Form("new TFile(\"%s\");",
                                  gSystem->UnixPathName(fi.fFilename)));
               newfile = kTRUE;
            }
            if (fActBrowser && newfile) {
               TGFileBrowser *fb = dynamic_cast<TGFileBrowser *>(fActBrowser);
               if (fb) fb->Selected(0);
            }
         }
         break;
                  // Handle Help menu items...
      case kHelpAbout:
         {
#ifdef R__UNIX
            TString rootx;
# ifdef ROOTBINDIR
            rootx = ROOTBINDIR;
# else
            rootx = gSystem->Getenv("ROOTSYS");
            if (!rootx.IsNull()) rootx += "/bin";
# endif
            rootx += "/root -a &";
            gSystem->Exec(rootx);
#else
#ifdef WIN32
            new TWin32SplashThread(kTRUE);
#else
            char str[32];
            sprintf(str, "About ROOT %s...", gROOT->GetVersion());
            hd = new TRootHelpDialog(this, str, 600, 400);
            hd->SetText(gHelpAbout);
            hd->Popup();
#endif
#endif
         }
         break;
      case kHelpOnCanvas:
         hd = new TRootHelpDialog(this, "Help on Canvas...", 600, 400);
         hd->SetText(gHelpCanvas);
         hd->Popup();
         break;
      case kHelpOnMenus:
         hd = new TRootHelpDialog(this, "Help on Menus...", 600, 400);
         hd->SetText(gHelpPullDownMenus);
         hd->Popup();
         break;
      case kHelpOnGraphicsEd:
         hd = new TRootHelpDialog(this, "Help on Graphics Editor...", 600, 400);
         hd->SetText(gHelpGraphicsEditor);
         hd->Popup();
         break;
      case kHelpOnBrowser:
         hd = new TRootHelpDialog(this, "Help on Browser...", 600, 400);
         hd->SetText(gHelpBrowser);
         hd->Popup();
         break;
      case kHelpOnObjects:
         hd = new TRootHelpDialog(this, "Help on Objects...", 600, 400);
         hd->SetText(gHelpObjects);
         hd->Popup();
         break;
      case kHelpOnPS:
         hd = new TRootHelpDialog(this, "Help on PostScript...", 600, 400);
         hd->SetText(gHelpPostscript);
         hd->Popup();
         break;
      case kHelpOnRemote:
         hd = new TRootHelpDialog(this, "Help on Browser...", 600, 400);
         hd->SetText(gHelpRemote);
         hd->Popup();
         break;
      case kClone:
         CloneBrowser();
         break;
      case kNewEditor:
         cmd.Form("new TGTextEditor((const char *)0, gClient->GetRoot())");
         ++eNr;
         ExecPlugin(Form("Editor %d", eNr), "", cmd.Data(), 1);
         break;
      case kNewCanvas:
         ExecPlugin("", "", "new TCanvas()", 1);
         break;
      case kNewHtml:
         cmd.Form("new TGHtmlBrowser(\"%s\", gClient->GetRoot())",
                  gEnv->GetValue("Browser.StartUrl", "http://root.cern.ch"));
         ExecPlugin("HTML", "", cmd.Data(), 1);
         break;
      case kExecPluginMacro:
         {
            static TString dir(".");
            TGFileInfo fi;
            fi.fFileTypes = gPluginFileTypes;
            fi.fIniDir    = StrDup(dir);
            new TGFileDialog(gClient->GetDefaultRoot(), this,
                             kFDOpen,&fi);
            dir = fi.fIniDir;
            if (fi.fFilename) {
               ExecPlugin(0, fi.fFilename, 0, kRight);
            }
         }
         break;
      case kExecPluginCmd:
         {
            char command[1024];
            strlcpy(command, "new TGLSAViewer(gClient->GetRoot(), 0);",
                    sizeof(command));
            new TGInputDialog(gClient->GetRoot(), this,
                              "Enter plugin command line:",
                              command, command);
            if (strcmp(command, "")) {
               ExecPlugin("User", 0, command, kRight);
            }
         }
         break;
      case kCloseTab:
         CloseTab(fTabRight->GetCurrent());
         break;
      case kCloseWindow:
         CloseWindow();
         break;
      case kQuitRoot:
         CloseWindow();
         gApplication->Terminate(0);
         break;
      default:
         break;
   }
}

//______________________________________________________________________________
void TRootBrowser::InitPlugins(Option_t *opt)
{
   // Initialize default plugins. Could be also of the form:
   // StartEmbedding(0);
   // TPluginHandler *ph;
   // ph = gROOT->GetPluginManager()->FindHandler("TGClassBrowser");
   // if (ph && ph->LoadPlugin() != -1) {
   //    ph->ExecPlugin(3, gClient->GetRoot(), 200, 500);
   // }
   // StopEmbedding();

   TString cmd;

   if ((opt == 0) || (!opt[0]))
      return;
   // --- Left vertical area

   // File Browser plugin
   if (strchr(opt, 'F')) {
      cmd.Form("new TGFileBrowser(gClient->GetRoot(), (TBrowser *)0x%lx, 200, 500);", (ULong_t)fBrowser);
      ExecPlugin("Files", 0, cmd.Data(), 0);
      ++fNbInitPlugins;
   }

   // --- Right main area

   Int_t i, len = strlen(opt);
   for (i=0; i<len; ++i) {
      // Editor plugin...
      if (opt[i] == 'E') {
         cmd.Form("new TGTextEditor((const char *)0, gClient->GetRoot());");
         ExecPlugin("Editor 1", 0, cmd.Data(), 1);
         ++fNbInitPlugins;
      }

      // HTML plugin...
      if (opt[i] == 'H') {
         if (gSystem->Load("libGuiHtml") >= 0) {
            cmd.Form("new TGHtmlBrowser(\"%s\", gClient->GetRoot());",
                     gEnv->GetValue("Browser.StartUrl",
                     "http://root.cern.ch/root/html/ClassIndex.html"));
            ExecPlugin("HTML", 0, cmd.Data(), 1);
            ++fNbInitPlugins;
         }
      }

      // Canvas plugin...
      if (opt[i] == 'C') {
         cmd.Form("new TCanvas();");
         ExecPlugin("c1", 0, cmd.Data(), 1);
         ++fNbInitPlugins;
      }

      // GLViewer plugin...
      if (opt[i] == 'G') {
         cmd.Form("new TGLSAViewer(gClient->GetRoot(), 0);");
         ExecPlugin("OpenGL", 0, cmd.Data(), 1);
         ++fNbInitPlugins;
      }

      // PROOF plugin...
      if (opt[i] == 'P') {
         cmd.Form("new TSessionViewer();");
         ExecPlugin("PROOF", 0, cmd.Data(), 1);
         ++fNbInitPlugins;
      }
   }
   // --- Right bottom area

   // Command plugin...
   if (strchr(opt, 'I')) {
      cmd.Form("new TGCommandPlugin(gClient->GetRoot(), 700, 300);");
      ExecPlugin("Command", 0, cmd.Data(), 2);
      ++fNbInitPlugins;
   }

   // --- Select first tab everywhere
   SetTab(0, 0);
   SetTab(1, 0);
   SetTab(2, 0);
}

//______________________________________________________________________________
void TRootBrowser::ReallyDelete()
{
   // Really delete the browser and the this GUI.

   gInterpreter->DeleteGlobal(fBrowser);
   if (fBrowser->IsOnHeap())
      delete fBrowser; // will in turn delete this object
   else
      fBrowser->Destructor(); // will in turn delete this object
}

//______________________________________________________________________________
void TRootBrowser::RecursiveRemove(TObject *obj)
{
   // Recursively remove object from browser.

   if (fActBrowser)
      fActBrowser->RecursiveRemove(obj);
}

//______________________________________________________________________________
void TRootBrowser::RecursiveReparent(TGPopupMenu *popup)
{
   // Recursively reparent TGPopupMenu to gClient->GetDefaultRoot().

   TGMenuEntry *entry = 0;
   TIter next(popup->GetListOfEntries());
   while ((entry = (TGMenuEntry *)next())) {
      if (entry->GetPopup()) {
         RecursiveReparent(entry->GetPopup());
      }
   }
   popup->ReparentWindow(gClient->GetDefaultRoot());
}

//______________________________________________________________________________
void TRootBrowser::Refresh(Bool_t force)
{
   // Refresh the actual browser contents.

   if (fActBrowser)
      fActBrowser->Refresh(force);
}

//______________________________________________________________________________
void TRootBrowser::RemoveTab(Int_t pos, Int_t subpos)
{
   // Remove tab element "subpos" from tab "pos".

   TGTab *edit = 0;
   switch (pos) {
      case kLeft: // left
         edit = fTabLeft;
         break;
      case kRight: // right
         edit = fTabRight;
         fMenuFrame->HideFrame(fActMenuBar);
         fMenuFrame->GetList()->Remove(fActMenuBar);
         fActMenuBar = 0;
         break;
      case kBottom: // bottom
         edit = fTabBottom;
         break;
   }
   if (!edit || !edit->GetTabTab(subpos))
      return;
   const char *tabName = edit->GetTabTab(subpos)->GetString();
   TObject *obj = 0;
   if ((obj = fPlugins.FindObject(tabName))) {
      fPlugins.Remove(obj);
   }
   TGFrameElement *el = 0;
   if (edit->GetTabContainer(subpos))
      el = (TGFrameElement *)edit->GetTabContainer(subpos)->GetList()->First();
   if (el && el->fFrame) {
      el->fFrame->Disconnect("ProcessedConfigure(Event_t*)");
      el->fFrame->SetFrameElement(0);
      if (el->fFrame->InheritsFrom("TGMainFrame")) {
         Bool_t sleep = (el->fFrame->InheritsFrom("TRootCanvas")) ? kTRUE : kFALSE;
         ((TGMainFrame *)el->fFrame)->CloseWindow();
         if (sleep)
            gSystem->Sleep(150);
         gSystem->ProcessEvents();
      }
      else
         delete el->fFrame;
      el->fFrame = 0;
      if (el->fLayout && (el->fLayout != fgDefaultHints) &&
         (el->fLayout->References() > 0)) {
         el->fLayout->RemoveReference();
         if (!el->fLayout->References()) {
            delete el->fLayout;
         }
      }
      edit->GetTabContainer(subpos)->GetList()->Remove(el);
      delete el;
   }
   fNbTab[pos]--;
   edit->RemoveTab(subpos);
   SwitchMenus(edit->GetTabContainer(edit->GetCurrent()));
}

//______________________________________________________________________________
void TRootBrowser::SetTab(Int_t pos, Int_t subpos)
{
   // Switch to Tab "subpos" in TGTab "pos".

   TGTab *tab = GetTab(pos);
   if (subpos == -1)
      subpos = fCrTab[pos];

   if (tab && tab->SetTab(subpos, kFALSE)) { // Block signal emit
      if (pos == kRight)
         SwitchMenus(tab->GetTabContainer(subpos));
      tab->Layout();
   }
}

//______________________________________________________________________________
void TRootBrowser::SetTabTitle(const char *title, Int_t pos, Int_t subpos)
{
   // Set text "title" of Tab "subpos" in TGTab "pos".

   TBrowserPlugin *p = 0;
   TGTab *edit = GetTab(pos);
   if (!edit) return;
   if (subpos == -1)
      subpos = fCrTab[pos];

   TGTabElement *el = edit->GetTabTab(subpos);
   if (el) {
      el->SetText(new TGString(title));
      edit->Layout();
      if ((p = (TBrowserPlugin *)fPlugins.FindObject(title)))
         p->SetName(title);
   }
}

//______________________________________________________________________________
void TRootBrowser::SetStatusText(const char* txt, Int_t col)
{
   // Set text in culumn col in status bar.

   fStatusBar->SetText(txt, col);
}

//______________________________________________________________________________
void TRootBrowser::ShowMenu(TGCompositeFrame *menu)
{
   // Show the selected frame's menu and hide previous one.

   TGFrameElement *el = 0;
   // temporary solution until I find a proper way to handle
   // these bloody menus...
   fBindList->Delete();
   TIter nextm(fMenuBar->GetList());
   while ((el = (TGFrameElement *) nextm())) {
      TGMenuTitle *t = (TGMenuTitle *) el->fFrame;
      Int_t code = t->GetHotKeyCode();
      BindKey(fMenuBar, code, kKeyMod1Mask);
      BindKey(fMenuBar, code, kKeyMod1Mask | kKeyShiftMask);
      BindKey(fMenuBar, code, kKeyMod1Mask | kKeyLockMask);
      BindKey(fMenuBar, code, kKeyMod1Mask | kKeyShiftMask | kKeyLockMask);
      BindKey(fMenuBar, code, kKeyMod1Mask | kKeyMod2Mask);
      BindKey(fMenuBar, code, kKeyMod1Mask | kKeyShiftMask | kKeyMod2Mask);
      BindKey(fMenuBar, code, kKeyMod1Mask | kKeyMod2Mask | kKeyLockMask);
      BindKey(fMenuBar, code, kKeyMod1Mask | kKeyShiftMask | kKeyMod2Mask | kKeyLockMask);
   }
   fMenuFrame->HideFrame(fActMenuBar);
   fMenuFrame->ShowFrame(menu);
   menu->Layout();
   fMenuFrame->Layout();
   fActMenuBar = menu;
}

//______________________________________________________________________________
void TRootBrowser::StartEmbedding(Int_t pos, Int_t subpos)
{
   // Start embedding external frame in the tab "pos" and tab element "subpos".

   fEditTab = GetTab(pos);
   if (!fEditTab) return;
   fEditPos = pos;
   fEditSubPos = subpos;

   if (fEditFrame == 0) {
      if (subpos == -1) {
         fCrTab[pos] = fNbTab[pos]++;
         fEditFrame  = fEditTab->AddTab(Form("Tab %d",fNbTab[pos]));
         fEditSubPos = fEditTab->GetNumberOfTabs()-1;
         fEditFrame->MapWindow();
         TGTabElement *tabel = fEditTab->GetTabTab(fEditSubPos);
         if(tabel) {
            tabel->MapWindow();
            if (fShowCloseTab && (pos == 1))
               tabel->ShowClose();
         }
         fEditTab->SetTab(fEditTab->GetNumberOfTabs()-1);
         fEditTab->Layout();
      }
      else {
         fCrTab[pos] = subpos;
         fEditFrame = fEditTab->GetTabContainer(subpos);
         fEditTab->SetTab(subpos);
      }
      if (fEditFrame) fEditFrame->SetEditable();
   }
}

//______________________________________________________________________________
void TRootBrowser::StopEmbedding(const char *name, TGLayoutHints *layout)
{
   // Stop embedding external frame in the current editable frame.

   if (fEditFrame != 0) {
      fEditFrame->SetEditable(kFALSE);
      TGFrameElement *el = (TGFrameElement*) fEditFrame->GetList()->First();
      if (el && el->fFrame) {
         // let be notified when the inside frame gets resized, and tell its
         // container to recompute its layout
         el->fFrame->Connect("ProcessedConfigure(Event_t*)", "TGCompositeFrame",
                             fEditFrame, "Layout()");
      }
      if (layout) {
         el = (TGFrameElement*) fEditFrame->GetList()->Last();
         // !!!! MT what to do with the old layout? Leak it for now ...
         if (el) el->fLayout = layout;
      }
      fEditFrame->Layout();
      if (fEditTab == fTabRight)
         SwitchMenus(fEditFrame);
   }
   if (name && strlen(name)) {
      SetTabTitle(name, fEditPos, fEditSubPos);
   }
   fEditTab->Selected(fEditSubPos);
   fEditFrame = fEditTab = 0;
   fEditPos = fEditSubPos = -1;
}

//______________________________________________________________________________
void TRootBrowser::SwitchMenus(TGCompositeFrame  *from)
{
   // Move the menu from original frame to our TGMenuFrame, or display the
   // menu associated to the current tab.

   if (from == 0)
      return;
   TGFrameElement *fe = (TGFrameElement *)from->GetList()->First();
   if (!fe) {
      if (fActMenuBar != fMenuBar)
         ShowMenu(fMenuBar);
      return;
   }
   TGCompositeFrame *embed = (TGCompositeFrame *)fe->fFrame;
   TGFrameElement *el = 0;
   if (embed && embed->GetList()) {
      TIter next(embed->GetList());
      while ((el = (TGFrameElement *)next())) {
         if (el->fFrame->InheritsFrom("TGMenuBar")) {
            TGMenuBar *menu = (TGMenuBar *)el->fFrame;
            if (fActMenuBar == menu)
               return;
            TGFrameElement *nw;
            TIter nel(fMenuFrame->GetList());
            while ((nw = (TGFrameElement *) nel())) {
               if (nw->fFrame == menu) {
                  ShowMenu(menu);
                  return;
               }
            }
            ((TGCompositeFrame *)menu->GetParent())->HideFrame(menu);
            ((TGCompositeFrame *)menu->GetParent())->SetCleanup(kNoCleanup);
            menu->ReparentWindow(fMenuFrame);
            fMenuFrame->AddFrame(menu, fLH2);
            TGFrameElement *mel;
            TIter mnext(menu->GetList());
            while ((mel = (TGFrameElement *) mnext())) {
               TGMenuTitle *t = (TGMenuTitle *) mel->fFrame;
               TGPopupMenu *popup = menu->GetPopup(t->GetName());
               if (popup) {
                  RecursiveReparent(popup);
                  if (popup->GetEntry("Close Canvas")) {
                     TGMenuEntry *exit = popup->GetEntry("Close Canvas");
                     popup->HideEntry(exit->GetEntryId());
                  }
                  if (popup->GetEntry("Close Viewer")) {
                     TGMenuEntry *exit = popup->GetEntry("Close Viewer");
                     popup->HideEntry(exit->GetEntryId());
                  }
                  if (popup->GetEntry("Quit ROOT")) {
                     TGMenuEntry *exit = popup->GetEntry("Quit ROOT");
                     popup->HideEntry(exit->GetEntryId());
                  }
                  if (popup->GetEntry("Exit")) {
                     TGMenuEntry *exit = popup->GetEntry("Exit");
                     popup->HideEntry(exit->GetEntryId());
                  }
               }
            }
            ShowMenu(menu);
            return;
         }
      }
   }
   if (fActMenuBar != fMenuBar)
      ShowMenu(fMenuBar);
}

//______________________________________________________________________________
void TRootBrowser::DoubleClicked(TObject *obj)
{
   // Emits signal when double clicking on icon.

   Emit("DoubleClicked(TObject*)", (Long_t)obj);
}

//______________________________________________________________________________
void TRootBrowser::Checked(TObject *obj, Bool_t checked)
{
   // Emits signal when double clicking on icon.

   Long_t args[2];

   args[0] = (Long_t)obj;
   args[1] = checked;

   Emit("Checked(TObject*,Bool_t)", args);
}

//______________________________________________________________________________
void TRootBrowser::ExecuteDefaultAction(TObject *obj)
{
   // Emits signal "ExecuteDefaultAction(TObject*)".

   Emit("ExecuteDefaultAction(TObject*)", (Long_t)obj);
}


//______________________________________________________________________________
TBrowserImp *TRootBrowser::NewBrowser(TBrowser *b, const char *title,
                                      UInt_t width, UInt_t height,
                                      Option_t *opt)
{
   // static contructor returning TBrowserImp,
   // as needed by the plugin mechanism.

   TRootBrowser *browser = new TRootBrowser(b, title, width, height, opt);
   return (TBrowserImp *)browser;
}

//______________________________________________________________________________
TBrowserImp *TRootBrowser::NewBrowser(TBrowser *b, const char *title, Int_t x,
                                      Int_t y, UInt_t width, UInt_t height,
                                      Option_t *opt)
{
   // static contructor returning TBrowserImp,
   // as needed by the plugin mechanism.

   TRootBrowser *browser = new TRootBrowser(b, title, x, y, width, height, opt);
   return (TBrowserImp *)browser;
}
 TRootBrowser.cxx:1
 TRootBrowser.cxx:2
 TRootBrowser.cxx:3
 TRootBrowser.cxx:4
 TRootBrowser.cxx:5
 TRootBrowser.cxx:6
 TRootBrowser.cxx:7
 TRootBrowser.cxx:8
 TRootBrowser.cxx:9
 TRootBrowser.cxx:10
 TRootBrowser.cxx:11
 TRootBrowser.cxx:12
 TRootBrowser.cxx:13
 TRootBrowser.cxx:14
 TRootBrowser.cxx:15
 TRootBrowser.cxx:16
 TRootBrowser.cxx:17
 TRootBrowser.cxx:18
 TRootBrowser.cxx:19
 TRootBrowser.cxx:20
 TRootBrowser.cxx:21
 TRootBrowser.cxx:22
 TRootBrowser.cxx:23
 TRootBrowser.cxx:24
 TRootBrowser.cxx:25
 TRootBrowser.cxx:26
 TRootBrowser.cxx:27
 TRootBrowser.cxx:28
 TRootBrowser.cxx:29
 TRootBrowser.cxx:30
 TRootBrowser.cxx:31
 TRootBrowser.cxx:32
 TRootBrowser.cxx:33
 TRootBrowser.cxx:34
 TRootBrowser.cxx:35
 TRootBrowser.cxx:36
 TRootBrowser.cxx:37
 TRootBrowser.cxx:38
 TRootBrowser.cxx:39
 TRootBrowser.cxx:40
 TRootBrowser.cxx:41
 TRootBrowser.cxx:42
 TRootBrowser.cxx:43
 TRootBrowser.cxx:44
 TRootBrowser.cxx:45
 TRootBrowser.cxx:46
 TRootBrowser.cxx:47
 TRootBrowser.cxx:48
 TRootBrowser.cxx:49
 TRootBrowser.cxx:50
 TRootBrowser.cxx:51
 TRootBrowser.cxx:52
 TRootBrowser.cxx:53
 TRootBrowser.cxx:54
 TRootBrowser.cxx:55
 TRootBrowser.cxx:56
 TRootBrowser.cxx:57
 TRootBrowser.cxx:58
 TRootBrowser.cxx:59
 TRootBrowser.cxx:60
 TRootBrowser.cxx:61
 TRootBrowser.cxx:62
 TRootBrowser.cxx:63
 TRootBrowser.cxx:64
 TRootBrowser.cxx:65
 TRootBrowser.cxx:66
 TRootBrowser.cxx:67
 TRootBrowser.cxx:68
 TRootBrowser.cxx:69
 TRootBrowser.cxx:70
 TRootBrowser.cxx:71
 TRootBrowser.cxx:72
 TRootBrowser.cxx:73
 TRootBrowser.cxx:74
 TRootBrowser.cxx:75
 TRootBrowser.cxx:76
 TRootBrowser.cxx:77
 TRootBrowser.cxx:78
 TRootBrowser.cxx:79
 TRootBrowser.cxx:80
 TRootBrowser.cxx:81
 TRootBrowser.cxx:82
 TRootBrowser.cxx:83
 TRootBrowser.cxx:84
 TRootBrowser.cxx:85
 TRootBrowser.cxx:86
 TRootBrowser.cxx:87
 TRootBrowser.cxx:88
 TRootBrowser.cxx:89
 TRootBrowser.cxx:90
 TRootBrowser.cxx:91
 TRootBrowser.cxx:92
 TRootBrowser.cxx:93
 TRootBrowser.cxx:94
 TRootBrowser.cxx:95
 TRootBrowser.cxx:96
 TRootBrowser.cxx:97
 TRootBrowser.cxx:98
 TRootBrowser.cxx:99
 TRootBrowser.cxx:100
 TRootBrowser.cxx:101
 TRootBrowser.cxx:102
 TRootBrowser.cxx:103
 TRootBrowser.cxx:104
 TRootBrowser.cxx:105
 TRootBrowser.cxx:106
 TRootBrowser.cxx:107
 TRootBrowser.cxx:108
 TRootBrowser.cxx:109
 TRootBrowser.cxx:110
 TRootBrowser.cxx:111
 TRootBrowser.cxx:112
 TRootBrowser.cxx:113
 TRootBrowser.cxx:114
 TRootBrowser.cxx:115
 TRootBrowser.cxx:116
 TRootBrowser.cxx:117
 TRootBrowser.cxx:118
 TRootBrowser.cxx:119
 TRootBrowser.cxx:120
 TRootBrowser.cxx:121
 TRootBrowser.cxx:122
 TRootBrowser.cxx:123
 TRootBrowser.cxx:124
 TRootBrowser.cxx:125
 TRootBrowser.cxx:126
 TRootBrowser.cxx:127
 TRootBrowser.cxx:128
 TRootBrowser.cxx:129
 TRootBrowser.cxx:130
 TRootBrowser.cxx:131
 TRootBrowser.cxx:132
 TRootBrowser.cxx:133
 TRootBrowser.cxx:134
 TRootBrowser.cxx:135
 TRootBrowser.cxx:136
 TRootBrowser.cxx:137
 TRootBrowser.cxx:138
 TRootBrowser.cxx:139
 TRootBrowser.cxx:140
 TRootBrowser.cxx:141
 TRootBrowser.cxx:142
 TRootBrowser.cxx:143
 TRootBrowser.cxx:144
 TRootBrowser.cxx:145
 TRootBrowser.cxx:146
 TRootBrowser.cxx:147
 TRootBrowser.cxx:148
 TRootBrowser.cxx:149
 TRootBrowser.cxx:150
 TRootBrowser.cxx:151
 TRootBrowser.cxx:152
 TRootBrowser.cxx:153
 TRootBrowser.cxx:154
 TRootBrowser.cxx:155
 TRootBrowser.cxx:156
 TRootBrowser.cxx:157
 TRootBrowser.cxx:158
 TRootBrowser.cxx:159
 TRootBrowser.cxx:160
 TRootBrowser.cxx:161
 TRootBrowser.cxx:162
 TRootBrowser.cxx:163
 TRootBrowser.cxx:164
 TRootBrowser.cxx:165
 TRootBrowser.cxx:166
 TRootBrowser.cxx:167
 TRootBrowser.cxx:168
 TRootBrowser.cxx:169
 TRootBrowser.cxx:170
 TRootBrowser.cxx:171
 TRootBrowser.cxx:172
 TRootBrowser.cxx:173
 TRootBrowser.cxx:174
 TRootBrowser.cxx:175
 TRootBrowser.cxx:176
 TRootBrowser.cxx:177
 TRootBrowser.cxx:178
 TRootBrowser.cxx:179
 TRootBrowser.cxx:180
 TRootBrowser.cxx:181
 TRootBrowser.cxx:182
 TRootBrowser.cxx:183
 TRootBrowser.cxx:184
 TRootBrowser.cxx:185
 TRootBrowser.cxx:186
 TRootBrowser.cxx:187
 TRootBrowser.cxx:188
 TRootBrowser.cxx:189
 TRootBrowser.cxx:190
 TRootBrowser.cxx:191
 TRootBrowser.cxx:192
 TRootBrowser.cxx:193
 TRootBrowser.cxx:194
 TRootBrowser.cxx:195
 TRootBrowser.cxx:196
 TRootBrowser.cxx:197
 TRootBrowser.cxx:198
 TRootBrowser.cxx:199
 TRootBrowser.cxx:200
 TRootBrowser.cxx:201
 TRootBrowser.cxx:202
 TRootBrowser.cxx:203
 TRootBrowser.cxx:204
 TRootBrowser.cxx:205
 TRootBrowser.cxx:206
 TRootBrowser.cxx:207
 TRootBrowser.cxx:208
 TRootBrowser.cxx:209
 TRootBrowser.cxx:210
 TRootBrowser.cxx:211
 TRootBrowser.cxx:212
 TRootBrowser.cxx:213
 TRootBrowser.cxx:214
 TRootBrowser.cxx:215
 TRootBrowser.cxx:216
 TRootBrowser.cxx:217
 TRootBrowser.cxx:218
 TRootBrowser.cxx:219
 TRootBrowser.cxx:220
 TRootBrowser.cxx:221
 TRootBrowser.cxx:222
 TRootBrowser.cxx:223
 TRootBrowser.cxx:224
 TRootBrowser.cxx:225
 TRootBrowser.cxx:226
 TRootBrowser.cxx:227
 TRootBrowser.cxx:228
 TRootBrowser.cxx:229
 TRootBrowser.cxx:230
 TRootBrowser.cxx:231
 TRootBrowser.cxx:232
 TRootBrowser.cxx:233
 TRootBrowser.cxx:234
 TRootBrowser.cxx:235
 TRootBrowser.cxx:236
 TRootBrowser.cxx:237
 TRootBrowser.cxx:238
 TRootBrowser.cxx:239
 TRootBrowser.cxx:240
 TRootBrowser.cxx:241
 TRootBrowser.cxx:242
 TRootBrowser.cxx:243
 TRootBrowser.cxx:244
 TRootBrowser.cxx:245
 TRootBrowser.cxx:246
 TRootBrowser.cxx:247
 TRootBrowser.cxx:248
 TRootBrowser.cxx:249
 TRootBrowser.cxx:250
 TRootBrowser.cxx:251
 TRootBrowser.cxx:252
 TRootBrowser.cxx:253
 TRootBrowser.cxx:254
 TRootBrowser.cxx:255
 TRootBrowser.cxx:256
 TRootBrowser.cxx:257
 TRootBrowser.cxx:258
 TRootBrowser.cxx:259
 TRootBrowser.cxx:260
 TRootBrowser.cxx:261
 TRootBrowser.cxx:262
 TRootBrowser.cxx:263
 TRootBrowser.cxx:264
 TRootBrowser.cxx:265
 TRootBrowser.cxx:266
 TRootBrowser.cxx:267
 TRootBrowser.cxx:268
 TRootBrowser.cxx:269
 TRootBrowser.cxx:270
 TRootBrowser.cxx:271
 TRootBrowser.cxx:272
 TRootBrowser.cxx:273
 TRootBrowser.cxx:274
 TRootBrowser.cxx:275
 TRootBrowser.cxx:276
 TRootBrowser.cxx:277
 TRootBrowser.cxx:278
 TRootBrowser.cxx:279
 TRootBrowser.cxx:280
 TRootBrowser.cxx:281
 TRootBrowser.cxx:282
 TRootBrowser.cxx:283
 TRootBrowser.cxx:284
 TRootBrowser.cxx:285
 TRootBrowser.cxx:286
 TRootBrowser.cxx:287
 TRootBrowser.cxx:288
 TRootBrowser.cxx:289
 TRootBrowser.cxx:290
 TRootBrowser.cxx:291
 TRootBrowser.cxx:292
 TRootBrowser.cxx:293
 TRootBrowser.cxx:294
 TRootBrowser.cxx:295
 TRootBrowser.cxx:296
 TRootBrowser.cxx:297
 TRootBrowser.cxx:298
 TRootBrowser.cxx:299
 TRootBrowser.cxx:300
 TRootBrowser.cxx:301
 TRootBrowser.cxx:302
 TRootBrowser.cxx:303
 TRootBrowser.cxx:304
 TRootBrowser.cxx:305
 TRootBrowser.cxx:306
 TRootBrowser.cxx:307
 TRootBrowser.cxx:308
 TRootBrowser.cxx:309
 TRootBrowser.cxx:310
 TRootBrowser.cxx:311
 TRootBrowser.cxx:312
 TRootBrowser.cxx:313
 TRootBrowser.cxx:314
 TRootBrowser.cxx:315
 TRootBrowser.cxx:316
 TRootBrowser.cxx:317
 TRootBrowser.cxx:318
 TRootBrowser.cxx:319
 TRootBrowser.cxx:320
 TRootBrowser.cxx:321
 TRootBrowser.cxx:322
 TRootBrowser.cxx:323
 TRootBrowser.cxx:324
 TRootBrowser.cxx:325
 TRootBrowser.cxx:326
 TRootBrowser.cxx:327
 TRootBrowser.cxx:328
 TRootBrowser.cxx:329
 TRootBrowser.cxx:330
 TRootBrowser.cxx:331
 TRootBrowser.cxx:332
 TRootBrowser.cxx:333
 TRootBrowser.cxx:334
 TRootBrowser.cxx:335
 TRootBrowser.cxx:336
 TRootBrowser.cxx:337
 TRootBrowser.cxx:338
 TRootBrowser.cxx:339
 TRootBrowser.cxx:340
 TRootBrowser.cxx:341
 TRootBrowser.cxx:342
 TRootBrowser.cxx:343
 TRootBrowser.cxx:344
 TRootBrowser.cxx:345
 TRootBrowser.cxx:346
 TRootBrowser.cxx:347
 TRootBrowser.cxx:348
 TRootBrowser.cxx:349
 TRootBrowser.cxx:350
 TRootBrowser.cxx:351
 TRootBrowser.cxx:352
 TRootBrowser.cxx:353
 TRootBrowser.cxx:354
 TRootBrowser.cxx:355
 TRootBrowser.cxx:356
 TRootBrowser.cxx:357
 TRootBrowser.cxx:358
 TRootBrowser.cxx:359
 TRootBrowser.cxx:360
 TRootBrowser.cxx:361
 TRootBrowser.cxx:362
 TRootBrowser.cxx:363
 TRootBrowser.cxx:364
 TRootBrowser.cxx:365
 TRootBrowser.cxx:366
 TRootBrowser.cxx:367
 TRootBrowser.cxx:368
 TRootBrowser.cxx:369
 TRootBrowser.cxx:370
 TRootBrowser.cxx:371
 TRootBrowser.cxx:372
 TRootBrowser.cxx:373
 TRootBrowser.cxx:374
 TRootBrowser.cxx:375
 TRootBrowser.cxx:376
 TRootBrowser.cxx:377
 TRootBrowser.cxx:378
 TRootBrowser.cxx:379
 TRootBrowser.cxx:380
 TRootBrowser.cxx:381
 TRootBrowser.cxx:382
 TRootBrowser.cxx:383
 TRootBrowser.cxx:384
 TRootBrowser.cxx:385
 TRootBrowser.cxx:386
 TRootBrowser.cxx:387
 TRootBrowser.cxx:388
 TRootBrowser.cxx:389
 TRootBrowser.cxx:390
 TRootBrowser.cxx:391
 TRootBrowser.cxx:392
 TRootBrowser.cxx:393
 TRootBrowser.cxx:394
 TRootBrowser.cxx:395
 TRootBrowser.cxx:396
 TRootBrowser.cxx:397
 TRootBrowser.cxx:398
 TRootBrowser.cxx:399
 TRootBrowser.cxx:400
 TRootBrowser.cxx:401
 TRootBrowser.cxx:402
 TRootBrowser.cxx:403
 TRootBrowser.cxx:404
 TRootBrowser.cxx:405
 TRootBrowser.cxx:406
 TRootBrowser.cxx:407
 TRootBrowser.cxx:408
 TRootBrowser.cxx:409
 TRootBrowser.cxx:410
 TRootBrowser.cxx:411
 TRootBrowser.cxx:412
 TRootBrowser.cxx:413
 TRootBrowser.cxx:414
 TRootBrowser.cxx:415
 TRootBrowser.cxx:416
 TRootBrowser.cxx:417
 TRootBrowser.cxx:418
 TRootBrowser.cxx:419
 TRootBrowser.cxx:420
 TRootBrowser.cxx:421
 TRootBrowser.cxx:422
 TRootBrowser.cxx:423
 TRootBrowser.cxx:424
 TRootBrowser.cxx:425
 TRootBrowser.cxx:426
 TRootBrowser.cxx:427
 TRootBrowser.cxx:428
 TRootBrowser.cxx:429
 TRootBrowser.cxx:430
 TRootBrowser.cxx:431
 TRootBrowser.cxx:432
 TRootBrowser.cxx:433
 TRootBrowser.cxx:434
 TRootBrowser.cxx:435
 TRootBrowser.cxx:436
 TRootBrowser.cxx:437
 TRootBrowser.cxx:438
 TRootBrowser.cxx:439
 TRootBrowser.cxx:440
 TRootBrowser.cxx:441
 TRootBrowser.cxx:442
 TRootBrowser.cxx:443
 TRootBrowser.cxx:444
 TRootBrowser.cxx:445
 TRootBrowser.cxx:446
 TRootBrowser.cxx:447
 TRootBrowser.cxx:448
 TRootBrowser.cxx:449
 TRootBrowser.cxx:450
 TRootBrowser.cxx:451
 TRootBrowser.cxx:452
 TRootBrowser.cxx:453
 TRootBrowser.cxx:454
 TRootBrowser.cxx:455
 TRootBrowser.cxx:456
 TRootBrowser.cxx:457
 TRootBrowser.cxx:458
 TRootBrowser.cxx:459
 TRootBrowser.cxx:460
 TRootBrowser.cxx:461
 TRootBrowser.cxx:462
 TRootBrowser.cxx:463
 TRootBrowser.cxx:464
 TRootBrowser.cxx:465
 TRootBrowser.cxx:466
 TRootBrowser.cxx:467
 TRootBrowser.cxx:468
 TRootBrowser.cxx:469
 TRootBrowser.cxx:470
 TRootBrowser.cxx:471
 TRootBrowser.cxx:472
 TRootBrowser.cxx:473
 TRootBrowser.cxx:474
 TRootBrowser.cxx:475
 TRootBrowser.cxx:476
 TRootBrowser.cxx:477
 TRootBrowser.cxx:478
 TRootBrowser.cxx:479
 TRootBrowser.cxx:480
 TRootBrowser.cxx:481
 TRootBrowser.cxx:482
 TRootBrowser.cxx:483
 TRootBrowser.cxx:484
 TRootBrowser.cxx:485
 TRootBrowser.cxx:486
 TRootBrowser.cxx:487
 TRootBrowser.cxx:488
 TRootBrowser.cxx:489
 TRootBrowser.cxx:490
 TRootBrowser.cxx:491
 TRootBrowser.cxx:492
 TRootBrowser.cxx:493
 TRootBrowser.cxx:494
 TRootBrowser.cxx:495
 TRootBrowser.cxx:496
 TRootBrowser.cxx:497
 TRootBrowser.cxx:498
 TRootBrowser.cxx:499
 TRootBrowser.cxx:500
 TRootBrowser.cxx:501
 TRootBrowser.cxx:502
 TRootBrowser.cxx:503
 TRootBrowser.cxx:504
 TRootBrowser.cxx:505
 TRootBrowser.cxx:506
 TRootBrowser.cxx:507
 TRootBrowser.cxx:508
 TRootBrowser.cxx:509
 TRootBrowser.cxx:510
 TRootBrowser.cxx:511
 TRootBrowser.cxx:512
 TRootBrowser.cxx:513
 TRootBrowser.cxx:514
 TRootBrowser.cxx:515
 TRootBrowser.cxx:516
 TRootBrowser.cxx:517
 TRootBrowser.cxx:518
 TRootBrowser.cxx:519
 TRootBrowser.cxx:520
 TRootBrowser.cxx:521
 TRootBrowser.cxx:522
 TRootBrowser.cxx:523
 TRootBrowser.cxx:524
 TRootBrowser.cxx:525
 TRootBrowser.cxx:526
 TRootBrowser.cxx:527
 TRootBrowser.cxx:528
 TRootBrowser.cxx:529
 TRootBrowser.cxx:530
 TRootBrowser.cxx:531
 TRootBrowser.cxx:532
 TRootBrowser.cxx:533
 TRootBrowser.cxx:534
 TRootBrowser.cxx:535
 TRootBrowser.cxx:536
 TRootBrowser.cxx:537
 TRootBrowser.cxx:538
 TRootBrowser.cxx:539
 TRootBrowser.cxx:540
 TRootBrowser.cxx:541
 TRootBrowser.cxx:542
 TRootBrowser.cxx:543
 TRootBrowser.cxx:544
 TRootBrowser.cxx:545
 TRootBrowser.cxx:546
 TRootBrowser.cxx:547
 TRootBrowser.cxx:548
 TRootBrowser.cxx:549
 TRootBrowser.cxx:550
 TRootBrowser.cxx:551
 TRootBrowser.cxx:552
 TRootBrowser.cxx:553
 TRootBrowser.cxx:554
 TRootBrowser.cxx:555
 TRootBrowser.cxx:556
 TRootBrowser.cxx:557
 TRootBrowser.cxx:558
 TRootBrowser.cxx:559
 TRootBrowser.cxx:560
 TRootBrowser.cxx:561
 TRootBrowser.cxx:562
 TRootBrowser.cxx:563
 TRootBrowser.cxx:564
 TRootBrowser.cxx:565
 TRootBrowser.cxx:566
 TRootBrowser.cxx:567
 TRootBrowser.cxx:568
 TRootBrowser.cxx:569
 TRootBrowser.cxx:570
 TRootBrowser.cxx:571
 TRootBrowser.cxx:572
 TRootBrowser.cxx:573
 TRootBrowser.cxx:574
 TRootBrowser.cxx:575
 TRootBrowser.cxx:576
 TRootBrowser.cxx:577
 TRootBrowser.cxx:578
 TRootBrowser.cxx:579
 TRootBrowser.cxx:580
 TRootBrowser.cxx:581
 TRootBrowser.cxx:582
 TRootBrowser.cxx:583
 TRootBrowser.cxx:584
 TRootBrowser.cxx:585
 TRootBrowser.cxx:586
 TRootBrowser.cxx:587
 TRootBrowser.cxx:588
 TRootBrowser.cxx:589
 TRootBrowser.cxx:590
 TRootBrowser.cxx:591
 TRootBrowser.cxx:592
 TRootBrowser.cxx:593
 TRootBrowser.cxx:594
 TRootBrowser.cxx:595
 TRootBrowser.cxx:596
 TRootBrowser.cxx:597
 TRootBrowser.cxx:598
 TRootBrowser.cxx:599
 TRootBrowser.cxx:600
 TRootBrowser.cxx:601
 TRootBrowser.cxx:602
 TRootBrowser.cxx:603
 TRootBrowser.cxx:604
 TRootBrowser.cxx:605
 TRootBrowser.cxx:606
 TRootBrowser.cxx:607
 TRootBrowser.cxx:608
 TRootBrowser.cxx:609
 TRootBrowser.cxx:610
 TRootBrowser.cxx:611
 TRootBrowser.cxx:612
 TRootBrowser.cxx:613
 TRootBrowser.cxx:614
 TRootBrowser.cxx:615
 TRootBrowser.cxx:616
 TRootBrowser.cxx:617
 TRootBrowser.cxx:618
 TRootBrowser.cxx:619
 TRootBrowser.cxx:620
 TRootBrowser.cxx:621
 TRootBrowser.cxx:622
 TRootBrowser.cxx:623
 TRootBrowser.cxx:624
 TRootBrowser.cxx:625
 TRootBrowser.cxx:626
 TRootBrowser.cxx:627
 TRootBrowser.cxx:628
 TRootBrowser.cxx:629
 TRootBrowser.cxx:630
 TRootBrowser.cxx:631
 TRootBrowser.cxx:632
 TRootBrowser.cxx:633
 TRootBrowser.cxx:634
 TRootBrowser.cxx:635
 TRootBrowser.cxx:636
 TRootBrowser.cxx:637
 TRootBrowser.cxx:638
 TRootBrowser.cxx:639
 TRootBrowser.cxx:640
 TRootBrowser.cxx:641
 TRootBrowser.cxx:642
 TRootBrowser.cxx:643
 TRootBrowser.cxx:644
 TRootBrowser.cxx:645
 TRootBrowser.cxx:646
 TRootBrowser.cxx:647
 TRootBrowser.cxx:648
 TRootBrowser.cxx:649
 TRootBrowser.cxx:650
 TRootBrowser.cxx:651
 TRootBrowser.cxx:652
 TRootBrowser.cxx:653
 TRootBrowser.cxx:654
 TRootBrowser.cxx:655
 TRootBrowser.cxx:656
 TRootBrowser.cxx:657
 TRootBrowser.cxx:658
 TRootBrowser.cxx:659
 TRootBrowser.cxx:660
 TRootBrowser.cxx:661
 TRootBrowser.cxx:662
 TRootBrowser.cxx:663
 TRootBrowser.cxx:664
 TRootBrowser.cxx:665
 TRootBrowser.cxx:666
 TRootBrowser.cxx:667
 TRootBrowser.cxx:668
 TRootBrowser.cxx:669
 TRootBrowser.cxx:670
 TRootBrowser.cxx:671
 TRootBrowser.cxx:672
 TRootBrowser.cxx:673
 TRootBrowser.cxx:674
 TRootBrowser.cxx:675
 TRootBrowser.cxx:676
 TRootBrowser.cxx:677
 TRootBrowser.cxx:678
 TRootBrowser.cxx:679
 TRootBrowser.cxx:680
 TRootBrowser.cxx:681
 TRootBrowser.cxx:682
 TRootBrowser.cxx:683
 TRootBrowser.cxx:684
 TRootBrowser.cxx:685
 TRootBrowser.cxx:686
 TRootBrowser.cxx:687
 TRootBrowser.cxx:688
 TRootBrowser.cxx:689
 TRootBrowser.cxx:690
 TRootBrowser.cxx:691
 TRootBrowser.cxx:692
 TRootBrowser.cxx:693
 TRootBrowser.cxx:694
 TRootBrowser.cxx:695
 TRootBrowser.cxx:696
 TRootBrowser.cxx:697
 TRootBrowser.cxx:698
 TRootBrowser.cxx:699
 TRootBrowser.cxx:700
 TRootBrowser.cxx:701
 TRootBrowser.cxx:702
 TRootBrowser.cxx:703
 TRootBrowser.cxx:704
 TRootBrowser.cxx:705
 TRootBrowser.cxx:706
 TRootBrowser.cxx:707
 TRootBrowser.cxx:708
 TRootBrowser.cxx:709
 TRootBrowser.cxx:710
 TRootBrowser.cxx:711
 TRootBrowser.cxx:712
 TRootBrowser.cxx:713
 TRootBrowser.cxx:714
 TRootBrowser.cxx:715
 TRootBrowser.cxx:716
 TRootBrowser.cxx:717
 TRootBrowser.cxx:718
 TRootBrowser.cxx:719
 TRootBrowser.cxx:720
 TRootBrowser.cxx:721
 TRootBrowser.cxx:722
 TRootBrowser.cxx:723
 TRootBrowser.cxx:724
 TRootBrowser.cxx:725
 TRootBrowser.cxx:726
 TRootBrowser.cxx:727
 TRootBrowser.cxx:728
 TRootBrowser.cxx:729
 TRootBrowser.cxx:730
 TRootBrowser.cxx:731
 TRootBrowser.cxx:732
 TRootBrowser.cxx:733
 TRootBrowser.cxx:734
 TRootBrowser.cxx:735
 TRootBrowser.cxx:736
 TRootBrowser.cxx:737
 TRootBrowser.cxx:738
 TRootBrowser.cxx:739
 TRootBrowser.cxx:740
 TRootBrowser.cxx:741
 TRootBrowser.cxx:742
 TRootBrowser.cxx:743
 TRootBrowser.cxx:744
 TRootBrowser.cxx:745
 TRootBrowser.cxx:746
 TRootBrowser.cxx:747
 TRootBrowser.cxx:748
 TRootBrowser.cxx:749
 TRootBrowser.cxx:750
 TRootBrowser.cxx:751
 TRootBrowser.cxx:752
 TRootBrowser.cxx:753
 TRootBrowser.cxx:754
 TRootBrowser.cxx:755
 TRootBrowser.cxx:756
 TRootBrowser.cxx:757
 TRootBrowser.cxx:758
 TRootBrowser.cxx:759
 TRootBrowser.cxx:760
 TRootBrowser.cxx:761
 TRootBrowser.cxx:762
 TRootBrowser.cxx:763
 TRootBrowser.cxx:764
 TRootBrowser.cxx:765
 TRootBrowser.cxx:766
 TRootBrowser.cxx:767
 TRootBrowser.cxx:768
 TRootBrowser.cxx:769
 TRootBrowser.cxx:770
 TRootBrowser.cxx:771
 TRootBrowser.cxx:772
 TRootBrowser.cxx:773
 TRootBrowser.cxx:774
 TRootBrowser.cxx:775
 TRootBrowser.cxx:776
 TRootBrowser.cxx:777
 TRootBrowser.cxx:778
 TRootBrowser.cxx:779
 TRootBrowser.cxx:780
 TRootBrowser.cxx:781
 TRootBrowser.cxx:782
 TRootBrowser.cxx:783
 TRootBrowser.cxx:784
 TRootBrowser.cxx:785
 TRootBrowser.cxx:786
 TRootBrowser.cxx:787
 TRootBrowser.cxx:788
 TRootBrowser.cxx:789
 TRootBrowser.cxx:790
 TRootBrowser.cxx:791
 TRootBrowser.cxx:792
 TRootBrowser.cxx:793
 TRootBrowser.cxx:794
 TRootBrowser.cxx:795
 TRootBrowser.cxx:796
 TRootBrowser.cxx:797
 TRootBrowser.cxx:798
 TRootBrowser.cxx:799
 TRootBrowser.cxx:800
 TRootBrowser.cxx:801
 TRootBrowser.cxx:802
 TRootBrowser.cxx:803
 TRootBrowser.cxx:804
 TRootBrowser.cxx:805
 TRootBrowser.cxx:806
 TRootBrowser.cxx:807
 TRootBrowser.cxx:808
 TRootBrowser.cxx:809
 TRootBrowser.cxx:810
 TRootBrowser.cxx:811
 TRootBrowser.cxx:812
 TRootBrowser.cxx:813
 TRootBrowser.cxx:814
 TRootBrowser.cxx:815
 TRootBrowser.cxx:816
 TRootBrowser.cxx:817
 TRootBrowser.cxx:818
 TRootBrowser.cxx:819
 TRootBrowser.cxx:820
 TRootBrowser.cxx:821
 TRootBrowser.cxx:822
 TRootBrowser.cxx:823
 TRootBrowser.cxx:824
 TRootBrowser.cxx:825
 TRootBrowser.cxx:826
 TRootBrowser.cxx:827
 TRootBrowser.cxx:828
 TRootBrowser.cxx:829
 TRootBrowser.cxx:830
 TRootBrowser.cxx:831
 TRootBrowser.cxx:832
 TRootBrowser.cxx:833
 TRootBrowser.cxx:834
 TRootBrowser.cxx:835
 TRootBrowser.cxx:836
 TRootBrowser.cxx:837
 TRootBrowser.cxx:838
 TRootBrowser.cxx:839
 TRootBrowser.cxx:840
 TRootBrowser.cxx:841
 TRootBrowser.cxx:842
 TRootBrowser.cxx:843
 TRootBrowser.cxx:844
 TRootBrowser.cxx:845
 TRootBrowser.cxx:846
 TRootBrowser.cxx:847
 TRootBrowser.cxx:848
 TRootBrowser.cxx:849
 TRootBrowser.cxx:850
 TRootBrowser.cxx:851
 TRootBrowser.cxx:852
 TRootBrowser.cxx:853
 TRootBrowser.cxx:854
 TRootBrowser.cxx:855
 TRootBrowser.cxx:856
 TRootBrowser.cxx:857
 TRootBrowser.cxx:858
 TRootBrowser.cxx:859
 TRootBrowser.cxx:860
 TRootBrowser.cxx:861
 TRootBrowser.cxx:862
 TRootBrowser.cxx:863
 TRootBrowser.cxx:864
 TRootBrowser.cxx:865
 TRootBrowser.cxx:866
 TRootBrowser.cxx:867
 TRootBrowser.cxx:868
 TRootBrowser.cxx:869
 TRootBrowser.cxx:870
 TRootBrowser.cxx:871
 TRootBrowser.cxx:872
 TRootBrowser.cxx:873
 TRootBrowser.cxx:874
 TRootBrowser.cxx:875
 TRootBrowser.cxx:876
 TRootBrowser.cxx:877
 TRootBrowser.cxx:878
 TRootBrowser.cxx:879
 TRootBrowser.cxx:880
 TRootBrowser.cxx:881
 TRootBrowser.cxx:882
 TRootBrowser.cxx:883
 TRootBrowser.cxx:884
 TRootBrowser.cxx:885
 TRootBrowser.cxx:886
 TRootBrowser.cxx:887
 TRootBrowser.cxx:888
 TRootBrowser.cxx:889
 TRootBrowser.cxx:890
 TRootBrowser.cxx:891
 TRootBrowser.cxx:892
 TRootBrowser.cxx:893
 TRootBrowser.cxx:894
 TRootBrowser.cxx:895
 TRootBrowser.cxx:896
 TRootBrowser.cxx:897
 TRootBrowser.cxx:898
 TRootBrowser.cxx:899
 TRootBrowser.cxx:900
 TRootBrowser.cxx:901
 TRootBrowser.cxx:902
 TRootBrowser.cxx:903
 TRootBrowser.cxx:904
 TRootBrowser.cxx:905
 TRootBrowser.cxx:906
 TRootBrowser.cxx:907
 TRootBrowser.cxx:908
 TRootBrowser.cxx:909
 TRootBrowser.cxx:910
 TRootBrowser.cxx:911
 TRootBrowser.cxx:912
 TRootBrowser.cxx:913
 TRootBrowser.cxx:914
 TRootBrowser.cxx:915
 TRootBrowser.cxx:916
 TRootBrowser.cxx:917
 TRootBrowser.cxx:918
 TRootBrowser.cxx:919
 TRootBrowser.cxx:920
 TRootBrowser.cxx:921
 TRootBrowser.cxx:922
 TRootBrowser.cxx:923
 TRootBrowser.cxx:924
 TRootBrowser.cxx:925
 TRootBrowser.cxx:926
 TRootBrowser.cxx:927
 TRootBrowser.cxx:928
 TRootBrowser.cxx:929
 TRootBrowser.cxx:930
 TRootBrowser.cxx:931
 TRootBrowser.cxx:932
 TRootBrowser.cxx:933
 TRootBrowser.cxx:934
 TRootBrowser.cxx:935
 TRootBrowser.cxx:936
 TRootBrowser.cxx:937
 TRootBrowser.cxx:938
 TRootBrowser.cxx:939
 TRootBrowser.cxx:940
 TRootBrowser.cxx:941
 TRootBrowser.cxx:942
 TRootBrowser.cxx:943
 TRootBrowser.cxx:944
 TRootBrowser.cxx:945
 TRootBrowser.cxx:946
 TRootBrowser.cxx:947
 TRootBrowser.cxx:948
 TRootBrowser.cxx:949
 TRootBrowser.cxx:950
 TRootBrowser.cxx:951
 TRootBrowser.cxx:952
 TRootBrowser.cxx:953
 TRootBrowser.cxx:954
 TRootBrowser.cxx:955
 TRootBrowser.cxx:956
 TRootBrowser.cxx:957
 TRootBrowser.cxx:958
 TRootBrowser.cxx:959
 TRootBrowser.cxx:960
 TRootBrowser.cxx:961
 TRootBrowser.cxx:962
 TRootBrowser.cxx:963
 TRootBrowser.cxx:964
 TRootBrowser.cxx:965
 TRootBrowser.cxx:966
 TRootBrowser.cxx:967
 TRootBrowser.cxx:968
 TRootBrowser.cxx:969
 TRootBrowser.cxx:970
 TRootBrowser.cxx:971
 TRootBrowser.cxx:972
 TRootBrowser.cxx:973
 TRootBrowser.cxx:974
 TRootBrowser.cxx:975
 TRootBrowser.cxx:976
 TRootBrowser.cxx:977
 TRootBrowser.cxx:978
 TRootBrowser.cxx:979
 TRootBrowser.cxx:980
 TRootBrowser.cxx:981
 TRootBrowser.cxx:982
 TRootBrowser.cxx:983
 TRootBrowser.cxx:984
 TRootBrowser.cxx:985
 TRootBrowser.cxx:986
 TRootBrowser.cxx:987
 TRootBrowser.cxx:988
 TRootBrowser.cxx:989
 TRootBrowser.cxx:990
 TRootBrowser.cxx:991
 TRootBrowser.cxx:992
 TRootBrowser.cxx:993
 TRootBrowser.cxx:994
 TRootBrowser.cxx:995
 TRootBrowser.cxx:996
 TRootBrowser.cxx:997
 TRootBrowser.cxx:998
 TRootBrowser.cxx:999
 TRootBrowser.cxx:1000
 TRootBrowser.cxx:1001
 TRootBrowser.cxx:1002
 TRootBrowser.cxx:1003
 TRootBrowser.cxx:1004
 TRootBrowser.cxx:1005
 TRootBrowser.cxx:1006
 TRootBrowser.cxx:1007
 TRootBrowser.cxx:1008
 TRootBrowser.cxx:1009
 TRootBrowser.cxx:1010
 TRootBrowser.cxx:1011
 TRootBrowser.cxx:1012
 TRootBrowser.cxx:1013
 TRootBrowser.cxx:1014
 TRootBrowser.cxx:1015
 TRootBrowser.cxx:1016
 TRootBrowser.cxx:1017
 TRootBrowser.cxx:1018
 TRootBrowser.cxx:1019
 TRootBrowser.cxx:1020
 TRootBrowser.cxx:1021
 TRootBrowser.cxx:1022
 TRootBrowser.cxx:1023
 TRootBrowser.cxx:1024
 TRootBrowser.cxx:1025
 TRootBrowser.cxx:1026
 TRootBrowser.cxx:1027
 TRootBrowser.cxx:1028
 TRootBrowser.cxx:1029
 TRootBrowser.cxx:1030
 TRootBrowser.cxx:1031
 TRootBrowser.cxx:1032
 TRootBrowser.cxx:1033
 TRootBrowser.cxx:1034
 TRootBrowser.cxx:1035
 TRootBrowser.cxx:1036
 TRootBrowser.cxx:1037
 TRootBrowser.cxx:1038
 TRootBrowser.cxx:1039
 TRootBrowser.cxx:1040
 TRootBrowser.cxx:1041
 TRootBrowser.cxx:1042
 TRootBrowser.cxx:1043
 TRootBrowser.cxx:1044
 TRootBrowser.cxx:1045
 TRootBrowser.cxx:1046
 TRootBrowser.cxx:1047
 TRootBrowser.cxx:1048
 TRootBrowser.cxx:1049
 TRootBrowser.cxx:1050
 TRootBrowser.cxx:1051
 TRootBrowser.cxx:1052
 TRootBrowser.cxx:1053
 TRootBrowser.cxx:1054
 TRootBrowser.cxx:1055
 TRootBrowser.cxx:1056
 TRootBrowser.cxx:1057
 TRootBrowser.cxx:1058
 TRootBrowser.cxx:1059
 TRootBrowser.cxx:1060
 TRootBrowser.cxx:1061
 TRootBrowser.cxx:1062
 TRootBrowser.cxx:1063
 TRootBrowser.cxx:1064
 TRootBrowser.cxx:1065
 TRootBrowser.cxx:1066
 TRootBrowser.cxx:1067
 TRootBrowser.cxx:1068
 TRootBrowser.cxx:1069
 TRootBrowser.cxx:1070
 TRootBrowser.cxx:1071
 TRootBrowser.cxx:1072
 TRootBrowser.cxx:1073
 TRootBrowser.cxx:1074
 TRootBrowser.cxx:1075
 TRootBrowser.cxx:1076
 TRootBrowser.cxx:1077
 TRootBrowser.cxx:1078
 TRootBrowser.cxx:1079
 TRootBrowser.cxx:1080
 TRootBrowser.cxx:1081
 TRootBrowser.cxx:1082
 TRootBrowser.cxx:1083
 TRootBrowser.cxx:1084
 TRootBrowser.cxx:1085
 TRootBrowser.cxx:1086
 TRootBrowser.cxx:1087
 TRootBrowser.cxx:1088
 TRootBrowser.cxx:1089
 TRootBrowser.cxx:1090
 TRootBrowser.cxx:1091
 TRootBrowser.cxx:1092
 TRootBrowser.cxx:1093
 TRootBrowser.cxx:1094
 TRootBrowser.cxx:1095
 TRootBrowser.cxx:1096
 TRootBrowser.cxx:1097
 TRootBrowser.cxx:1098
 TRootBrowser.cxx:1099
 TRootBrowser.cxx:1100
 TRootBrowser.cxx:1101
 TRootBrowser.cxx:1102
 TRootBrowser.cxx:1103
 TRootBrowser.cxx:1104
 TRootBrowser.cxx:1105
 TRootBrowser.cxx:1106
 TRootBrowser.cxx:1107
 TRootBrowser.cxx:1108
 TRootBrowser.cxx:1109
 TRootBrowser.cxx:1110
 TRootBrowser.cxx:1111
 TRootBrowser.cxx:1112
 TRootBrowser.cxx:1113
 TRootBrowser.cxx:1114
 TRootBrowser.cxx:1115
 TRootBrowser.cxx:1116
 TRootBrowser.cxx:1117
 TRootBrowser.cxx:1118
 TRootBrowser.cxx:1119
 TRootBrowser.cxx:1120
 TRootBrowser.cxx:1121
 TRootBrowser.cxx:1122
 TRootBrowser.cxx:1123
 TRootBrowser.cxx:1124
 TRootBrowser.cxx:1125
 TRootBrowser.cxx:1126
 TRootBrowser.cxx:1127
 TRootBrowser.cxx:1128
 TRootBrowser.cxx:1129
 TRootBrowser.cxx:1130
 TRootBrowser.cxx:1131
 TRootBrowser.cxx:1132
 TRootBrowser.cxx:1133
 TRootBrowser.cxx:1134
 TRootBrowser.cxx:1135
 TRootBrowser.cxx:1136
 TRootBrowser.cxx:1137
 TRootBrowser.cxx:1138
 TRootBrowser.cxx:1139
 TRootBrowser.cxx:1140
 TRootBrowser.cxx:1141
 TRootBrowser.cxx:1142
 TRootBrowser.cxx:1143
 TRootBrowser.cxx:1144
 TRootBrowser.cxx:1145
 TRootBrowser.cxx:1146
 TRootBrowser.cxx:1147
 TRootBrowser.cxx:1148
 TRootBrowser.cxx:1149
 TRootBrowser.cxx:1150
 TRootBrowser.cxx:1151
 TRootBrowser.cxx:1152
 TRootBrowser.cxx:1153
 TRootBrowser.cxx:1154
 TRootBrowser.cxx:1155
 TRootBrowser.cxx:1156
 TRootBrowser.cxx:1157
 TRootBrowser.cxx:1158
 TRootBrowser.cxx:1159
 TRootBrowser.cxx:1160
 TRootBrowser.cxx:1161
 TRootBrowser.cxx:1162
 TRootBrowser.cxx:1163
 TRootBrowser.cxx:1164
 TRootBrowser.cxx:1165
 TRootBrowser.cxx:1166
 TRootBrowser.cxx:1167
 TRootBrowser.cxx:1168
 TRootBrowser.cxx:1169
 TRootBrowser.cxx:1170
 TRootBrowser.cxx:1171
 TRootBrowser.cxx:1172
 TRootBrowser.cxx:1173
 TRootBrowser.cxx:1174
 TRootBrowser.cxx:1175
 TRootBrowser.cxx:1176
 TRootBrowser.cxx:1177
 TRootBrowser.cxx:1178
 TRootBrowser.cxx:1179
 TRootBrowser.cxx:1180
 TRootBrowser.cxx:1181
 TRootBrowser.cxx:1182
 TRootBrowser.cxx:1183
 TRootBrowser.cxx:1184
 TRootBrowser.cxx:1185
 TRootBrowser.cxx:1186
 TRootBrowser.cxx:1187
 TRootBrowser.cxx:1188
 TRootBrowser.cxx:1189
 TRootBrowser.cxx:1190
 TRootBrowser.cxx:1191
 TRootBrowser.cxx:1192
 TRootBrowser.cxx:1193
 TRootBrowser.cxx:1194
 TRootBrowser.cxx:1195
 TRootBrowser.cxx:1196
 TRootBrowser.cxx:1197
 TRootBrowser.cxx:1198
 TRootBrowser.cxx:1199
 TRootBrowser.cxx:1200
 TRootBrowser.cxx:1201
 TRootBrowser.cxx:1202
 TRootBrowser.cxx:1203
 TRootBrowser.cxx:1204
 TRootBrowser.cxx:1205
 TRootBrowser.cxx:1206
 TRootBrowser.cxx:1207
 TRootBrowser.cxx:1208
 TRootBrowser.cxx:1209
 TRootBrowser.cxx:1210
 TRootBrowser.cxx:1211
 TRootBrowser.cxx:1212
 TRootBrowser.cxx:1213
 TRootBrowser.cxx:1214
 TRootBrowser.cxx:1215
 TRootBrowser.cxx:1216
 TRootBrowser.cxx:1217
 TRootBrowser.cxx:1218
 TRootBrowser.cxx:1219
 TRootBrowser.cxx:1220
 TRootBrowser.cxx:1221
 TRootBrowser.cxx:1222
 TRootBrowser.cxx:1223
 TRootBrowser.cxx:1224
 TRootBrowser.cxx:1225
 TRootBrowser.cxx:1226
 TRootBrowser.cxx:1227
 TRootBrowser.cxx:1228
 TRootBrowser.cxx:1229
 TRootBrowser.cxx:1230
 TRootBrowser.cxx:1231
 TRootBrowser.cxx:1232
 TRootBrowser.cxx:1233
 TRootBrowser.cxx:1234
 TRootBrowser.cxx:1235
 TRootBrowser.cxx:1236
 TRootBrowser.cxx:1237
 TRootBrowser.cxx:1238
 TRootBrowser.cxx:1239
 TRootBrowser.cxx:1240
 TRootBrowser.cxx:1241
 TRootBrowser.cxx:1242
 TRootBrowser.cxx:1243
 TRootBrowser.cxx:1244
 TRootBrowser.cxx:1245
 TRootBrowser.cxx:1246
 TRootBrowser.cxx:1247
 TRootBrowser.cxx:1248
 TRootBrowser.cxx:1249
 TRootBrowser.cxx:1250
 TRootBrowser.cxx:1251
 TRootBrowser.cxx:1252
 TRootBrowser.cxx:1253
 TRootBrowser.cxx:1254
 TRootBrowser.cxx:1255
 TRootBrowser.cxx:1256
 TRootBrowser.cxx:1257
 TRootBrowser.cxx:1258
 TRootBrowser.cxx:1259
 TRootBrowser.cxx:1260
 TRootBrowser.cxx:1261
 TRootBrowser.cxx:1262
 TRootBrowser.cxx:1263
 TRootBrowser.cxx:1264
 TRootBrowser.cxx:1265