1 /* |
1 /* |
2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). |
2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). |
3 * All rights reserved. |
3 * All rights reserved. |
4 * This component and the accompanying materials are made available |
4 * |
5 * under the terms of "Eclipse Public License v1.0" |
5 * This program is free software: you can redistribute it and/or modify |
6 * which accompanies this distribution, and is available |
6 * it under the terms of the GNU Lesser General Public License as published by |
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
7 * the Free Software Foundation, version 2.1 of the License. |
8 * |
8 * |
9 * Initial Contributors: |
9 * This program is distributed in the hope that it will be useful, |
10 * Nokia Corporation - initial contribution. |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 * |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 * Contributors: |
12 * GNU Lesser General Public License for more details. |
13 * |
13 * |
14 * Description: |
14 * You should have received a copy of the GNU Lesser General Public License |
|
15 * along with this program. If not, |
|
16 * see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/". |
|
17 * |
|
18 * Description: |
15 * |
19 * |
16 */ |
20 */ |
17 |
|
18 |
21 |
19 #include <QtGui> |
22 #include <QtGui> |
20 |
23 |
21 #include "mostvisitedpagestore.h" |
24 #include "mostvisitedpagestore.h" |
22 #include "linearflowsnippet.h" |
25 #include "linearflowsnippet.h" |
23 #include "mostvisitedpageview.h" |
26 #include "mostvisitedpageview.h" |
24 #include "webpagecontroller.h" |
27 #include "webpagecontroller.h" |
25 #include "BookmarksManager.h" |
28 #include "BookmarksManager.h" |
|
29 #include "webpagedata.h" |
26 |
30 |
27 const int KLinearSnippetHeight = 120; |
31 const int KLinearSnippetHeight = 120; |
28 |
32 |
29 namespace GVA { |
33 namespace GVA { |
30 MostVisitedPagesWidget::MostVisitedPagesWidget(ChromeSnippet* snippet,QGraphicsWidget* parent) |
34 MostVisitedPagesWidget::MostVisitedPagesWidget(ChromeSnippet* snippet, ChromeWidget* chrome) |
31 : m_snippet(snippet) |
35 : ChromeItem(snippet, chrome->layout()) |
32 , QGraphicsWidget(parent) |
36 , m_parent(chrome->layout()) |
33 , m_parent(parent) |
37 , m_chrome(chrome) |
34 , m_flowInterface(0) |
38 , m_flowInterface(0) |
35 , m_hideOnClose(true) |
39 , m_hideOnClose(true) |
36 { |
40 { |
37 setFlags(QGraphicsItem::ItemDoesntPropagateOpacityToChildren); |
41 setFlags(QGraphicsItem::ItemDoesntPropagateOpacityToChildren); |
38 setOpacity(0.5); |
42 setOpacity(0.5); |
39 m_mostVisitedPageStore = new MostVisitedPageStore(); |
43 m_mostVisitedPageStore = new MostVisitedPageStore(); |
40 WebPageController* pageController = WebPageController::getSingleton(); |
44 WebPageController* pageController = WebPageController::getSingleton(); |
41 bool ret = connect(pageController, SIGNAL(loadFinished(const bool)), this, SLOT(onLoadFinished(const bool))); |
45 connect(pageController, SIGNAL(loadFinished(const bool)), this, SLOT(onLoadFinished(const bool))); |
|
46 connect(WRT::BookmarksManager::getSingleton(),SIGNAL(historyCleared()),this,SLOT(clearMVStore())); |
42 } |
47 } |
43 |
48 |
44 MostVisitedPagesWidget::~MostVisitedPagesWidget() |
49 MostVisitedPagesWidget::~MostVisitedPagesWidget() |
45 { |
50 { |
46 if (m_flowInterface) |
51 if (m_flowInterface) |
47 m_flowInterface->deleteLater(); |
52 m_flowInterface->deleteLater(); |
48 if (m_mostVisitedPageStore) |
53 if (m_mostVisitedPageStore) |
49 delete m_mostVisitedPageStore; |
54 delete m_mostVisitedPageStore; |
50 WebPageController* pageController = WebPageController::getSingleton(); |
55 WebPageController* pageController = WebPageController::getSingleton(); |
51 disconnect(pageController, SIGNAL(loadFinished()), this, SLOT(onLoadFinished())); |
56 disconnect(pageController, SIGNAL(loadFinished(const bool)), this, SLOT(onLoadFinished(const bool))); |
|
57 disconnect(WRT::BookmarksManager::getSingleton(),SIGNAL(historyCleared()),this,SLOT(clearMVStore())); |
52 } |
58 } |
53 |
59 |
54 |
60 |
55 void MostVisitedPagesWidget::open() |
61 void MostVisitedPagesWidget::open() |
56 { |
62 { |
58 delete m_flowInterface; |
64 delete m_flowInterface; |
59 |
65 |
60 m_flowInterface = new GVA::LinearFlowSnippet(this); |
66 m_flowInterface = new GVA::LinearFlowSnippet(this); |
61 m_flowInterface->setZValue(m_parent->zValue() + 1); |
67 m_flowInterface->setZValue(m_parent->zValue() + 1); |
62 m_flowInterface->resize(QSize(m_parent->size().width(), KLinearSnippetHeight)); |
68 m_flowInterface->resize(QSize(m_parent->size().width(), KLinearSnippetHeight)); |
63 connect(m_flowInterface, SIGNAL(mouseEvent(QEvent::Type)),this->m_snippet,SIGNAL(snippetMouseEvent(QEvent::Type))); |
69 connect(m_flowInterface, SIGNAL(mouseEvent(QEvent::Type)),this,SIGNAL(mouseEvent(QEvent::Type))); |
64 |
70 |
65 //Initialize the page selection index |
71 //Initialize the page selection index |
66 m_selectIndex = -1; |
72 m_selectIndex = -1; |
67 |
73 |
68 QString displayMode; |
74 QString displayMode; |
69 |
75 |
70 if (m_parent->size().width() > m_parent->size().height()) { |
76 if (m_parent->size().width() > m_parent->size().height()) { |
71 displayMode = "Landscape"; |
77 displayMode = "Landscape"; |
72 |
78 |
73 } else { |
79 } else { |
74 displayMode = "Portrait"; |
80 displayMode = "Portrait"; |
75 } |
81 } |
76 m_flowInterface->init(displayMode,"Most Visited Pages"); |
82 m_flowInterface->init(displayMode,qtTrId("txt_browser_most_visited_title")); |
77 |
83 |
78 MostVisitedPageList mvPageList = m_mostVisitedPageStore->pageList(); |
84 MostVisitedPageList mvPageList = m_mostVisitedPageStore->pageList(); |
79 |
85 |
80 for (int i = 0; i < mvPageList.size(); i++) { |
86 for (int i = 0; i < mvPageList.size(); i++) { |
81 QImage *pageThumbnail = mvPageList[i]->m_pageThumbnail; |
87 QImage *pageThumbnail = mvPageList[i]->m_pageThumbnail; |
88 m_flowInterface->addSlide(*pageThumbnail, url.host()); |
94 m_flowInterface->addSlide(*pageThumbnail, url.host()); |
89 if (removeTempThumbnail) { |
95 if (removeTempThumbnail) { |
90 delete pageThumbnail; |
96 delete pageThumbnail; |
91 } |
97 } |
92 } |
98 } |
93 |
99 |
94 setCenterIndex(displayMode); |
100 setCenterIndex(displayMode); |
95 m_flowInterface->prepareStartAnimation(); |
101 m_flowInterface->prepareStartAnimation(); |
96 m_flowInterface->runStartAnimation(); |
102 m_flowInterface->runStartAnimation(); |
97 m_flowInterface->installEventFilter(this); |
103 m_flowInterface->installEventFilter(this); |
98 connect(m_flowInterface, SIGNAL(ok(int)), this, SLOT(okTriggered(int))); |
104 connect(m_flowInterface, SIGNAL(ok(int)), this, SLOT(okTriggered(int))); |
109 } |
115 } |
110 |
116 |
111 void MostVisitedPagesWidget::updatePos(QPointF pos, qreal &toolBarHeight) |
117 void MostVisitedPagesWidget::updatePos(QPointF pos, qreal &toolBarHeight) |
112 { |
118 { |
113 QGraphicsWidget::setPos(pos); |
119 QGraphicsWidget::setPos(pos); |
114 m_flowInterface->setPos(pos.x(), m_parent->size().height() - toolBarHeight - KLinearSnippetHeight); |
120 m_flowInterface->setPos(pos.x(), m_parent->size().height() - (toolBarHeight+5) - KLinearSnippetHeight); |
115 } |
121 } |
116 |
122 |
117 void MostVisitedPagesWidget::resize(const QSize &size) |
123 void MostVisitedPagesWidget::resize(const QSize &size) |
118 { |
124 { |
119 QGraphicsWidget::resize(size); |
125 QGraphicsWidget::resize(size); |
120 m_flowInterface->resize(QSize(m_parent->size().width(), KLinearSnippetHeight)); |
126 m_flowInterface->resize(QSize(m_parent->size().width(), KLinearSnippetHeight)); |
121 } |
127 } |
122 |
128 |
123 void MostVisitedPagesWidget::displayModeChanged(QString& newMode) |
129 void MostVisitedPagesWidget::displayModeChanged(QString& newMode) |
124 { |
130 { |
125 m_flowInterface->displayModeChanged(newMode); |
131 m_flowInterface->displayModeChanged(newMode); |
126 } |
132 } |
127 |
133 |
128 void MostVisitedPagesWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) |
134 void MostVisitedPagesWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) |
129 { |
135 { |
130 painter->fillRect(0, 0, size().width(), size().height(), QColor(107, 109, 107)); |
136 painter->fillRect(0, 0, size().width(), size().height(), QColor(255, 255, 255)); |
131 QGraphicsWidget::paint(painter, option, widget); |
137 QGraphicsWidget::paint(painter, option, widget); |
132 } |
138 } |
133 |
139 |
134 void MostVisitedPagesWidget::setCenterIndex(QString displayMode) |
140 void MostVisitedPagesWidget::setCenterIndex(QString displayMode) |
135 { |
141 { |
144 |
150 |
145 void MostVisitedPagesWidget::okTriggered(int index) |
151 void MostVisitedPagesWidget::okTriggered(int index) |
146 { |
152 { |
147 Q_ASSERT(m_flowInterface); |
153 Q_ASSERT(m_flowInterface); |
148 m_selectIndex = index; |
154 m_selectIndex = index; |
149 close(); |
155 close(); |
150 } |
156 } |
151 |
157 |
152 void MostVisitedPagesWidget::closeAnimationCompleted() |
158 void MostVisitedPagesWidget::closeAnimationCompleted() |
153 { |
159 { |
154 if (!m_flowInterface) |
160 if (!m_flowInterface) |
155 return; |
161 return; |
156 |
162 |
157 QGraphicsWidget::hide(); |
163 QGraphicsWidget::hide(); |
158 disconnect(m_flowInterface, SIGNAL(ok(int)), this, SLOT(okTriggered(int))); |
164 disconnect(m_flowInterface, SIGNAL(ok(int)), this, SLOT(okTriggered(int))); |
159 disconnect(m_flowInterface, SIGNAL(endAnimationCplt()), this, SLOT(closeAnimationCompleted())); |
165 disconnect(m_flowInterface, SIGNAL(endAnimationCplt()), this, SLOT(closeAnimationCompleted())); |
160 disconnect(m_flowInterface, SIGNAL(mouseEvent(QEvent::Type)),this->m_snippet,SIGNAL(snippetMouseEvent(QEvent::Type))); |
166 disconnect(m_flowInterface, SIGNAL(mouseEvent(QEvent::Type)),this,SIGNAL(mouseEvent(QEvent::Type))); |
161 |
167 |
162 m_flowInterface->removeEventFilter(this); |
168 m_flowInterface->removeEventFilter(this); |
163 m_flowInterface->deleteLater(); |
169 m_flowInterface->deleteLater(); |
164 m_flowInterface = NULL; |
170 m_flowInterface = NULL; |
165 |
171 |
166 if (m_selectIndex != -1) |
172 if (m_selectIndex != -1) |
167 static_cast<ChromeWidget*>(m_parent)->loadUrlToCurrentPage(m_mostVisitedPageStore->pageAt(m_selectIndex)->pageUrl()); |
173 m_chrome->loadUrlToCurrentPage(m_mostVisitedPageStore->pageAt(m_selectIndex)->pageUrl()); |
168 |
174 |
169 if (m_snippet->isVisible() && m_hideOnClose) |
175 if (m_snippet->isVisible() && m_hideOnClose) |
170 m_snippet->ChromeSnippet::toggleVisibility(); |
176 m_snippet->ChromeSnippet::toggleVisibility(); |
171 |
177 |
172 m_hideOnClose = false; |
178 m_hideOnClose = false; |
175 |
181 |
176 void MostVisitedPagesWidget::updateMVGeometry() |
182 void MostVisitedPagesWidget::updateMVGeometry() |
177 { |
183 { |
178 qreal toolBarHeight; |
184 qreal toolBarHeight; |
179 |
185 |
180 ChromeSnippet* visibleSnippet= static_cast<ChromeWidget*>(m_parent)->getSnippet("WebViewToolbarId"); |
186 ChromeSnippet* visibleSnippet= m_chrome->getSnippet("WebViewToolbarId"); |
181 if (visibleSnippet) |
187 if (visibleSnippet) |
182 toolBarHeight = visibleSnippet->widget()->geometry().height(); |
188 toolBarHeight = visibleSnippet->widget()->geometry().height(); |
183 |
189 |
184 resize(m_parent->size().toSize()); |
190 resize(m_parent->size().toSize()); |
185 updatePos(QPointF(0, 0), toolBarHeight); |
191 updatePos(QPointF(0, 0), toolBarHeight); |
186 } |
192 } |
187 |
193 |
188 void MostVisitedPagesWidget::updateMVStore(QWebPage *page) |
194 void MostVisitedPagesWidget::updateMVStore(WRT::WrtBrowserContainer *page) |
189 { |
195 { |
190 Q_ASSERT(page); |
196 Q_ASSERT(page); |
191 Q_ASSERT(!page->mainFrame()->url().isEmpty()); |
197 Q_ASSERT(!page->mainFrame()->url().isEmpty()); |
192 |
198 |
193 QImage* pageThumbnail = 0; |
|
194 QUrl pageUrl = page->mainFrame()->url(); |
199 QUrl pageUrl = page->mainFrame()->url(); |
195 int pageRank = 0; |
200 int pageRank = 0; |
196 |
201 QImage* pageThumbnail = NULL; |
197 //check if page exits in store along with its thumbnail |
202 //check if page exists in store along with its thumbnail |
198 if (!m_mostVisitedPageStore->contains(pageUrl.toString(), true)) { |
203 if (!m_mostVisitedPageStore->contains(pageUrl.toString(), true)) { |
199 QSize thumbnailSize(200, 200); |
204 qreal scale = 200.0 / page->viewportSize().width(); |
200 pageThumbnail = new QImage(thumbnailSize.width(), thumbnailSize.height(), QImage::Format_RGB32); |
205 QImage img = page->pageThumbnail(scale, scale); |
201 QPainter painter(pageThumbnail); |
206 pageThumbnail = new QImage(img); |
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 } |
207 |
208 |
208 //if it is a new page to the store, get its rank from history |
209 //if it is a new page to the store, get its rank from history |
209 //FIX ME : need to optimize this code |
210 //FIX ME : need to optimize this code |
210 pageRank = WRT::BookmarksManager::getSingleton()->getPageRank(pageUrl.toString()); |
211 pageRank = WRT::BookmarksManager::getSingleton()->getPageRank(pageUrl.toString()); |