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 */ |
|