37 Bool_t
GetObject(TObject *&obj, Bool_t &owner)
const override
39 TClass *cl = gROOT->GetClass(
fKey->GetClassName());
40 if (cl && !cl->IsLoaded()) {
48 obj =
fKey->ReadObj();
49 if (!obj)
return kFALSE;
51 if (obj->InheritsFrom(TH1::Class()) || obj->InheritsFrom(TTree::Class())) owner = kFALSE;
else
52 if (obj->InheritsFrom(TCanvas::Class())) {
fDir->Add(obj); owner = kFALSE; }
57 {
return fKey->GetName(); }
60 {
return fKey->GetClassName(); }
88 fIter =
fDir->GetListOfKeys()->MakeIterator();
99 Bool_t donext = kTRUE;
119 if (strcmp(
fCurrent->ClassName(), key->GetClassName()) == 0) donext = kTRUE;
127 if (!cl)
return kFALSE;
128 return cl->InheritsFrom(TDirectory::Class()) ||
129 cl->InheritsFrom(TTree::Class()) ||
130 cl->InheritsFrom(TCanvas::Class()) ||
131 cl->InheritsFrom(THStack::Class());
136 TClass *cl =
nullptr;
139 TObject *obj =
fDir->FindObject(key->GetName());
140 if (obj) cl = obj->IsA();
154 if (!obj)
return nullptr;
156 if (obj->InheritsFrom(TTree::Class()))
159 if (obj->InheritsFrom(TCanvas::Class()))
162 if (obj->InheritsFrom(THStack::Class()))
165 TDirectory *subdir =
dynamic_cast<TDirectory *
> (obj);
174 fNameBuf.Form(
"%s;%d",key->GetName(),(
int) key->GetCycle());
185 TClass *cl =
nullptr;
190 sz = key->GetNbytes();
191 TObject *obj =
fDir->FindObject(key->GetName());
197 bool isdir = cl && cl->InheritsFrom(TDirectory::Class());
198 return isdir ? 0 : sz;
208 if (!cl) cl = gROOT->GetClass(key->GetClassName(), kTRUE, kTRUE);
231 SetDir(dir, readright, owner);
261 return fDir ?
fDir->ClassName() :
nullptr;
266 return fDir ?
fDir->GetTitle() :
nullptr;
271 TFile *f =
dynamic_cast<TFile *
> (
fDir);
277 if (!dir)
return nullptr;
280 return std::make_unique<TGo4ObjectAccess>(dir);
282 TDirectory *curdir = dir;
283 const char *curname = name;
285 while (curdir && curname) {
286 const char *slash = strchr(curname,
'/');
293 partname.Append(curname, slash - curname);
295 if (*curname == 0) curname =
nullptr;
299 Short_t cyclebuf(9999);
300 TDirectory::DecodeNameCycle(partname.Data(), namebuf, cyclebuf,
sizeof(namebuf));
302 TObject *obj = curdir->GetList()->FindObject(namebuf);
304 TKey *key = curdir->GetKey(namebuf, cyclebuf);
305 if (!key)
return nullptr;
307 return std::make_unique<TGo4KeyAccess>(curdir, key);
309 obj = curdir->Get(partname.Data());
310 if (obj && obj->InheritsFrom(TCanvas::Class())) curdir->Add(obj);
311 if (obj && browser_slot)
315 if (!obj)
return nullptr;
317 TTree *tr =
dynamic_cast<TTree *
> (obj);
321 TCanvas *canv =
dynamic_cast<TCanvas *
> (obj);
325 THStack *hs =
dynamic_cast<THStack *
> (obj);
329 curdir =
dynamic_cast<TDirectory *
>(obj);
332 return std::make_unique<TGo4ObjectAccess>(obj);
345 const char *filename =
nullptr;
346 if (
fDir &&
fDir->InheritsFrom(TFile::Class()))
347 filename =
fDir->GetName();
349 slot->
SetPar(
"DirProxy::FileName", filename);
350 slot->
SetPar(
"DirProxy::gROOT", (
fDir==gROOT) ?
"true" :
nullptr);
358 const char *filename = slot->
GetPar(
"DirProxy::FileName");
359 const char *groot = slot->
GetPar(
"DirProxy::gROOT");
362 TFile *f = TFile::Open(filename);
363 if (f)
SetDir(f, kTRUE, kTRUE);
365 SetDir(gROOT, kFALSE, kFALSE);
370 if (!filepath || !
fDir)
return kFALSE;
372 TFile *f =
dynamic_cast<TFile *
> (
fDir);
373 if (!f)
return kFALSE;
375 if (f->ReOpen(
"UPDATE") < 0)
return kFALSE;
377 TString foldername, objname;
380 TDirectory *objdir = f;
382 if (foldername.Length() > 0)
383 objdir =
dynamic_cast<TDirectory *
> (f->Get(foldername));
387 TDirectory::DecodeNameCycle(objname.Data(), namebuf, cyclebuf,
sizeof(namebuf));
391 objdir->Delete(objname.Data());
392 objdir->WriteTObject(obj, namebuf,
"Overwrite");
402 return dynamic_cast<TFile *
>(
fDir) !=
nullptr;
static std::unique_ptr< TGo4Access > CreateAccess(TCanvas *canv, const char *name)
static TGo4LevelIter * ProduceIter(TCanvas *canv)
const char * info() override
const char * GetClassName() override
TGo4LevelIter * subiterator() override
Bool_t isfolder() override
virtual ~TGo4DirLevelIter()
TGo4DirLevelIter(TDirectory *dir, Bool_t readright)
Bool_t IsContainerClass(TClass *cl)
Int_t sizeinfo() override
const char * name() override
static std::unique_ptr< TGo4Access > CreateAccess(TDirectory *dir, Bool_t readright, const char *name, TGo4Slot *browser_slot=nullptr)
const char * GetFileName() const
void SetDir(TDirectory *dir, Bool_t readright, Bool_t owner)
void ReadData(TGo4Slot *slot, TDirectory *dir) override
void WriteData(TGo4Slot *slot, TDirectory *dir, Bool_t onlyobjs) override
static TGo4LevelIter * ProduceIter(TDirectory *dir, Bool_t readright)
Int_t GetObjectSizeInfo() const override
Int_t GetObjectKind() const override
Bool_t UpdateObjectInFile(const char *filepath, TObject *obj)
const char * GetContainedObjectInfo() override
const char * GetContainedClassName() const override
static TGo4LevelIter * ProduceIter(THStack *hs)
static std::unique_ptr< TGo4Access > CreateAccess(THStack *hs, const char *name)
Bool_t GetObject(TObject *&obj, Bool_t &owner) const override
TGo4KeyAccess(TDirectory *dir, TKey *key)
Bool_t CanGetObject() const override
Returns kTRUE, when object can be directly obtained with GetObject() method.
const char * GetObjectName() const override
const char * GetObjectClassName() const override
static Long_t DefineObjectSize(TObject *obj)
static TClass * GetClass(const char *classname, Bool_t load=kFALSE)
virtual Int_t GetObjectSizeInfo() const
void ForwardEvent(TGo4Slot *source, Int_t id, void *param=nullptr)
static void ProduceFolderAndName(const char *fullname, TString &foldername, TString &objectname)
void SetPar(const char *name, const char *value)
const char * GetPar(const char *name) const
static std::unique_ptr< TGo4Access > CreateAccess(TTree *tree, const char *name)
static TGo4LevelIter * ProduceIter(TTree *tree)