ROOT logo
// @(#)root/gui:$Id: TGFileBrowser.cxx 28853 2009-06-09 08:19:33Z bellenot $
// 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.             *
 *************************************************************************/

#include "TROOT.h"
#include "TSystem.h"
#include "TApplication.h"
#include "TGClient.h"
#include "TGListTree.h"
#include "TGLayout.h"
#include "TGComboBox.h"
#include "TContextMenu.h"
#include "TGTextEntry.h"
#include "TGTab.h"
#include "TGLabel.h"
#include "TSystemDirectory.h"
#include "TGMimeTypes.h"
#include "TClass.h"
#include "TQClass.h"
#include "TDataMember.h"
#include "TMethod.h"
#include "TMethodArg.h"
#include "TRealData.h"
#include "TInterpreter.h"
#include "TRegexp.h"
#include "TEnv.h"
#include "TImage.h"
#include "TBrowser.h"
#include "TRemoteObject.h"
#include "Getline.h"
#include <time.h>
#include <string.h>
#include <stdlib.h>

#include "TGFileBrowser.h"
#include "TRootBrowser.h"

#ifdef WIN32
const char rootdir[] = "\\";
#else
const char rootdir[] = "/";
#endif

const char *filters[] = {
   "",
   "*.*",
   "*.[C|c|h]*",
   "*.root",
   "*.txt"
};

//_____________________________________________________________________________
//
// TCursorSwitcher
//
// Helper class used to change the cursor in a method and restore the 
// original one when going out of the method scope.
//_____________________________________________________________________________

///////////////////////////////////////////////////////////////////////////////
class TCursorSwitcher {
private:
   TGWindow *fW1;
   TGWindow *fW2;
public:
   TCursorSwitcher(TGWindow *w1, TGWindow *w2) : fW1(w1), fW2(w2) {
      if (w1) gVirtualX->SetCursor(w1->GetId(), gVirtualX->CreateCursor(kWatch));
      if (w2) gVirtualX->SetCursor(w2->GetId(), gVirtualX->CreateCursor(kWatch));
   }
   ~TCursorSwitcher() {
      if (fW1) gVirtualX->SetCursor(fW1->GetId(), gVirtualX->CreateCursor(kPointer));
      if (fW2) gVirtualX->SetCursor(fW2->GetId(), gVirtualX->CreateCursor(kPointer));
   }
};

//_____________________________________________________________________________
//
// TGFileBrowser
//
// System file browser, used as TRootBrowser plug-in.
// This class is the real core of the ROOT browser.
//_____________________________________________________________________________

ClassImp(TGFileBrowser)

//______________________________________________________________________________
TGFileBrowser::TGFileBrowser(const TGWindow *p, TBrowser* b, UInt_t w, UInt_t h)
   : TGMainFrame(p, w, h), TBrowserImp(b), fNewBrowser(0)
{
   // TGFileBrowser constructor.

   if (p && p != gClient->GetDefaultRoot())
      fNewBrowser = (TRootBrowser *)p->GetMainFrame();
   if (fNewBrowser)
      fNewBrowser->SetActBrowser(this);
   CreateBrowser();
   Resize(w, h);
   if (fBrowser) Show();
}

