20 #include "THttpServer.h" 24 #include <QGridLayout> 25 #include <QApplication> 33 #include "TWebCanvas.h" 38 fQtScalingfactor = (double) metric(QPaintDevice::PdmDevicePixelRatioScaled)/65536.;
40 setObjectName(
"QWebCanvas");
42 setSizeIncrement( QSize( 100, 100 ) );
44 setUpdatesEnabled(
true );
45 setMouseTracking(
true);
47 setFocusPolicy( Qt::TabFocus );
48 setCursor( Qt::CrossCursor );
62 QGridLayout *gridLayout =
new QGridLayout(
this);
63 gridLayout->setSpacing(10);
64 gridLayout->setContentsMargins(1,1,1,1);
66 static int wincnt = 1;
69 fCanvas->SetName(TString::Format(
"Canvas%d", wincnt++).Data());
71 fCanvas->ResetBit(TCanvas::kShowEditor);
77 TWebCanvas *web =
new TWebCanvas(
fCanvas,
"title", 0, 0, 800, 600, kFALSE);
80 static std::string go4script;
82 if (go4script.empty()) {
84 go4script = THttpServer::ReadFileContent(fname.Data());
87 web->SetCustomScripts(go4script);
88 web->AddCustomClass(
"TGo4Marker");
89 web->AddCustomClass(
"TGo4Condition",
true);
90 web->AddCustomClass(
"TGo4CondArray");
93 #if ROOT_VERSION_CODE >= ROOT_VERSION(6,26,0) 94 web->SetAsyncMode(kTRUE);
101 web->SetCanCreateObjects(kFALSE);
107 web->SetPadClickedHandler([
this](TPad *pad,
int x,
int y) {
ProcessPadClicked(pad, x, y); });
109 web->SetPadDblClickedHandler([
this](TPad *pad,
int x,
int y) {
ProcessPadDblClicked(pad, x, y); });
111 #if QT_VERSION >= QT_VERSION_CHECK(6,0,0) 112 const char *kind =
"qt6";
114 const char *kind =
"qt5";
117 #if ROOT_VERSION_CODE > ROOT_VERSION(6,29,0) 118 ROOT::RWebDisplayArgs
args(kind);
120 ROOT::Experimental::RWebDisplayArgs
args(kind);
123 args.SetDriverData(
this);
124 args.SetUrlOpt(
"noopenui");
126 web->ShowWebWindow(args);
128 fView = findChild<QWebEngineView*>(
"RootWebView");
130 printf(
"FAIL TO FIND QWebEngineView - ROOT Qt5Web plugin does not work properly !!!!!\n");
134 gridLayout->addWidget(
fView);
137 QObject::connect(
fView, SIGNAL(drop(QDropEvent*)),
this, SLOT(
dropView(QDropEvent*)));
147 gROOT->GetListOfCanvases()->Remove(
fCanvas);
157 Long_t offset = TCanvas::Class()->GetDataMemberOffset(
"fCanvasID");
159 Int_t *
id = (Int_t *)((
char *)
fCanvas + offset);
160 if (*
id ==
fCanvas->GetCanvasID()) *
id = on_init ? 111222333 : -1;
162 printf(
"ERROR: Cannot modify TCanvas::fCanvasID data member\n");
165 offset = TCanvas::Class()->GetDataMemberOffset(
"fPixmapID");
167 Int_t *
id = (Int_t *)((
char *)
fCanvas + offset);
168 if (*
id ==
fCanvas->GetPixmapID()) *
id = on_init ? 332211 : -1;
170 printf(
"ERROR: Cannot modify TCanvas::fPixmapID data member\n");
173 offset = TCanvas::Class()->GetDataMemberOffset(
"fMother");
175 TPad **moth = (TPad **)((
char *)
fCanvas + offset);
176 if (*moth ==
fCanvas->GetMother()) *moth = on_init ?
fCanvas :
nullptr;
178 printf(
"ERROR: Cannot set TCanvas::fMother data member\n");
195 TObject *obj =
nullptr;
196 #if QT_VERSION < QT_VERSION_CHECK(6,0,0) 197 QPoint pos =
event->pos();
199 QPoint pos =
event->position().toPoint();
203 printf(
"Drop on pad %s\n", pad ? pad->GetName() :
"---");
210 TObject *obj =
nullptr;
211 #if QT_VERSION < QT_VERSION_CHECK(6,0,0) 212 QPoint pos =
event->pos();
214 QPoint pos =
event->position().toPoint();
218 printf(
"Drop on view %s\n", pad ? pad->GetName() :
"---");
225 TWebCanvas *cimp =
dynamic_cast<TWebCanvas*
> (
fCanvas->GetCanvasImp());
227 cimp->ShowEditor(kTRUE);
228 cimp->ActivateInEditor(pad, obj);
234 return fCanvas->GetShowEventStatus();
239 return fCanvas->GetShowEditor();
244 if (
fCanvas->GetShowEventStatus() != flag)
250 TCanvasImp *cimp =
fCanvas->GetCanvasImp();
251 if (cimp) cimp->ShowEditor(flag);
256 TCanvasImp *cimp =
fCanvas->GetCanvasImp();
257 if (cimp) cimp->ShowStatusBar(kTRUE);
void activateStatusLine()
bool isStatusBarVisible()
void ProcessPadDblClicked(TPad *pad, int x, int y)
QWebEngineView * fView
qt webwidget to show
void ProcessCanvasUpdated()
void resizeEvent(QResizeEvent *event) override
void ProcessActivePadChanged(TPad *pad)
void dropView(QDropEvent *event)
void setEditorVisible(bool flag=true)
static TString subGO4SYS(const char *subdir)
void CanvasDropEvent(QDropEvent *, TPad *)
double scaledPosition(int p)
void processRepaintTimer()
void setStatusBarVisible(bool flag=true)
void SetPrivateCanvasFields(bool on_init)
QWebCanvas(QWidget *parent=nullptr)
void dropEvent(QDropEvent *event) override
void ProcessPadClicked(TPad *pad, int x, int y)
void activateEditor(TPad *pad=nullptr, TObject *obj=nullptr)