diff -r 6aeb7a756187 -r 3c88a81ff781 ginebra2/MostVisitedView.cpp --- /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 +#include +#include +#include +#include +#include +#include + +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 +