|
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 <QtGui> |
|
20 |
|
21 #include "mostvisitedpagestore.h" |
|
22 #include "linearflowsnippet.h" |
|
23 #include "mostvisitedpageview.h" |
|
24 #include "webpagecontroller.h" |
|
25 #include "BookmarksManager.h" |
|
26 |
|
27 const int KLinearSnippetHeight = 120; |
|
28 |
|
29 namespace GVA { |
|
30 MostVisitedPagesWidget::MostVisitedPagesWidget(ChromeSnippet* snippet,QGraphicsWidget* parent) |
|
31 : m_snippet(snippet) |
|
32 , QGraphicsWidget(parent) |
|
33 , m_parent(parent) |
|
34 , m_flowInterface(0) |
|
35 , m_hideOnClose(true) |
|
36 { |
|
37 setFlags(QGraphicsItem::ItemDoesntPropagateOpacityToChildren); |
|
38 setOpacity(0.5); |
|
39 m_mostVisitedPageStore = new MostVisitedPageStore(); |
|
40 WebPageController* pageController = WebPageController::getSingleton(); |
|
41 bool ret = connect(pageController, SIGNAL(loadFinished(const bool)), this, SLOT(onLoadFinished(const bool))); |
|
42 } |
|
43 |
|
44 MostVisitedPagesWidget::~MostVisitedPagesWidget() |
|
45 { |
|
46 if (m_flowInterface) |
|
47 m_flowInterface->deleteLater(); |
|
48 if (m_mostVisitedPageStore) |
|
49 delete m_mostVisitedPageStore; |
|
50 WebPageController* pageController = WebPageController::getSingleton(); |
|
51 disconnect(pageController, SIGNAL(loadFinished()), this, SLOT(onLoadFinished())); |
|
52 } |
|
53 |
|
54 |
|
55 void MostVisitedPagesWidget::open() |
|
56 { |
|
57 if (m_flowInterface) |
|
58 delete m_flowInterface; |
|
59 |
|
60 m_flowInterface = new GVA::LinearFlowSnippet(this); |
|
61 m_flowInterface->setZValue(m_parent->zValue() + 1); |
|
62 m_flowInterface->resize(QSize(m_parent->size().width(), KLinearSnippetHeight)); |
|
63 connect(m_flowInterface, SIGNAL(mouseEvent(QEvent::Type)),this->m_snippet,SIGNAL(snippetMouseEvent(QEvent::Type))); |
|
64 |
|
65 //Initialize the page selection index |
|
66 m_selectIndex = -1; |
|
67 |
|
68 QString displayMode; |
|
69 |
|
70 if (m_parent->size().width() > m_parent->size().height()) { |
|
71 displayMode = "Landscape"; |
|
72 |
|
73 } else { |
|
74 displayMode = "Portrait"; |
|
75 } |
|
76 m_flowInterface->init(displayMode,"Most Visited Pages"); |
|
77 |
|
78 MostVisitedPageList mvPageList = m_mostVisitedPageStore->pageList(); |
|
79 |
|
80 for (int i = 0; i < mvPageList.size(); i++) { |
|
81 QImage *pageThumbnail = mvPageList[i]->m_pageThumbnail; |
|
82 bool removeTempThumbnail = false; |
|
83 if (!pageThumbnail) { |
|
84 removeTempThumbnail = true; |
|
85 pageThumbnail = new QImage(""); |
|
86 } |
|
87 QUrl url = QUrl(mvPageList[i]->m_url); |
|
88 m_flowInterface->addSlide(*pageThumbnail, url.host()); |
|
89 if (removeTempThumbnail) { |
|
90 delete pageThumbnail; |
|
91 } |
|
92 } |
|
93 |
|
94 setCenterIndex(displayMode); |
|
95 m_flowInterface->prepareStartAnimation(); |
|
96 m_flowInterface->runStartAnimation(); |
|
97 m_flowInterface->installEventFilter(this); |
|
98 connect(m_flowInterface, SIGNAL(ok(int)), this, SLOT(okTriggered(int))); |
|
99 connect(m_flowInterface, SIGNAL(endAnimationCplt()), this, SLOT(closeAnimationCompleted())); |
|
100 } |
|
101 |
|
102 void MostVisitedPagesWidget::close(bool hide) |
|
103 { |
|
104 //This will trigger close animation after which |
|
105 //the cleanup is done in closeAnimationCompleted |
|
106 if (m_flowInterface) |
|
107 m_flowInterface->runEndAnimation(); |
|
108 m_hideOnClose = hide; |
|
109 } |
|
110 |
|
111 void MostVisitedPagesWidget::updatePos(QPointF pos, qreal &toolBarHeight) |
|
112 { |
|
113 QGraphicsWidget::setPos(pos); |
|
114 m_flowInterface->setPos(pos.x(), m_parent->size().height() - toolBarHeight - KLinearSnippetHeight); |
|
115 } |
|
116 |
|
117 void MostVisitedPagesWidget::resize(const QSize &size) |
|
118 { |
|
119 QGraphicsWidget::resize(size); |
|
120 m_flowInterface->resize(QSize(m_parent->size().width(), KLinearSnippetHeight)); |
|
121 } |
|
122 |
|
123 void MostVisitedPagesWidget::displayModeChanged(QString& newMode) |
|
124 { |
|
125 m_flowInterface->displayModeChanged(newMode); |
|
126 } |
|
127 |
|
128 void MostVisitedPagesWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) |
|
129 { |
|
130 painter->fillRect(0, 0, size().width(), size().height(), QColor(107, 109, 107)); |
|
131 QGraphicsWidget::paint(painter, option, widget); |
|
132 } |
|
133 |
|
134 void MostVisitedPagesWidget::setCenterIndex(QString displayMode) |
|
135 { |
|
136 //display beginning of the film strip first |
|
137 m_flowInterface->setCenterIndex((displayMode == "Portrait") ? 1 : 2); |
|
138 } |
|
139 |
|
140 void MostVisitedPagesWidget::mousePressEvent(QGraphicsSceneMouseEvent* event) |
|
141 { |
|
142 close(); |
|
143 } |
|
144 |
|
145 void MostVisitedPagesWidget::okTriggered(int index) |
|
146 { |
|
147 Q_ASSERT(m_flowInterface); |
|
148 m_selectIndex = index; |
|
149 close(); |
|
150 } |
|
151 |
|
152 void MostVisitedPagesWidget::closeAnimationCompleted() |
|
153 { |
|
154 if (!m_flowInterface) |
|
155 return; |
|
156 |
|
157 QGraphicsWidget::hide(); |
|
158 disconnect(m_flowInterface, SIGNAL(ok(int)), this, SLOT(okTriggered(int))); |
|
159 disconnect(m_flowInterface, SIGNAL(endAnimationCplt()), this, SLOT(closeAnimationCompleted())); |
|
160 disconnect(m_flowInterface, SIGNAL(mouseEvent(QEvent::Type)),this->m_snippet,SIGNAL(snippetMouseEvent(QEvent::Type))); |
|
161 |
|
162 m_flowInterface->removeEventFilter(this); |
|
163 m_flowInterface->deleteLater(); |
|
164 m_flowInterface = NULL; |
|
165 |
|
166 if (m_selectIndex != -1) |
|
167 static_cast<ChromeWidget*>(m_parent)->loadUrlToCurrentPage(m_mostVisitedPageStore->pageAt(m_selectIndex)->pageUrl()); |
|
168 |
|
169 if (m_snippet->isVisible() && m_hideOnClose) |
|
170 m_snippet->ChromeSnippet::toggleVisibility(); |
|
171 |
|
172 m_hideOnClose = false; |
|
173 emit closeComplete(); |
|
174 } |
|
175 |
|
176 void MostVisitedPagesWidget::updateMVGeometry() |
|
177 { |
|
178 qreal toolBarHeight; |
|
179 |
|
180 ChromeSnippet* visibleSnippet= static_cast<ChromeWidget*>(m_parent)->getSnippet("WebViewToolbarId"); |
|
181 if (visibleSnippet) |
|
182 toolBarHeight = visibleSnippet->widget()->geometry().height(); |
|
183 |
|
184 resize(m_parent->size().toSize()); |
|
185 updatePos(QPointF(0, 0), toolBarHeight); |
|
186 } |
|
187 |
|
188 void MostVisitedPagesWidget::updateMVStore(QWebPage *page) |
|
189 { |
|
190 Q_ASSERT(page); |
|
191 Q_ASSERT(!page->mainFrame()->url().isEmpty()); |
|
192 |
|
193 QImage* pageThumbnail = 0; |
|
194 QUrl pageUrl = page->mainFrame()->url(); |
|
195 int pageRank = 0; |
|
196 |
|
197 //check if page exits in store along with its thumbnail |
|
198 if (!m_mostVisitedPageStore->contains(pageUrl.toString(), true)) { |
|
199 QSize thumbnailSize(200, 200); |
|
200 pageThumbnail = new QImage(thumbnailSize.width(), thumbnailSize.height(), QImage::Format_RGB32); |
|
201 QPainter painter(pageThumbnail); |
|
202 qreal webcoreScale = page->mainFrame()->zoomFactor(); |
|
203 painter.scale(1.f / webcoreScale, 1.f / webcoreScale); |
|
204 painter.fillRect(0, 0, size().width(), size().height(), QColor(255, 255, 255)); |
|
205 page->mainFrame()->render(&painter, QWebFrame::AllLayers, QRegion(0, 0, thumbnailSize.width(), thumbnailSize.height())); |
|
206 } |
|
207 |
|
208 //if it is a new page to the store, get its rank from history |
|
209 //FIX ME : need to optimize this code |
|
210 pageRank = WRT::BookmarksManager::getSingleton()->getPageRank(pageUrl.toString()); |
|
211 m_mostVisitedPageStore->pageAccessed(pageUrl, pageThumbnail, pageRank); |
|
212 } |
|
213 |
|
214 void MostVisitedPagesWidget::onLoadFinished(const bool ok) |
|
215 { |
|
216 if (ok) { |
|
217 WRT::WrtBrowserContainer * activePage = WebPageController::getSingleton()->currentPage(); |
|
218 updateMVStore(activePage); |
|
219 } |
|
220 } |
|
221 |
|
222 } // endof namespace GVA |
|
223 |