ginebra2/mostvisitedpageview.cpp
changeset 3 0954f5dd2cd0
parent 0 1450b09d0cfd
child 9 b39122337a00
equal deleted inserted replaced
1:b0dd75e285d2 3:0954f5dd2cd0
     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());
   217         WRT::WrtBrowserContainer * activePage = WebPageController::getSingleton()->currentPage();
   218         WRT::WrtBrowserContainer * activePage = WebPageController::getSingleton()->currentPage();
   218         updateMVStore(activePage);
   219         updateMVStore(activePage);
   219      }
   220      }
   220  }
   221  }
   221 
   222 
       
   223 void MostVisitedPagesWidget::clearMVStore()
       
   224 {
       
   225     m_mostVisitedPageStore->clearMostVisitedPageStore();
       
   226 }
       
   227 
   222 } // endof namespace GVA
   228 } // endof namespace GVA
   223 
   229