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// 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.
Namespace for new ROOT classes and functions.