1 #ifndef _CLASS_WEVBIEW_H_ 2 #define _CLASS_WEVBIEW_H_ 3 //============================================================================= 4 // 5 // File : KvsObject_webView.h 6 // Creation date : Wed Mar 9 23:45:48 CEST 2011 7 // by Alessandro Carbone(Noldor) 8 // 9 // This file is part of the KVIrc IRC client distribution 10 // Copyright (C) 2011 Alessandro Carbone (elfonol at gmail dot com) 11 // 12 // This program is FREE software. You can redistribute it and/or 13 // modify it under the terms of the GNU General Public License 14 // as published by the Free Software Foundation; either version 2 15 // of the License, or (at your option) any later version. 16 // 17 // This program is distributed in the HOPE that it will be USEFUL, 18 // but WITHOUT ANY WARRANTY; without even the implied warranty of 19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 20 // See the GNU General Public License for more details. 21 // 22 // You should have received a copy of the GNU General Public License 23 // along with this program. If not, write to the Free Software Foundation, 24 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 25 // 26 //============================================================================= 27 28 #include "kvi_settings.h" 29 #if defined(COMPILE_WEBKIT_SUPPORT) 30 #include "object_macros.h" 31 #include <QFile> 32 #include <QNetworkAccessManager> 33 #include <QWebView> 34 #include <QWebFrame> 35 #include <QWebElement> 36 #include <QMouseEvent> 37 #include <QContextMenuEvent> 38 39 class KvsObject_webView; 40 class KviKvsWebView : public QWebView 41 { 42 Q_OBJECT 43 public: 44 KviKvsWebView(QWidget * par, const char * name, KvsObject_webView *); 45 //void accept(); 46 //void reject(); 47 ~KviKvsWebView(); 48 49 protected: 50 KvsObject_webView * m_pParentScript; 51 52 protected: 53 void mouseMoveEvent(QMouseEvent * ev) override; 54 void contextMenuEvent(QContextMenuEvent *) override; 55 bool event(QEvent * e) override; 56 /*protected slots: 57 void slotNextClicked(); 58 void slotBackClicked(); 59 */ 60 }; 61 62 class KvsObject_webView : public KviKvsObject 63 { 64 Q_OBJECT 65 public: 66 KVSO_DECLARE_OBJECT(KvsObject_webView) 67 protected: 68 KviKvsRunTimeContext * m_pContext = nullptr; 69 int elementMapId = 1; 70 int insertElement(const QWebElement & ele); 71 QWebElement getElement(int iIdx); 72 int getElementId(const QWebElement &); 73 QHash<int, QWebElement> m_elementMapper; 74 KviPointerList<KviKvsObject> * lWebelement = nullptr; 75 QHash<QString, QWebElement *> m_dictCache; 76 KviPointerList<QNetworkReply> * m_pReplyList = nullptr; 77 QNetworkAccessManager * m_pNetworkManager = nullptr; 78 QWebElementCollection m_webElementCollection; 79 QWebElement m_currentElement; 80 81 public: widget()82 QWidget * widget() { return (QWidget *)object(); } 83 protected: 84 void getFrames(QWebFrame * pCurFrame, QStringList & szFramesNames); 85 QWebFrame * findFrame(QWebFrame * pCurFrame, QString & szFrameName); 86 bool init(KviKvsRunTimeContext * pContext, KviKvsVariantList * pParams) override; 87 bool removeFromDocument(KviKvsObjectFunctionCall * c); 88 bool makePreview(KviKvsObjectFunctionCall * c); 89 90 bool removeClass(KviKvsObjectFunctionCall * c); 91 bool addClass(KviKvsObjectFunctionCall * c); 92 93 bool classes(KviKvsObjectFunctionCall * c); 94 95 bool firstChild(KviKvsObjectFunctionCall * c); 96 bool lastChild(KviKvsObjectFunctionCall * c); 97 bool parentElement(KviKvsObjectFunctionCall * c); 98 bool nextSibling(KviKvsObjectFunctionCall * c); 99 100 bool toPlainText(KviKvsObjectFunctionCall * c); 101 bool setPlainText(KviKvsObjectFunctionCall * c); 102 bool load(KviKvsObjectFunctionCall * c); 103 bool setHtml(KviKvsObjectFunctionCall * c); 104 bool getDocumentElement(KviKvsObjectFunctionCall * c); 105 bool elementTagName(KviKvsObjectFunctionCall * c); 106 bool findAll(KviKvsObjectFunctionCall * c); 107 bool appendInside(KviKvsObjectFunctionCall * c); 108 bool appendOutside(KviKvsObjectFunctionCall * c); 109 110 bool findFirst(KviKvsObjectFunctionCall * c); 111 bool findText(KviKvsObjectFunctionCall * c); 112 113 bool hitTestContent(KviKvsObjectFunctionCall * c); 114 115 bool elementAttributeNames(KviKvsObjectFunctionCall * c); 116 bool setLinkDelegationPolicy(KviKvsObjectFunctionCall * c); 117 bool setElementAttribute(KviKvsObjectFunctionCall * c); 118 bool setWebSetting(KviKvsObjectFunctionCall * c); 119 bool elementAttribute(KviKvsObjectFunctionCall * c); 120 bool frames(KviKvsObjectFunctionCall * c); 121 122 bool setStyleProperty(KviKvsObjectFunctionCall * c); 123 bool styleProperty(KviKvsObjectFunctionCall * c); 124 bool appendWebViewActionToMenu(KviKvsObjectFunctionCall * c); 125 126 bool loadStartedEvent(KviKvsObjectFunctionCall * c); 127 bool linkClickedEvent(KviKvsObjectFunctionCall * c); 128 bool loadFinishedEvent(KviKvsObjectFunctionCall * c); 129 bool loadProgressEvent(KviKvsObjectFunctionCall * c); 130 bool downloadCompletedEvent(KviKvsObjectFunctionCall * c); 131 bool downloadProgressEvent(KviKvsObjectFunctionCall * c); 132 bool downloadRequestEvent(KviKvsObjectFunctionCall * c); 133 bool addToJavaScriptWindowObject(KviKvsObjectFunctionCall * c); 134 bool evaluateJavaScript(KviKvsObjectFunctionCall * c); 135 136 // 137 bool setEventFilter(KviKvsObjectFunctionCall * c); 138 bool jsChangeEvent(KviKvsObjectFunctionCall * c); 139 bool jsSubmitEvent(KviKvsObjectFunctionCall * c); 140 bool jsClickEvent(KviKvsObjectFunctionCall * c); 141 bool jsMouseOverEvent(KviKvsObjectFunctionCall * c); 142 bool jsMouseOutEvent(KviKvsObjectFunctionCall * c); 143 protected slots: 144 void slotLoadFinished(bool); 145 void slotLoadProgress(int); 146 void slotLoadStarted(); 147 void slotDownloadRequest(const QNetworkRequest &); 148 void slotLinkClicked(const QUrl &); 149 150 void slotOnChange(QString); 151 void slotOnSubmit(QString); 152 void slotOnClick(QString); 153 void slotOnMouseOver(QString); 154 void slotOnMouseOut(QString); 155 }; 156 157 class KviKvsDownloadHandler : public QObject 158 { 159 Q_OBJECT 160 public: 161 KviKvsDownloadHandler(KvsObject_webView * pParent, QFile * pFile, QNetworkReply * pNetReply, int iId); 162 163 ~KviKvsDownloadHandler(); 164 165 protected: 166 KvsObject_webView * m_pParentScript; 167 QFile * m_pFile; 168 QNetworkReply * m_pReply; 169 int m_Id; 170 protected slots: 171 void slotReadyRead(); 172 void slotReplyFinished(); 173 }; 174 175 #endif // COMPILE_WEBKIT_SUPPORT 176 #endif // _CLASS_WEBVIEW_H_ 177