/*************************************************************************** * Copyright (c) 2009 Jürgen Riegel * * * * This file is part of the FreeCAD CAx development system. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Library General Public * * License as published by the Free Software Foundation; either * * version 2 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU Library General Public License for more details. * * * * You should have received a copy of the GNU Library General Public * * License along with this library; see the file COPYING.LIB. If not, * * write to the Free Software Foundation, Inc., 59 Temple Place, * * Suite 330, Boston, MA 02111-1307, USA * * * ***************************************************************************/ #ifndef WEBGUI_BROWSERVIEW_H #define WEBGUI_BROWSERVIEW_H #include #include #if defined(QTWEBENGINE) # include namespace WebGui { class WebEngineUrlRequestInterceptor; } #elif defined(QTWEBKIT) # include #endif #include #include #include class QNetworkReply; class QNetworkRequest; class QUrl; namespace WebGui { class UrlWidget; #ifdef QTWEBENGINE class WebGuiExport WebView : public QWebEngineView #else class WebGuiExport WebView : public QWebView #endif { Q_OBJECT public: explicit WebView(QWidget *parent = nullptr); protected: void mousePressEvent(QMouseEvent *event) override; void wheelEvent(QWheelEvent *event) override; void contextMenuEvent(QContextMenuEvent *event) override; private Q_SLOTS: void triggerContextMenuAction(int); Q_SIGNALS: void openLinkInExternalBrowser(const QUrl&); void openLinkInNewWindow(const QUrl&); void viewSource(const QUrl&); }; /** * A special view class which sends the messages from the application to * the editor and embeds it in a window. */ class WebGuiExport BrowserView : public Gui::MDIView, public Gui::WindowParameter { Q_OBJECT TYPESYSTEM_HEADER_WITH_OVERRIDE(); public: explicit BrowserView(QWidget* parent); ~BrowserView() override; void load(const char* URL); void load(const QUrl & url); void setHtml(const QString& HtmlCode,const QUrl & BaseUrl); void stop(); QUrl url() const; void OnChange(Base::Subject &rCaller,const char* rcReason) override; const char *getName() const override {return "BrowserView";} PyObject *getPyObject() override; bool onMsg(const char* pMsg,const char** ppReturn) override; bool onHasMsg(const char* pMsg) const override; bool canClose () override; #ifdef QTWEBENGINE public Q_SLOTS: void setWindowIcon(const QIcon &icon); #endif protected Q_SLOTS: void onLoadStarted(); void onLoadProgress(int); void onLoadFinished(bool); bool chckHostAllowed(const QString& host); void urlFilter(const QUrl &url); #ifdef QTWEBENGINE #if QT_VERSION < QT_VERSION_CHECK(6,0,0) void onDownloadRequested(QWebEngineDownloadItem *request); #else void onDownloadRequested(QWebEngineDownloadRequest *request); #endif void onLinkHovered(const QString& url); #else void onDownloadRequested(const QNetworkRequest& request); void onUnsupportedContent(QNetworkReply* reply); void onLinkHovered(const QString& link, const QString& title, const QString& textContent); #endif void onViewSource(const QUrl &url); void onOpenLinkInExternalBrowser(const QUrl& url); void onOpenLinkInNewWindow(const QUrl&); void onUpdateBrowserActions(); private: QPointer view; bool isLoading; UrlWidget *urlWgt; #ifdef QTWEBENGINE WebEngineUrlRequestInterceptor *interceptLinks; #else float textSizeMultiplier; #endif }; // the URL ardressbar lineedit class UrlWidget : public QLineEdit { Q_OBJECT BrowserView *m_view; public: explicit UrlWidget(BrowserView *view); ~UrlWidget() override; void display(); protected: void keyPressEvent(QKeyEvent *keyEvt) override; }; } // namespace WebGui #endif // WEBGUI_BROWSERVIEW_H