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()) *id = on_init ? 111222333 : -1;
96 } else {
97 printf("ERROR: Cannot modify fCanvasID data member\n");
98 }
99
101 if (offset > 0) {
102 TPad **moth = (TPad **)((char*) fCanvas + offset);
103 if (*moth == fCanvas->GetMother()) *moth = on_init ? fCanvas : nullptr;
104 } else {
105 printf("ERROR: Cannot set fMother data member in canvas\n");
106 }
107}
108
109void TCanvasWidget::resizeEvent(QResizeEvent *event)
110{
111 fView->resize(width(), height());
113}
114
116{
117 TWebCanvas *cimp = dynamic_cast<TWebCanvas*> (fCanvas->GetCanvasImp());
118 if (cimp) {
119 cimp->ShowEditor(kTRUE);
120 cimp->ActivateInEditor(pad, obj);
121 }
122}
123
125{
127 if (cimp) cimp->ShowEditor(flag);
128}
129
131{
133 if (cimp) cimp->ShowStatusBar(kTRUE);
134}
long Long_t
Definition RtypesCore.h:54
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
constexpr Bool_t kTRUE
Definition RtypesCore.h:100
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:785
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:1978
void SetTitle(const char *title="") override
Set canvas title.
Definition TCanvas.cxx:2161
Int_t GetCanvasID() const override
Definition TCanvas.h:157
void SetName(const char *name="") override
Set canvas name. In case name is an empty string, a default name is set.
Definition TCanvas.cxx:2049
@ kShowEditor
Definition TCanvas.h:93
static TClass * Class()
void SetBatch(Bool_t batch=kTRUE) override
Toggle batch mode.
Definition TCanvas.cxx:1960
Longptr_t GetDataMemberOffset(const char *membername) const
return offset for member name.
Definition TClass.cxx:3477
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:200
The most important graphics class in the ROOT system.
Definition TPad.h:28
TVirtualPad * GetMother() const override
Definition TPad.h:257
void SetCanvas(TCanvas *c) override
Definition TPad.h:324
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:216
void ShowWebWindow(const ROOT::RWebDisplayArgs &user_args="")
Show canvas in specified place.
void SetPadDblClickedHandler(PadClickedSignal_t func)
Definition TWebCanvas.h:218
void ActivateInEditor(TPad *pad, TObject *obj)
Activate object in editor in web browser.
void SetPadClickedHandler(PadClickedSignal_t func)
Definition TWebCanvas.h:217
void SetUpdatedHandler(UpdatedSignal_t func)
Definition TWebCanvas.h:215
void ShowEditor(Bool_t show=kTRUE) override
Definition TWebCanvas.h:187
void SetCanCreateObjects(Bool_t on=kTRUE)
Definition TWebCanvas.h:221
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17