//______________________________________________________________________________
void TGFileBrowser::CreateBrowser()
{
   // Create the actual file browser.

   fCachedPic  = 0;
   SetCleanup(kDeepCleanup);

   fTopFrame = new TGHorizontalFrame(this, 100, 30);
   fDrawOption = new TGComboBox(fTopFrame, "");
   TGTextEntry *dropt_entry = fDrawOption->GetTextEntry();
   dropt_entry->SetToolTipText("Object Draw Option", 300);
   fDrawOption->Resize(80, 20);
   TGListBox *lb = fDrawOption->GetListBox();
   lb->Resize(lb->GetWidth(), 120);
   Int_t dropt = 1;
   fDrawOption->AddEntry("", dropt++);
   fDrawOption->AddEntry(" alp", dropt++);
   fDrawOption->AddEntry(" box", dropt++);
   fDrawOption->AddEntry(" colz", dropt++);
   fDrawOption->AddEntry(" lego", dropt++);
   fDrawOption->AddEntry(" lego1", dropt++);
   fDrawOption->AddEntry(" lego2", dropt++);
   fDrawOption->AddEntry(" same", dropt++);
   fDrawOption->AddEntry(" surf", dropt++);
   fDrawOption->AddEntry(" surf1", dropt++);
   fDrawOption->AddEntry(" surf2", dropt++);
   fDrawOption->AddEntry(" surf3", dropt++);
   fDrawOption->AddEntry(" surf4", dropt++);
   fDrawOption->AddEntry(" surf5", dropt++);
   fDrawOption->AddEntry(" text", dropt++);
   fTopFrame->AddFrame(fDrawOption, new TGLayoutHints(kLHintsCenterY |
                       kLHintsRight, 2, 2, 2, 2));
   fTopFrame->AddFrame(new TGLabel(fTopFrame, "Draw Option: "),
                       new TGLayoutHints(kLHintsCenterY | kLHintsRight,
                       2, 2, 2, 2));
   AddFrame(fTopFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop |
            kLHintsExpandX, 2, 2, 2, 2));
   fCanvas   = new TGCanvas(this, 100, 100);
   fListTree = new TGListTree(fCanvas, kHorizontalFrame);
   AddFrame(fCanvas, new TGLayoutHints(kLHintsLeft | kLHintsTop |
                kLHintsExpandX | kLHintsExpandY));
   fListTree->Connect("DoubleClicked(TGListTreeItem *, Int_t)",
      "TGFileBrowser", this, "DoubleClicked(TGListTreeItem *, Int_t)");
   fListTree->Connect("Clicked(TGListTreeItem *, Int_t, Int_t, Int_t)",
      "TGFileBrowser", this, "Clicked(TGListTreeItem *, Int_t, Int_t, Int_t)");
   fListTree->Connect("Checked(TObject*, Bool_t)", "TGFileBrowser",
      this, "Checked(TObject*, Bool_t)");

   fRootIcon = gClient->GetPicture("rootdb_t.xpm");
   fFileIcon = gClient->GetPicture("doc_t.xpm");

   fBotFrame = new TGHorizontalFrame(this, 100, 30);
   fBotFrame->AddFrame(new TGLabel(fBotFrame, "Filter: "),
                       new TGLayoutHints(kLHintsCenterY | kLHintsLeft,
                       2, 2, 2, 2));
   fFileType = new TGComboBox(fBotFrame, " All Files (*.*)");
   Int_t ftype = 1;
   fFileType->AddEntry(" All Files (*.*)", ftype++);
   fFileType->AddEntry(" C/C++ Files (*.c;*.cxx;*.h;...)", ftype++);
   fFileType->AddEntry(" ROOT Files (*.root)", ftype++);
   fFileType->AddEntry(" Text Files (*.txt)", ftype++);
   fFileType->Resize(200, 20);
   fBotFrame->AddFrame(fFileType, new TGLayoutHints(kLHintsLeft | kLHintsTop |
                kLHintsExpandX, 2, 2, 2, 2));
   fFileType->Connect("Selected(Int_t)", "TGFileBrowser", this, "ApplyFilter(Int_t)");
   AddFrame(fBotFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop |
            kLHintsExpandX, 2, 2, 2, 2));

   fContextMenu = new TContextMenu("FileBrowserContextMenu");
   fFilter      = 0;
   fGroupSize   = 1000;
   fListLevel   = 0;
   fCurrentDir  = 0;
   fRootDir     = 0;
   fDir         = 0;
   fFile        = 0;
   TString gv = gEnv->GetValue("Browser.GroupView", "1000");
   Int_t igv = atoi(gv.Data());
   if (igv > 10)
      fGroupSize = igv;

   if (gEnv->GetValue("Browser.ShowHidden", 0))
      fShowHidden = kTRUE;
   else
      fShowHidden = kFALSE;

   TQObject::Connect("TGHtmlBrowser", "Clicked(char*)",
                     "TGFileBrowser", this, "Selected(char*)");
   fListLevel = 0;
   MapSubwindows();
   Resize(GetDefaultSize());
   MapWindow();
}

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

   delete fContextMenu;
   delete fListTree;
   if (fRootIcon) fClient->FreePicture(fRootIcon);
   if (fFileIcon) fClient->FreePicture(fFileIcon);
   if (fCachedPic) fClient->FreePicture(fCachedPic);
   Cleanup();
}


/**************************************************************************/
// TBrowserImp virtuals
/**************************************************************************/

//______________________________________________________________________________
void TGFileBrowser::Add(TObject *obj, const char *name, Int_t check)
{
   // Add items to the 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 (fListLevel && !strcmp(fListLevel->GetText(), "Classes") &&
      fListLevel->GetParent() && 
      !strcmp(fListLevel->GetParent()->GetText(), "root")) {
      // Browsing list of root classes...
   }
   else {
      if (obj && obj->InheritsFrom("TApplication"))
         fListLevel = 0;
      if (obj && obj->InheritsFrom("TSystemDirectory"))
         return;
   }
   const TGPicture *pic=0;
   if (obj && obj->InheritsFrom("TKey") && (obj->IsA() != TClass::Class()))
      AddKey(fListLevel, obj, name);
   else if (obj) {
      GetObjPicture(&pic, obj);
      if (!name) name = obj->GetName();
      if(check > -1) {
         if (!fListTree->FindChildByName(fListLevel, name)) {
            TGListTreeItem *item = fListTree->AddItem(fListLevel, name, obj, pic, pic, kTRUE);
            if ((pic != fFileIcon) && (pic != fCachedPic))
               fClient->FreePicture(pic);
            fListTree->CheckItem(item, (Bool_t)check);
            TString tip(obj->ClassName());
            if (obj->GetTitle()) {
               tip += " ";
               tip += obj->GetTitle();
            }
            fListTree->SetToolTipItem(item, tip.Data());
         }
      }
      else {
         // special case for remote object
         Bool_t isRemote = kFALSE;
         if (obj->InheritsFrom("TRemoteObject"))
            isRemote = kTRUE;
         else if (fListLevel) {
            // check also if one of its parents is a remote object
            TGListTreeItem *top = fListLevel;
            while (top->GetParent()) {
               TObject *tobj = (TObject *) top->GetUserData();
               if (tobj && (tobj->InheritsFrom("TRemoteObject") ||
                  tobj->InheritsFrom("TApplicationRemote"))) {
                  isRemote = kTRUE;
                  break;
               }
               top = top->GetParent();
            }
         }
         if (isRemote) {
            TRemoteObject *robj = (TRemoteObject *)obj;
            if (!strcmp(robj->GetClassName(), "TKey")) {
               AddKey(fListLevel, obj, name);
            }
            else {
               TString fname = name;
               // add the remote object only if not already in the list
               if (!fShowHidden && fname.BeginsWith("."))
                  return;
               AddRemoteFile(obj);
            }
         }
         else {
            if (!fListTree->FindChildByName(fListLevel, name)) {
               TGListTreeItem *item = fListTree->AddItem(fListLevel, name, obj, pic, pic);
               if ((pic != fFileIcon) && (pic != fCachedPic))
                  fClient->FreePicture(pic);
               item->SetDNDSource(kTRUE);
            }
         }
      }
   }
}

