ginebra/chromerenderer.cpp
branchGCC_SURGE
changeset 8 2e16851ffecd
parent 2 bf4420e9fa4d
parent 6 1c3b8676e58c
equal deleted inserted replaced
2:bf4420e9fa4d 8:2e16851ffecd
     1 /*
       
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include "chromerenderer.h"
       
    20 #include "chromewidget.h"
       
    21 #include <Qt>
       
    22 #include <QNetworkProxy>
       
    23 #include <QNetworkAccessManager>
       
    24 // -------------------------------------------------------
       
    25 
       
    26 // Simple wrapper class for QWebPage to allow intercepting of javascript errors in the chrome.
       
    27 class ChromeWebPage : public QWebPage {
       
    28   public:
       
    29     ChromeWebPage(ChromeRenderer *renderer) : QWebPage(renderer) {
       
    30         qDebug() << "ChromeWebPage::ChromeWebPage";
       
    31         #if (defined(Q_OS_SYMBIAN) && !defined(Q_CC_NOKIAX86))
       
    32             // empty proxy only for ARMV5 Symbian targets
       
    33         #else
       
    34             networkAccessManager()->setProxy((QNetworkProxy(QNetworkProxy::HttpProxy,QString("bswebproxy01.americas.nokia.com"), 8080)));
       
    35         #endif
       
    36     }
       
    37 
       
    38     // Called when javascript errors are hit in the chrome page.
       
    39     virtual void javaScriptConsoleMessage(const QString & message, int lineNumber, const QString & sourceID) {
       
    40         qDebug() << "Chrome javascript error:";
       
    41         qDebug() << (const char*)QString("  %1:%2 %3")
       
    42                     .arg(sourceID)
       
    43                     .arg(lineNumber)
       
    44                     .arg(message).toAscii();
       
    45     }
       
    46 };
       
    47 
       
    48 
       
    49 // -------------------------------------------------------
       
    50 
       
    51 ChromeRenderer::ChromeRenderer(QWidget *parent)
       
    52   : QWidget(parent),
       
    53     m_page(0),
       
    54     m_widget(0)
       
    55 {
       
    56   setMouseTracking(true);
       
    57 }
       
    58 
       
    59 ChromeRenderer::~ChromeRenderer()
       
    60 {
       
    61     if (m_page)
       
    62       m_page->setView(0);
       
    63 
       
    64     if (m_page && m_page->parent() == this)
       
    65         delete m_page;
       
    66 }
       
    67 
       
    68 QSize ChromeRenderer::sizeHint() const
       
    69 {
       
    70     return QSize(1,1);
       
    71 }
       
    72 
       
    73 QWebPage *ChromeRenderer::page() const
       
    74 {
       
    75     if (!m_page) {
       
    76         ChromeRenderer *that = const_cast<ChromeRenderer *>(this);
       
    77         that->setPage(new ChromeWebPage(that));
       
    78     }
       
    79     return m_page;
       
    80 }
       
    81 
       
    82 void ChromeRenderer::setPage(QWebPage* page){
       
    83   if (m_page == page)
       
    84     return;
       
    85   if (m_page) {
       
    86     if (m_page->parent() == this) {
       
    87       delete m_page;
       
    88     } else {
       
    89       m_page->disconnect(this);
       
    90     }
       
    91   }
       
    92   m_page = page;
       
    93   if (m_page) {
       
    94     m_page->setView(this);
       
    95     m_page->setPalette(palette());
       
    96     connect(m_page, SIGNAL(microFocusChanged()),
       
    97         this, SLOT(updateMicroFocus()));
       
    98   }
       
    99   //setAttribute(Qt::WA_OpaquePaintEvent, m_page); // Needed?
       
   100 
       
   101   update();
       
   102 }
       
   103 
       
   104 
       
   105 bool ChromeRenderer::event(QEvent *e)
       
   106 {
       
   107  //qDebug() << "ChromeRenderer::event " << e;
       
   108  if (m_page) {
       
   109     if (e->type() == QEvent::ShortcutOverride) {
       
   110       m_page->event(e);
       
   111 
       
   112     } else if (e->type() == QEvent::Leave) {
       
   113       m_page->event(e);
       
   114     }
       
   115   }
       
   116 
       
   117   return QWidget::event(e);
       
   118 }
       
   119 /*
       
   120 void ChromeRenderer::resizeEvent(QResizeEvent *e)
       
   121 {
       
   122     if (m_page)
       
   123         m_page->setViewportSize(e->size());
       
   124 }
       
   125 
       
   126 
       
   127 void ChromeRenderer::paintEvent(QPaintEvent *ev)
       
   128 {
       
   129   qDebug() << "ChromeRenderer::paintEvent: " << ev;
       
   130   //if (!m_widget)
       
   131   //      return;
       
   132 
       
   133     //QWebFrame *frame = m_page->mainFrame();
       
   134     //QPainter p(this);
       
   135 
       
   136     //frame->render(&p, ev->region());
       
   137     //m_widget->repaintRequested(ev->rect());
       
   138 
       
   139 }
       
   140 
       
   141 void ChromeRenderer::mouseMoveEvent(QMouseEvent* ev)
       
   142 {
       
   143     if (m_page) {
       
   144         const bool accepted = ev->isAccepted();
       
   145         m_page->event(ev);
       
   146         ev->setAccepted(accepted);
       
   147     }
       
   148 }
       
   149 
       
   150 void ChromeRenderer::mousePressEvent(QMouseEvent* ev)
       
   151 {
       
   152   qDebug() << "ChromeRenderer::mousePressEvent: " << ev;
       
   153     if (m_page) {
       
   154         const bool accepted = ev->isAccepted();
       
   155         m_page->event(ev);
       
   156         ev->setAccepted(accepted);
       
   157     }
       
   158 }
       
   159 
       
   160 void ChromeRenderer::mouseDoubleClickEvent(QMouseEvent* ev)
       
   161 {
       
   162     if (m_page) {
       
   163         const bool accepted = ev->isAccepted();
       
   164         m_page->event(ev);
       
   165         ev->setAccepted(accepted);
       
   166     }
       
   167 }
       
   168 
       
   169 void ChromeRenderer::mouseReleaseEvent(QMouseEvent* ev)
       
   170 {
       
   171     if (m_page) {
       
   172         const bool accepted = ev->isAccepted();
       
   173         m_page->event(ev);
       
   174         ev->setAccepted(accepted);
       
   175     }
       
   176 }*/
       
   177 
       
   178 void ChromeRenderer::keyPressEvent(QKeyEvent* ev)
       
   179 {
       
   180     //qDebug() << "ChromeRenderer::keyPressEvent: " << ev;
       
   181     bool isAccepted(ev->isAccepted());
       
   182     if (m_page){
       
   183         m_page->event(ev);
       
   184         isAccepted = ev->isAccepted();
       
   185     }
       
   186 #ifdef Q_OS_SYMBIAN //this is the hack for symbian fep key handler
       
   187     if(!isAccepted && (ev->key() == Qt::Key_Select || ev->key() == Qt::Key_Return || ev->key() == Qt::Key_Enter)) {
       
   188             emit symbianCarriageReturn();
       
   189             isAccepted = ev->isAccepted();
       
   190     }
       
   191 #endif
       
   192     if (!ev->isAccepted()) {
       
   193         //qDebug() << "ChromeRenderer::keyPressEvent: -> accepted";
       
   194         QWidget::keyPressEvent(ev);
       
   195     }
       
   196 }
       
   197 
       
   198 void ChromeRenderer::keyReleaseEvent(QKeyEvent* ev)
       
   199 {
       
   200     if (m_page)
       
   201         m_page->event(ev);
       
   202     if (!ev->isAccepted())
       
   203         QWidget::keyReleaseEvent(ev);
       
   204 }
       
   205 
       
   206 void ChromeRenderer::focusInEvent(QFocusEvent* ev)
       
   207 {
       
   208     //qDebug() << "ChromeRenderer::focusInEvent: " << ev;
       
   209     if (m_page && ev->reason() != Qt::PopupFocusReason)
       
   210         m_page->event(ev);
       
   211     else
       
   212         QWidget::focusInEvent(ev);
       
   213 }
       
   214 
       
   215 void ChromeRenderer::focusOutEvent(QFocusEvent* ev)
       
   216 {
       
   217     //qDebug() << "ChromeRenderer::focusOutEvent: " << ev;
       
   218     if (m_page)
       
   219         m_page->event(ev);
       
   220     else
       
   221         QWidget::focusOutEvent(ev);
       
   222 }
       
   223 
       
   224 bool ChromeRenderer::focusNextPrevChild(bool next)
       
   225 {
       
   226     if (m_page && m_page->focusNextPrevChild(next))
       
   227         return true;
       
   228     return QWidget::focusNextPrevChild(next);
       
   229 }
       
   230 
       
   231 void ChromeRenderer::inputMethodEvent(QInputMethodEvent *e)
       
   232 {
       
   233     if (m_page)
       
   234        m_page->event(e);
       
   235 }
       
   236 
       
   237 QVariant ChromeRenderer::inputMethodQuery(Qt::InputMethodQuery property) const
       
   238 {
       
   239     if (m_page)
       
   240         return m_page->inputMethodQuery(property);
       
   241 
       
   242     return QVariant();
       
   243 }
       
   244 
       
   245 /*
       
   246 void ChromeRenderer::changeEvent(QEvent *e)
       
   247 {
       
   248     if (m_page && e->type() == QEvent::PaletteChange) {
       
   249         m_page->setPalette(palette());
       
   250     }
       
   251     QWidget::changeEvent(e);
       
   252 }
       
   253 */