ROOT logo
// @(#)root/base:$Id$
// Author: Fons Rademakers   25/10/95

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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// Using a TBrowser one can browse all ROOT objects. It shows in a list //
// on the left side of the window all browsable ROOT classes. Selecting //
// one of the classes displays, in the iconbox on the right side, all   //
// objects in the class. Selecting one of the objects in the iconbox,   //
// will place all browsable objects in a new list and draws the         //
// contents of the selected class in the iconbox. And so on....         //
//                                                                      //
//Begin_Html <img src="gif/browser.gif"> End_Html                       //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TBrowser.h"
#include "TGuiFactory.h"
#include "TROOT.h"
#include "TSystem.h"
#include "TStyle.h"
#include "TTimer.h"
#include "TContextMenu.h"
#include "TInterpreter.h"
#include "TVirtualMutex.h"
#include "TClass.h"
#include "TApplication.h"

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TBrowserTimer                                                        //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

class TBrowserTimer : public TTimer {

protected:
   TBrowser *fBrowser;
   Bool_t    fActivate;

public:
   TBrowserTimer(TBrowser *b, Long_t ms = 1000)
      : TTimer(ms, kTRUE), fBrowser(b), fActivate(kFALSE) { }
   Bool_t Notify();
};

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TBrowserObject                                                       //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

class TBrowserObject : public TNamed
{
   // This class is designed to wrap a Foreign object in order to
   // inject it into the Browse sub-system.

public:

   TBrowserObject(void *obj, TClass *cl, const char *brname);
   ~TBrowserObject(){;}

   void    Browse(TBrowser* b);
   Bool_t  IsFolder() const;
   TClass *IsA() const { return fClass; }

private:
   void     *fObj;   //! pointer to the foreign object
   TClass   *fClass; //! pointer to class of the foreign object

};


ClassImp(TBrowser)

//______________________________________________________________________________
TBrowser::TBrowser(const char *name, const char *title, TBrowserImp *extimp,
                   Option_t *opt)
   : TNamed(name, title), fLastSelectedObject(0), fImp(extimp), fTimer(0),
     fContextMenu(0), fNeedRefresh(kFALSE)
{
   // Create a new browser with a name, title. Width and height are by
   // default set to 640x400 and (optionally) adjusted by the screen factor
   // (depending on Rint.Canvas.UseScreenFactor to be true or false, default
   // is true).

   // make sure that the Gpad and GUI libs are loaded
   TApplication::NeedGraphicsLibs();
   gApplication->InitializeGraphics();
   if (TClass::IsCallingNew() != TClass::kRealNew) {
      fImp = 0;
   } else {
      Float_t cx = gStyle->GetScreenFactor();
      UInt_t w = UInt_t(cx*800);
      UInt_t h = UInt_t(cx*500);
      if (!fImp) fImp = gGuiFactory->CreateBrowserImp(this, title, w, h, opt);
      Create();
   }
}

//______________________________________________________________________________
TBrowser::TBrowser(const char *name, const char *title, UInt_t width,
                   UInt_t height, TBrowserImp *extimp, Option_t *opt)
   : TNamed(name, title), fLastSelectedObject(0), fImp(extimp), fTimer(0), fContextMenu(0),
     fNeedRefresh(kFALSE)
{
   // Create a new browser with a name, title, width and height.

   // make sure that the Gpad and GUI libs are loaded
   TApplication::NeedGraphicsLibs();
   gApplication->InitializeGraphics();
   if (!fImp) fImp = gGuiFactory->CreateBrowserImp(this, title, width, height, opt);
   Create();
}

//______________________________________________________________________________
TBrowser::TBrowser(const char *name, const char *title, Int_t x, Int_t y,
                   UInt_t width, UInt_t height, TBrowserImp *extimp, Option_t *opt)
   : TNamed(name, title), fLastSelectedObject(0), fImp(extimp), fTimer(0), fContextMenu(0),
     fNeedRefresh(kFALSE)
{
   // Create a new browser with a name, title, position, width and height.

   // make sure that the Gpad and GUI libs are loaded
   TApplication::NeedGraphicsLibs();
   gApplication->InitializeGraphics();
   fImp = gGuiFactory->CreateBrowserImp(this, title, x, y, width, height, opt);
   Create();
}

