ginebra2/mostvisitedpageview.cpp
changeset 0 1450b09d0cfd
child 3 0954f5dd2cd0
child 5 0f2326c2a325
equal deleted inserted replaced
-1:000000000000 0:1450b09d0cfd
       
     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