21#include <QtGui/QApplication>
22#include <QtGui/QStyleOptionGraphicsItem>
25#include <QtWebKit/QWebFrame>
26#include <QtWebKit/QWebPage>
28#include <QtCore/QTimer>
30#include <config-plasma.h>
33#include <kio/accessmanager.h>
41#include "private/animablegraphicswebview_p.h"
49 WebViewPrivate(WebView *parent)
54 void loadingFinished(
bool success);
55 void dragTimeoutExpired();
58 AnimableGraphicsWebView *webView;
59 ScrollWidget *scrollWidget;
63WebView::WebView(QGraphicsItem *parent)
65 d(new WebViewPrivate(this))
68 setAcceptTouchEvents(
true);
69 setAcceptsHoverEvents(
true);
70 setFlags(QGraphicsItem::ItemIsFocusable);
73 d->webView =
new AnimableGraphicsWebView(d->scrollWidget);
74 d->scrollWidget->setWidget(d->webView);
75 d->scrollWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
76 d->scrollWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
78 QPalette palette = qApp->palette();
79 palette.setBrush(QPalette::Base, Qt::transparent);
80 d->webView->page()->setPalette(palette);
82 d->webView->page()->setNetworkAccessManager(
new KIO::AccessManager(d->webView->page()));
88 this, SLOT(loadingFinished(
bool)));
98void WebView::setUrl(
const KUrl &url)
101 d->webView->load(
url);
104KUrl WebView::url()
const
106 return d->webView->url();
109void WebView::setHtml(
const QByteArray &html,
const KUrl &baseUrl)
112 d->webView->setContent(
html, QString(), baseUrl);
115void WebView::setHtml(
const QString &html,
const KUrl &baseUrl)
118 d->webView->setHtml(
html, baseUrl);
121QString WebView::html()
const
123 return d->webView->page()->mainFrame()->toHtml();
126QRectF WebView::geometry()
const
129 return QRectF(pos(), d->webView->page()->mainFrame()->geometry().size());
131 return QGraphicsWidget::geometry();
135QSizeF WebView::contentsSize()
const
137 return d->webView->page()->mainFrame()->contentsSize();
140void WebView::setScrollPosition(
const QPointF &position)
142 d->webView->setScrollPosition(position);
145QPointF WebView::scrollPosition()
const
147 return d->webView->scrollPosition();
150QRectF WebView::viewportGeometry()
const
152 return d->webView->page()->mainFrame()->geometry();
155qreal WebView::zoomFactor()
const
157 return d->webView->zoomFactor();
160void WebView::setZoomFactor(
const qreal zoom)
162 d->webView->setZoomFactor(zoom);
165void WebView::setPage(QWebPage *page)
167 d->webView->setPage(
page);
170QWebPage *WebView::page()
const
172 return d->webView->page();
175QWebFrame *WebView::mainFrame()
const
177 return d->webView->page()->mainFrame();
180void WebView::setDragToScroll(
bool drag)
184 mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
185 mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
187 mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAsNeeded);
188 mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAsNeeded);
190 d->webView->setDragToScroll(drag);
191 d->scrollWidget->setFiltersChildEvents(drag);
194bool WebView::dragToScroll()
196 return d->webView->dragToScroll();
204void WebView::forward()
206 d->webView->forward();
209void WebView::reload()
211 d->webView->reload();
221 QGraphicsWidget::paint(painter, option, widget);
224void WebView::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
226 QGraphicsWidget::mouseMoveEvent(event);
229void WebView::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
231 QGraphicsWidget::hoverMoveEvent(event);
234void WebView::mousePressEvent(QGraphicsSceneMouseEvent *event)
236 QGraphicsWidget::mousePressEvent(event);
239void WebView::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
241 QGraphicsWidget::mouseDoubleClickEvent(event);
244void WebView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
246 QGraphicsWidget::mouseReleaseEvent(event);
249void WebView::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
251 QGraphicsWidget::contextMenuEvent(event);
254void WebView::wheelEvent(QGraphicsSceneWheelEvent *event)
256 QGraphicsWidget::wheelEvent(event);
259void WebView::keyPressEvent(QKeyEvent * event)
261 QGraphicsWidget::keyPressEvent(event);
264void WebView::keyReleaseEvent(QKeyEvent * event)
266 QGraphicsWidget::keyReleaseEvent(event);
269void WebView::focusInEvent(QFocusEvent * event)
271 QGraphicsWidget::focusInEvent(event);
274void WebView::focusOutEvent(QFocusEvent * event)
276 QGraphicsWidget::focusOutEvent(event);
279void WebView::dragEnterEvent(QGraphicsSceneDragDropEvent * event)
281 QGraphicsWidget::dragEnterEvent(event);
284void WebView::dragLeaveEvent(QGraphicsSceneDragDropEvent * event)
286 QGraphicsWidget::dragLeaveEvent(event);
289void WebView::dragMoveEvent(QGraphicsSceneDragDropEvent * event)
291 QGraphicsWidget::dragMoveEvent(event);
294void WebView::dropEvent(QGraphicsSceneDragDropEvent * event)
296 QGraphicsWidget::dropEvent(event);
299QVariant WebView::itemChange(GraphicsItemChange change,
const QVariant &value)
301 if (change == QGraphicsItem::ItemSceneHasChanged) {
307 return QGraphicsWidget::itemChange(change, value);
310void WebView::setGeometry(
const QRectF &geometry)
312 QGraphicsWidget::setGeometry(
geometry);
313 d->scrollWidget->setGeometry(QRectF(0, 0,
geometry.width(),
geometry.height()));
314 d->webView->setGeometry(d->scrollWidget->viewportGeometry());
317QSizeF WebView::sizeHint(Qt::SizeHint which,
const QSizeF & constraint)
const
319 if (which == Qt::PreferredSize) {
320 return d->webView->page()->mainFrame()->contentsSize();
322 return QGraphicsWidget::sizeHint(which, constraint);
326void WebViewPrivate::loadingFinished(
bool success)
330 emit q->loadFinished(success);
336#include "webview.moc"
QWebFrame * mainFrame() const
The main web frame associated with this item.
void urlChanged(const QUrl &url)
url displayed by the web page changed
QRectF geometry() const
Reimplementation.
void loadProgress(int percent)
During loading progress, this signal is emitted.
void loadFinished(bool success)
This signal is emitted when loading is completed.
void setDragToScroll(bool drag)
Sets if the page can be scrolled around by dragging the contents with the mouse.
QWebPage * page() const
The QWebPage associated with this item.
Namespace for everything in libplasma.