//______________________________________________________________________________
void TGFileBrowser::AddRemoteFile(TObject *obj)
{
   // Add remote file in list tree.

   Bool_t      is_link;
   Int_t       type, uid, gid;
   Long_t      modtime;
   Long64_t    size;
   TString     filename;
   const TGPicture *spic;
   TGPicture *pic;

   FileStat_t sbuf;

   type    = 0;
   size    = 0;
   uid     = 0;
   gid     = 0;
   modtime = 0;
   is_link = kFALSE;

   TRemoteObject *robj = (TRemoteObject *)obj;

   robj->GetFileStat(&sbuf);
   is_link = sbuf.fIsLink;
   type    = sbuf.fMode;
   size    = sbuf.fSize;
   uid     = sbuf.fUid;
   gid     = sbuf.fGid;
   modtime = sbuf.fMtime;
   filename = robj->GetName();
   if (R_ISDIR(type) || fFilter == 0 ||
       (fFilter && filename.Index(*fFilter) != kNPOS)) {

      GetFilePictures(&spic, type, is_link, filename);

      pic = (TGPicture*)spic; pic->AddReference();

      if ((!fListTree->FindChildByName(fListLevel, filename)) &&
         (!fListTree->FindChildByData(fListLevel, obj)))
         fListTree->AddItem(fListLevel, filename, obj, pic, pic);
   }
}

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

   if (fNewBrowser)
      fNewBrowser->SetActBrowser(this);
   obj->Browse(fBrowser);
   if (obj == gROOT) {
      TList *volumes = gSystem->GetVolumes("all");
      TList *curvol  = gSystem->GetVolumes("cur");
      if (volumes && curvol) {
         const char *curdrive;
         TNamed *named = (TNamed *)curvol->At(0);
         if (named)
            curdrive = named->GetName();
         else
            curdrive = StrDup("C:");
         TIter next(volumes);
         TNamed *drive;
         while ((drive = (TNamed *)next())) {
            AddFSDirectory(TString::Format("%s\\", drive->GetName()), drive->GetTitle(), 
                           (strcmp(drive->GetName(), curdrive) == 0) ? 
                           "SetRootDir" : "Add");
         }
         delete volumes;
         delete curvol;
      }
      else {
         AddFSDirectory("/");
      }
      GotoDir(gSystem->WorkingDirectory());
      if (gROOT->GetListOfFiles() && !gROOT->GetListOfFiles()->IsEmpty())
         Selected(0);
   }
}

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

   if (fNewBrowser)
      fNewBrowser->Checked(obj, checked);
}

//______________________________________________________________________________
Option_t *TGFileBrowser::GetDrawOption() const
{
   // returns drawing option

   return fDrawOption->GetTextEntry()->GetText();
}

//______________________________________________________________________________
void TGFileBrowser::GetFilePictures(const TGPicture **pic, Int_t file_type,
                                    Bool_t is_link, const char *name)
{
   // Determine the file picture for the given file type.

   static TString cached_ext;
   static const TGPicture *cached_spic = 0;
   const char *ext = name ? strrchr(name, '.') : 0;
   TString sname = name ? name : " ";
   *pic = 0;

   if (ext && cached_spic && (cached_ext == ext)) {
      *pic = cached_spic;
      return;
   }

   if (R_ISREG(file_type)) {
      *pic = gClient->GetMimeTypeList()->GetIcon(name, kTRUE);

      if (*pic) {
         if (ext) {
            cached_ext = ext;
            cached_spic = *pic;
            return;
         }
      }
   } else {
      *pic = 0;
   }

   if (*pic == 0) {
      *pic = gClient->GetPicture("doc_t.xpm");

      if (R_ISREG(file_type) && (file_type) & kS_IXUSR) {
         *pic = gClient->GetPicture("app_t.xpm");
      }
      if (R_ISDIR(file_type)) {
         *pic = gClient->GetPicture("folder_t.xpm");
      }
      if(sname.EndsWith(".root")) {
         *pic = gClient->GetPicture("rootdb_t.xpm");
      }

   }
   if (is_link) {
      *pic = gClient->GetPicture("slink_t.xpm");
   }

   cached_spic = 0;
   cached_ext = "";
}

//______________________________________________________________________________
void TGFileBrowser::RecursiveRemove(TObject *obj)
{
   // Recursively remove object.

   TGListTreeItem *itm = 0, *item = 0;
   if (obj->InheritsFrom("TFile")) {
      itm = fListTree->FindChildByData(0, gROOT->GetListOfFiles());
      if (itm)
         item = fListTree->FindChildByData(itm, obj);
      if (item)
         fListTree->DeleteItem(item);
      itm = fRootDir ? fRootDir->GetFirstChild() : 0;
      while (itm) {
         item = fListTree->FindItemByObj(itm, obj);
         if (item) {
            fListTree->DeleteChildren(item);
            item->SetUserData(0);
         }
         itm = itm->GetNextSibling();
      }
   }
   if (!obj->InheritsFrom("TFile") && fRootDir)
      fListTree->RecursiveDeleteItem(fRootDir, obj);
   //fListTree->ClearViewPort();
}

//______________________________________________________________________________
void TGFileBrowser::Refresh(Bool_t /*force*/)
{
   // Refresh content of the list tree.

   TTimer::SingleShot(200, "TGFileBrowser", this, "Update()");
   return; // disable refresh for the time being...
   TCursorSwitcher cursorSwitcher(this, fListTree);
   static UInt_t prev = 0;
   UInt_t curr =  gROOT->GetListOfBrowsables()->GetSize();
   if (!prev) prev = curr;

   if (prev != curr) { // refresh gROOT
      TGListTreeItem *sav = fListLevel;
      fListLevel = 0;
      BrowseObj(gROOT);
      fListLevel = sav;
      prev = curr;
   }
}

