Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RBrowserTreeWidget.cxx
Go to the documentation of this file.
1// Author: Sergey Linev <S.Linev@gsi.de>
2// Date: 2022-10-07
3
4/*************************************************************************
5 * Copyright (C) 1995-2022, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#include "RBrowserWidget.hxx"
13
14#include "ROOT/RTreeViewer.hxx"
15#include "ROOT/RBrowser.hxx"
17#include "TTree.h"
18#include "TBranch.h"
19#include "TBranchBrowsable.h"
20#include "TLeaf.h"
21
22using namespace ROOT;
23
24using namespace std::string_literals;
25
26
29 std::unique_ptr<Browsable::RHolder> fObject; // tree object
30 std::string fTitle;
31
32public:
33
35 {
38 fViewer.SetCallback([this](const std::string &canvas_name) {
40 });
41 }
42
43 ~RBrowserTreeWidget() override = default;
44
45 std::string GetKind() const override { return "tree"s; }
46 std::string GetTitle() override { return fTitle; }
47 std::shared_ptr<RWebWindow> GetWindow() override { return fViewer.GetWindow(); }
48
49 bool DrawElement(std::shared_ptr<Browsable::RElement> &elem, const std::string & = "") override
50 {
51 if (!elem->IsCapable(Browsable::RElement::kActTree))
52 return false;
53
54 auto obj = elem->GetObject();
55 if (!obj)
56 return false;
57
58 auto tree = obj->Get<TTree>();
59 if (tree) {
60 fObject = std::move(obj);
61 fTitle = tree->GetName();
62 fViewer.SetTree(const_cast<TTree *>(tree));
63 return true;
64 }
65
66 tree = fObject ? fObject->Get<TTree>() : nullptr;
67
68 TTree *new_tree = nullptr;
69 std::string expr = elem->GetContent("tree");
70
71 auto branch = obj->Get<TBranch>();
72 auto leaf = obj->Get<TLeaf>();
73 auto browsable = obj->Get<TVirtualBranchBrowsable>();
74
75 if (branch) {
76 new_tree = branch->GetTree();
77 if (expr.empty())
78 expr = branch->GetFullName().Data();
79 } else if (leaf) {
80 new_tree = leaf->GetBranch()->GetTree();
81 if (expr.empty())
82 expr = leaf->GetFullName().Data();
83 } else if (browsable) {
84 new_tree = browsable->GetBranch()->GetTree();
85 if (expr.empty())
86 expr = browsable->GetBranch()->GetFullName().Data();
87 }
88
89 if (!new_tree || expr.empty())
90 return false;
91
92 if (new_tree != tree) {
93 fObject = std::make_unique<Browsable::TObjectHolder>(new_tree);
94 fTitle = new_tree->GetName();
96 }
97
99 }
100
101 std::string SendWidgetContent() override { return SendWidgetTitle(); }
102
103};
104
105// ======================================================================
106
108protected:
109 std::shared_ptr<RBrowserWidget> Create(const std::string &name) final
110 {
111 return std::make_shared<RBrowserTreeWidget>(name);
112 }
113public:
115 ~RBrowserTreeProvider() override = default;
RBrowserTreeProvider sRBrowserTreeProvider
char name[80]
Definition TGX11.cxx:148
std::shared_ptr< RBrowserWidget > Create(const std::string &name) final
~RBrowserTreeProvider() override=default
~RBrowserTreeWidget() override=default
std::unique_ptr< Browsable::RHolder > fObject
std::string GetKind() const override
bool DrawElement(std::shared_ptr< Browsable::RElement > &elem, const std::string &="") override
std::string SendWidgetContent() override
std::shared_ptr< RWebWindow > GetWindow() override
std::string GetTitle() override
RBrowserTreeWidget(const std::string &name)
@ kActTree
can be shown in tree viewer
Definition RElement.hxx:57
Abstract Web-based widget, which can be used in the RBrowser Used to embed canvas,...
RBrowser * GetBrowser() const
std::string SendWidgetTitle()
Returns string which can be send to browser client to set/change title of the widget tab.
bool ActivateWidget(const std::string &title, const std::string &kind="")
Activate widget in RBrowser One should specify title and (optionally) kind of widget like "tcanvas" o...
Web-based ROOT TTree viewer.
std::shared_ptr< ROOT::RWebWindow > GetWindow()
void SetTree(TTree *tree)
assign new TTree to the viewer
bool SuggestExpression(const std::string &expr)
Suggest to use expression in the gui Normally just assign as last edited expression.
void SetCallback(PerformDrawCallback_t func)
void SetTitle(const std::string &title)
void SetShowHierarchy(bool on=true)
Configures default hierarchy browser visibility, only has effect before showing web window.
A TTree is a list of TBranches.
Definition TBranch.h:93
A TLeaf describes individual elements of a TBranch See TBranch structure in TTree.
Definition TLeaf.h:57
A TTree represents a columnar dataset.
Definition TTree.h:89
TVirtualBranchBrowsable is a base class (not really abstract, but useless by itself) for helper objec...