#ifndef _CLASS_WEVBIEW_H_ #define _CLASS_WEVBIEW_H_ //============================================================================= // // File : KvsObject_webView.h // Creation date : Wed Mar 9 23:45:48 CEST 2011 // by Alessandro Carbone(Noldor) // // This file is part of the KVIrc IRC client distribution // Copyright (C) 2011 Alessandro Carbone (elfonol at gmail dot com) // // This program is FREE software. You can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, write to the Free Software Foundation, // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // //============================================================================= #include "kvi_settings.h" #if defined(COMPILE_WEBENGINE_SUPPORT) #include "object_macros.h" #include #include #include #include #include #include #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) #define DOWNLOAD_CLASS_NAME QWebEngineDownloadItem #else #define DOWNLOAD_CLASS_NAME QWebEngineDownloadRequest #endif class DOWNLOAD_CLASS_NAME; class KvsObject_webView; class KviKvsWebView : public QWebEngineView { Q_OBJECT public: KviKvsWebView(QWidget * par, const char * name, KvsObject_webView *); //void accept(); //void reject(); ~KviKvsWebView(); protected: KvsObject_webView * m_pParentScript; protected: void mouseMoveEvent(QMouseEvent * ev) override; void contextMenuEvent(QContextMenuEvent *) override; bool event(QEvent * e) override; /*protected slots: void slotNextClicked(); void slotBackClicked(); */ }; class KviKvsWebViewPage : public QWebEnginePage { Q_OBJECT public: enum LinkDelegationPolicy { DontDelegateLinks, DelegateAllLinks }; KviKvsWebViewPage(QObject* parent = 0) : QWebEnginePage(parent){} bool acceptNavigationRequest(const QUrl & url, QWebEnginePage::NavigationType type, bool) { if (type == QWebEnginePage::NavigationTypeLinkClicked) { emit linkClicked(url); switch(m_ePolicy) { case DelegateAllLinks: return false; case DontDelegateLinks: default: return true; } } return true; } void setLinkDelegationPolicy(LinkDelegationPolicy policy) { m_ePolicy = policy; } protected: LinkDelegationPolicy m_ePolicy = DontDelegateLinks; signals: void linkClicked(const QUrl&); }; class KvsObject_webView : public KviKvsObject { Q_OBJECT public: KVSO_DECLARE_OBJECT(KvsObject_webView) protected: KviKvsRunTimeContext * m_pContext = nullptr; KviPointerList * m_pReplyList = nullptr; QNetworkAccessManager * m_pNetworkManager = nullptr; public: QWidget * widget() { return (QWidget *)object(); } protected: bool init(KviKvsRunTimeContext * pContext, KviKvsVariantList * pParams) override; bool makePreview(KviKvsObjectFunctionCall * c); bool load(KviKvsObjectFunctionCall * c); bool setHtml(KviKvsObjectFunctionCall * c); bool findText(KviKvsObjectFunctionCall * c); bool setLinkDelegationPolicy(KviKvsObjectFunctionCall * c); bool setWebSetting(KviKvsObjectFunctionCall * c); bool appendWebViewActionToMenu(KviKvsObjectFunctionCall * c); bool loadStartedEvent(KviKvsObjectFunctionCall * c); bool linkClickedEvent(KviKvsObjectFunctionCall * c); bool loadFinishedEvent(KviKvsObjectFunctionCall * c); bool loadProgressEvent(KviKvsObjectFunctionCall * c); bool downloadCompletedEvent(KviKvsObjectFunctionCall * c); bool downloadProgressEvent(KviKvsObjectFunctionCall * c); bool downloadRequestEvent(KviKvsObjectFunctionCall * c); bool addToJavaScriptWindowObject(KviKvsObjectFunctionCall * c); bool evaluateJavaScript(KviKvsObjectFunctionCall * c); // bool jsChangeEvent(KviKvsObjectFunctionCall * c); bool jsSubmitEvent(KviKvsObjectFunctionCall * c); bool jsClickEvent(KviKvsObjectFunctionCall * c); bool jsMouseOverEvent(KviKvsObjectFunctionCall * c); bool jsMouseOutEvent(KviKvsObjectFunctionCall * c); protected slots: void slotLoadFinished(bool); void slotLoadProgress(int); void slotLoadStarted(); void slotDownloadRequest(DOWNLOAD_CLASS_NAME *); void slotLinkClicked(const QUrl &); void slotOnChange(QString); void slotOnSubmit(QString); void slotOnClick(QString); void slotOnMouseOver(QString); void slotOnMouseOut(QString); }; class KviKvsDownloadHandler : public QObject { Q_OBJECT public: KviKvsDownloadHandler(KvsObject_webView * pParent, QString &szFilePath, DOWNLOAD_CLASS_NAME * pDownload, int iId); ~KviKvsDownloadHandler(); protected: KvsObject_webView * m_pParentScript; DOWNLOAD_CLASS_NAME * m_pDownload; int m_Id; protected slots: void slotDownloadProgress(qint64 bytesReceived, qint64 bytesTotal); void slotFinished(); }; #endif // COMPILE_WEBENGINE_SUPPORT #endif // _CLASS_WEBVIEW_H_