ginebra2/MostVisitedView.cpp
changeset 16 3c88a81ff781
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/MostVisitedView.cpp	Fri Oct 15 17:30:59 2010 -0400
@@ -0,0 +1,229 @@
+#include "MostVisitedView.h"
+#include "GridView.h"
+#include "webpagecontroller.h"
+#include "mostvisitedpagestore.h"
+#include "wrtbrowsercontainer.h"
+#include "ScaleThreePainter.h"
+#include "qstmgestureevent.h"
+
+#include <QGraphicsPixmapItem>
+#include <QGraphicsScene>
+#include <QGraphicsSceneResizeEvent>
+#include <QPainter>
+#include <QStyleOptionGraphicsItem>
+#include <QGraphicsLinearLayout>
+#include <QGraphicsSimpleTextItem>
+
+namespace GVA {
+
+
+// -----------------------------------------------------------
+// MostVisitedViewItem
+// -----------------------------------------------------------
+
+MostVisitedViewItem::MostVisitedViewItem(::MostVisitedPage *mostVisitedPage, QGraphicsItem *parent)
+    : QGraphicsWidget(parent),
+      m_mostVisitedPage(mostVisitedPage)
+{
+    grabGesture(QStm_Gesture::assignedType());
+    installEventFilter(this);
+}
+
+void MostVisitedViewItem::activate() {
+    WRT::WrtBrowserContainer * activePage = WebPageController::getSingleton()->currentPage();
+
+    if (activePage) {
+      activePage->mainFrame()->load(m_mostVisitedPage->m_url);
+    }
+    close();
+    emit activated();
+}
+
+void MostVisitedViewItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
+    if(m_mostVisitedPage->m_pageThumbnail) {
+        QPixmap pixmap(QPixmap::fromImage(*m_mostVisitedPage->m_pageThumbnail).scaled(size().toSize()));
+        painter->drawPixmap(option->exposedRect, pixmap, option->exposedRect);
+        
+        QPen pen;
+        int x, y, w, h;
+        const int itemBorderWidth = 2;
+        const QColor itemBorderColor = QColor("black");
+
+        pen.setWidth(itemBorderWidth);
+        pen.setBrush(itemBorderColor);
+        pen.setJoinStyle(Qt::MiterJoin);
+        
+        painter->setPen(pen);
+        option->exposedRect.toRect().getRect(&x, &y, &w, &h);
+        painter->drawRect(x + itemBorderWidth / 2, y + itemBorderWidth / 2, w - itemBorderWidth, h - itemBorderWidth);
+    }
+}
+
+bool MostVisitedViewItem::eventFilter(QObject* o, QEvent* e)
+ { 
+   if (o != this) 
+      return false;
+   return QStm_GestureEventFilter::instance()->eventFilter(o, e);
+ } 
+
+bool MostVisitedViewItem::event(QEvent* event)
+ { 
+   if (event->type() == QEvent::Gesture) {
+       QStm_Gesture* gesture = getQStmGesture(event);
+       if (gesture) {  
+           handleQStmGesture(gesture);
+           event->accept();
+           return true;
+       }
+   }
+   return false;
+ }
+
+bool MostVisitedViewItem::handleQStmGesture(QStm_Gesture* gesture)
+ {
+   QStm_GestureType type = gesture->getGestureStmType();
+   
+   if (type == QStmTapGestureType) {
+       activate();
+   }
+   return true;
+ }
+
+
+// -----------------------------------------------------------
+// MostVisitedView
+// -----------------------------------------------------------
+
+MostVisitedView::MostVisitedView(const QString &title, QGraphicsItem *parent)
+    : QGraphicsWidget(parent),
+      m_layout(new QGraphicsLinearLayout(Qt::Vertical, this)),
+      m_title(0),
+      m_gridView(new GridView(this)),
+      m_backgroundPixmap(0),
+      m_backgroundDirty(true),
+      m_titleWrapper(new QGraphicsWidget(this))
+      
+{
+    m_titleWrapper->resize(50, 10);
+    m_title = new QGraphicsSimpleTextItem("  " + title, m_titleWrapper);
+    m_title->setBrush(QColor(Qt::white));
+    QFont textFont = m_title->font();
+    #ifdef Q_WS_MAEMO_5
+    textFont.setPointSize(16);
+    #else
+    textFont.setPointSize(6);
+    #endif
+    textFont.setWeight(QFont::Bold);
+    m_title->setFont(textFont);
+    #ifdef Q_WS_MAEMO_5
+    m_titleWrapper->setContentsMargins(16, 0, 0, 0);
+    #endif
+
+    setLayout(m_layout);
+    m_layout->setSpacing(0);
+    
+    #ifdef Q_WS_MAEMO_5
+    m_layout->setContentsMargins(16, 4, 16, 16);    
+    m_layout->addItem(m_titleWrapper);
+    #else
+    
+    m_layout->addItem(m_titleWrapper); 
+    #endif
+    m_layout->addItem(m_gridView);
+
+		#ifdef Q_WS_MAEMO_5
+    m_gridView->setColumnRowCounts(3, 2);    
+    #endif
+
+    m_backgroundPainter = new ScaleThreePainter(
+            ":/mostvisited/most_visited_bac_left.png",
+            ":/mostvisited/most_visited_bac_middle.png",
+            ":/mostvisited/most_visited_bac_right.png"
+            );   
+}
+
+MostVisitedView::~MostVisitedView() {
+    delete m_backgroundPainter;
+    delete m_backgroundPixmap;
+}
+
+void MostVisitedView::update(QString mode) {
+	  
+    MostVisitedPageList pageList = MostVisitedPageStoreSingleton::Instance().pageList();
+    m_gridView->clear();
+    foreach(MostVisitedPage *page, pageList) {
+        MostVisitedViewItem *item = new MostVisitedViewItem(page, this);
+        //qDebug() << __PRETTY_FUNCTION__ << " url=" << page->m_url << page->m_pageThumbnail;
+        m_gridView->addItem(item);
+        safe_connect(item, SIGNAL(activated()), this, SLOT(onItemActivated()));
+    }
+    
+    m_displayMode = mode;       
+    m_gridView->rebuildLayout();
+}
+
+void MostVisitedView::resizeEvent(QGraphicsSceneResizeEvent * event) {
+	  
+    m_gridView->resize(event->newSize());  
+    // Force background update on next paint().
+    m_backgroundDirty = true;
+}
+
+void MostVisitedView::closeEvent(QCloseEvent *event) {
+    Q_UNUSED(event)
+    emit closeComplete();
+}
+
+void MostVisitedView::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
+    // Update the background pixmap if needed.
+    
+    #ifndef Q_WS_MAEMO_5
+    if (m_displayMode == "portrait")
+    {
+    	m_gridView->setColumnRowCounts(2, 3);
+    	m_titleWrapper->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+    	m_layout->setContentsMargins(16, 4, 16, 16);  
+    	setMinimumSize(346, 523);    
+    	setMaximumSize(346, 523);    
+    }
+    else
+    {
+    	m_gridView->setColumnRowCounts(3, 2);
+    	m_titleWrapper->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
+    	m_layout->setContentsMargins(36, 4, 0, 0);   
+    	setMinimumSize(610, 260);
+    	setMaximumSize(610, 260);
+    }
+    m_gridView->rebuildLayout();
+    #endif
+    
+    #ifndef Q_WS_MAEMO_5   
+    updateBackgroundPixmap(geometry().size().toSize(), widget);    	
+    m_backgroundPainter->unloadPixmaps();
+    #else
+    if(m_backgroundDirty) {    	
+     	updateBackgroundPixmap(geometry().size().toSize(), widget);    	
+      m_backgroundPainter->unloadPixmaps();
+    }
+    #endif
+
+    // Paint the background.
+    painter->drawPixmap(option->exposedRect, *m_backgroundPixmap, option->exposedRect);
+}
+
+void MostVisitedView::updateBackgroundPixmap(const QSize &size, QWidget* widget) {
+    delete m_backgroundPixmap;
+    m_backgroundPixmap = new QPixmap(size);
+    m_backgroundPixmap->fill(QColor(0xff, 0xff, 0xff, 0));
+    QPainter painter(m_backgroundPixmap);
+    m_backgroundPainter->paint(&painter, QRect(0, 0, size.width(), size.height()), widget);
+    m_backgroundDirty = false;
+}
+
+void MostVisitedView::onItemActivated() {
+    close();
+    emit activated();
+}
+
+}  // namespace
+