Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RBrowserRCanvasWidget.cxx
Go to the documentation of this file.
1// Author: Sergey Linev <S.Linev@gsi.de>
2// Date: 2021-01-25
3
4/*************************************************************************
5 * Copyright (C) 1995-2021, 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
15
16#include <ROOT/RCanvas.hxx>
17
18using namespace std::string_literals;
19using namespace ROOT::Browsable;
20
21
23
24 std::shared_ptr<ROOT::Experimental::RCanvas> fCanvas; ///<! drawn canvas
25
26public:
27
29 {
31
32 // ensure creation of web window
33 fCanvas->Show("embed");
34 }
35
36 RBrowserRCanvasWidget(const std::string &name, std::shared_ptr<ROOT::Experimental::RCanvas> &canv, bool catched_canvas = false) : ROOT::RBrowserWidget(name)
37 {
38 if (catched_canvas) {
39 fCanvas = canv;
40 } else {
41 fCanvas = std::move(canv);
42 // ensure creation of web window
43 fCanvas->Show("embed");
44 }
45 }
46
47 ~RBrowserRCanvasWidget() override = default;
48
49 std::string GetKind() const override { return "rcanvas"s; }
50
51 std::shared_ptr<ROOT::RWebWindow> GetWindow() override { return fCanvas->GetWindow(); }
52
53 std::string GetTitle() override { return fCanvas->GetTitle(); }
54
55 bool DrawElement(std::shared_ptr<RElement> &elem, const std::string &opt = "") override
56 {
57 if (!elem->IsCapable(RElement::kActDraw7))
58 return false;
59
60 auto obj = elem->GetObject();
61 if (!obj)
62 return false;
63
64 RProvider::ExtendProgressHandle(elem.get(), obj.get());
65
66 std::shared_ptr<ROOT::Experimental::RPadBase> subpad = fCanvas;
67
68 std::string drawopt = opt;
69
70 if (drawopt.compare(0,8,"<append>") == 0) {
71 drawopt.erase(0,8);
72 } else if (subpad->NumPrimitives() > 0) {
73 subpad->Wipe();
74 fCanvas->Modified();
75 fCanvas->Update(true);
76 }
77
78 if (drawopt == "<dflt>")
79 drawopt = RProvider::GetClassDrawOption(obj->GetClass());
80
81 if (RProvider::Draw7(subpad, obj, drawopt)) {
82 fCanvas->Modified();
83 fCanvas->Update(true);
84 return true;
85 }
86
87 return false;
88 }
89
90 void CheckModified() override
91 {
92 if (fCanvas->IsModified())
93 fCanvas->Update();
94 }
95
96};
97
98// ======================================================================
99
101protected:
102 std::shared_ptr<ROOT::RBrowserWidget> Create(const std::string &name) final
103 {
104 return std::make_shared<RBrowserRCanvasWidget>(name);
105 }
106
107 std::shared_ptr<ROOT::RBrowserWidget> CreateFor(const std::string &name, std::shared_ptr<RElement> &elem) final
108 {
109 auto holder = elem->GetObject();
110 if (!holder) return nullptr;
111
112 auto canv = holder->get_shared<ROOT::Experimental::RCanvas>();
113 if (!canv) return nullptr;
114
115 return std::make_shared<RBrowserRCanvasWidget>(name, canv);
116 }
117
118 std::shared_ptr<ROOT::RBrowserWidget> DetectWindow(ROOT::RWebWindow &win) final
119 {
121 if (canv->GetWindow().get() == &win)
122 return std::make_shared<RBrowserRCanvasWidget>(canv->GetTitle(), const_cast<std::shared_ptr<ROOT::Experimental::RCanvas> &>(canv), true);
123 }
124
125 return nullptr;
126 }
127
128
129public:
131 ~RBrowserRCanvasProvider() override = default;
RBrowserRCanvasProvider sRBrowserRCanvasProvider
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t win
char name[80]
Definition TGX11.cxx:148
std::shared_ptr< ROOT::RBrowserWidget > DetectWindow(ROOT::RWebWindow &win) final
~RBrowserRCanvasProvider() override=default
std::shared_ptr< ROOT::RBrowserWidget > CreateFor(const std::string &name, std::shared_ptr< RElement > &elem) final
std::shared_ptr< ROOT::RBrowserWidget > Create(const std::string &name) final
std::shared_ptr< ROOT::RWebWindow > GetWindow() override
std::shared_ptr< ROOT::Experimental::RCanvas > fCanvas
! drawn canvas
std::string GetTitle() override
~RBrowserRCanvasWidget() override=default
std::string GetKind() const override
RBrowserRCanvasWidget(const std::string &name, std::shared_ptr< ROOT::Experimental::RCanvas > &canv, bool catched_canvas=false)
RBrowserRCanvasWidget(const std::string &name)
bool DrawElement(std::shared_ptr< RElement > &elem, const std::string &opt="") override
@ kActDraw7
can be drawn inside ROOT7 canvas
Definition RElement.hxx:55
A window's topmost RPad.
Definition RCanvas.hxx:47
static const std::vector< std::shared_ptr< RCanvas > > GetCanvases()
Returns list of created canvases.
Definition RCanvas.cxx:45
static std::shared_ptr< RCanvas > Create(const std::string &title)
Create new canvas instance.
Definition RCanvas.cxx:89
Abstract Web-based widget, which can be used in the RBrowser Used to embed canvas,...
Represents web window, which can be shown in web browser or any other supported environment.