//______________________________________________________________________________
TBrowser::TBrowser(const char *name, TObject *obj, const char *title, Option_t *opt)
   : TNamed(name, title), fLastSelectedObject(0), fImp(0), fTimer(0), fContextMenu(0),
     fNeedRefresh(kFALSE)
{
   // Create a new browser with a name, title, width and height for TObject *obj.

   // make sure that the Gpad and GUI libs are loaded
   TApplication::NeedGraphicsLibs();
   gApplication->InitializeGraphics();
   Float_t cx = gStyle->GetScreenFactor();
   UInt_t w = UInt_t(cx*800);
   UInt_t h = UInt_t(cx*500);

   if (!fImp) fImp = gGuiFactory->CreateBrowserImp(this, title, w, h, opt);
   Create(obj);
}

//______________________________________________________________________________
TBrowser::TBrowser(const char *name, TObject *obj, const char *title,
                   UInt_t width, UInt_t height, Option_t *opt)
   : TNamed(name, title), fLastSelectedObject(0), fTimer(0), fContextMenu(0),
     fNeedRefresh(kFALSE)
{
   // Create a new browser with a name, title, width and height for TObject *obj.

   // make sure that the Gpad and GUI libs are loaded
   TApplication::NeedGraphicsLibs();
   gApplication->InitializeGraphics();
   fImp = gGuiFactory->CreateBrowserImp(this, title, width, height, opt);
   Create(obj);
}

//______________________________________________________________________________
TBrowser::TBrowser(const char *name, TObject *obj, const char *title,
                   Int_t x, Int_t y,
                   UInt_t width, UInt_t height, Option_t *opt)
   : TNamed(name, title), fLastSelectedObject(0), fTimer(0), fContextMenu(0),
     fNeedRefresh(kFALSE)
{
   // Create a new browser with a name, title, width and height for TObject *obj.

   // make sure that the Gpad and GUI libs are loaded
   TApplication::NeedGraphicsLibs();
   gApplication->InitializeGraphics();
   fImp = gGuiFactory->CreateBrowserImp(this, title, x, y, width, height, opt);
   Create(obj);
}

//______________________________________________________________________________
TBrowser::TBrowser(const char *name, void *obj, TClass *cl,
                   const char *objname, const char *title, Option_t *opt)
   : TNamed(name, title), fLastSelectedObject(0), fTimer(0), fContextMenu(0),
     fNeedRefresh(kFALSE)
{
   // Create a new browser with a name, title, width and height for TObject *obj.

   // make sure that the Gpad and GUI libs are loaded
   TApplication::NeedGraphicsLibs();
   gApplication->InitializeGraphics();
   Float_t cx = gStyle->GetScreenFactor();
   UInt_t w = UInt_t(cx*800);
   UInt_t h = UInt_t(cx*500);

   fImp = gGuiFactory->CreateBrowserImp(this, title, w, h, opt);

   Create(new TBrowserObject(obj,cl,objname));
}

//______________________________________________________________________________
TBrowser::TBrowser(const char *name, void *obj, TClass *cl,
                   const char *objname, const char *title,
                   UInt_t width, UInt_t height, Option_t *opt)
   : TNamed(name, title), fLastSelectedObject(0), fTimer(0), fContextMenu(0),
     fNeedRefresh(kFALSE)
{
   // Create a new browser with a name, title, width and height for TObject *obj.

   // make sure that the Gpad and GUI libs are loaded
   TApplication::NeedGraphicsLibs();
   gApplication->InitializeGraphics();
   fImp = gGuiFactory->CreateBrowserImp(this, title, width, height, opt);
   Create(new TBrowserObject(obj,cl,objname));
}

