• Skip to content
  • Skip to link menu
KDE 4.1 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

libplasma

webcontent.cpp

Go to the documentation of this file.
00001 /*
00002  *   Copyright 2006-2007 Aaron Seigo <aseigo@kde.org>
00003  *
00004  *   This program is free software; you can redistribute it and/or modify
00005  *   it under the terms of the GNU Library General Public License as
00006  *   published by the Free Software Foundation; either version 2, or
00007  *   (at your option) any later version.
00008  *
00009  *   This program is distributed in the hope that it will be useful,
00010  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  *   GNU General Public License for more details
00013  *
00014  *   You should have received a copy of the GNU Library General Public
00015  *   License along with this program; if not, write to the
00016  *   Free Software Foundation, Inc.,
00017  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
00018  */
00019 
00020 #include <QtCore/QUrl>
00021 #include <QtGui/QGraphicsSceneContextMenuEvent>
00022 #include <QtGui/QGraphicsSceneDragDropEvent>
00023 #include <QtGui/QGraphicsSceneMouseEvent>
00024 #include <QtGui/QGraphicsSceneWheelEvent>
00025 #include <QtGui/QKeyEvent>
00026 #include <QtGui/QStyleOptionGraphicsItem>
00027 #include <QtWebKit/QWebFrame>
00028 #include <QtWebKit/QWebPage>
00029 
00030 #include <KDE/KDebug>
00031 
00032 #include "plasma/widgets/webcontent.h"
00033 
00034 namespace Plasma
00035 {
00036 
00037 class WebContentPrivate
00038 {
00039 public:
00040     WebContentPrivate(WebContent *parent)
00041         : q(parent)
00042     {
00043     }
00044 
00045     void loadingFinished(bool success);
00046 
00047     WebContent *q;
00048     QWebPage *page;
00049     bool loaded;
00050 };
00051 
00052 WebContent::WebContent(QGraphicsItem *parent)
00053     : QGraphicsWidget(parent),
00054       d(new WebContentPrivate(this))
00055 {
00056     d->page = 0;
00057     d->loaded = false;
00058     setPage(new QWebPage(this));
00059 }
00060 
00061 WebContent::~WebContent()
00062 {
00063    delete d;
00064 }
00065 
00066 void WebContent::setUrl(const QUrl &url)
00067 {
00068     d->loaded = false;
00069     if (d->page) {
00070         d->page->mainFrame()->load(url);
00071     }
00072 }
00073 
00074 void WebContent::setHtml(const QByteArray &html, const QUrl &baseUrl)
00075 {
00076     d->loaded = false;
00077     if (d->page) {
00078         d->page->mainFrame()->setContent(html, QString(), baseUrl);
00079     }
00080 }
00081 
00082 void WebContent::setHtml(const QString &html, const QUrl &baseUrl)
00083 {
00084     d->loaded = false;
00085     if (d->page) {
00086         d->page->mainFrame()->setHtml(html, baseUrl);
00087     }
00088 }
00089 
00090 QRectF WebContent::geometry() const
00091 {
00092     if (d->loaded && d->page) {
00093         return d->page->mainFrame()->geometry();
00094     }
00095 
00096     return QGraphicsWidget::geometry();
00097 }
00098 
00099 void WebContent::setPage(QWebPage *page)
00100 {
00101     if (page == d->page) {
00102         return;
00103     }
00104 
00105     if (d->page && d->page->parent() == this) {
00106         delete d->page;
00107     }
00108 
00109     d->page = page;
00110 
00111     if (d->page) {
00112         connect(d->page, SIGNAL(loadProgress(int)), this, SIGNAL(loadProgress(int)));
00113         connect(d->page, SIGNAL(loadFinished(bool)), this, SLOT(loadingFinished(bool)));
00114     }
00115 }
00116 
00117 QWebPage* WebContent::page() const
00118 {
00119     return d->page;
00120 }
00121 
00122 QWebFrame* WebContent::mainFrame() const
00123 {
00124     return d->page ? d->page->mainFrame() : 0;
00125 }
00126 
00127 void WebContent::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
00128 {
00129     Q_UNUSED(widget)
00130 
00131     if (d->loaded && d->page) {
00132         //kDebug() << "painting page";
00133         d->page->mainFrame()->render(painter, option->rect);
00134     }
00135 }
00136 
00137 void WebContent::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
00138 {
00139     if (!d->page) {
00140         QGraphicsWidget::mouseMoveEvent(event);
00141         return;
00142     }
00143 
00144     QMouseEvent me(QEvent::MouseMove, event->pos().toPoint(), event->button(),
00145                    event->buttons(), event->modifiers());
00146     d->page->event(&me);
00147     if (me.isAccepted()) {
00148         event->accept();
00149     }
00150 }
00151 
00152 void WebContent::mousePressEvent(QGraphicsSceneMouseEvent *event)
00153 {
00154     if (!d->page) {
00155         QGraphicsWidget::mousePressEvent(event);
00156         return;
00157     }
00158 
00159     QMouseEvent me(QEvent::MouseButtonPress, event->pos().toPoint(), event->button(),
00160                    event->buttons(), event->modifiers());
00161     d->page->event(&me);
00162     if (me.isAccepted()) {
00163         event->accept();
00164     }
00165 }
00166 
00167 void WebContent::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
00168 {
00169     if (!d->page) {
00170         QGraphicsWidget::mouseDoubleClickEvent(event);
00171         return;
00172     }
00173 
00174     QMouseEvent me(QEvent::MouseButtonDblClick, event->pos().toPoint(), event->button(),
00175                    event->buttons(), event->modifiers());
00176     d->page->event(&me);
00177     if (me.isAccepted()) {
00178         event->accept();
00179     }
00180 }
00181 
00182 void WebContent::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
00183 {
00184     if (!d->page) {
00185         QGraphicsWidget::mouseReleaseEvent(event);
00186         return;
00187     }
00188 
00189     QMouseEvent me(QEvent::MouseButtonRelease, event->pos().toPoint(), event->button(),
00190                    event->buttons(), event->modifiers());
00191     d->page->event(&me);
00192     if (me.isAccepted()) {
00193         event->accept();
00194     }
00195 }
00196 
00197 void WebContent::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
00198 {
00199     if (!d->page) {
00200         QGraphicsWidget::contextMenuEvent(event);
00201         return;
00202     }
00203 
00204     QContextMenuEvent ce(static_cast<QContextMenuEvent::Reason>(event->reason()),
00205                          event->pos().toPoint(), event->screenPos());
00206     d->page->event(&ce);
00207     if (ce.isAccepted()) {
00208         event->accept();
00209     }
00210 }
00211 
00212 void WebContent::wheelEvent(QGraphicsSceneWheelEvent *event)
00213 {
00214     if (!d->page) {
00215         QGraphicsWidget::wheelEvent(event);
00216         return;
00217     }
00218 
00219     QWheelEvent we(event->pos().toPoint(), event->delta(), event->buttons(),
00220                    event->modifiers(), event->orientation());
00221 
00222     d->page->event(&we);
00223 
00224     if (we.isAccepted()) {
00225         event->accept();
00226     } else {
00227         QGraphicsWidget::wheelEvent(event);
00228     }
00229 }
00230 
00231 void WebContent::keyPressEvent(QKeyEvent * event)
00232 {
00233     if (!d->page) {
00234         QGraphicsWidget::keyPressEvent(event);
00235         return;
00236     }
00237 
00238     d->page->event(event);
00239 
00240     if (!event->isAccepted()) {
00241         QGraphicsWidget::keyPressEvent(event);
00242     }
00243 }
00244 
00245 void WebContent::keyReleaseEvent(QKeyEvent * event)
00246 {
00247     if (!d->page) {
00248         QGraphicsWidget::keyReleaseEvent(event);
00249         return;
00250     }
00251 
00252     d->page->event(event);
00253 
00254     if (!event->isAccepted()) {
00255         QGraphicsWidget::keyPressEvent(event);
00256     }
00257 }
00258 
00259 void WebContent::focusInEvent(QFocusEvent * event)
00260 {
00261     if (d->page) {
00262         d->page->event(event);
00263     }
00264 
00265     QGraphicsWidget::focusInEvent(event);
00266 }
00267 
00268 void WebContent::focusOutEvent(QFocusEvent * event)
00269 {
00270     if (d->page) {
00271         d->page->event(event);
00272     }
00273 
00274     QGraphicsWidget::focusOutEvent(event);
00275 }
00276 
00277 void WebContent::dragEnterEvent(QGraphicsSceneDragDropEvent * event)
00278 {
00279     if (!d->page) {
00280         QGraphicsWidget::dragEnterEvent(event);
00281         return;
00282     }
00283 
00284     QDragEnterEvent de(event->pos().toPoint(), event->possibleActions(), event->mimeData(),
00285                        event->buttons(), event->modifiers());
00286     d->page->event(&de);
00287 
00288     if (de.isAccepted()) {
00289         event->accept();
00290     }
00291 }
00292 
00293 void WebContent::dragLeaveEvent(QGraphicsSceneDragDropEvent * event)
00294 {
00295     if (!d->page) {
00296         QGraphicsWidget::dragLeaveEvent(event);
00297         return;
00298     }
00299 
00300     QDragLeaveEvent de;
00301     d->page->event(&de);
00302 
00303     if (de.isAccepted()) {
00304         event->accept();
00305     }
00306 }
00307 
00308 void WebContent::dragMoveEvent(QGraphicsSceneDragDropEvent * event)
00309 {
00310     if (!d->page) {
00311         QGraphicsWidget::dragMoveEvent(event);
00312         return;
00313     }
00314 
00315     // Ok, so the docs say "don't make a QDragMoveEvent yourself" but we're just
00316     // replicating it here, not really creating a new one. hopefully we get away with it ;)
00317     QDragMoveEvent de(event->pos().toPoint(), event->possibleActions(), event->mimeData(),
00318                       event->buttons(), event->modifiers());
00319     d->page->event(&de);
00320 
00321     if (de.isAccepted()) {
00322         event->accept();
00323     }
00324 }
00325 
00326 void WebContent::dropEvent(QGraphicsSceneDragDropEvent * event)
00327 {
00328     if (!d->page) {
00329         QGraphicsWidget::dropEvent(event);
00330         return;
00331     }
00332 
00333     QDragMoveEvent de(event->pos().toPoint(), event->possibleActions(), event->mimeData(),
00334                       event->buttons(), event->modifiers());
00335     d->page->event(&de);
00336 
00337     if (de.isAccepted()) {
00338         event->accept();
00339     }
00340 }
00341 
00342 void WebContent::setGeometry(const QRectF &geometry)
00343 {
00344     QGraphicsWidget::setGeometry(geometry);
00345     d->page->setViewportSize(geometry.size().toSize());
00346 }
00347 
00348 void WebContentPrivate::loadingFinished(bool success)
00349 {
00350     loaded = success;
00351     emit q->loadFinished(success);
00352 }
00353 
00354 } // namespace Plasma
00355 
00356 #include "webcontent.moc"
00357 

libplasma

Skip menu "libplasma"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • KWin
  •   KWin Libraries
  • Libraries
  •   libkworkspace
  •   libplasma
  •   libsolidcontrol
  •   libtaskmanager
  • Plasma
  •   Animators
  •   Applets
  •   Engines
  • Solid Modules
Generated for API Reference by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal