diff -r 36f374c67aa8 -r 12db4185673b messagingapp/msgui/unifiedviewer/src/univiewerpixmapwidget.cpp --- a/messagingapp/msgui/unifiedviewer/src/univiewerpixmapwidget.cpp Tue Jul 06 14:12:40 2010 +0300 +++ b/messagingapp/msgui/unifiedviewer/src/univiewerpixmapwidget.cpp Wed Aug 18 09:45:25 2010 +0300 @@ -34,68 +34,78 @@ #define LOC_OPEN hbTrId("txt_common_menu_open") #define LOC_SAVE hbTrId("txt_common_menu_save") -const QString PIXMAP_ICON("qtg_small_image"); -const QString CORRUPTED_PIXMAP_ICON("qtg_large_corrupted"); -const QString VIDEO_MIMETYPE("video"); -const QString MSG_VIDEO_ICON("qtg_small_video"); +static const char PIXMAP_ICON[] = "qtg_small_image"; +static const char CORRUPTED_PIXMAP_ICON[] = "qtg_large_corrupted"; +static const char VIDEO_MIMETYPE[] = "video"; + +static const int WIDTH_RATIO = 4; +static const int HEIGHT_RATIO = 3; //--------------------------------------------------------------- // UniViewerPixmapWidget::UniViewerPixmapWidget // @see header file //--------------------------------------------------------------- UniViewerPixmapWidget::UniViewerPixmapWidget(QGraphicsItem *parent) : - HbIconItem(parent), mViewerUtils(0), mThumbnailManager(0) + HbIconItem(parent), mInfo(0), mViewerUtils(0), mThumbnailManager(0) { this->grabGesture(Qt::TapGesture); init(); } //--------------------------------------------------------------- -// UniViewerPixmapWidget::init -// @see header file -//--------------------------------------------------------------- -void UniViewerPixmapWidget::init() -{ - mThumbnailManager = new ThumbnailManager(this); - mThumbnailManager->setMode(ThumbnailManager::Default); - mThumbnailManager->setQualityPreference(ThumbnailManager::OptimizeForQuality); - mThumbnailManager->setThumbnailSize(ThumbnailManager::ThumbnailLarge); - - connect(mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int)), this, - SLOT(thumbnailReady(QPixmap, void*, int, int))); - -} - -//--------------------------------------------------------------- // UniViewerPixmapWidget::~UniViewerPixmapWidget // @see header file //--------------------------------------------------------------- UniViewerPixmapWidget::~UniViewerPixmapWidget() { + if (mInfo) { + delete mInfo; + mInfo = NULL; + } } //--------------------------------------------------------------- -// UniViewerPixmapWidget::setPixmap +// UniViewerPixmapWidget::populate // @see header file //--------------------------------------------------------------- void UniViewerPixmapWidget::populate(UniMessageInfo *info) { mMimeType = info->mimetype(); mPixmapPath = info->path(); + + /** + * Create a copy of info for video content. + * mInfo will be deleted in the destructor. + */ if (mMimeType.contains(VIDEO_MIMETYPE)) { - this->setIcon(MSG_VIDEO_ICON); - mThumbnailManager->getThumbnail(mPixmapPath); - this->ungrabGesture(Qt::TapGesture); + mInfo = new UniMessageInfo(*info); } - else if (info->isProtected()) { - this->setIconName(PIXMAP_ICON); + + if (info->isProtected()) { + if (mMimeType.contains(VIDEO_MIMETYPE)) { + emit thumbnailFound(false, mInfo); + } + else { + this->setIconName(PIXMAP_ICON); + } } else if (info->isCorrupted()) { - this->setIconName(CORRUPTED_PIXMAP_ICON); + if (mMimeType.contains(VIDEO_MIMETYPE)) { + emit thumbnailFound(false, mInfo); + } + else { + this->setIconName(CORRUPTED_PIXMAP_ICON); + } } else { - QPixmap pixmap(mPixmapPath); - this->setIcon(HbIcon(pixmap)); + if (mMimeType.contains(VIDEO_MIMETYPE)) { + mThumbnailManager->getThumbnail(mPixmapPath); + this->ungrabGesture(Qt::TapGesture); + } + else { + QPixmap pixmap(mPixmapPath); + this->setIcon(HbIcon(pixmap)); + } } } @@ -168,6 +178,49 @@ { } +//--------------------------------------------------------------- +// UniViewerPixmapWidget::regrabGesture +// @see header file +//--------------------------------------------------------------- +void UniViewerPixmapWidget::regrabGesture() +{ + this->grabGesture(Qt::TapGesture); +} + +//--------------------------------------------------------------- +// UniViewerPixmapWidget::thumbnailReady +// @see header +//--------------------------------------------------------------- +void UniViewerPixmapWidget::thumbnailReady(const QPixmap& pixmap, void *data, int id, int error) +{ + Q_UNUSED(data) + Q_UNUSED(id) + this->grabGesture(Qt::TapGesture); + if (error) { + emit thumbnailFound(false, mInfo); + } + else { + this->setIcon(HbIcon(pixmap)); + this->hide(); + emit thumbnailFound(true, NULL); + } +} + +//--------------------------------------------------------------- +// UniViewerPixmapWidget::init +// @see header file +//--------------------------------------------------------------- +void UniViewerPixmapWidget::init() +{ + mThumbnailManager = new ThumbnailManager(this); + mThumbnailManager->setMode(ThumbnailManager::CropToAspectRatio); + mThumbnailManager->setQualityPreference(ThumbnailManager::OptimizeForQuality); + mThumbnailManager->setThumbnailSize(getThumbnailSize()); + + connect(mThumbnailManager, SIGNAL(thumbnailReady(QPixmap, void*, int, int)), this, + SLOT(thumbnailReady(QPixmap, void*, int, int))); +} + //---------------------------------------------------------------------------- // UniViewerPixmapWidget::handleShortTap // @see header file @@ -197,27 +250,23 @@ } //--------------------------------------------------------------- -// UniViewerPixmapWidget::regrabGesture +// UniViewerPixmapWidget::getThumbnailSize // @see header file //--------------------------------------------------------------- -void UniViewerPixmapWidget::regrabGesture() +QSize UniViewerPixmapWidget::getThumbnailSize() { - this->grabGesture(Qt::TapGesture); + QSize thumbnailSize(1, 1); + HbWidget *parent = qobject_cast(this->parentWidget()); + + if (parent) { + qreal thumbnailWidth = 0.0; + qreal thumbnailHeight = 0.0; + parent->style()->parameter("hb-param-screen-short-edge", thumbnailWidth); + thumbnailHeight = (thumbnailWidth * HEIGHT_RATIO) / WIDTH_RATIO; + thumbnailSize.setHeight(qRound(thumbnailHeight)); + thumbnailSize.setWidth(qRound(thumbnailWidth)); + } + return thumbnailSize; } -//--------------------------------------------------------------- -// UniViewerPixmapWidget::thumbnailReady -// @see header -//--------------------------------------------------------------- -void UniViewerPixmapWidget::thumbnailReady(const QPixmap& pixmap, void *data, int id, int error) -{ - Q_UNUSED(data) - Q_UNUSED(id) - this->grabGesture(Qt::TapGesture); - if (!error) { - this->setIcon(HbIcon(pixmap)); - this->hide(); - this->updateGeometry(); - } -} // EOF