//______________________________________________________________________________
void TGFileBrowser::Update()
{
   // Update content of the list tree.

   TGListTreeItem *item = fCurrentDir;
   if (!item) item = fRootDir;
   //fListTree->DeleteChildren(item);
   TGListTreeItem *curr = fListTree->GetSelected(); // GetCurrent() ??
   if (curr) {
      TObject *obj = (TObject *) curr->GetUserData();
      if (obj && obj->InheritsFrom("TObjString")) {
         TString fullpath = FullPathName(curr);
         if (gSystem->AccessPathName(fullpath.Data())) {
            fListTree->DeleteItem(curr);
         }
      }
   }
   DoubleClicked(item, 1);
}

/**************************************************************************/
// Other
/**************************************************************************/

//______________________________________________________________________________
void TGFileBrowser::AddFSDirectory(const char *entry, const char *path, 
                                   Option_t *opt)
{
   // Add file system directory in the list tree.

   TGListTreeItem *item = 0;
   if ((opt == 0) || (strlen(opt) == 0)) {
      if (fRootDir == 0 && !fListTree->FindChildByName(0, rootdir))
         item = fRootDir = fListTree->AddItem(0, rootdir);
      return;
   }
   if (strstr(opt, "SetRootDir")) {
      if (!fListTree->FindChildByName(0, entry))
         item = fRootDir = fListTree->AddItem(0, entry);
   } 
   else if (strstr(opt, "Add")) {
      // MT: i give up! wanted to place entries for selected
      // directories like home, pwd, alice-macros.
      // TGListTreeItem *lti = fListTree->AddItem(0, entry);
      //
      if (!fListTree->FindChildByName(0, entry))
         item = fListTree->AddItem(0, entry);
   }
   if (item && path) {
      TString infos = path;
      item->SetTipText(path);
      TGPicture *pic = 0;
      if (infos.Contains("Removable"))
         pic = (TGPicture *)gClient->GetPicture("fdisk_t.xpm");
      else if (infos.Contains("Local"))
         pic = (TGPicture *)gClient->GetPicture("hdisk_t.xpm");
      else if (infos.Contains("CD"))
         pic = (TGPicture *)gClient->GetPicture("cdrom_t.xpm");
      else if (infos.Contains("Network"))
         pic = (TGPicture *)gClient->GetPicture("netdisk_t.xpm");
      if (pic)
         item->SetPictures(pic, pic);
   }
}

//______________________________________________________________________________
void TGFileBrowser::AddKey(TGListTreeItem *itm, TObject *obj, const char *name)
{
   // display content of ROOT file

   // Int_t from, to;
   TGListTreeItem *where;
   static TGListTreeItem *olditem = itm;
   static TGListTreeItem *item = itm;
   const TGPicture *pic;

   if ((fCnt == 0) || (olditem != itm)) {
      olditem = item = itm;
   }
   if (!name) name = obj->GetName();
   if (fNKeys > fGroupSize) {
      where = itm->GetFirstChild();
      while (where) {
         if (fListTree->FindItemByObj(where, obj))
            return;
         where = where->GetNextSibling();
      }
   }
   if ((fNKeys > fGroupSize) && (fCnt % fGroupSize == 0)) {
      if (item != itm) {
         TString newname = TString::Format("%s-%s", item->GetText(), name);
         item->Rename(newname.Data());
      }
      item = fListTree->AddItem(itm, name);
      item->SetDNDSource(kTRUE);
   }
   if ((fCnt > fGroupSize) && (fCnt >= fNKeys-1)) {
      TString newname = TString::Format("%s-%s", item->GetText(), name);
      item->Rename(newname.Data());
   }
   GetObjPicture(&pic, obj);
   if (!fListTree->FindChildByName(item, name)) {
      TGListTreeItem *it = fListTree->AddItem(item, name, obj, pic, pic);
      if (pic && (pic != fFileIcon) && (pic != fCachedPic))
         fClient->FreePicture(pic);
      it->SetDNDSource(kTRUE);
   }
   fCnt++;
}

//______________________________________________________________________________
void TGFileBrowser::ApplyFilter(Int_t id)
{
   // Apply filter selected in combo box to the file tree view.

   // Long64_t size;
   // Long_t fid, flags, modtime;

   if (fFilter) delete fFilter;
   fFilter = 0;
   if (id > 1)
      fFilter = new TRegexp(filters[id], kTRUE);
   TGListTreeItem *item = fCurrentDir;
   if (!item)
      item = fRootDir;
   fListTree->DeleteChildren(item);
   DoubleClicked(item, 1);
   //fListTree->AdjustPosition(item);
   fListTree->ClearViewPort();
}

//______________________________________________________________________________
void TGFileBrowser::Chdir(TGListTreeItem *item)
{
   // Make object associated with item the current directory.

   if (item) {
      TGListTreeItem *i = item;
      while (i) {
         TObject *obj = (TObject*) i->GetUserData();
         if ((obj) && obj->InheritsFrom("TDirectory")) {
            ((TDirectory *)obj)->cd();
            break;
         }
         i = i->GetParent();
      }
   }
}