//______________________________________________________________________________
TBrowser::TBrowser(const char *name,void *obj,  TClass *cl,
                   const char *objname, const char *title,
                   Int_t x, Int_t y,
                   UInt_t width, UInt_t height, Option_t *opt)
   : TNamed(name, title), fLastSelectedObject(0), fTimer(0), fContextMenu(0),
     fNeedRefresh(kFALSE)
{
   // Create a new browser with a name, title, width and height for TObject *obj.

   // make sure that the Gpad and GUI libs are loaded
   TApplication::NeedGraphicsLibs();
   gApplication->InitializeGraphics();
   fImp = gGuiFactory->CreateBrowserImp(this, title, x, y, width, height, opt);
   Create(new TBrowserObject(obj,cl,objname));
}

//______________________________________________________________________________
TBrowser::~TBrowser()
{
   // Delete the browser.

   fImp->CloseTabs();
   R__LOCKGUARD2(gROOTMutex);
   gROOT->GetListOfBrowsers()->Remove(this);
   delete fContextMenu;
   delete fTimer;
   delete fImp;
}

//______________________________________________________________________________
void TBrowser::Add(TObject *obj, const char *name, Int_t check)
{
   // Add object with name to browser. If name not set the objects GetName()
   // is used. If check < 0 (default) no check box is drawn, if 0 then
   // unchecked checkbox is added, if 1 checked checkbox is added.

   if (obj && fImp) {
      fImp->Add(obj, name, check);
      obj->SetBit(kMustCleanup);
   }
}

//______________________________________________________________________________
void TBrowser::Add(void *obj, TClass *cl, const char *name, Int_t check)
{
   // Add foreign object with name to browser.
   // 'cl' is the type use to store the value of obj.
   // So literally the following pseudo code should be correct:
   //    `cl->GetName()` * ptr = (`cl->GetName()`*) obj;
   // and the value of obj is not necessarily the start of the object.
   // If check < 0 (default) no check box is drawn, if 0 then
   // unchecked checkbox is added, if 1 checked checkbox is added.

   if (!obj || !cl) return;
   TObject *to;
   if (cl->IsTObject()) to = (TObject*)cl->DynamicCast(TObject::Class(),obj,kTRUE);
   else                 to = new TBrowserObject(obj,cl,name);

   if (!to) return;
   Add(to,name,check);
}

//______________________________________________________________________________
void TBrowser::AddCheckBox(TObject *obj, Bool_t check)
{
   // Add checkbox for this item.

   if (obj && fImp) {
      fImp->AddCheckBox(obj, check);
   }
}

//______________________________________________________________________________
void TBrowser::CheckObjectItem(TObject *obj, Bool_t check)
{
   // Change status of checkbox for this item.

   if (obj && fImp) {
      fImp->CheckObjectItem(obj, check);
   }
}

//______________________________________________________________________________
void TBrowser::RemoveCheckBox(TObject *obj)
{
   // Remove checkbox for this item.

   if (obj && fImp) {
      fImp->RemoveCheckBox(obj);
   }
}

//______________________________________________________________________________
void TBrowser::Create(TObject *obj)
{
   // Create the browser, called by the ctors.

   fNeedRefresh = kFALSE;

   fTimer = new TBrowserTimer(this);
   gSystem->AddTimer(fTimer);

   R__LOCKGUARD2(gROOTMutex);
   gROOT->GetListOfBrowsers()->Add(this);

   // Get the list of globals
   gROOT->GetListOfGlobals(kTRUE);
   gROOT->GetListOfGlobalFunctions(kTRUE);

   fContextMenu = new TContextMenu("BrowserContextMenu") ;

   // Fill the first list from the present TObject obj
   if (obj) {
      Add(obj);
      if (fImp) fImp->BrowseObj(obj);
   } else if (fImp) {
      // Fill the first list with all browsable classes from TROOT
      fImp->BrowseObj(gROOT);
   }

   // The first list will be filled by TWin32BrowserImp ctor
   // with all browsable classes from TROOT
}

//______________________________________________________________________________
void TBrowser::ExecuteDefaultAction(TObject *obj)
{
   // Execute default action for selected object (action is specified
   // in the $HOME/.root.mimes or $ROOTSYS/etc/root.mimes file).

   if (obj && fImp)
      fImp->ExecuteDefaultAction(obj);
}

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

   if (fImp && obj) {
      fImp->RecursiveRemove(obj);
      fNeedRefresh = kTRUE;
   }
}

