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) 0) == 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([=]() { emit CanvasUpdated(); });
56
57 web->SetActivePadChangedHandler([=](TPad *pad){ emit SelectedPadChanged(pad); });
58
59 web->SetPadClickedHandler([=](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
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());
74 fCanvas->SetCanvasSize(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{
92 Long_t offset = TCanvas::Class()->GetDataMemberOffset("fCanvasID");
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
100 offset = TCanvas::Class()->GetDataMemberOffset("fMother");
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());
112 fCanvas->SetCanvasSize(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}
const Bool_t kFALSE
Definition RtypesCore.h:92
long Long_t
Definition RtypesCore.h:54
const Bool_t kTRUE
Definition RtypesCore.h:91
include TDocParser_001 C image html pict1_TDocParser_001 png width
R__EXTERN TEnv * gEnv
Definition TEnv.h:171
#define gROOT
Definition TROOT.h:406
char * Form(const char *fmt,...)
#define gPad
static std::string GetQt5EmbedQualifier(const void *qparent, const std::string &urlopt="")
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:99
virtual void ShowStatusBar(Bool_t show=kTRUE)
Definition TCanvasImp.h:95
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:156
void Close(Option_t *option="") override
Close canvas.
Definition TCanvas.cxx:778
void SetCanvasImp(TCanvasImp *i)
Definition TCanvas.h:201
void SetCanvasSize(UInt_t ww, UInt_t wh) override
Set Width and Height of canvas to ww and wh respectively.
Definition TCanvas.cxx:1995
void SetTitle(const char *title="") override
Set canvas title.
Definition TCanvas.cxx:2183
Int_t GetCanvasID() const override
Definition TCanvas.h:155
void SetName(const char *name="") override
Set canvas name. In case name is an empty string, a default name is set.
Definition TCanvas.cxx:2064
void SetBatch(Bool_t batch=kTRUE) override
Toggle batch mode.
Definition TCanvas.cxx:1979
@ kShowEditor
Definition TCanvas.h:91
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:37
void ResetBit(UInt_t f)
Definition TObject.h:186
The most important graphics class in the ROOT system.
Definition TPad.h:26
TVirtualPad * GetMother() const override
Definition TPad.h:253
void SetCanvas(TCanvas *c) override
Definition TPad.h:319
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17