diff -r 786160610b4d -r afcd8e6d025b homescreen/widgetplugins/hsbookmarkwidgetplugin/src/hsbookmarkwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreen/widgetplugins/hsbookmarkwidgetplugin/src/hsbookmarkwidget.cpp Fri Sep 17 12:11:40 2010 -0400 @@ -0,0 +1,357 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Homescreen bookmark widget +* +*/ +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include "hsbookmarkwidget.h" + +/*! + \ingroup group_hsbookmark_widget + \class HsBookmarkWidget + \brief Implementation for homescreen bookmark widget. + + HsBookmarkWidget derived from the HbWidget and implements + needed functions for the homescreen bookmark widget. +*/ + +/*! + Constructs a widget which is a child of \a parent, with widget flags set to \a flags. +*/ +HsBookmarkWidget::HsBookmarkWidget(QGraphicsItem* parent, Qt::WindowFlags flags) + : HbWidget(parent, flags), + mBackground(0), mIcon(0), mText(0), mTouchArea(0) +{ + HbStyleLoader::registerFilePath(":/hsbookmarkwidget.widgetml"); + HbStyleLoader::registerFilePath(":/hsbookmarkwidget.css"); + + createPrimitives(); +} + +/*! + Destructor +*/ +HsBookmarkWidget::~HsBookmarkWidget() +{ + HbStyleLoader::unregisterFilePath(":/hsbookmarkwidget.widgetml"); + HbStyleLoader::unregisterFilePath(":/hsbookmarkwidget.css"); +} + +/*! + Set's widget root path as \a rootPath +*/ +void HsBookmarkWidget::setRootPath(const QString &rootPath) +{ + mRootPath = rootPath; +} + +/*! + Root path for widget's resources +*/ +QString HsBookmarkWidget::rootPath()const +{ + return mRootPath; +} + +/*! + Set the bookmarkTitle property. This property is needed by css selector. +*/ +void HsBookmarkWidget::setBookmarkTitle(const QString &bookmarkTitle) +{ + mBookmarkTitle = bookmarkTitle; +} + +/*! + Return the bookmarkTitle property. This property is needed by css selector. +*/ +QString HsBookmarkWidget::bookmarkTitle() const +{ + return mBookmarkTitle; +} + +/*! + Set the bookmarkUrl property. This property is needed by QDestopService + to launch into browser. +*/ +void HsBookmarkWidget::setBookmarkUrl(const QString &bookmarkUrl) +{ + mBookmarkUrl = bookmarkUrl; +} + +/*! + Return the bookmarkUrl property. This property is needed by QDestopService + to launch into browser. +*/ +QString HsBookmarkWidget::bookmarkUrl() const +{ + return mBookmarkUrl; +} + +/*! + Set the iconFileName property. This property is to load the favison icon. +*/ +void HsBookmarkWidget::setFaviconFileName(const QString &faviconFileName) +{ + mFaviconFileName = faviconFileName; +} + +/*! + Return the iconFileName property. This property is to load the favison icon. +*/ +QString HsBookmarkWidget::faviconFileName() const +{ + return mFaviconFileName; +} + +/*! + Set the iconFileName property. This property is to load the favison icon. +*/ +void HsBookmarkWidget::setFaviconPath(const QString &faviconPath) +{ + mFaviconPath = faviconPath; +} + +/*! + Return the iconFileName property. This property is to load the favison icon. +*/ +QString HsBookmarkWidget::faviconPath() const +{ + return mFaviconPath; +} + +/*! + Filters touch area events. +*/ +bool HsBookmarkWidget::eventFilter(QObject *watched, QEvent *event) +{ + Q_UNUSED(watched) + + switch (event->type()) { + case QEvent::GraphicsSceneMousePress: + handleMousePressEvent(static_cast(event)); + return true; + case QEvent::GraphicsSceneMouseMove: + handleMouseMoveEvent(static_cast(event)); + return true; + case QEvent::GraphicsSceneMouseRelease: + handleMouseReleaseEvent(static_cast(event)); + return true; + case QEvent::UngrabMouse: + setBackgroundToNormal(); + return true; + default: + break; + } + + return false; +} + +void HsBookmarkWidget::onInitialize() +{ + if (mFaviconFileName.isNull()) + { + // get default icon, rootPath is set thus we can use it + QString iconPath = QDir::toNativeSeparators(mRootPath + "/nokiabrowser-bm-icon_70x70_no_ico.png"); + HbIcon icon = HbIcon(iconPath); + updateContent(mBookmarkTitle, icon); + } + else + { + // get favicon first + QString faviconPath = QDir::toNativeSeparators(mFaviconPath + mFaviconFileName); + + HbIcon favicon = HbIcon(faviconPath); + favicon.setSize(QSize(HsBookmarkWidget::faviconSize, HsBookmarkWidget::faviconSize)); + + QString iconPath = QDir::toNativeSeparators(mRootPath + "/nokiabrowser-bm-icon_70x70_ico.png"); + HbIcon icon = HbIcon(iconPath); + + updateContent(mBookmarkTitle, + createIconWithOverlay(icon, + QPoint(HsBookmarkWidget::faviconPoint, HsBookmarkWidget::faviconPoint), + favicon)); + } +} + +/*! + Called when widget is shown in the home screen +*/ +void HsBookmarkWidget::onShow() +{ + setVisible(true); +} + +/*! + Called when widget is hidden from the home screen +*/ + +void HsBookmarkWidget::onHide() +{ +} + +/*! + \internal +*/ +void HsBookmarkWidget::handleMousePressEvent(QGraphicsSceneMouseEvent *event) +{ + Q_UNUSED(event) + setBackgroundToPressed(); +} + +/*! + \internal +*/ +void HsBookmarkWidget::handleMouseMoveEvent(QGraphicsSceneMouseEvent *event) +{ + if (contains(event->pos())) { + setBackgroundToPressed(); + } else { + setBackgroundToNormal(); + } +} + +/*! + \internal +*/ +void HsBookmarkWidget::handleMouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + setBackgroundToNormal(); + + if (!contains(event->pos())) { + return; + } + + //HbInstantFeedback::play(HSCONFIGURATION_GET(bookmarkWidgetTapFeedbackEffect)); + + QUrl url = QUrl(mBookmarkUrl); + qDebug() << "hsBookmarkWidget - opening url - " << url << ", " << stat; + bool stat = QDesktopServices::openUrl(url); + qDebug() << "hsBookmarkWidget - opened url - " << url << ", " << stat; +} + +/*! + \internal +*/ +void HsBookmarkWidget::createPrimitives() +{ + // Background + if (!mBackground) { + HbFrameDrawer *drawer = new HbFrameDrawer( + QLatin1String("qtg_fr_hsshortcut_normal"), HbFrameDrawer::NinePieces); + mBackground = new HbFrameItem(drawer, this); + HbStyle::setItemName(mBackground, QLatin1String("background")); + } + + // Icon + if (!mIcon) { + mIcon = new HbIconItem(this); + HbStyle::setItemName(mIcon, QLatin1String("icon")); + } + + // Text + if (!mText) { + mText = new HbTextItem(this); + HbStyle::setItemName(mText, QLatin1String("text")); + } + + // Touch AreaOK + if (!mTouchArea) { + mTouchArea = new HbTouchArea(this); + mTouchArea->installEventFilter(this); + HbStyle::setItemName(mTouchArea, QLatin1String("toucharea")); + } +} + +/*! + \internal +*/ +void HsBookmarkWidget::setBackgroundToNormal() +{ + mBackground->frameDrawer(). + setFrameGraphicsName(QLatin1String("qtg_fr_hsshortcut_normal")); +} + +/*! + \internal +*/ +void HsBookmarkWidget::setBackgroundToPressed() +{ + mBackground->frameDrawer(). + setFrameGraphicsName(QLatin1String("qtg_fr_hsitems_pressed")); +} + +/*! + \internal +*/ +void HsBookmarkWidget::updateContent(const QString title, const HbIcon& icon) +{ + mIcon->setIcon(icon); + + if (title != "") { + mText->setText(title.left(HsBookmarkWidget::maxDisplayLen)); + } +} + +QImage HsBookmarkWidget::createImageWithOverlay(const QImage& baseImage, const QPoint& point, const QImage& overlayImage) +{ + QImage imageWithOverlay = QImage(baseImage.size(), QImage::Format_ARGB32_Premultiplied); + QPainter painter(&imageWithOverlay); + + painter.setCompositionMode(QPainter::CompositionMode_Source); + painter.fillRect(imageWithOverlay.rect(), Qt::transparent); + + painter.setCompositionMode(QPainter::CompositionMode_SourceOver); + painter.drawImage(0, 0, baseImage); + + painter.setCompositionMode(QPainter::CompositionMode_SourceOver); + painter.drawImage(point, overlayImage); + + painter.end(); + + return imageWithOverlay; +} + +HbIcon HsBookmarkWidget::createIconWithOverlay(HbIcon& baseIcon, const QPoint& point, HbIcon& overlayIcon) +{ + + // Create overlay image with favicon on top + QPixmap basePixmap = baseIcon.pixmap(); + QPixmap overlayImage = overlayIcon.pixmap(); + + QImage imageWithOverlay = createImageWithOverlay(basePixmap.toImage(), point, overlayImage.toImage()); + QPixmap pixmapWithOverlay = QPixmap::fromImage(imageWithOverlay); + + return HbIcon(QIcon(pixmapWithOverlay)); +} + +void HsBookmarkWidget::removeFavicon() +{ + QDir faviconDir(mFaviconPath); + + faviconDir.remove(mFaviconFileName); +}