//______________________________________________________________________________
void TBrowser::Refresh()
{
   // Refresh browser contents.

   fNeedRefresh = kTRUE;
   if (fImp) fImp->Refresh();
   fNeedRefresh = kFALSE;
}

//______________________________________________________________________________
void TBrowser::SetSelected(TObject *clickedObject)
{
   // Assign the last selected object.

   fLastSelectedObject = clickedObject;
}

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  TBrowserTimer                                                       //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

//______________________________________________________________________________
Bool_t TBrowserTimer::Notify()
{
   // Called whenever timer times out.

   if (fBrowser) {
      if (fBrowser->GetRefreshFlag()) {
         fBrowser->SetRefreshFlag(kFALSE);
         fActivate = kTRUE;
      } else if (fActivate) {
         fActivate = kFALSE;
         fBrowser->Refresh();
      }
   }
   Reset();

   return kFALSE;
}

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  TBrowserObject                                                      //
//                                                                      //
//  This is a wrapper class to emulate the TObject interface            //
//  around an object of a non-TObject class                             //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

//______________________________________________________________________________
TBrowserObject::TBrowserObject(void *obj, TClass *cl, const char *brname)
   : TNamed(brname, cl ? cl->GetName() : ""), fObj(obj), fClass(cl)
{
   // Constructor.

   if (cl==0) Fatal("Constructor","Class parameter should not be null");
   SetBit(kCanDelete);
}

//______________________________________________________________________________
Bool_t TBrowserObject::IsFolder() const
{
   // Return kTRUE if the object is a folder (contains browsable objects).

   return fClass->IsFolder(fObj);
}

//______________________________________________________________________________
void TBrowserObject::Browse(TBrowser* b)
{
   // Browse the content of the underlying object.

   fClass->Browse(fObj, b);
}
 TBrowser.cxx:1
 TBrowser.cxx:2
 TBrowser.cxx:3
 TBrowser.cxx:4
 TBrowser.cxx:5
 TBrowser.cxx:6
 TBrowser.cxx:7
 TBrowser.cxx:8
 TBrowser.cxx:9
 TBrowser.cxx:10
 TBrowser.cxx:11
 TBrowser.cxx:12
 TBrowser.cxx:13
 TBrowser.cxx:14
 TBrowser.cxx:15
 TBrowser.cxx:16
 TBrowser.cxx:17
 TBrowser.cxx:18
 TBrowser.cxx:19
 TBrowser.cxx:20
 TBrowser.cxx:21
 TBrowser.cxx:22
 TBrowser.cxx:23
 TBrowser.cxx:24
 TBrowser.cxx:25
 TBrowser.cxx:26
 TBrowser.cxx:27
 TBrowser.cxx:28
 TBrowser.cxx:29
 TBrowser.cxx:30
 TBrowser.cxx:31
 TBrowser.cxx:32
 TBrowser.cxx:33
 TBrowser.cxx:34
 TBrowser.cxx:35
 TBrowser.cxx:36
 TBrowser.cxx:37
 TBrowser.cxx:38
 TBrowser.cxx:39
 TBrowser.cxx:40
 TBrowser.cxx:41
 TBrowser.cxx:42
 TBrowser.cxx:43
 TBrowser.cxx:44
 TBrowser.cxx:45
 TBrowser.cxx:46
 TBrowser.cxx:47
 TBrowser.cxx:48
 TBrowser.cxx:49
 TBrowser.cxx:50
 TBrowser.cxx:51
 TBrowser.cxx:52
 TBrowser.cxx:53
 TBrowser.cxx:54
 TBrowser.cxx:55
 TBrowser.cxx:56
 TBrowser.cxx:57
 TBrowser.cxx:58
 TBrowser.cxx:59
 TBrowser.cxx:60
 TBrowser.cxx:61
 TBrowser.cxx:62
 TBrowser.cxx:63
 TBrowser.cxx:64
 TBrowser.cxx:65
 TBrowser.cxx:66
 TBrowser.cxx:67
 TBrowser.cxx:68
 TBrowser.cxx:69
 TBrowser.cxx:70
 TBrowser.cxx:71
 TBrowser.cxx:72
 TBrowser.cxx:73
 TBrowser.cxx:74
 TBrowser.cxx:75
 TBrowser.cxx:76
 TBrowser.cxx:77
 TBrowser.cxx:78
 TBrowser.cxx:79
 TBrowser.cxx:80
 TBrowser.cxx:81
 TBrowser.cxx:82
 TBrowser.cxx:83
 TBrowser.cxx:84
 TBrowser.cxx:85
 TBrowser.cxx:86
 TBrowser.cxx:87
 TBrowser.cxx:88
 TBrowser.cxx:89
 TBrowser.cxx:90
 TBrowser.cxx:91
 TBrowser.cxx:92
 TBrowser.cxx:93
 TBrowser.cxx:94
 TBrowser.cxx:95
 TBrowser.cxx:96
 TBrowser.cxx:97
 TBrowser.cxx:98
 TBrowser.cxx:99
 TBrowser.cxx:100
 TBrowser.cxx:101
 TBrowser.cxx:102
 TBrowser.cxx:103
 TBrowser.cxx:104
 TBrowser.cxx:105
 TBrowser.cxx:106
 TBrowser.cxx:107
 TBrowser.cxx:108
 TBrowser.cxx:109
 TBrowser.cxx:110
 TBrowser.cxx:111
 TBrowser.cxx:112
 TBrowser.cxx:113
 TBrowser.cxx:114
 TBrowser.cxx:115
 TBrowser.cxx:116
 TBrowser.cxx:117
 TBrowser.cxx:118
 TBrowser.cxx:119
 TBrowser.cxx:120
 TBrowser.cxx:121
 TBrowser.cxx:122
 TBrowser.cxx:123
 TBrowser.cxx:124
 TBrowser.cxx:125
 TBrowser.cxx:126
 TBrowser.cxx:127
 TBrowser.cxx:128
 TBrowser.cxx:129
 TBrowser.cxx:130
 TBrowser.cxx:131
 TBrowser.cxx:132
 TBrowser.cxx:133
 TBrowser.cxx:134
 TBrowser.cxx:135
 TBrowser.cxx:136
 TBrowser.cxx:137
 TBrowser.cxx:138
 TBrowser.cxx:139
 TBrowser.cxx:140
 TBrowser.cxx:141
 TBrowser.cxx:142
 TBrowser.cxx:143
 TBrowser.cxx:144
 TBrowser.cxx:145
 TBrowser.cxx:146
 TBrowser.cxx:147
 TBrowser.cxx:148
 TBrowser.cxx:149
 TBrowser.cxx:150
 TBrowser.cxx:151
 TBrowser.cxx:152
 TBrowser.cxx:153
 TBrowser.cxx:154
 TBrowser.cxx:155
 TBrowser.cxx:156
 TBrowser.cxx:157
 TBrowser.cxx:158
 TBrowser.cxx:159
 TBrowser.cxx:160
 TBrowser.cxx:161
 TBrowser.cxx:162
 TBrowser.cxx:163
 TBrowser.cxx:164
 TBrowser.cxx:165
 TBrowser.cxx:166
 TBrowser.cxx:167
 TBrowser.cxx:168
 TBrowser.cxx:169
 TBrowser.cxx:170
 TBrowser.cxx:171
 TBrowser.cxx:172
 TBrowser.cxx:173
 TBrowser.cxx:174
 TBrowser.cxx:175
 TBrowser.cxx:176
 TBrowser.cxx:177
 TBrowser.cxx:178
 TBrowser.cxx:179
 TBrowser.cxx:180
 TBrowser.cxx:181
 TBrowser.cxx:182
 TBrowser.cxx:183
 TBrowser.cxx:184
 TBrowser.cxx:185
 TBrowser.cxx:186
 TBrowser.cxx:187
 TBrowser.cxx:188
 TBrowser.cxx:189
 TBrowser.cxx:190
 TBrowser.cxx:191
 TBrowser.cxx:192
 TBrowser.cxx:193
 TBrowser.cxx:194
 TBrowser.cxx:195
 TBrowser.cxx:196
 TBrowser.cxx:197
 TBrowser.cxx:198
 TBrowser.cxx:199
 TBrowser.cxx:200
 TBrowser.cxx:201
 TBrowser.cxx:202
 TBrowser.cxx:203
 TBrowser.cxx:204
 TBrowser.cxx:205
 TBrowser.cxx:206
 TBrowser.cxx:207
 TBrowser.cxx:208
 TBrowser.cxx:209
 TBrowser.cxx:210
 TBrowser.cxx:211
 TBrowser.cxx:212
 TBrowser.cxx:213
 TBrowser.cxx:214
 TBrowser.cxx:215
 TBrowser.cxx:216
 TBrowser.cxx:217
 TBrowser.cxx:218
 TBrowser.cxx:219
 TBrowser.cxx:220
 TBrowser.cxx:221
 TBrowser.cxx:222
 TBrowser.cxx:223
 TBrowser.cxx:224
 TBrowser.cxx:225
 TBrowser.cxx:226
 TBrowser.cxx:227
 TBrowser.cxx:228
 TBrowser.cxx:229
 TBrowser.cxx:230
 TBrowser.cxx:231
 TBrowser.cxx:232
 TBrowser.cxx:233
 TBrowser.cxx:234
 TBrowser.cxx:235
 TBrowser.cxx:236
 TBrowser.cxx:237
 TBrowser.cxx:238
 TBrowser.cxx:239
 TBrowser.cxx:240
 TBrowser.cxx:241
 TBrowser.cxx:242
 TBrowser.cxx:243
 TBrowser.cxx:244
 TBrowser.cxx:245
 TBrowser.cxx:246
 TBrowser.cxx:247
 TBrowser.cxx:248
 TBrowser.cxx:249
 TBrowser.cxx:250
 TBrowser.cxx:251
 TBrowser.cxx:252
 TBrowser.cxx:253
 TBrowser.cxx:254
 TBrowser.cxx:255
 TBrowser.cxx:256
 TBrowser.cxx:257
 TBrowser.cxx:258
 TBrowser.cxx:259
 TBrowser.cxx:260
 TBrowser.cxx:261
 TBrowser.cxx:262
 TBrowser.cxx:263
 TBrowser.cxx:264
 TBrowser.cxx:265
 TBrowser.cxx:266
 TBrowser.cxx:267
 TBrowser.cxx:268
 TBrowser.cxx:269
 TBrowser.cxx:270
 TBrowser.cxx:271
 TBrowser.cxx:272
 TBrowser.cxx:273
 TBrowser.cxx:274
 TBrowser.cxx:275
 TBrowser.cxx:276
 TBrowser.cxx:277
 TBrowser.cxx:278
 TBrowser.cxx:279
 TBrowser.cxx:280
 TBrowser.cxx:281
 TBrowser.cxx:282
 TBrowser.cxx:283
 TBrowser.cxx:284
 TBrowser.cxx:285
 TBrowser.cxx:286
 TBrowser.cxx:287
 TBrowser.cxx:288
 TBrowser.cxx:289
 TBrowser.cxx:290
 TBrowser.cxx:291
 TBrowser.cxx:292
 TBrowser.cxx:293
 TBrowser.cxx:294
 TBrowser.cxx:295
 TBrowser.cxx:296
 TBrowser.cxx:297
 TBrowser.cxx:298
 TBrowser.cxx:299
 TBrowser.cxx:300
 TBrowser.cxx:301
 TBrowser.cxx:302
 TBrowser.cxx:303
 TBrowser.cxx:304
 TBrowser.cxx:305
 TBrowser.cxx:306
 TBrowser.cxx:307
 TBrowser.cxx:308
 TBrowser.cxx:309
 TBrowser.cxx:310
 TBrowser.cxx:311
 TBrowser.cxx:312
 TBrowser.cxx:313
 TBrowser.cxx:314
 TBrowser.cxx:315
 TBrowser.cxx:316
 TBrowser.cxx:317
 TBrowser.cxx:318
 TBrowser.cxx:319
 TBrowser.cxx:320
 TBrowser.cxx:321
 TBrowser.cxx:322
 TBrowser.cxx:323
 TBrowser.cxx:324
 TBrowser.cxx:325
 TBrowser.cxx:326
 TBrowser.cxx:327
 TBrowser.cxx:328
 TBrowser.cxx:329
 TBrowser.cxx:330
 TBrowser.cxx:331
 TBrowser.cxx:332
 TBrowser.cxx:333
 TBrowser.cxx:334
 TBrowser.cxx:335
 TBrowser.cxx:336
 TBrowser.cxx:337
 TBrowser.cxx:338
 TBrowser.cxx:339
 TBrowser.cxx:340
 TBrowser.cxx:341
 TBrowser.cxx:342
 TBrowser.cxx:343
 TBrowser.cxx:344
 TBrowser.cxx:345
 TBrowser.cxx:346
 TBrowser.cxx:347
 TBrowser.cxx:348
 TBrowser.cxx:349
 TBrowser.cxx:350
 TBrowser.cxx:351
 TBrowser.cxx:352
 TBrowser.cxx:353
 TBrowser.cxx:354
 TBrowser.cxx:355
 TBrowser.cxx:356
 TBrowser.cxx:357
 TBrowser.cxx:358
 TBrowser.cxx:359
 TBrowser.cxx:360
 TBrowser.cxx:361
 TBrowser.cxx:362
 TBrowser.cxx:363
 TBrowser.cxx:364
 TBrowser.cxx:365
 TBrowser.cxx:366
 TBrowser.cxx:367
 TBrowser.cxx:368
 TBrowser.cxx:369
 TBrowser.cxx:370
 TBrowser.cxx:371
 TBrowser.cxx:372
 TBrowser.cxx:373
 TBrowser.cxx:374
 TBrowser.cxx:375
 TBrowser.cxx:376
 TBrowser.cxx:377
 TBrowser.cxx:378
 TBrowser.cxx:379
 TBrowser.cxx:380
 TBrowser.cxx:381
 TBrowser.cxx:382
 TBrowser.cxx:383
 TBrowser.cxx:384
 TBrowser.cxx:385
 TBrowser.cxx:386
 TBrowser.cxx:387
 TBrowser.cxx:388
 TBrowser.cxx:389
 TBrowser.cxx:390
 TBrowser.cxx:391
 TBrowser.cxx:392
 TBrowser.cxx:393
 TBrowser.cxx:394
 TBrowser.cxx:395
 TBrowser.cxx:396
 TBrowser.cxx:397
 TBrowser.cxx:398
 TBrowser.cxx:399
 TBrowser.cxx:400
 TBrowser.cxx:401
 TBrowser.cxx:402
 TBrowser.cxx:403
 TBrowser.cxx:404
 TBrowser.cxx:405
 TBrowser.cxx:406
 TBrowser.cxx:407
 TBrowser.cxx:408
 TBrowser.cxx:409
 TBrowser.cxx:410
 TBrowser.cxx:411
 TBrowser.cxx:412
 TBrowser.cxx:413
 TBrowser.cxx:414
 TBrowser.cxx:415
 TBrowser.cxx:416
 TBrowser.cxx:417
 TBrowser.cxx:418
 TBrowser.cxx:419
 TBrowser.cxx:420
 TBrowser.cxx:421
 TBrowser.cxx:422
 TBrowser.cxx:423
 TBrowser.cxx:424
 TBrowser.cxx:425
 TBrowser.cxx:426
 TBrowser.cxx:427
 TBrowser.cxx:428
 TBrowser.cxx:429
 TBrowser.cxx:430
 TBrowser.cxx:431
 TBrowser.cxx:432
 TBrowser.cxx:433
 TBrowser.cxx:434
 TBrowser.cxx:435
 TBrowser.cxx:436
 TBrowser.cxx:437
 TBrowser.cxx:438
 TBrowser.cxx:439
 TBrowser.cxx:440
 TBrowser.cxx:441
 TBrowser.cxx:442
 TBrowser.cxx:443
 TBrowser.cxx:444
 TBrowser.cxx:445
 TBrowser.cxx:446