Logo ROOT  
Reference Guide
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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// Warning: This is part of the ROOT 7 prototype! It will change without notice. It might trigger earthquakes. Feedback is welcome!
4
5/*************************************************************************
6 * Copyright (C) 1995-2021, Rene Brun and Fons Rademakers. *
7 * All rights reserved. *
8 * *
9 * For the licensing terms see $ROOTSYS/LICENSE. *
10 * For the list of contributors see $ROOTSYS/README/CREDITS. *
11 *************************************************************************/
12
13#include "RBrowserWidget.hxx"
14
16
17#include <ROOT/RCanvas.hxx>
18
19using namespace std::string_literals;
20using namespace ROOT::Browsable;
21
22
24
25 std::shared_ptr<ROOT::Experimental::RCanvas> fCanvas; ///<! drawn canvas
26
27public:
28
30 {
32
33 // ensure creation of web window
34 fCanvas->Show("embed");
35 }
36
37 RBrowserRCanvasWidget(const std::string &name, std::shared_ptr<ROOT::Experimental::RCanvas> &canv, bool catched_canvas = false) : ROOT::RBrowserWidget(name)
38 {
39 if (catched_canvas) {
40 fCanvas = canv;
41 } else {
42 fCanvas = std::move(canv);
43 // ensure creation of web window
44 fCanvas->Show("embed");
45 }
46 }
47
48 ~RBrowserRCanvasWidget() override = default;
49
50 std::string GetKind() const override { return "rcanvas"s; }
51
52 std::shared_ptr<ROOT::RWebWindow> GetWindow() override { return fCanvas->GetWindow(); }
53
54 std::string GetTitle() override { return fCanvas->GetTitle(); }
55
56 bool DrawElement(std::shared_ptr<RElement> &elem, const std::string &opt = "") override
57 {
58 if (!elem->IsCapable(RElement::kActDraw7))
59 return false;
60
61 auto obj = elem->GetObject();
62 if (!obj)
63 return false;
64
65 RProvider::ExtendProgressHandle(elem.get(), obj.get());
66
67 std::shared_ptr<ROOT::Experimental::RPadBase> subpad = fCanvas;
68
69 std::string drawopt = opt;
70
71 if (drawopt.compare(0,8,"<append>") == 0) {
72 drawopt.erase(0,8);
73 } else if (subpad->NumPrimitives() > 0) {
74 subpad->Wipe();
75 fCanvas->Modified();
76 fCanvas->Update(true);
77 }
78
79 if (drawopt == "<dflt>")
80 drawopt = RProvider::GetClassDrawOption(obj->GetClass());
81
82 if (RProvider::Draw7(subpad, obj, drawopt)) {
83 fCanvas->Modified();
84 fCanvas->Update(true);
85 return true;
86 }
87
88 return false;
89 }
90
91 void CheckModified() override
92 {
93 if (fCanvas->IsModified())
94 fCanvas->Update();
95 }
96
97};
98
99// ======================================================================
100
102protected:
103 std::shared_ptr<ROOT::RBrowserWidget> Create(const std::string &name) final
104 {
105 return std::make_shared<RBrowserRCanvasWidget>(name);
106 }
107
108 std::shared_ptr<ROOT::RBrowserWidget> CreateFor(const std::string &name, std::shared_ptr<RElement> &elem) final
109 {
110 auto holder = elem->GetObject();
111 if (!holder) return nullptr;
112
113 auto canv = holder->get_shared<ROOT::Experimental::RCanvas>();
114 if (!canv) return nullptr;
115
116 return std::make_shared<RBrowserRCanvasWidget>(name, canv);
117 }
118
119 std::shared_ptr<ROOT::RBrowserWidget> DetectWindow(ROOT::RWebWindow &win) final
120 {
122 if (canv->GetWindow().get() == &win)
123 return std::make_shared<RBrowserRCanvasWidget>(canv->GetTitle(), const_cast<std::shared_ptr<ROOT::Experimental::RCanvas> &>(canv), true);
124 }
125
126 return nullptr;
127 }
128
129
130public:
132 ~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:110
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:56
static bool Draw7(std::shared_ptr< ROOT::Experimental::RPadBase > &subpad, std::unique_ptr< RHolder > &obj, const std::string &opt="")
Invoke drawing of object on RCanvas sub-pad All existing providers are checked, first checked are cla...
static std::string GetClassDrawOption(const ClassArg &)
Return configured draw option for the class.
static void ExtendProgressHandle(void *handle, void *handle2)
Extend progress handle - to be able react on sub item.
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.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...