--- /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
+