20 */ |
20 */ |
21 |
21 |
22 #include "WebContentViewWidget.h" |
22 #include "WebContentViewWidget.h" |
23 |
23 |
24 #include "ScrollableWebContentView.h" |
24 #include "ScrollableWebContentView.h" |
25 #include "WebContentAnimationItem.h" |
|
26 #include "webpagecontroller.h" |
25 #include "webpagecontroller.h" |
27 #include "WebView.h" |
26 #include "WebView.h" |
28 #include "wrtbrowsercontainer.h" |
27 #include "wrtbrowsercontainer.h" |
29 #include "ZoomMetaData.h" |
28 #include "webpagedata.h" |
|
29 |
|
30 #ifdef Q_WS_MAEMO_5 |
|
31 #include "ContentViewContextMenu.h" |
|
32 #endif |
|
33 #include "GWebContentView.h" |
30 |
34 |
31 #include <QGraphicsLinearLayout> |
35 #include <QGraphicsLinearLayout> |
32 #include <QStyleOptionGraphicsItem> |
36 #include <QStyleOptionGraphicsItem> |
33 #include <QWebFrame> |
37 #include <QWebFrame> |
|
38 #include "QWebHistoryItem" |
34 |
39 |
35 namespace GVA { |
40 namespace GVA { |
36 |
41 |
37 WebContentViewWidget::WebContentViewWidget(QObject* parent, QWebPage* page) |
42 WebContentViewWidget::WebContentViewWidget(QObject* parent, GWebContentView* view, QWebPage* page): |
38 : m_webViewportProxy(new WebContentAnimationItem()) |
43 m_webContentView(view) |
39 { |
44 { |
40 setFlag(QGraphicsItem::ItemUsesExtendedStyleOption, true); |
45 setFlag(QGraphicsItem::ItemUsesExtendedStyleOption, true); |
41 setParent(parent); |
46 setParent(parent); |
42 |
47 |
43 m_webViewport = new ScrollableWebContentView(m_webViewportProxy, this); |
|
44 |
|
45 m_webView = new WebView(); |
48 m_webView = new WebView(); |
|
49 m_webViewport = new ScrollableWebContentView(m_webView, this); |
46 |
50 |
47 if (page) |
51 if (page) |
48 setPage(page); |
52 setPage(page); |
49 |
53 |
50 m_webViewportProxy->setWebView(m_webView); |
54 //updatePreferredContentSize(); |
51 updatePreferredContentSize(); |
|
52 m_webViewportProxy->setPos(QPointF(0,0)); |
|
53 |
55 |
54 //FIX ME : Should we have to delete layout?? |
56 //FIX ME : Should we have to delete layout?? |
55 QGraphicsLinearLayout* layout = new QGraphicsLinearLayout(Qt::Vertical, this); |
57 QGraphicsLinearLayout* layout = new QGraphicsLinearLayout(Qt::Vertical, this); |
56 layout->setContentsMargins(0,0,0,0); |
58 layout->setContentsMargins(0,0,0,0); |
57 layout->setSpacing(0.); |
59 layout->setSpacing(0.); |
58 layout->addItem(m_webViewport); |
60 layout->addItem(m_webViewport); |
59 |
61 |
60 connect(m_webViewportProxy |
62 connect(m_webViewport |
61 , SIGNAL(updateZoomActions(bool,bool)) |
63 , SIGNAL(updateZoomActions(bool,bool)) |
62 , this |
64 , this |
63 , SIGNAL(updateZoomActions(bool,bool))); |
65 , SIGNAL(updateZoomActions(bool,bool))); |
64 connect(m_webViewport |
66 #ifdef Q_WS_MAEMO_5 |
65 , SIGNAL(contextEventObject(QWebHitTestResult*)) |
67 connect(m_webViewport |
66 , this |
68 , SIGNAL(contextEventObject(QWebHitTestResult*, QPointF)) |
67 , SIGNAL(contextEventObject(QWebHitTestResult*))); |
69 , this |
68 |
70 , SLOT(onContextEventObject(QWebHitTestResult*, QPointF))); |
|
71 #else |
|
72 connect(m_webViewport |
|
73 , SIGNAL(contextEventObject(QWebHitTestResult*, QPointF)) |
|
74 , this |
|
75 , SIGNAL(contextEventObject(QWebHitTestResult*, QPointF))); |
|
76 #endif |
69 connect(m_webViewport |
77 connect(m_webViewport |
70 , SIGNAL(viewScrolled(QPoint&, QPoint&)) |
78 , SIGNAL(viewScrolled(QPoint&, QPoint&)) |
71 , this |
79 , this |
72 , SIGNAL(viewScrolled(QPoint&, QPoint&))); |
80 , SIGNAL(viewScrolled(QPoint&, QPoint&))); |
73 |
81 |
74 connect(m_webViewport |
82 connect(m_webViewport |
75 , SIGNAL(mouseEvent(QEvent::Type)) |
83 , SIGNAL(contentViewMouseEvent(QEvent::Type)) |
76 , this |
84 , this |
77 , SIGNAL(mouseEvent(QEvent::Type))); |
85 , SIGNAL(mouseEvent(QEvent::Type))); |
|
86 |
|
87 //To speed up painting. |
|
88 setFlag(QGraphicsItem::ItemHasNoContents, true); |
|
89 setAttribute(Qt::WA_OpaquePaintEvent, true); |
78 } |
90 } |
79 |
91 |
80 WebContentViewWidget::~WebContentViewWidget() |
92 WebContentViewWidget::~WebContentViewWidget() |
81 { |
93 { |
82 delete m_webView; |
94 delete m_webView; |
83 delete m_webViewportProxy; |
|
84 delete m_webViewport; |
95 delete m_webViewport; |
85 } |
96 } |
86 |
97 |
|
98 |
|
99 bool WebContentViewWidget::event(QEvent * e) |
|
100 { |
|
101 if (e->type() == QEvent::Gesture) { |
|
102 return m_webViewport->event(e); |
|
103 } |
|
104 return QGraphicsWidget::event(e); |
|
105 } |
|
106 |
87 void WebContentViewWidget::resizeEvent(QGraphicsSceneResizeEvent* event) |
107 void WebContentViewWidget::resizeEvent(QGraphicsSceneResizeEvent* event) |
88 { |
108 { |
89 QGraphicsWidget::resizeEvent(event); |
109 QGraphicsWidget::resizeEvent(event); |
90 |
110 |
91 setGeometry(QRectF(pos(), size())); |
111 // WTF? setGeometry(QRectF(pos(), size())); |
92 setPreferredSize(size()); |
112 setPreferredSize(size()); |
93 } |
113 QSizeF vpSize = m_webViewport->size(); |
|
114 if(vpSize.width() > size().width()) vpSize.setWidth(size().height()); |
|
115 if(vpSize.height() > size().height()) vpSize.setHeight(size().height()); |
|
116 |
|
117 QPointF vpPos = m_webViewport->pos(); |
|
118 if(vpPos.x() + vpSize.width() > geometry().right()) |
|
119 vpPos.setX(geometry().right() - vpSize.width()); |
|
120 if(vpPos.y() + vpSize.height() > geometry().bottom()) |
|
121 vpPos.setY(geometry().bottom() - vpSize.height()); |
|
122 |
|
123 QRectF vpGeom(vpPos,vpSize); |
|
124 if(vpGeom != m_webViewport->geometry()) { |
|
125 // Should we center it here? |
|
126 m_webViewport->setGeometry(vpGeom); |
|
127 } |
|
128 } |
|
129 |
|
130 #ifdef Q_WS_MAEMO_5 |
|
131 void WebContentViewWidget::onContextEventObject(QWebHitTestResult* hitTest, QPointF position) { |
|
132 if(m_webContentView->currentPageIsSuperPage()) { |
|
133 // Let the superpage handle the event. |
|
134 ::WebViewEventContext *context = new ::WebViewEventContext(view()->type(), *hitTest); |
|
135 m_webContentView->currentSuperPage()->onContextEvent(context); |
|
136 } |
|
137 else { |
|
138 ContentViewContextMenu menu(hitTest, 0); |
|
139 menu.exec(position.toPoint()); |
|
140 } |
|
141 } |
|
142 #endif |
94 |
143 |
95 QWebPage* WebContentViewWidget::page() |
144 QWebPage* WebContentViewWidget::page() |
96 { |
145 { |
97 return m_webView->page(); |
146 return m_webView->page(); |
98 } |
147 } |
99 |
148 |
100 void WebContentViewWidget::setPage(QWebPage* page) |
149 void WebContentViewWidget::setPage(QWebPage* page) |
101 { |
150 { |
102 m_webView->setPage(page); |
151 QWebPage* oldPage = this->page(); |
|
152 if(oldPage) { |
|
153 disconnect(this->page()->mainFrame(), SIGNAL(initialLayoutCompleted()), m_webViewport, SLOT(reset())); |
|
154 disconnect(this->page(), SIGNAL(restoreFrameStateRequested(QWebFrame*)), this, SLOT(restoreViewportFromHistory(QWebFrame*))); |
|
155 disconnect(this->page(), SIGNAL(saveFrameStateRequested(QWebFrame*,QWebHistoryItem*)), this, SLOT(saveViewportToHistory(QWebFrame*,QWebHistoryItem*))); |
|
156 disconnect(this->page()->mainFrame(), SIGNAL(contentsSizeChanged(const QSize &)), m_webViewport, SLOT(contentsSizeChanged(const QSize&))); |
|
157 disconnect(this->page(), SIGNAL(loadStarted()), m_webViewport, SLOT(pageLoadStarted())); |
|
158 disconnect(this->page(), SIGNAL(loadProgress(int)), m_webViewport, SLOT(pageLoadProgress(int))); |
|
159 disconnect(this->page(), SIGNAL(loadFinished(bool)), m_webViewport, SLOT(pageLoadFinished(bool))); |
|
160 } |
|
161 |
|
162 m_webViewport->setPage(page); |
103 |
163 |
104 connect(this->page()->mainFrame(), SIGNAL(initialLayoutCompleted()), m_webViewport, SLOT(reset())); |
164 connect(this->page()->mainFrame(), SIGNAL(initialLayoutCompleted()), m_webViewport, SLOT(reset())); |
|
165 connect(this->page(), SIGNAL(restoreFrameStateRequested(QWebFrame*)), this, SLOT(restoreViewportFromHistory(QWebFrame*))); |
|
166 connect(this->page(), SIGNAL(saveFrameStateRequested(QWebFrame*,QWebHistoryItem*)), this, SLOT(saveViewportToHistory(QWebFrame*,QWebHistoryItem*))); |
105 connect(this->page()->mainFrame(), SIGNAL(contentsSizeChanged(const QSize &)), m_webViewport, SLOT(contentsSizeChanged(const QSize&))); |
167 connect(this->page()->mainFrame(), SIGNAL(contentsSizeChanged(const QSize &)), m_webViewport, SLOT(contentsSizeChanged(const QSize&))); |
106 connect(this->page()->mainFrame(), SIGNAL(loadFinished(bool)), m_webViewport, SLOT(pageLoadFinished(bool))); |
168 connect(this->page(), SIGNAL(loadStarted()), m_webViewport, SLOT(pageLoadStarted())); |
107 } |
169 connect(this->page(), SIGNAL(loadProgress(int)), m_webViewport, SLOT(pageLoadProgress(int))); |
108 |
170 connect(this->page(), SIGNAL(loadFinished(bool)), m_webViewport, SLOT(pageLoadFinished(bool))); |
109 QGraphicsWebView* WebContentViewWidget::webView() |
171 } |
|
172 |
|
173 QGraphicsWebView* WebContentViewWidget::webView() const |
110 { |
174 { |
111 return m_webView; |
175 return m_webView; |
112 } |
176 } |
113 |
177 |
114 ZoomMetaData WebContentViewWidget::currentPageInfo() |
178 QGraphicsWidget* WebContentViewWidget::viewPort() const |
115 { |
179 { |
116 return m_webViewport->currentPageInfo(); |
180 return m_webViewport; |
117 } |
181 } |
118 |
182 |
119 void WebContentViewWidget::setCurrentPageInfo(ZoomMetaData data) |
183 WebPageData WebContentViewWidget::pageDataFromViewportInfo() |
120 { |
184 { |
121 m_webViewport->setCurrentPageInfo(data); |
185 return m_webViewport->pageDataFromViewportInfo(); |
122 } |
186 } |
123 |
187 |
124 ZoomMetaData WebContentViewWidget::defaultZoomData() |
188 void WebContentViewWidget::setPageDataToViewportInfo(const WebPageData& data) |
|
189 { |
|
190 m_webViewport->setPageDataToViewportInfo(data); |
|
191 } |
|
192 |
|
193 WebPageData WebContentViewWidget::defaultZoomData() |
125 { |
194 { |
126 return m_webViewport->defaultZoomData(); |
195 return m_webViewport->defaultZoomData(); |
127 } |
196 } |
128 |
197 |
129 void WebContentViewWidget::setPageZoom(bool zoomIn) |
198 void WebContentViewWidget::setPageZoom(bool zoomIn) |
130 { |
199 { |
131 Q_ASSERT(m_webViewport); |
200 Q_ASSERT(m_webViewport); |
132 m_webViewport->zoomToScreenCenter(zoomIn); |
201 m_webViewport->toggleZoom(zoomIn); |
133 } |
202 } |
134 |
203 |
135 void WebContentViewWidget::showPage(bool isSuperPage) |
204 void WebContentViewWidget::showPage(bool isSuperPage) |
136 { |
205 { |
137 if (!isSuperPage) { |
206 if (!isSuperPage) { |