//______________________________________________________________________________
void TGFileBrowser::CheckRemote(TGListTreeItem *item)
{
   // Check if the current list tree item points to a remote object.

   TObject *obj = (TObject *) item->GetUserData();
   if (obj) {
      if (obj->InheritsFrom("TApplicationRemote")) {
         if (!gApplication->GetAppRemote()) {
            gROOT->ProcessLine(TString::Format(".R %s", item->GetText()));
            if (gApplication->GetAppRemote()) {
               Getlinem(kInit, TString::Format("\n%s:root [0]",
                        gApplication->GetAppRemote()->ApplicationName()));
            }
         }
      }
      if (item->GetParent() && item->GetParent()->GetUserData() &&
         ((TObject *)item->GetParent()->GetUserData())->InheritsFrom("TApplicationRemote")) {
         // switch to remote session
         if (!gApplication->GetAppRemote()) {
            gROOT->ProcessLine(TString::Format(".R %s", item->GetParent()->GetText()));
            if (gApplication->GetAppRemote()) {
               Getlinem(kInit, TString::Format("\n%s:root [0]",
                        gApplication->GetAppRemote()->ApplicationName()));
            }
         }
         else if (!strcmp(item->GetText(), "ROOT Files")) {
            // update list of files opened in the remote session
            gApplication->SetBit(TApplication::kProcessRemotely);
            gApplication->ProcessLine("((TApplicationServer *)gApplication)->BrowseFile(0);");
         }
      }
      else {
         // check if the listtree item is from a local session or
         // from a remote session, then switch to the session it belongs to
         TGListTreeItem *top = item;
         while (top->GetParent()) {
            top = top->GetParent();
         }
         TObject *topobj = (TObject *) top->GetUserData();
         if (topobj && topobj->InheritsFrom("TApplicationRemote")) {
            // it belongs to a remote session
            if (!gApplication->GetAppRemote()) {
               // switch to remote session if not already in
               gROOT->ProcessLine(TString::Format(".R %s", top->GetText()));
               if (gApplication->GetAppRemote()) {
                  Getlinem(kInit, TString::Format("\n%s:root [0]",
                           gApplication->GetAppRemote()->ApplicationName()));
               }
            }
         }
         else if (gApplication->GetAppRemote()) {
            // switch back to local session if not already in
            gApplication->ProcessLine(".R");
            Getlinem(kInit, "\nroot [0]");
         }
      }
   }
   else if (gApplication->GetAppRemote()) {
      // switch back to local session if not already in
      gApplication->ProcessLine(".R");
      Getlinem(kInit, "\nroot [0]");
   }
}

//______________________________________________________________________________
void TGFileBrowser::Clicked(TGListTreeItem *item, Int_t btn, Int_t x, Int_t y)
{
   // Process mouse clicks in TGListTree.

   char path[1024];
   Long64_t size = 0;
   Long_t id = 0, flags = 0, modtime = 0;
   fListLevel = item;
   CheckRemote(item);
   if (item && btn == kButton3) {
      TObject *obj = (TObject *) item->GetUserData();
      if (obj && !obj->InheritsFrom("TObjString")) {
         if (obj->InheritsFrom("TKey") && (obj->IsA() != TClass::Class())) {
            Chdir(item);
            const char *clname = (const char *)gROOT->ProcessLine(TString::Format("((TKey *)0x%lx)->GetClassName();", obj));
            if (clname) {
               TClass *cl = TClass::GetClass(clname);
               void *add = gROOT->FindObject((char *) obj->GetName());
               if (add && cl->IsTObject()) {
                  obj = (TObject*)add;
                  item->SetUserData(obj);
               }
            }
         }
         if (obj->InheritsFrom("TLeaf") ||
             obj->InheritsFrom("TBranch")) {
            Chdir(item);
         }
         fContextMenu->Popup(x, y, obj, fBrowser);
      }
      else {
         fListTree->GetPathnameFromItem(item, path);
         if (strlen(path) > 3) {
            TString fullpath = FullPathName(item);
            gSystem->GetPathInfo(fullpath.Data(), &id, &size, &flags, &modtime);
            if (flags & 2) {
               fCurrentDir = item;
               if (fDir) delete fDir;
               fDir = new TSystemDirectory(item->GetText(), fullpath.Data());
               fContextMenu->Popup(x, y, fDir, fBrowser);
            }
            else {
               fCurrentDir = item->GetParent();
               if (fFile) delete fFile;
               fFile = new TSystemFile(item->GetText(), fullpath.Data());
               fContextMenu->Popup(x, y, fFile, fBrowser);
            }
         }
      }
      fListTree->ClearViewPort();
   }
   else {
      if (item->GetUserData()) {
         TObject *obj = (TObject *) item->GetUserData();
         if (obj && obj->InheritsFrom("TKey"))
            Chdir(item);
      }
      else {
         fListTree->GetPathnameFromItem(item, path);
         if (strlen(path) > 1) {
            TString fullpath = FullPathName(item);
            gSystem->GetPathInfo(fullpath.Data(), &id, &size, &flags, &modtime);
            if (flags & 2)
               fCurrentDir = item;
            else
               fCurrentDir = item->GetParent();
         }
      }
   }
}

//______________________________________________________________________________
TString TGFileBrowser::FullPathName(TGListTreeItem* item)
{
   // returns an absolute path

   TGListTreeItem *parent, *itm = item;
   TString dirname = itm->GetText();

   while ((parent=itm->GetParent())) {
      dirname = gSystem->ConcatFileName(parent->GetText(),dirname);
      itm = parent;
   }

   return dirname;
}

//______________________________________________________________________________
TString TGFileBrowser::DirName(TGListTreeItem* item)
{
   // returns the directory path

   TString dirname;
   TString fullpath = FullPathName(item);

#ifdef WIN32
   char   winDrive[256];
   char   winDir[256];
   char   winName[256];
   char   winExt[256];
   _splitpath(fullpath.Data(), winDrive, winDir, winName, winExt);
   dirname = TString::Format("%s%s", winDrive, winDir);
#else
   dirname = gSystem->DirName(fullpath);
#endif
   return dirname;
}

