aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/objects/KvsObject_webView.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/objects/KvsObject_webView.cpp')
-rw-r--r--src/modules/objects/KvsObject_webView.cpp1026
1 files changed, 215 insertions, 811 deletions
diff --git a/src/modules/objects/KvsObject_webView.cpp b/src/modules/objects/KvsObject_webView.cpp
index d61077532..470bfca0d 100644
--- a/src/modules/objects/KvsObject_webView.cpp
+++ b/src/modules/objects/KvsObject_webView.cpp
@@ -34,140 +34,233 @@
#include <QMenu>
#if defined(COMPILE_WEBKIT_SUPPORT)
-#include <QWebView>
-#include <QWebSettings>
-#include <QWebElement>
+#include <QWebEngineProfile>
+#include <QWebEngineView>
+#include <QWebEngineSettings>
+#include <QWebEngineDownloadItem>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QPixmap>
-#include <QFile>
+#include <QFileInfo>
#include <QSize>
#include <QPoint>
#include <QVariant>
#include <QToolTip>
static int g_iDownloadId = 1;
-KviKvsDownloadHandler::KviKvsDownloadHandler(KvsObject_webView * pParent, QFile * pFile, QNetworkReply * pNetReply, int iId)
+KviKvsDownloadHandler::KviKvsDownloadHandler(KvsObject_webView * pParent, QString &szFilePath, QWebEngineDownloadItem * pDownload, int iId)
: QObject(pParent)
{
-
m_Id = iId;
m_pParentScript = pParent;
- m_pReply = pNetReply;
- m_pFile = pFile;
- connect(m_pReply, SIGNAL(finished()), this, SLOT(slotReplyFinished()));
- connect(m_pReply, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
+ m_pDownload = pDownload;
+ connect(m_pDownload, SIGNAL(finished()), this, SLOT(slotFinished()));
+ connect(m_pDownload, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(slotDownloadProgress(qint64, qint64)));
+
+ QFileInfo oFi(szFilePath);
+ m_pDownload->setDownloadDirectory(oFi.absolutePath());
+ m_pDownload->setDownloadFileName(oFi.fileName());
+ m_pDownload->accept();
}
-void KviKvsDownloadHandler::slotReplyFinished()
+void KviKvsDownloadHandler::slotFinished()
{
KviKvsVariantList params(new KviKvsVariant((kvs_int_t)m_Id));
m_pParentScript->callFunction(m_pParentScript, "downloadCompletedEvent", &params);
- m_pFile->close();
- delete m_pFile;
- m_pFile = nullptr;
- m_pReply->deleteLater();
- m_pReply = nullptr;
+ m_pDownload->deleteLater();
+ m_pDownload = nullptr;
this->deleteLater();
}
KviKvsDownloadHandler::~KviKvsDownloadHandler()
{
- if(m_pFile)
- {
- m_pFile->close();
- delete m_pFile;
- m_pFile = nullptr;
- }
- if(m_pReply)
+ if(m_pDownload)
{
- delete m_pReply;
- m_pReply = nullptr;
+ delete m_pDownload;
+ m_pDownload = nullptr;
}
}
-void KviKvsDownloadHandler::slotReadyRead()
+void KviKvsDownloadHandler::slotDownloadProgress(qint64 bytesReceived, qint64 bytesTotal)
{
- QVariant vSize = m_pReply->header(QNetworkRequest::ContentLengthHeader);
- int iSize = 0;
- if(!vSize.isNull())
- {
- bool bOk;
- iSize = vSize.toInt(&bOk);
- }
-
- QByteArray bytes = m_pReply->readAll();
- KviKvsVariantList params(new KviKvsVariant((kvs_int_t)bytes.count()),
- new KviKvsVariant((kvs_int_t)m_Id), new KviKvsVariant((kvs_int_t)iSize));
+ KviKvsVariantList params(new KviKvsVariant((kvs_int_t)bytesReceived),
+ new KviKvsVariant((kvs_int_t)m_Id), new KviKvsVariant((kvs_int_t)bytesTotal));
m_pParentScript->callFunction(m_pParentScript, "downloadProgressEvent", &params);
- m_pFile->write(bytes);
}
const char * const webattributes_tbl[] = {
+ "AutoLoadImages",
"JavascriptEnabled",
- "PluginsEnabled",
"JavascriptCanOpenWindows",
"JavascriptCanAccessClipboard",
- "ZoomTextOnly",
- "LocalContentCanAccessFileUrls"
+ "LinksIncludedInFocusChain",
+ "LocalStorageEnabled",
+ "LocalContentCanAccessRemoteUrls",
+ "XSSAuditingEnabled",
+ "SpatialNavigationEnabled",
+ "LocalContentCanAccessFileUrls",
+ "HyperlinkAuditingEnabled",
+ "ScrollAnimatorEnabled",
+ "ErrorPageEnabled",
+ "PluginsEnabled",
+ "FullScreenSupportEnabled",
+ "ScreenCaptureEnabled",
+ "WebGLEnabled",
+ "Accelerated2dCanvasEnabled",
+ "AutoLoadIconsForPage",
+ "TouchIconsEnabled",
+ "FocusOnNavigationEnabled",
+ "PrintElementBackgrounds",
+ "AllowRunningInsecureContent",
+ "AllowGeolocationOnInsecureOrigins",
+ "AllowWindowActivationFromJavaScript",
+ "ShowScrollBars",
+ "PlaybackRequiresUserGesture",
+ "JavascriptCanPaste",
+ "WebRTCPublicInterfacesOnly",
+ "DnsPrefetchEnabled",
+ "PdfViewerEnabled"
};
-const QWebSettings::WebAttribute webattributes_cod[] = {
- QWebSettings::JavascriptEnabled,
- QWebSettings::PluginsEnabled,
- QWebSettings::JavascriptCanOpenWindows,
- QWebSettings::JavascriptCanAccessClipboard,
- QWebSettings::ZoomTextOnly,
- QWebSettings::LocalContentCanAccessFileUrls
+const QWebEngineSettings::WebAttribute webattributes_cod[] = {
+ QWebEngineSettings::AutoLoadImages,
+ QWebEngineSettings::JavascriptEnabled,
+ QWebEngineSettings::JavascriptCanOpenWindows,
+ QWebEngineSettings::JavascriptCanAccessClipboard,
+ QWebEngineSettings::LinksIncludedInFocusChain,
+ QWebEngineSettings::LocalStorageEnabled,
+ QWebEngineSettings::LocalContentCanAccessRemoteUrls,
+ QWebEngineSettings::XSSAuditingEnabled,
+ QWebEngineSettings::SpatialNavigationEnabled,
+ QWebEngineSettings::LocalContentCanAccessFileUrls,
+ QWebEngineSettings::HyperlinkAuditingEnabled,
+ QWebEngineSettings::ScrollAnimatorEnabled,
+ QWebEngineSettings::ErrorPageEnabled,
+ QWebEngineSettings::PluginsEnabled,
+ QWebEngineSettings::FullScreenSupportEnabled,
+ QWebEngineSettings::ScreenCaptureEnabled,
+ QWebEngineSettings::WebGLEnabled,
+ QWebEngineSettings::Accelerated2dCanvasEnabled,
+ QWebEngineSettings::AutoLoadIconsForPage,
+ QWebEngineSettings::TouchIconsEnabled,
+ QWebEngineSettings::FocusOnNavigationEnabled,
+ QWebEngineSettings::PrintElementBackgrounds,
+ QWebEngineSettings::AllowRunningInsecureContent,
+ QWebEngineSettings::AllowGeolocationOnInsecureOrigins,
+ QWebEngineSettings::AllowWindowActivationFromJavaScript,
+ QWebEngineSettings::ShowScrollBars,
+ QWebEngineSettings::PlaybackRequiresUserGesture,
+ QWebEngineSettings::JavascriptCanPaste,
+ QWebEngineSettings::WebRTCPublicInterfacesOnly,
+ QWebEngineSettings::DnsPrefetchEnabled,
+ QWebEngineSettings::PdfViewerEnabled
};
const char * const findflag_tbl[] = {
"FindBackward",
- "FindCaseSensitively",
- "FindWrapsAroundDocument",
- "HighlightAllOccurrences"
+ "FindCaseSensitively"
};
-const QWebPage::FindFlag findflag_cod[] = {
- QWebPage::FindBackward,
- QWebPage::FindCaseSensitively,
- QWebPage::FindWrapsAroundDocument,
- QWebPage::HighlightAllOccurrences
+const QWebEnginePage::FindFlag findflag_cod[] = {
+ QWebEnginePage::FindBackward,
+ QWebEnginePage::FindCaseSensitively
};
-const QWebPage::WebAction actions_cod[] = {
- QWebPage::OpenLink,
- QWebPage::DownloadLinkToDisk,
- QWebPage::CopyLinkToClipboard,
- QWebPage::OpenImageInNewWindow,
- QWebPage::DownloadImageToDisk,
- QWebPage::CopyImageToClipboard,
- QWebPage::Back,
- QWebPage::Forward,
- QWebPage::Stop,
- QWebPage::Reload,
- QWebPage::Cut,
- QWebPage::Copy,
- QWebPage::Paste,
- QWebPage::InspectElement,
- QWebPage::SelectAll
+const QWebEnginePage::WebAction actions_cod[] = {
+ QWebEnginePage::NoWebAction,
+ QWebEnginePage::Back,
+ QWebEnginePage::Forward,
+ QWebEnginePage::Stop,
+ QWebEnginePage::Reload,
+ QWebEnginePage::ReloadAndBypassCache,
+ QWebEnginePage::Cut,
+ QWebEnginePage::Copy,
+ QWebEnginePage::Paste,
+ QWebEnginePage::Undo,
+ QWebEnginePage::Redo,
+ QWebEnginePage::SelectAll,
+ QWebEnginePage::PasteAndMatchStyle,
+ QWebEnginePage::OpenLinkInThisWindow,
+ QWebEnginePage::OpenLinkInNewWindow,
+ QWebEnginePage::OpenLinkInNewTab,
+ QWebEnginePage::OpenLinkInNewBackgroundTab,
+ QWebEnginePage::CopyLinkToClipboard,
+ QWebEnginePage::CopyImageToClipboard,
+ QWebEnginePage::CopyImageUrlToClipboard,
+ QWebEnginePage::CopyMediaUrlToClipboard,
+ QWebEnginePage::ToggleMediaControls,
+ QWebEnginePage::ToggleMediaLoop,
+ QWebEnginePage::ToggleMediaPlayPause,
+ QWebEnginePage::ToggleMediaMute,
+ QWebEnginePage::DownloadLinkToDisk,
+ QWebEnginePage::DownloadImageToDisk,
+ QWebEnginePage::DownloadMediaToDisk,
+ QWebEnginePage::InspectElement,
+ QWebEnginePage::ExitFullScreen,
+ QWebEnginePage::RequestClose,
+ QWebEnginePage::Unselect,
+ QWebEnginePage::SavePage,
+ QWebEnginePage::ViewSource,
+ QWebEnginePage::ToggleBold,
+ QWebEnginePage::ToggleItalic,
+ QWebEnginePage::ToggleUnderline,
+ QWebEnginePage::ToggleStrikethrough,
+ QWebEnginePage::AlignLeft,
+ QWebEnginePage::AlignCenter,
+ QWebEnginePage::AlignRight,
+ QWebEnginePage::AlignJustified,
+ QWebEnginePage::Indent,
+ QWebEnginePage::Outdent,
+ QWebEnginePage::InsertOrderedList,
+ QWebEnginePage::InsertUnorderedList
};
const char * const actions_tbl[] = {
- "OpenLink",
- "DownloadLinkToDisk",
- "CopyLinkToClipboard",
- "OpenImageInNewWindow",
- "DownloadImageToDisk",
- "CopyImageToClipboard",
+ "NoWebAction",
"Back",
"Forward",
"Stop",
"Reload",
+ "ReloadAndBypassCache",
"Cut",
"Copy",
"Paste",
+ "Undo",
+ "Redo",
+ "SelectAll",
+ "PasteAndMatchStyle",
+ "OpenLinkInThisWindow",
+ "OpenLinkInNewWindow",
+ "OpenLinkInNewTab",
+ "OpenLinkInNewBackgroundTab",
+ "CopyLinkToClipboard",
+ "CopyImageToClipboard",
+ "CopyImageUrlToClipboard",
+ "CopyMediaUrlToClipboard",
+ "ToggleMediaControls",
+ "ToggleMediaLoop",
+ "ToggleMediaPlayPause",
+ "ToggleMediaMute",
+ "DownloadLinkToDisk",
+ "DownloadImageToDisk",
+ "DownloadMediaToDisk",
"InspectElement",
- "SelectAll"
+ "ExitFullScreen",
+ "RequestClose",
+ "Unselect",
+ "SavePage",
+ "ViewSource",
+ "ToggleBold",
+ "ToggleItalic",
+ "ToggleUnderline",
+ "ToggleStrikethrough",
+ "AlignLeft",
+ "AlignCenter",
+ "AlignRight",
+ "AlignJustified",
+ "Indent",
+ "Outdent",
+ "InsertOrderedList",
+ "InsertUnorderedList"
};
#define webattributes_num (sizeof(webattributes_tbl) / sizeof(webattributes_tbl[0]))
@@ -202,66 +295,17 @@ const char * const actions_tbl[] = {
[pre]
FindBackward - Searches backwards instead of forwards;
FindCaseSensitively - Changes the behaviour to a case sensitive find operation.
- FindWrapsAroundDocument - Restart from the beginning of the document if the end was reached and the text was not found.
- HighlightAllOccurrences - Highlights all existing occurrences.
[/pre]
- !fn: <array> $frames()
- Returns an array containing the names of the document frames.
!fn: appendWebViewActionToMenu(<menu:h_object>,<webview_action:string>,[<icon_identifier>])
- !fn: <id:integer> $firstChild(<element_id:integer>)
- Return the identifier of element's first child.
- !fn: <array> $findAll(<element_id:integer>,<query:string>)
- Searches for all the elements named <query> and stores them in an array of element's identifiers.
- !fn: <id:integer> $findFirst(<element_id:integer>,<query:string>)
- Searches for the first element named <query>; returns the identifier.
- !fn: <id:integer> $parentElement(<element_id:integer>,)
- Returns the parent of <element_id>.
- !fn: <id:integer> $nextSibling(<element_id>)
- Returns the element just after <element_id>.
- !fn: $appendInside(<element_id>,<html_code>)
- !fn: $appendOutside(<element_id>,<html_code>)
- !fn: <string> $elementTagName(<element_id>)
- Returns the tag name of the <element_id>.
- !fn: <id:integer> $getDocumentElement([frame_name:string])
- Return as unique identifier the document element of the frame [frame_name].
- If no value has been specified for [frame_name], the main frame of the page will be used.
- !fn: string $attributeNames(<element_id>)
- Returns a comma-separated list of the attribute names set on element <element_id>.
- !fn: string $attribute(<element_id>,<name:string>)
- Returns the value of the attribute <name> for element <element_id>.
- !fn: setStyleProperty(<element_id>,<name:string>,<value:string>)
- Sets the value of the inline style on element <element_id> with the given name to <value> .
- In order to ensure that the value will be applied, you may have to append "!important" to the value.
- !fn: <value:string> styleProperty(<element_id>,<name:string>,<style_resolve_strategy:string>)
- Returns the value of the style with the given name using the specified strategy. If a style with name does not exist, an empty string is returned.
- Possible value for <style_resolve_strategy> are:
- [pre]
- CascadedStyle - the property's value is determined using the rules defined in the document's stylesheet. [b]This is the default strategy[/b].
- InlineStyle - the property's value is determined by element definition, without respecting CSS rules.
- ComputedStyle - the property's value is determined by the style property resolved from the environment.
- [/pre]
!fn: pixmap $makePreview()
Returns a 212x142 thumbnail of the current webView constants.
The returned object is an instance of the pixmap class.
- !fn: string $toPlainText(<element_id>)
- Returns the string representation of element <element_id>.
- !fn: string $setPlainText(<element_id>)
- Set the string representation of the element <element_id>.
- !fn: $setElementAttribute(<element_id>,<name:string>,<value:string>)
- Sets the attribute <name> with value <value> to the element <element_id>.
!fn: $setWebSetting(<name:string>,<value:bool>)
Enables or disables the <name> setting depending on <value>.
Valid settings name: JavascriptEnabled, PluginsEnabled, JavascriptCanOpenWindows, JavascriptCanAccessClipboard, ZoomTextOnly, LocalContentCanAccessFileUrls.
- !fn: $removeFromDocument(<element_id>)
- Removes the element <element_id> from the document.
- !fn: $removeClass(<element_id>,<class_name:string>)
- Removes a class from the element <element_id>.
- !fn: string $classes(<element_id>)
- Returns a comma-separated list of classes set on the element <element_id>.
!fn: $setLinkDelegationPolicy(<policy:string>)
Sets the link delegation policy: what happens when the users click on a link. Valid values:
[br] DontDelegateLinks: No links are delegated. Instead, webView tries to handle them all.
- [br] DelegateExternalLinks: When activating links that point to documents not stored on the local filesystem or an equivalent then $linkClickedEvent() is executed.
[br] DelegateAllLinks: Whenever a link is activated the $linkClickedEvent() is executed.
!fn: $linkClickedEvent()
This function can be called when the user clicks on a link, depending no the current link delegation policy.
@@ -313,48 +357,12 @@ KVSO_BEGIN_REGISTERCLASS(KvsObject_webView, "webview", "widget")
// page related
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, load)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, setHtml)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, frames)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, makePreview)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, appendWebViewActionToMenu)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, setLinkDelegationPolicy)
-
-// navigationn through the dom's tree
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, firstChild)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, lastChild)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, appendInside)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, appendOutside)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, parentElement)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, nextSibling)
-
-// find dom's elements
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, findAll)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, findFirst)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, findText)
-
-// element info
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, elementTagName)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, getDocumentElement)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, elementAttributeNames)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, setElementAttribute)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, elementAttribute)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, hitTestContent)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, toPlainText)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, setPlainText)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, removeFromDocument)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, removeClass)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, addClass)
-
-// css
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, setStyleProperty)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, styleProperty)
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, setWebSetting)
-
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, classes)
-
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, setEventFilter)
-
-KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, addToJavaScriptWindowObject)
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, evaluateJavaScript)
+KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, setWebSetting)
// events
KVSO_REGISTER_HANDLER_BY_NAME(KvsObject_webView, jsChangeEvent)
@@ -378,79 +386,25 @@ KVSO_END_CONSTRUCTOR(KvsObject_webView)
KVSO_BEGIN_DESTRUCTOR(KvsObject_webView)
-m_elementMapper.clear();
KVSO_END_CONSTRUCTOR(KvsObject_webView)
bool KvsObject_webView::init(KviKvsRunTimeContext * c, KviKvsVariantList *)
{
//SET_OBJECT(KviKvsWebview);
- setObject(new KviKvsWebView(parentScriptWidget(), getName().toUtf8().data(), this), true);
- elementMapId = 1;
+ KviKvsWebView *pView = new KviKvsWebView(parentScriptWidget(), getName().toUtf8().data(), this);
+ setObject(pView, true);
+ KviKvsWebViewPage *pPage = new KviKvsWebViewPage(pView);
+ pView->setPage(pPage);
m_pContext = c;
m_pNetworkManager = new QNetworkAccessManager(this);
- QWebPage * pPage = ((QWebView *)widget())->page();
- connect(((QWebView *)widget()), SIGNAL(loadStarted()), this, SLOT(slotLoadStarted()));
- connect(((QWebView *)widget()), SIGNAL(loadFinished(bool)), this, SLOT(slotLoadFinished(bool)));
- connect(((QWebView *)widget()), SIGNAL(loadProgress(int)), this, SLOT(slotLoadProgress(int)));
+ connect(pView, SIGNAL(loadStarted()), this, SLOT(slotLoadStarted()));
+ connect(pView, SIGNAL(loadFinished(bool)), this, SLOT(slotLoadFinished(bool)));
+ connect(pView, SIGNAL(loadProgress(int)), this, SLOT(slotLoadProgress(int)));
connect(pPage, SIGNAL(linkClicked(const QUrl &)), this, SLOT(slotLinkClicked(const QUrl &)));
- connect(pPage, SIGNAL(downloadRequested(const QNetworkRequest &)), this, SLOT(slotDownloadRequest(const QNetworkRequest &)));
+ connect(QWebEngineProfile::defaultProfile(), SIGNAL(downloadRequested(QWebEngineDownloadItem*)),
+ this, SLOT(slotDownloadRequest(QWebEngineDownloadItem*)));
return true;
}
-int KvsObject_webView::insertElement(const QWebElement & ele)
-{
- int eleid = getElementId(ele);
- if(!eleid)
- {
- m_elementMapper[elementMapId] = ele;
- return elementMapId++;
- }
- else
- return eleid;
-}
-int KvsObject_webView::getElementId(const QWebElement & ele)
-{
- QHashIterator<int, QWebElement> it(m_elementMapper);
- while(it.hasNext())
- {
- it.next();
- if(it.value() == ele)
- return it.key();
- }
- return 0;
-}
-
-QWebElement KvsObject_webView::getElement(int iIdx)
-{
- return m_elementMapper.value(iIdx);
-}
-void KvsObject_webView::getFrames(QWebFrame * pCurFrame, QStringList & szFramesNames)
-{
- szFramesNames.append(pCurFrame->title());
- QList<QWebFrame *> lFrames = pCurFrame->childFrames();
- for(int i = 0; i < lFrames.count(); i++)
- {
- QWebFrame * pChildFrame = lFrames.at(i);
- if(pChildFrame->childFrames().count())
- getFrames(pChildFrame, szFramesNames);
- }
-}
-QWebFrame * KvsObject_webView::findFrame(QWebFrame * pCurFrame, QString & szFrameName)
-{
- if(pCurFrame->title() == szFrameName)
- return pCurFrame;
- QList<QWebFrame *> lFrames = pCurFrame->childFrames();
- for(int i = 0; i < lFrames.count(); i++)
- {
- QWebFrame * pChildFrame = lFrames.at(i);
- if(pChildFrame->childFrames().count())
- {
- pCurFrame = findFrame(pChildFrame, szFrameName);
- if(pCurFrame)
- return pCurFrame;
- }
- }
- return nullptr;
-}
KVSO_CLASS_FUNCTION(webView, setLinkDelegationPolicy)
{
@@ -459,16 +413,15 @@ KVSO_CLASS_FUNCTION(webView, setLinkDelegationPolicy)
KVSO_PARAMETERS_BEGIN(c)
KVSO_PARAMETER("policy", KVS_PT_STRING, 0, szPolicy)
KVSO_PARAMETERS_END(c)
- QWebPage::LinkDelegationPolicy policy = QWebPage::DontDelegateLinks;
+ KviKvsWebViewPage::LinkDelegationPolicy policy = KviKvsWebViewPage::DontDelegateLinks;
if(KviQString::equalCI(szPolicy, "DontDelegateLinks"))
- policy = QWebPage::DontDelegateLinks;
- else if(KviQString::equalCI(szPolicy, "DelegateExternalLinks"))
- policy = QWebPage::DelegateExternalLinks;
+ policy = KviKvsWebViewPage::DontDelegateLinks;
else if(KviQString::equalCI(szPolicy, "DelegateAllLinks"))
- policy = QWebPage::DelegateAllLinks;
+ policy = KviKvsWebViewPage::DelegateAllLinks;
else
c->warning(__tr2qs_ctx("Unknown delegation policy '%Q'- Switch do default dontDelegateLinks", "objects"), &szPolicy);
- ((QWebView *)widget())->page()->setLinkDelegationPolicy(policy);
+
+ ((KviKvsWebViewPage *)((QWebEngineView *)widget())->page())->setLinkDelegationPolicy(policy);
return true;
}
@@ -479,7 +432,7 @@ KVSO_CLASS_FUNCTION(webView, load)
KVSO_PARAMETERS_BEGIN(c)
KVSO_PARAMETER("url", KVS_PT_STRING, 0, szUrl)
KVSO_PARAMETERS_END(c)
- ((QWebView *)widget())->load(QUrl(szUrl));
+ ((QWebEngineView *)widget())->load(QUrl::fromUserInput(szUrl));
return true;
}
KVSO_CLASS_FUNCTION(webView, setHtml)
@@ -490,32 +443,15 @@ KVSO_CLASS_FUNCTION(webView, setHtml)
KVSO_PARAMETER("szHtml", KVS_PT_STRING, 0, szHtml)
KVSO_PARAMETER("urlbase", KVS_PT_STRING, KVS_PF_OPTIONAL, szUrlBase)
KVSO_PARAMETERS_END(c)
- ((QWebView *)widget())->setHtml(szHtml, QUrl(szUrlBase));
+ ((QWebEngineView *)widget())->setHtml(szHtml, QUrl(szUrlBase));
return true;
}
KVSO_CLASS_FUNCTION(webView, makePreview)
{
CHECK_INTERNAL_POINTER(widget())
- QSize size = ((QWebView *)widget())->page()->mainFrame()->contentsSize();
+ //QSizeF size = ((QWebEngineView *)widget())->page()->contentsSize();
QImage * pImage = new QImage(212, 142, QImage::Format_RGB32);
- QWebFrame * pFrame = ((QWebView *)widget())->page()->mainFrame();
- QPainter painter(pImage);
- painter.setRenderHint(QPainter::Antialiasing, true);
- painter.setRenderHint(QPainter::TextAntialiasing, true);
- painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
- double dWScale = size.width() > 0 ? (212.0 / (double)(size.width())) : 0;
- double dHScale = dWScale;
- if((size.height() * dWScale) < 142)
- {
- // solution 1 is to fill the missing bacgkround
- painter.fillRect(0, 0, 212, 142, QColor(255, 255, 255));
- // solution 2 is to stretch the contents, but this doesn't work well because
- // the frame reports a size that doesn't exactly match the document
- //dHScale = 142.0 / (double)(size.height());
- }
- painter.scale(dWScale, dHScale);
- pFrame->documentElement().render(&painter);
- painter.end();
+ ((QWebEngineView *)widget())->render(pImage);
KviKvsObjectClass * pClass = KviKvsKernel::instance()->objectController()->lookupClass("pixmap");
KviKvsVariantList params;
KviKvsObject * pObject = pClass->allocateInstance(nullptr, "internalpixmap", c->context(), &params);
@@ -524,250 +460,29 @@ KVSO_CLASS_FUNCTION(webView, makePreview)
return true;
}
-KVSO_CLASS_FUNCTION(webView, findAll)
-{
- CHECK_INTERNAL_POINTER(widget())
- QString szQuery;
- KviKvsArray * pArray;
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("element_identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETER("query", KVS_PT_STRING, 0, szQuery)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- QWebElementCollection elementCollection = element.findAll(szQuery);
- if(!elementCollection.count())
- return true;
- //qDebug("collection %i",elementCollection.count());
- int idx = 0;
- pArray = new KviKvsArray();
- for(int i = 0; i < elementCollection.count(); i++)
- {
- QWebElement element = elementCollection.at(i);
- int id = insertElement(element);
- pArray->set(idx, new KviKvsVariant((kvs_int_t)id));
- idx++;
- }
- c->returnValue()->setArray(pArray);
- return true;
-}
-
KVSO_CLASS_FUNCTION(webView, evaluateJavaScript)
{
CHECK_INTERNAL_POINTER(widget())
QString szScript;
kvs_int_t iEleId;
KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("element_identifier", KVS_PT_INTEGER, 0, iEleId)
KVSO_PARAMETER("script_code", KVS_PT_STRING, 0, szScript)
KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element is null: you must call getDocumentElement first", "objects"));
- return true;
- }
- QVariant vRes = element.evaluateJavaScript(szScript);
- if(vRes.type() == QVariant::String)
- {
- QString szVal = vRes.toString();
- c->returnValue()->setString(szVal);
- }
- else
- c->warning(__tr2qs_ctx("Unsupported datatype", "objects"));
- return true;
-}
-
-KVSO_CLASS_FUNCTION(webView, findFirst)
-{
- QString szQuery;
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("element_identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETER("query", KVS_PT_STRING, 0, szQuery)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- QWebElement tempElement = element.findFirst(szQuery);
- if(tempElement.isNull())
- {
- c->returnValue()->setInteger(-1);
- return true;
- }
- int id = insertElement(tempElement);
- c->returnValue()->setInteger((kvs_int_t)id);
- return true;
-}
-
-KVSO_CLASS_FUNCTION(webView, removeFromDocument)
-{
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("element_identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- element.removeFromDocument();
- return true;
-}
-
-KVSO_CLASS_FUNCTION(webView, appendInside)
-{
- kvs_int_t iEleId;
- QString szCode;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("element_identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETER("name", KVS_PT_NONEMPTYSTRING, 0, szCode)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- element.appendInside(szCode);
- return true;
-}
-
-KVSO_CLASS_FUNCTION(webView, appendOutside)
-{
- kvs_int_t iEleId;
- QString szCode;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("element_identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETER("name", KVS_PT_NONEMPTYSTRING, 0, szCode)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- element.appendOutside(szCode);
- return true;
-}
-KVSO_CLASS_FUNCTION(webView, nextSibling)
-{
- CHECK_INTERNAL_POINTER(widget())
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("element_identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- QWebElement tempElement = element.nextSibling();
- if(tempElement.isNull())
- {
- c->returnValue()->setInteger(-1);
- return true;
- }
- int id = insertElement(tempElement);
- c->returnValue()->setInteger((kvs_int_t)id);
- return true;
-}
-
-KVSO_CLASS_FUNCTION(webView, frames)
-{
- CHECK_INTERNAL_POINTER(widget())
- QWebFrame * pFrame = ((QWebView *)widget())->page()->mainFrame();
- QStringList szFramesNames;
- getFrames(pFrame, szFramesNames);
- KviKvsArray * pArray = new KviKvsArray();
- c->returnValue()->setArray(pArray);
- return true;
-}
-
-KVSO_CLASS_FUNCTION(webView, elementTagName)
-{
- CHECK_INTERNAL_POINTER(widget())
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("element_identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- // qDebug("isnull ad index %i",iEleId);
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- c->returnValue()->setString(element.tagName());
- return true;
-}
-
-KVSO_CLASS_FUNCTION(webView, setElementAttribute)
-{
- CHECK_INTERNAL_POINTER(widget())
- QString szName, szValue;
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("element_identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETER("name", KVS_PT_NONEMPTYSTRING, 0, szName)
- KVSO_PARAMETER("value", KVS_PT_STRING, 0, szValue)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- element.setAttribute(szName, szValue);
+ ((QWebEngineView *)widget())->page()->runJavaScript(szScript, [](const QVariant &vRes) {
+ /*
+ * FIXME NEEDS A CALLBACK
+ if(vRes.type() == QVariant::String)
+ {
+ QString szVal = vRes.toString();
+ c->returnValue()->setString(szVal);
+ }
+ else
+ c->warning(__tr2qs_ctx("Unsupported datatype", "objects"));
+ */
+ });
return true;
}
-KVSO_CLASS_FUNCTION(webView, removeClass)
-{
- CHECK_INTERNAL_POINTER(widget())
- QString szClassName;
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("element_identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETER("class_name", KVS_PT_NONEMPTYSTRING, 0, szClassName)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- element.removeClass(szClassName);
- return true;
-}
-KVSO_CLASS_FUNCTION(webView, addClass)
-{
- CHECK_INTERNAL_POINTER(widget())
- QString szClassName;
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("element_identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETER("class_name", KVS_PT_NONEMPTYSTRING, 0, szClassName)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- element.addClass(szClassName);
- return true;
-}
KVSO_CLASS_FUNCTION(webView, setWebSetting)
{
CHECK_INTERNAL_POINTER(widget())
@@ -788,7 +503,7 @@ KVSO_CLASS_FUNCTION(webView, setWebSetting)
}
}
if(found)
- ((QWebView *)widget())->settings()->setAttribute(webattributes_cod[j], bEnabled);
+ ((QWebEngineView *)widget())->settings()->setAttribute(webattributes_cod[j], bEnabled);
else
c->warning(__tr2qs_ctx("Unknown web setting '%Q'", "objects"), &szName);
return true;
@@ -820,307 +535,7 @@ KVSO_CLASS_FUNCTION(webView, findText)
else
c->warning(__tr2qs_ctx("Unknown findflag '%Q'", "objects"), &it);
}
- ((QWebView *)widget())->findText(szName, (QWebPage::FindFlags)findflag);
- return true;
-}
-KVSO_CLASS_FUNCTION(webView, elementAttribute)
-{
- CHECK_INTERNAL_POINTER(widget())
- QString szName;
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("element_identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETER("name", KVS_PT_NONEMPTYSTRING, 0, szName)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
-
- // workaround for this issue: https://bugreports.qt.nokia.com//browse/QTWEBKIT-88
- if(KviQString::equalCI(element.tagName(), "input"))
- {
- QVariant value = element.evaluateJavaScript("this." + szName);
- c->returnValue()->setString(value.toString());
- return true;
- }
- c->returnValue()->setString(element.attribute(szName));
- return true;
-}
-
-KVSO_CLASS_FUNCTION(webView, elementAttributeNames)
-{
- CHECK_INTERNAL_POINTER(widget())
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETERS_END(c)
- QString szAttributeNames;
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- szAttributeNames = element.attributeNames().join(",");
- c->returnValue()->setString(szAttributeNames);
- return true;
-}
-KVSO_CLASS_FUNCTION(webView, classes)
-{
- CHECK_INTERNAL_POINTER(widget())
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- QString szClasses;
- szClasses = element.classes().join(",");
- c->returnValue()->setString(szClasses);
- return true;
-}
-
-KVSO_CLASS_FUNCTION(webView, toPlainText)
-{
- CHECK_INTERNAL_POINTER(widget())
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- c->returnValue()->setString(element.toPlainText());
- return true;
-}
-KVSO_CLASS_FUNCTION(webView, setPlainText)
-{
- CHECK_INTERNAL_POINTER(widget())
- QString szText;
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETER("plaintext", KVS_PT_STRING, 0, szText)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- element.setPlainText(szText);
- return true;
-}
-
-KVSO_CLASS_FUNCTION(webView, firstChild)
-{
- CHECK_INTERNAL_POINTER(widget())
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
-
- QWebElement tempElement = element.firstChild();
- if(tempElement.isNull())
- {
- c->returnValue()->setInteger(-1);
- return true;
- }
- int id = insertElement(tempElement);
- c->returnValue()->setInteger((kvs_int_t)id);
- return true;
-}
-KVSO_CLASS_FUNCTION(webView, lastChild)
-{
- CHECK_INTERNAL_POINTER(widget())
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
-
- QWebElement tempElement = element.lastChild();
- if(tempElement.isNull())
- {
- c->returnValue()->setInteger(-1);
- return true;
- }
- int id = insertElement(tempElement);
- c->returnValue()->setInteger((kvs_int_t)id);
- return true;
-}
-KVSO_CLASS_FUNCTION(webView, parentElement)
-{
- CHECK_INTERNAL_POINTER(widget())
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
-
- QWebElement tempElement = element.parent();
- if(tempElement.isNull())
- {
- c->returnValue()->setInteger(-1);
- return true;
- }
- int id = insertElement(tempElement);
- c->returnValue()->setInteger((kvs_int_t)id);
- return true;
-}
-
-KVSO_CLASS_FUNCTION(webView, styleProperty)
-{
- CHECK_INTERNAL_POINTER(widget())
- QString szName, szStyleResolveStrategy;
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETER("name", KVS_PT_NONEMPTYSTRING, 0, szName)
- KVSO_PARAMETER("style_resolve_strategy", KVS_PT_STRING, KVS_PF_OPTIONAL, szStyleResolveStrategy)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- QWebElement::StyleResolveStrategy styleStrategy = QWebElement::CascadedStyle;
- if(!szStyleResolveStrategy.isEmpty())
- {
- if(KviQString::equalCI(szStyleResolveStrategy, "InlineStyle"))
- styleStrategy = QWebElement::InlineStyle;
- else if(KviQString::equalCI(szStyleResolveStrategy, "CascadedStyle"))
- styleStrategy = QWebElement::CascadedStyle;
- else if(KviQString::equalCI(szStyleResolveStrategy, "ComputedStyle"))
- styleStrategy = QWebElement::ComputedStyle;
- else
- {
- c->warning(__tr2qs_ctx("Unknown styleResolveStrategy: '%Q' - Switching to default CascadedStyle strategy", "objects"), &szStyleResolveStrategy);
- }
- }
- c->returnValue()->setString(element.styleProperty(szName, styleStrategy));
- return true;
-}
-KVSO_CLASS_FUNCTION(webView, setStyleProperty)
-{
- CHECK_INTERNAL_POINTER(widget())
- QString szProperty, szValue;
- kvs_int_t iEleId;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("identifier", KVS_PT_INTEGER, 0, iEleId)
- KVSO_PARAMETER("property", KVS_PT_STRING, 0, szProperty)
- KVSO_PARAMETER("value", KVS_PT_STRING, 0, szValue)
- KVSO_PARAMETERS_END(c)
- QWebElement element = getElement(iEleId);
- if(element.isNull())
- {
- c->warning(__tr2qs_ctx("Document element with ID %d doesn't exist", "objects"), iEleId);
- return true;
- }
- element.setStyleProperty(szProperty, szValue);
- return true;
-}
-
-KVSO_CLASS_FUNCTION(webView, getDocumentElement)
-{
- CHECK_INTERNAL_POINTER(widget())
- QString szFrameName;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("frame_name", KVS_PT_STRING, KVS_PF_OPTIONAL, szFrameName)
- KVSO_PARAMETERS_END(c)
- QWebFrame * pFrame;
- pFrame = ((QWebView *)widget())->page()->mainFrame();
- if(!szFrameName.isEmpty())
- {
- pFrame = findFrame(pFrame, szFrameName);
- if(!pFrame)
- {
- c->warning(__tr2qs_ctx("Unknown frame '%Q'", "objects"), &szFrameName);
- return true;
- }
- }
- int id = insertElement(pFrame->documentElement());
- c->returnValue()->setInteger((kvs_int_t)id);
- return true;
-}
-KVSO_CLASS_FUNCTION(webView, addToJavaScriptWindowObject)
-{
- CHECK_INTERNAL_POINTER(widget())
- QString szFrameName, szObjectName;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("object_name", KVS_PT_NONEMPTYSTRING, 0, szObjectName)
- KVSO_PARAMETER("frame_name", KVS_PT_STRING, KVS_PF_OPTIONAL, szFrameName)
- KVSO_PARAMETERS_END(c)
- QWebFrame * pFrame;
- pFrame = ((QWebView *)widget())->page()->mainFrame();
- if(!szFrameName.isEmpty())
- {
- pFrame = findFrame(pFrame, szFrameName);
- if(!pFrame)
- {
- c->warning(__tr2qs_ctx("Unknown frame '%Q'", "objects"), &szFrameName);
- return true;
- }
- }
- pFrame->addToJavaScriptWindowObject(szObjectName, this);
- return true;
-}
-KVSO_CLASS_FUNCTION(webView, setEventFilter)
-{
- QWebFrame * pFrame;
- pFrame = ((QWebView *)widget())->page()->mainFrame();
- pFrame->addToJavaScriptWindowObject("kvs", this);
- return true;
-}
-
-KVSO_CLASS_FUNCTION(webView, hitTestContent)
-{
- CHECK_INTERNAL_POINTER(widget())
- kvs_int_t iYPos, iXPos;
- KVSO_PARAMETERS_BEGIN(c)
- KVSO_PARAMETER("x_pos", KVS_PT_INT, 0, iXPos)
- KVSO_PARAMETER("y_pos", KVS_PT_INT, 0, iYPos)
- KVSO_PARAMETERS_END(c)
- QWebFrame * pFrame;
- pFrame = ((QWebView *)widget())->page()->mainFrame();
- QWebHitTestResult res = pFrame->hitTestContent(QPoint(iXPos, iYPos));
- if(res.isNull())
- return true;
- KviKvsHash * pHash = new KviKvsHash();
- pHash->set("imageurl", new KviKvsVariant(res.imageUrl().toString()));
- pHash->set("linktitle", new KviKvsVariant(res.linkTitleString()));
- pHash->set("linktext", new KviKvsVariant(res.linkText()));
- pHash->set("linkelement", new KviKvsVariant((kvs_int_t)insertElement(res.linkElement())));
- pHash->set("enclosingelement", new KviKvsVariant((kvs_int_t)insertElement(res.enclosingBlockElement())));
- pHash->set("element", new KviKvsVariant((kvs_int_t)insertElement(res.element())));
- c->returnValue()->setHash(pHash);
+ ((QWebEngineView *)widget())->findText(szName, (QWebEnginePage::FindFlags)findflag);
return true;
}
@@ -1156,7 +571,7 @@ KVSO_CLASS_FUNCTION(webView, appendWebViewActionToMenu)
{
if(KviQString::equalCI(szActionName, actions_tbl[i]))
{
- pAction = ((QWebView *)widget())->pageAction(actions_cod[i]);
+ pAction = ((QWebEngineView *)widget())->pageAction(actions_cod[i]);
break;
}
}
@@ -1279,8 +694,6 @@ void KvsObject_webView::slotOnMouseOut(QString szParam)
// slots
void KvsObject_webView::slotLoadFinished(bool bOk)
{
- if(bOk)
- m_currentElement = ((QWebView *)widget())->page()->mainFrame()->documentElement();
KviKvsVariantList params(new KviKvsVariant(bOk));
callFunction(this, "loadFinishedEvent", &params);
}
@@ -1304,31 +717,22 @@ void KvsObject_webView::slotLinkClicked(const QUrl & url)
callFunction(this, "linkClickedEvent", &params);
}
-void KvsObject_webView::slotDownloadRequest(const QNetworkRequest & r)
+void KvsObject_webView::slotDownloadRequest(QWebEngineDownloadItem *pDownload)
{
- QNetworkReply * pReply = m_pNetworkManager->get(r);
QString szFilePath = "";
KviKvsVariant * filepathret = new KviKvsVariant(szFilePath);
- KviKvsVariantList params(new KviKvsVariant(r.url().toString()));
+ KviKvsVariantList params(new KviKvsVariant(pDownload->url().toString()));
callFunction(this, "downloadRequestEvent", filepathret, &params);
filepathret->asString(szFilePath);
if(!szFilePath.isEmpty())
{
- QFile * pFile = new QFile(szFilePath);
- if(!pFile->open(QIODevice::WriteOnly))
- {
- m_pContext->warning(__tr2qs_ctx("Invalid file path '%Q'", "objects"), &szFilePath);
- pReply->abort();
- pReply->deleteLater();
- return;
- }
- (void)new KviKvsDownloadHandler(this, pFile, pReply, g_iDownloadId);
+ (void)new KviKvsDownloadHandler(this, szFilePath, pDownload, g_iDownloadId);
g_iDownloadId++;
}
}
KviKvsWebView::KviKvsWebView(QWidget * par, const char * name, KvsObject_webView * parent)
- : QWebView(par)
+ : QWebEngineView(par)
{
m_pParentScript = parent;
setObjectName(name);
@@ -1341,11 +745,11 @@ void KviKvsWebView::mouseMoveEvent(QMouseEvent * ev)
lParams.append(new KviKvsVariant((kvs_int_t)ev->x()));
lParams.append(new KviKvsVariant((kvs_int_t)ev->y()));
if(!m_pParentScript->callFunction(m_pParentScript, "mouseMoveEvent", &vRetValue, &lParams))
- QWebView::mouseMoveEvent(ev); // ignore results of a broken event handler
+ QWebEngineView::mouseMoveEvent(ev); // ignore results of a broken event handler
else
{
if(!vRetValue.asBoolean())
- QWebView::mouseMoveEvent(ev);
+ QWebEngineView::mouseMoveEvent(ev);
}
}
void KviKvsWebView::contextMenuEvent(QContextMenuEvent * ev)
@@ -1355,11 +759,11 @@ void KviKvsWebView::contextMenuEvent(QContextMenuEvent * ev)
lParams.append(new KviKvsVariant((kvs_int_t)ev->x()));
lParams.append(new KviKvsVariant((kvs_int_t)ev->y()));
if(!m_pParentScript->callFunction(m_pParentScript, "customContextMenuRequestedEvent", &vRetValue, &lParams))
- QWebView::contextMenuEvent(ev); // ignore results of a broken event handler
+ QWebEngineView::contextMenuEvent(ev); // ignore results of a broken event handler
else
{
if(!vRetValue.asBoolean())
- QWebView::contextMenuEvent(ev);
+ QWebEngineView::contextMenuEvent(ev);
}
}
bool KviKvsWebView::event(QEvent * e)
@@ -1379,7 +783,7 @@ bool KviKvsWebView::event(QEvent * e)
return false;
}
}
- return QWebView::event(e);
+ return QWebEngineView::event(e);
}
KviKvsWebView::~KviKvsWebView()
= default;