Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TCanvasWidget.cpp
Go to the documentation of this file.
1// Author: Sergey Linev, GSI 13/01/2021
2
3/*************************************************************************
4 * Copyright (C) 1995-2021, Rene Brun and Fons Rademakers. *
5 * All rights reserved. *
6 * *
7 * For the licensing terms see $ROOTSYS/LICENSE. *
8 * For the list of contributors see $ROOTSYS/README/CREDITS. *
9 *************************************************************************/
10
11#include "TCanvasWidget.h"
12
13#include "TCanvas.h"
14#include "TROOT.h"
15#include "TClass.h"
16#include "TEnv.h"
17
18#include "TWebCanvas.h"
19
21{
22 setObjectName("TCanvasWidget");
23
24 setSizeIncrement(QSize(100, 100));
25
26 setUpdatesEnabled(true);
27 setMouseTracking(true);
28
29 setFocusPolicy(Qt::TabFocus);
30 setCursor(Qt::CrossCursor);
31
32 setAcceptDrops(true);
33
34 static int wincnt = 1;
35
36 fCanvas = new TCanvas(kFALSE);
37 fCanvas->SetName(Form("Canvas%d", wincnt++));
38 fCanvas->SetTitle("title");
41 fCanvas->SetBatch(kTRUE); // mark canvas as batch
42
43 gPad = fCanvas;
44
45 bool read_only = gEnv->GetValue("WebGui.FullCanvas", (Int_t)1) == 0;
46
47 TWebCanvas *web = new TWebCanvas(fCanvas, "title", 0, 0, 800, 600, read_only);
48
50
52
53 web->SetCanCreateObjects(kFALSE); // not yet create objects on server side
54
55 web->SetUpdatedHandler([this]() { emit CanvasUpdated(); });
56
57 web->SetActivePadChangedHandler([this](TPad *pad) { emit SelectedPadChanged(pad); });
58
59 web->SetPadClickedHandler([this](TPad *pad, int x, int y) { emit PadClicked(pad, x, y); });
60
61 web->SetPadDblClickedHandler([this](TPad *pad, int x, int y) { emit PadDblClicked(pad, x, y); });
62
63 auto where = ROOT::RWebDisplayArgs::GetQt5EmbedQualifier(this, "noopenui", QT_VERSION);
64
65 web->ShowWebWindow(where);
66
67 fView = findChild<QWebEngineView *>("RootWebView");
68 if (!fView) {
69 printf("FAIL TO FIND QWebEngineView - ROOT Qt5Web plugin does not work properly !!!!!\n");
70 exit(11);
71 }
72
73 fView->resize(width(), height());
75}
76
78{
79 if (fCanvas) {
81
82 gROOT->GetListOfCanvases()->Remove(fCanvas);
83
84 fCanvas->Close();
85 delete fCanvas;
86 fCanvas = nullptr;
87 }
88}
89
91{
93 if (offset > 0) {
94 Int_t *id = (Int_t *)((char *)fCanvas + offset);
95 if (*id == fCanvas->GetCanvasID())
96 *id = on_init ? 111222333 : -1;
97 } else {
98 printf("ERROR: Cannot modify fCanvasID data member\n");
99 }
100
102 if (offset > 0) {
103 TPad **moth = (TPad **)((char *)fCanvas + offset);
104 if (*moth == fCanvas->GetMother())
105 *moth = on_init ? fCanvas : nullptr;
106 } else {
107 printf("ERROR: Cannot set fMother data member in canvas\n");
108 }
109}
110
111void TCanvasWidget::resizeEvent(QResizeEvent *event)
112{
113 fView->resize(width(), height());
115}
116
118{
119 TWebCanvas *cimp = dynamic_cast<TWebCanvas *>(fCanvas->GetCanvasImp());
120 if (cimp) {
121 cimp->ShowEditor(kTRUE);
122 cimp->ActivateInEditor(pad, obj);
123 }
124}
125
127{
129 if (cimp)
130 cimp->ShowEditor(flag);
131}
132
134{
136 if (cimp)
137 cimp->ShowStatusBar(kTRUE);
138}
long Long_t
Definition RtypesCore.h:54
constexpr Bool_t kFALSE
Definition RtypesCore.h:94
constexpr Bool_t kTRUE
Definition RtypesCore.h:93
R__EXTERN TEnv * gEnv
Definition TEnv.h:170
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 TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Option_t Option_t width
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t height
#define gROOT
Definition TROOT.h:406
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
Definition TString.cxx:2489
#define gPad
static std::string GetQt5EmbedQualifier(const void *qparent, const std::string &urlopt="", unsigned qtversion=0x50000)
Returns string which can be used as argument in RWebWindow::Show() method to display web window in pr...
ABC describing GUI independent main window (with menubar, scrollbars and a drawing area).
Definition TCanvasImp.h:30
virtual void ShowEditor(Bool_t show=kTRUE)
Definition TCanvasImp.h:80
virtual void ShowStatusBar(Bool_t show=kTRUE)
Definition TCanvasImp.h:76
TCanvas * fCanvas
void SelectedPadChanged(TPad *)
void PadDblClicked(TPad *, int, int)
void SetPrivateCanvasFields(bool on_init)
void resizeEvent(QResizeEvent *event) override
virtual ~TCanvasWidget()
QWebEngineView * fView
qt webwidget to show
TCanvasWidget(QWidget *parent=nullptr)
void activateEditor(TPad *pad=nullptr, TObject *obj=nullptr)
void PadClicked(TPad *, int, int)
void setEditorVisible(bool flag=true)
void activateStatusLine()
void CanvasUpdated()
The Canvas class.
Definition TCanvas.h:23
TCanvasImp * GetCanvasImp() const override
Definition TCanvas.h:158
void Close(Option_t *option="") override
Close canvas.
Definition TCanvas.cxx:788
void SetCanvasImp(TCanvasImp *i)
Definition TCanvas.h:205
void SetCanvasSize(UInt_t ww, UInt_t wh) override
Set Width and Height of canvas to ww and wh respectively.
Definition TCanvas.cxx:1975
void SetTitle(const char *title="") override
Set canvas title.
Definition TCanvas.cxx:2155
Int_t GetCanvasID() const override
Definition TCanvas.h:157
void SetName(const char *name="") override
Set canvas name.
Definition TCanvas.cxx:2047
@ kShowEditor
Definition TCanvas.h:93
static TClass * Class()
void SetBatch(Bool_t batch=kTRUE) override
Toggle batch mode.
Definition TCanvas.cxx:1957
Longptr_t GetDataMemberOffset(const char *membername) const
return offset for member name.
Definition TClass.cxx:3546
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
Definition TEnv.cxx:491
Mother of all ROOT objects.
Definition TObject.h:41
void ResetBit(UInt_t f)
Definition TObject.h:198
The most important graphics class in the ROOT system.
Definition TPad.h:28
TVirtualPad * GetMother() const override
Definition TPad.h:259
void SetCanvas(TCanvas *c) override
Definition TPad.h:327
Basic TCanvasImp ABI implementation for Web-based Graphics Provides painting of main ROOT classes in ...
Definition TWebCanvas.h:35
void SetActivePadChangedHandler(PadSignal_t func)
Definition TWebCanvas.h:233
void ShowWebWindow(const ROOT::RWebDisplayArgs &user_args="")
Show canvas in specified place.
void SetPadDblClickedHandler(PadClickedSignal_t func)
Definition TWebCanvas.h:235
void ActivateInEditor(TPad *pad, TObject *obj)
Activate object in editor in web browser.
void SetPadClickedHandler(PadClickedSignal_t func)
Definition TWebCanvas.h:234
void SetUpdatedHandler(UpdatedSignal_t func)
Definition TWebCanvas.h:232
void ShowEditor(Bool_t show=kTRUE) override
Definition TWebCanvas.h:204
void SetCanCreateObjects(Bool_t on=kTRUE)
Definition TWebCanvas.h:238
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17