//______________________________________________________________________________
static Bool_t IsTextFile(const char *candidate)
{
   // Returns true if given a text file
   // Uses the specification given on p86 of the Camel book
   // - Text files have no NULLs in the first block
   // - and less than 30% of characters with high bit set

   Int_t i;
   Int_t nchars;
   Int_t weirdcount = 0;
   char buffer[512];
   FILE *infile;
   FileStat_t buf;

   gSystem->GetPathInfo(candidate, buf);
   if (!(buf.fMode & kS_IFREG))
      return kFALSE;

   infile = fopen(candidate, "r");
   if (infile) {
      // Read a block
      nchars = fread(buffer, 1, 512, infile);
      fclose (infile);
      // Examine the block
      for (i = 0; i < nchars; i++) {
         if (buffer[i] & 128)
            weirdcount++;
         if (buffer[i] == '\0')
            // No NULLs in text files
            return kFALSE;
      }
      if ((nchars > 0) && ((weirdcount * 100 / nchars) > 30))
         return kFALSE;
   } else {
      // Couldn't open it. Not a text file then
      return kFALSE;
   }
   return kTRUE;
}

//______________________________________________________________________________
void TGFileBrowser::DoubleClicked(TGListTreeItem *item, Int_t /*btn*/)
{
   // Process double clicks in TGListTree.

   const TGPicture *pic=0;
   TString dirname = DirName(item);
   TString fullpath = FullPathName(item);
   TGListTreeItem *itm;
   FileStat_t sbuf;
   Long64_t size;
   Long_t id, flags, modtime;
   char action[512];
   TString act;

   if (fNewBrowser)
      fNewBrowser->SetActBrowser(this);
   TCursorSwitcher switcher(this, fListTree);
   fListLevel = item;
   CheckRemote(item);
   TGListTreeItem *pitem = item->GetParent();
   TObject *obj = (TObject *) item->GetUserData();
   if (obj && !obj->InheritsFrom("TSystemFile")) {
      TString ext = obj->GetName();
      if (obj->InheritsFrom("TFile")) {
         fNKeys = ((TDirectory *)obj)->GetListOfKeys()->GetEntries();
      }
      else if (obj->InheritsFrom("TKey") && (obj->IsA() != TClass::Class())) {
         Chdir(item);
         const char *clname = (const char *)gROOT->ProcessLine(TString::Format("((TKey *)0x%lx)->GetClassName();", obj));
         if (clname) {
            TClass *cl = TClass::GetClass(clname);
            void *add = gROOT->FindObject((char *) obj->GetName());
            if (add && cl->IsTObject()) {
               obj = (TObject*)add;
               item->SetUserData(obj);
            }
         }
      }
      else if (obj->InheritsFrom("TLeaf") ||
          obj->InheritsFrom("TBranch")) {
         Chdir(item);
      }
      else if (obj->InheritsFrom("TRemoteObject")) {
         // the real object is a TKey
         TRemoteObject *robj = (TRemoteObject *)obj;
         if (!strcmp(robj->GetClassName(), "TKey")) {
            TGListTreeItem *parent = item;
            TRemoteObject *probj = (TRemoteObject *)parent->GetUserData();
            // find the TFile remote object containing the TKey
            while ( probj && strcmp(probj->GetClassName(), "TFile")) {
               parent = parent->GetParent();
               probj = (TRemoteObject *)parent->GetUserData();
            }
            if (probj && !strcmp(probj->GetClassName(), "TFile")) {
               // remotely browse file (remotely call TFile::cd())
               gApplication->SetBit(TApplication::kProcessRemotely);
               gApplication->ProcessLine(
                  TString::Format("((TApplicationServer *)gApplication)->BrowseFile(\"%s\");",
                       probj->GetName()));
               gSystem->Sleep(250);
            }
         }
         if (gClient->GetMimeTypeList()->GetAction(obj->GetName(), action)) {
            act = action;
            act.ReplaceAll("%s", obj->GetName());
            if ((act[0] != '!') && (strcmp(pitem->GetText(), "ROOT Files"))) {
               // special case for remote object: remote process
               gApplication->SetBit(TApplication::kProcessRemotely);
               gApplication->ProcessLine(act.Data());
            }
         }
         if ((ext.EndsWith(".root")) && (strcmp(pitem->GetText(), "ROOT Files"))) {
            gApplication->SetBit(TApplication::kProcessRemotely);
            gApplication->ProcessLine("((TApplicationServer *)gApplication)->BrowseFile(0);");
         }
      }
      if (!obj->InheritsFrom("TObjString")) {
         obj->Browse(fBrowser);
         fNKeys = 0;
         fCnt = 0;
         fListTree->ClearViewPort();
         return;
      }
   }
   flags = id = size = modtime = 0;
   gSystem->GetPathInfo(fullpath.Data(), &id, &size, &flags, &modtime);
   Int_t isdir = (Int_t)flags & 2;

   TString savdir = gSystem->WorkingDirectory();
   if (isdir) {
      fCurrentDir = item;
      //fListTree->DeleteChildren(item);
      TSystemDirectory dir(item->GetText(),FullPathName(item));
      TList *files = dir.GetListOfFiles();
      if (files) {
         files->Sort();
         TIter next(files);
         TSystemFile *file;
         TString fname;
         // directories first
         //fListTree->DeleteChildren(item);
         while ((file=(TSystemFile*)next())) {
            fname = file->GetName();
            if (file->IsDirectory()) {
               if (!fShowHidden && fname.BeginsWith("."))
                  continue;
               if ((fname!="..") && (fname!=".")) { // skip it
                  if (!fListTree->FindChildByName(item, fname)) {
                     itm = fListTree->AddItem(item, fname);
                     // uncomment line below to set directories as
                     // DND targets
                     //itm->SetDNDTarget(kTRUE);
                     itm->SetUserData(0);
                  }
               }
            }
         }
         // then files...
         TIter nextf(files);
         while ((file=(TSystemFile*)nextf())) {
            fname = file->GetName();
            if (!file->IsDirectory() && (fFilter == 0 ||
               (fFilter && fname.Index(*fFilter) != kNPOS))) {
               if (!fShowHidden && fname.BeginsWith("."))
                  continue;
               size = modtime = 0;
               if (gSystem->GetPathInfo(fname, sbuf) == 0) {
                  size    = sbuf.fSize;
                  modtime = sbuf.fMtime;
               }
               pic = gClient->GetMimeTypeList()->GetIcon(fname, kTRUE);
               if (!pic)
                  pic = fFileIcon;
               if (!fListTree->FindChildByName(item, fname)) {
                  itm = fListTree->AddItem(item,fname,pic,pic);
                  if (pic != fFileIcon)
                     fClient->FreePicture(pic);
                  itm->SetUserData(new TObjString(TString::Format("file://%s/%s\r\n",
                                   gSystem->UnixPathName(file->GetTitle()),
                                   file->GetName())), kTRUE);
                  itm->SetDNDSource(kTRUE);
                  if (size && modtime) {
                     char *tiptext = FormatFileInfo(fname.Data(), size, modtime);
                     itm->SetTipText(tiptext);
                     delete [] tiptext;
                  }
               }
            }
         }
         files->Delete();
         delete files;
      }
   }
   else {
      fCurrentDir = item->GetParent();
      TSystemFile f(item->GetText(), fullpath.Data());
      TString fname = f.GetName();
      if (fname.EndsWith(".root")) {
         TDirectory *rfile = 0;
         gSystem->ChangeDirectory(dirname.Data());
         rfile = (TDirectory *)gROOT->GetListOfFiles()->FindObject(obj);
         if (!rfile) {
            rfile = (TDirectory *)gROOT->ProcessLine(TString::Format("new TFile(\"%s\")",fname.Data()));
         }
         if (rfile) {
            // replace actual user data (TObjString) by the TDirectory...
            if (item->GetUserData()) {
               // first delete the data to avoid memory leaks
               TObject *obj2 = static_cast<TObject *>(item->GetUserData());
               // only delete TObjString as they are the only objects
               // created who have to be deleted
               delete dynamic_cast<TObjString *>(obj2);
            }
            item->SetUserData(rfile);
            fNKeys = rfile->GetListOfKeys()->GetEntries();
            fCnt = 0;
            rfile->Browse(fBrowser);
            fNKeys = 0;
            fCnt = 0;
         }
      }
      else if (fname.EndsWith(".png")) {
         gSystem->ChangeDirectory(dirname.Data());
         XXExecuteDefaultAction(&f);
         gSystem->ChangeDirectory(savdir.Data());
      }
      else if (IsTextFile(fullpath.Data())) {
         gSystem->ChangeDirectory(dirname.Data());
         if (fNewBrowser) {
            TGFrameElement *fe = 0;
            TGTab *tabRight = fNewBrowser->GetTabRight();
            TGCompositeFrame *frame = tabRight->GetCurrentContainer();
            if (frame)
               fe = (TGFrameElement *)frame->GetList()->First();
            if (fe) {
               TGCompositeFrame *embed = (TGCompositeFrame *)fe->fFrame;
               TString fullname = f.GetTitle();
               fullname.ReplaceAll("\\", "\\\\");
               if (embed->InheritsFrom("TGTextEditor")) {
                  gROOT->ProcessLine(TString::Format("((TGTextEditor *)0x%lx)->LoadFile(\"%s\");",
                                     embed, fullname.Data()));
               }
               else if (embed->InheritsFrom("TGTextEdit")) {
                  gROOT->ProcessLine(TString::Format("((TGTextEdit *)0x%lx)->LoadFile(\"%s\");",
                                     embed, fullname.Data()));
               }
               else {
                  XXExecuteDefaultAction(&f);
               }
            }
            else {
               XXExecuteDefaultAction(&f);
            }
         }
         gSystem->ChangeDirectory(savdir.Data());
      }
      else {
         gSystem->ChangeDirectory(dirname.Data());
         XXExecuteDefaultAction(&f);
         gSystem->ChangeDirectory(savdir.Data());
      }
   }
   //gSystem->ChangeDirectory(savdir.Data());
   fListTree->ClearViewPort();
}

