28using namespace std::string_literals;
66 std::shared_ptr<TObjectElement> telem = std::dynamic_pointer_cast<TObjectElement>(
fElements[
fCounter]);
67 return telem ? telem->IsFolder() :
false;
82 bool Find(
const std::string &
name,
int indx = -1)
override
119 std::unique_ptr<RHolder> holder = std::make_unique<TObjectHolder>(obj);
124 std::shared_ptr<TObjectElement> telem = std::dynamic_pointer_cast<TObjectElement>(elem);
125 if (telem) telem->SetName(
name);
135 Add(obj,
nullptr, 0);
164 if (!obj)
return ""s;
165 std::string
name = obj->GetName();
168 std::unique_ptr<RHolder> holder = std::make_unique<TObjectHolder>(obj,
kFALSE);
170 if (elem)
name = elem->CreateItem()->GetName();
179 if (!obj || !obj->IsFolder())
190 std::unique_ptr<RHolder> holder = std::make_unique<TObjectHolder>(obj,
kFALSE);
195 elem = std::make_shared<TObjectElement>(holder);
197 return elem->CreateItem();
203 std::unique_ptr<RHolder> holder = std::make_unique<TObjectHolder>(*
fIter,
kFALSE);
230 return std::make_unique<TCollectionIter>(folder->GetListOfFolders());
259 if (coll && (coll->GetSize() > 0))
260 return std::make_unique<TCollectionIter>(coll);
268 return coll ? coll->
GetSize() : 0;
297 else if (
fName.empty())
308 fObject = std::make_unique<TObjectHolder>(obj);
372 auto iter = std::make_unique<TObjectLevelIter>();
390 if (dupl || (iter->NumElements() == 0))
return nullptr;
440 std::string clname = cl->GetName();
442 if ((
"TTree"s == clname) || (
"TNtuple"s == clname))
return kActTree;
443 if ((
"TGeoManager"s == clname) || (clname.compare(0, 10,
"TGeoVolume"s) == 0) || (clname.compare(0, 8,
"TGeoNode"s) == 0))
return kActGeom;
461 auto item = std::make_unique<TObjectItem>(obj->GetName(), isfolder ? -1 : 0);
463 if (item->GetName().empty())
466 item->SetTitle(obj->GetTitle());
467 if (item->GetTitle().empty())
470 item->SetClassName(obj->ClassName());
490 if (!cl)
return false;
492 std::string clname = cl->GetName();
501 case kActTree:
return (
"TTree"s == clname) || (
"TNtuple"s == clname) ||
502 (clname.compare(0, 7,
"TBranch"s) == 0) || (clname.compare(0, 5,
"TLeaf"s) == 0);
503 case kActGeom:
return (
"TGeoManager"s == clname) || (clname.compare(0, 10,
"TGeoVolume"s) == 0) || (clname.compare(0, 8,
"TGeoNode"s) == 0);
504 default:
return false;
515 return std::make_unique<TCollectionIter>(coll);
527 auto col = fObject->Get<
TColor>();
529 fName =
"Color"s + std::to_string(col->GetNumber());
551 void RegisterTObject(
const std::string &clname,
const std::string &iconname,
bool can_browse =
false,
int can_draw = 3,
const std::string &drawopt =
""s)
553 RegisterClass(clname,
555 can_browse ?
"dflt"s :
""s,
556 can_draw & 1 ?
"libROOTObjectDraw6Provider"s :
""s,
557 can_draw & 2 ?
"libROOTObjectDraw7Provider"s :
""s,
563 RegisterClass(
"TTree",
"sap-icon://tree",
"libROOTBranchBrowseProvider");
564 RegisterClass(
"TNtuple",
"sap-icon://tree",
"libROOTBranchBrowseProvider");
565 RegisterClass(
"TBranchElement",
"sap-icon://e-care",
"libROOTBranchBrowseProvider",
"libROOTLeafDraw6Provider",
"libROOTLeafDraw7Provider");
566 RegisterClass(
"TLeaf",
"sap-icon://e-care",
""s,
"libROOTLeafDraw6Provider",
"libROOTLeafDraw7Provider");
567 RegisterClass(
"TBranch",
"sap-icon://e-care",
"libROOTBranchBrowseProvider"s,
"libROOTLeafDraw6Provider",
"libROOTLeafDraw7Provider");
568 RegisterClass(
"TVirtualBranchBrowsable",
"sap-icon://e-care",
""s,
"libROOTLeafDraw6Provider",
"libROOTLeafDraw7Provider");
569 RegisterClass(
"TColor",
"sap-icon://palette");
570 RegisterClass(
"TStyle",
"sap-icon://badge");
572 RegisterTObject(
"TDirectory",
"sap-icon://folder-blank",
true, 0);
573 RegisterTObject(
"TClass",
"sap-icon://tag-cloud-chart",
false, 0);
574 RegisterTObject(
"TQClass",
"sap-icon://tag-cloud-chart",
false, 0);
575 RegisterTObject(
"TH1",
"sap-icon://bar-chart",
false, 3,
""s);
576 RegisterTObject(
"TH2",
"sap-icon://pixelate",
false, 3,
"col"s);
577 RegisterTObject(
"TH3",
"sap-icon://product");
578 RegisterTObject(
"TProfile",
"sap-icon://vertical-bar-chart",
false, 3,
""s);
579 RegisterTObject(
"TGraph",
"sap-icon://line-chart");
580 RegisterTObject(
"TCanvas",
"sap-icon://business-objects-experience",
false, 1);
581 RegisterTObject(
"TASImage",
"sap-icon://picture",
false, 1);
583 RegisterTObject(
"THStack",
"sap-icon://multiple-bar-chart");
584 RegisterTObject(
"TMultiGraph",
"sap-icon://multiple-line-chart");
586 RegisterTObject(
"TCollection",
"sap-icon://list",
true, 0);
587 RegisterTObject(
"TGeoManager",
"sap-icon://overview-chart",
true, 0);
588 RegisterTObject(
"TGeoVolume",
"sap-icon://product",
true, 0);
589 RegisterTObject(
"TGeoNode",
"sap-icon://product",
true, 0);
591 RegisterBrowse(
TFolder::Class(), [](std::unique_ptr<RHolder> &
object) -> std::shared_ptr<RElement> {
592 return std::make_shared<TFolderElement>(
object);
595 RegisterBrowse(
TCollection::Class(), [](std::unique_ptr<RHolder> &
object) -> std::shared_ptr<RElement> {
596 return std::make_shared<TCollectionElement>(
object);
599 RegisterBrowse(
TColor::Class(), [](std::unique_ptr<RHolder> &
object) -> std::shared_ptr<RElement> {
600 return std::make_shared<TColorElement>(
object);
603 RegisterBrowse(
nullptr, [](std::unique_ptr<RHolder> &
object) -> std::shared_ptr<RElement> {
605 return std::make_shared<TObjectElement>(
object,
"", NotShowChilds(
object->GetClass()));
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void on
RTObjectProvider newRTObjectProvider
EActionKind
Possible actions on double-click.
@ kActEdit
can provide data for text editor
@ kActCanvas
indicate that it is canvas and should be drawn directly
@ kActBrowse
just browse (expand) item
@ kActGeom
can be shown in geometry viewer
@ kActDraw7
can be drawn inside ROOT7 canvas
@ kActTree
can be shown in tree viewer
@ kActImage
can be shown in image viewer, can provide image
@ kActDraw6
can be drawn inside ROOT6 canvas
virtual std::unique_ptr< RItem > CreateItem() const
Returns item with element description.
Iterator over single level hierarchy like any array, keys list, ...
virtual std::unique_ptr< RItem > CreateItem()
Create generic description item for RBrowser.
virtual bool Find(const std::string &name, int indx=-1)
Find item with specified name Default implementation, should work for all If index specified,...
Provider of different browsing methods for supported classes.
static bool CanDraw6(const ClassArg &)
Return true if provided class can be drawn on the TCanvas.
static std::shared_ptr< RElement > Browse(std::unique_ptr< RHolder > &obj)
Create browsable element for the object Created element may take ownership over the object.
static bool CanDraw7(const ClassArg &)
Return true if provided class can be drawn on the RCanvas.
static std::string GetClassIcon(const ClassArg &, bool=false)
Return icon name for the given class - either class name or TClass *.
static bool CanHaveChilds(const ClassArg &)
Return true if provided class can have childs.
static bool NotShowChilds(const ClassArg &)
Check if showing of sub-elements was disabled.
Access to TObject basic properties for RBrowsable.
std::unique_ptr< RHolder > GetObject() override
Return copy of TObject holder - if possible.
const TClass * GetClass() const
Returns class for contained object.
std::unique_ptr< RHolder > fObject
bool CheckValid() override
Returns true if object is still valid.
bool IsCapable(EActionKind) const override
Check object capability.
static std::unique_ptr< RLevelIter > GetCollectionIter(const TCollection *)
Creates iterator for TCollection object.
TObjectElement(TObject *obj, const std::string &name="", bool _hide_childs=false)
Constructor with plain TObject* as argument - ownership is not defined.
void SetObject(TObject *obj)
Constructor with std::unique_ptr<RHolder> as argument.
std::string GetTitle() const override
Title of TObject.
virtual const TObject * CheckObject() const
Check if object still exists.
std::unique_ptr< RLevelIter > GetChildsIter() override
Create iterator for childs elements if any.
virtual Long64_t GetSize() const
bool IsObject(void *) override
Returns true if holding specified object.
virtual std::string GetMTime() const
EActionKind GetDefaultAction() const override
Provides default action which can be performed with the object.
std::string GetName() const override
Name of TObject.
bool IsFolder() const override
Returns true if object can have child elements.
void SetHideChilds(bool on)
Set flag to hide all potential object childs.
bool IsHideChilds() const
Is flag to hide all potential object childs set.
void ForgetObject() const
Forget object, use when it was deleted behind the scene.
std::unique_ptr< RItem > CreateItem() const override
Create item.
Provider for all known TObject-based classes.
void RegisterTObject(const std::string &clname, const std::string &iconname, bool can_browse=false, int can_draw=3, const std::string &drawopt=""s)
ABC describing GUI independent browser implementation protocol.
Using a TBrowser one can browse all ROOT objects.
TClass instances represent classes, structs and namespaces in the ROOT type system.
Browsable element for TCollection.
int GetNumChilds() override
Returns number of childs By default creates iterator and iterates over all items.
std::unique_ptr< RLevelIter > GetChildsIter() override
Create iterator for childs elements if any.
TCollectionElement(std::unique_ptr< RHolder > &obj)
Iterator over elements in TCollection.
std::unique_ptr< RItem > CreateItem() override
Create item for current TObject.
TCollectionIter(const TFolder *f)
bool CanItemHaveChilds() const override
Check if item can be expanded.
bool Next() override
Shift to next entry.
virtual ~TCollectionIter()=default
TCollectionIter(const TCollection *coll)
std::shared_ptr< RElement > GetElement() override
Returns full information for current element.
std::string GetItemName() const override
Returns current entry name
Collection abstract base class.
virtual Int_t GetEntries() const
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
Element representing TColor.
EActionKind GetDefaultAction() const override
Get default action.
TColorElement(std::unique_ptr< RHolder > &obj)
The color creation and management class.
Browsable element for TFolder.
TFolderElement(std::unique_ptr< RHolder > &obj)
std::unique_ptr< RLevelIter > GetChildsIter() override
Create iterator for childs elements if any.
int GetNumChilds() override
Returns number of childs By default creates iterator and iterates over all items.
<div class="legacybox"><h2>Legacy Code</h2> TFolder is a legacy interface: there will be no bug fixes...
TCollection * GetListOfFolders() const
bool fDuplicated
! is object was duplicated?
virtual ~TMyBrowserImp()=default
TObjectLevelIter * fIter
! back-reference on iterator
void BrowseObj(TObject *obj) override
void Add(TObject *obj, const char *name, Int_t) override
void SetIgnore(bool on=true)
bool fIgnore
! ignore browsing, used during TBrowser constructor
const TObject * fBrowseObj
! object which will be browsed
bool IsDuplicated() const
TMyBrowserImp(TObjectLevelIter *iter, TObject *obj)
void Copy(TObject &named) const override
Copy this to obj.
Iterator over list of elements, designed for support TBrowser usage.
std::unique_ptr< RItem > CreateItem() override
Create element for the browser.
std::vector< std::shared_ptr< RElement > > fElements
bool CanItemHaveChilds() const override
Returns true if current item can have childs.
std::string GetItemName() const override
Returns current entry name
void AddElement(std::shared_ptr< RElement > &&elem)
bool Next() override
Shift to next entry.
std::shared_ptr< RElement > GetElement() override
Returns full information for current element.
bool Find(const std::string &name, int indx=-1) override
Find item with specified name Default implementation, should work for all If index specified,...
virtual ~TObjectLevelIter()=default
Mother of all ROOT objects.
virtual Bool_t IsFolder() const
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects).
virtual const char * GetName() const
Returns name of object.
virtual void Browse(TBrowser *b)
Browse object. May be overridden for another default action.
R__ALWAYS_INLINE Bool_t IsZombie() const
virtual const char * GetTitle() const
Returns title of object.
virtual TClass * IsA() const