//____________________________________________________________________________
Long_t TGFileBrowser::XXExecuteDefaultAction(TObject *obj)
{
   // Execute default action for selected object (action is specified
   // in the $HOME/.root.mimes or $ROOTSYS/etc/root.mimes file.

   char action[512];
   TString act;
   TString ext = obj->GetName();
   fBrowser->SetDrawOption(GetDrawOption());

   if (gClient->GetMimeTypeList()->GetAction(obj->GetName(), action)) {
      act = action;
      act.ReplaceAll("%s", obj->GetName());
      gInterpreter->SaveGlobalsContext();

      if (act[0] == '!') {
         act.Remove(0, 1);
         gSystem->Exec(act.Data());
         return 0;
      } else {
         // special case for remote object: remote process
         if (obj->InheritsFrom("TRemoteObject"))
            gApplication->SetBit(TApplication::kProcessRemotely);
         return gApplication->ProcessLine(act.Data());
      }
   }
   return 0;
}

//______________________________________________________________________________
char *TGFileBrowser::FormatFileInfo(const char *fname, Long64_t size, Long_t modtime)
{
   // Format file information to be displayed in the tooltip.

   Long64_t fsize, bsize;
   TString infos = fname;
   infos += "\n";

   fsize = bsize = size;
   if (fsize > 1024) {
      fsize /= 1024;
      if (fsize > 1024) {
         // 3.7MB is more informative than just 3MB
         infos += TString::Format("Size: %lld.%lldM", fsize/1024, (fsize%1024)/103);
      } else {
         infos += TString::Format("Size: %lld.%lldK", bsize/1024, (bsize%1024)/103);
      }
   } else {
      infos += TString::Format("Size: %lld", bsize);
   }
   struct tm *newtime;
   time_t loctime = (time_t) modtime;
   newtime = localtime(&loctime);
   infos += "\n";
   infos += TString::Format("%d-%02d-%02d %02d:%02d", newtime->tm_year + 1900,
           newtime->tm_mon+1, newtime->tm_mday, newtime->tm_hour,
           newtime->tm_min);
   return StrDup(infos.Data());
}

//______________________________________________________________________________
void TGFileBrowser::GetObjPicture(const TGPicture **pic, TObject *obj)
{
   // Retrieve icons associated with class "name". Association is made
   // via the user's ~/.root.mimes file or via $ROOTSYS/etc/root.mimes.

   TClass *objClass = 0;
   static TImage *im = 0;
   if (!im) {
      im = TImage::Create();
   }

   if (obj->IsA() == TClass::Class()) {
      objClass = obj->IsA();
   }
   else if (obj->InheritsFrom("TKey")) {
      const char *clname = (const char *)gROOT->ProcessLine(TString::Format("((TKey *)0x%lx)->GetClassName();", obj));
      if (clname)
         objClass = TClass::GetClass(clname);
   }
   else if (obj->InheritsFrom("TKeyMapFile")) {
      const char *title = (const char *)gROOT->ProcessLine(TString::Format("((TKeyMapFile *)0x%lx)->GetTitle();", obj));
      if (title)
         objClass = TClass::GetClass(title);
   }
   else if (obj->InheritsFrom("TRemoteObject")) {
      // special case for remote object: get real object class
      TRemoteObject *robj = (TRemoteObject *)obj;
      if (!strcmp(robj->GetClassName(), "TKey"))
         objClass = TClass::GetClass(robj->GetKeyClassName());
      else
         objClass = TClass::GetClass(robj->GetClassName());
   }
   else
      objClass = obj->IsA();
   const char *name = obj->GetIconName() ? obj->GetIconName() : objClass->GetName();
   TString xpm_magic(name, 3);
   Bool_t xpm = xpm_magic == "/* ";
   const char *iconname = xpm ? obj->GetName() : name;

   if (obj->IsA()->InheritsFrom("TGeoVolume")) {
      iconname = obj->GetIconName() ? obj->GetIconName() : obj->IsA()->GetName();
   }

   if (fCachedPicName == iconname) {
      *pic = fCachedPic;
      return;
   }
   *pic = gClient->GetMimeTypeList()->GetIcon(iconname, kTRUE);
   if (!(*pic) && xpm) {
      if (im && im->SetImageBuffer((char**)&name, TImage::kXpm)) {
         im->Scale(im->GetWidth()/4, im->GetHeight()/4);
         *pic = gClient->GetPicturePool()->GetPicture(iconname, im->GetPixmap(),
                                                      im->GetMask());
      }
      gClient->GetMimeTypeList()->AddType("[thumbnail]", iconname, iconname, iconname, "->Browse()");
      return;
   }
   if (fCachedPic && (fCachedPic != fFileIcon))
      fClient->FreePicture(fCachedPic);
   if (*pic == 0) {
      if (!obj->IsFolder())
         *pic = fFileIcon;
   }
   fCachedPic = *pic;
   fCachedPicName = iconname;
}

//______________________________________________________________________________
void TGFileBrowser::GotoDir(const char *path)
{
   // Go to the directory "path" and open all the parent list tree items.

   TGListTreeItem *item, *itm;
   Bool_t expand = kTRUE;
   TString sPath(gSystem->UnixPathName(path));
   item = fRootDir;
   if (item == 0) return;
   fListTree->OpenItem(item);
   TObjArray *tokens = sPath.Tokenize("/");
   if (tokens->IsEmpty()) {
      fListTree->HighlightItem(item);
      DoubleClicked(item, 1);
      delete tokens;
      fListTree->ClearViewPort();
      fListTree->AdjustPosition(item);
      return;
   }
   TString first = ((TObjString*)tokens->At(0))->GetName();
   if (first == "afs")
      expand = kFALSE;
   if (first.Length() == 2 && first.EndsWith(":")) {
      TList *curvol  = gSystem->GetVolumes("cur");
      if (curvol) {
         TNamed *drive = (TNamed *)curvol->At(0);
         if (first == drive->GetName()) {
            TString infos = drive->GetTitle();
            if (infos.Contains("Network"))
               expand = kFALSE;
         }
         delete curvol;
      }
   }
   for (Int_t i = 0; i < tokens->GetEntriesFast(); ++i) {
      TString token = ((TObjString*)tokens->At(i))->GetName();
      if (token.Length() == 2 && token.EndsWith(":")) {
         token.Append("\\");
         itm = fListTree->FindChildByName(0, token);
         if (itm) {
            item = itm;
            fListTree->OpenItem(item);
            if (expand)
               DoubleClicked(item, 1);
         }
         continue;
      }
      itm = fListTree->FindChildByName(item, token);
      if (itm) {
         item = itm;
         fListTree->OpenItem(item);
         if (expand)
            DoubleClicked(item, 1);
      }
      else {
         itm = fListTree->AddItem(item, token);
         item = itm;
         fListTree->OpenItem(item);
         if (expand)
            DoubleClicked(item, 1);
      }
   }
   fListTree->HighlightItem(item);
   DoubleClicked(item, 1);
   delete tokens;
   fListTree->ClearViewPort();
   fListTree->AdjustPosition(item);
}

//______________________________________________________________________________
void TGFileBrowser::Selected(char *)
{
   // A ROOT File has been selected in TGHtmlBrowser.

   TGListTreeItem *itm = fListTree->FindChildByData(0, gROOT->GetListOfFiles());
   if (itm) {
      fListTree->ClearHighlighted();
      fListLevel = itm;
      fListTree->HighlightItem(fListLevel);
      fListTree->OpenItem(fListLevel);
      BrowseObj(gROOT->GetListOfFiles());
      fListTree->ClearViewPort();
      fListTree->AdjustPosition(fListLevel);
   }
}

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