diff -r fa1df4b99609 -r ebe688cedc25 messagingapp/msgui/unifiededitor/src/msgunieditorattachment.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgui/unifiededitor/src/msgunieditorattachment.cpp Tue Aug 31 15:11:31 2010 +0300 @@ -0,0 +1,274 @@ +/* + * Copyright (c) 2009 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: + * + */ + +// INCLUDES +#include "debugtraces.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// USER INCLUDES +#include "msgcontactsutil.h" +#include "msgunieditorattachment.h" +#include "UniEditorGenUtils.h" +#include +#include "msgunieditorutils.h" + +// Constants +#define BYTES_TO_KBYTES_FACTOR 1024 +#define BG_FRAME "qtg_fr_groupbox" + +//Localized Constants for item specific menu +#define LOC_OPEN hbTrId("txt_common_menu_open") +#define LOC_REMOVE hbTrId("txt_common_menu_remove") +#define LOC_DETAILS hbTrId("txt_common_menu_details") + +const QString LIST_ITEM_BG_FRAME_NORMAL ("qtg_fr_list_normal"); +const QString LIST_ITEM_BG_FRAME_PRESSED("qtg_fr_list_pressed"); + +const QString ATTACHMENT_ICON("qtg_small_attachment"); + +MsgUnifiedEditorAttachment::MsgUnifiedEditorAttachment( const QString& attachmentpath, + const int filesize, + QGraphicsItem *parent ) : +HbWidget(parent), +mPath(attachmentpath), +mSize(filesize), +mAttachmentIcon(0), +mAttachmentName(0), +mMaxSmsSize(KFirstNormalSmsLength), +mEditorUtils(0) +{ + this->grabGesture(Qt::TapGesture); + setProperty("state", "normal"); + + //back ground + mBackGround = new HbFrameItem(this); + mBackGround->frameDrawer().setFrameGraphicsName(LIST_ITEM_BG_FRAME_NORMAL); + mBackGround->frameDrawer().setFrameType(HbFrameDrawer::NinePieces); + this->setBackgroundItem(mBackGround); + + mAttachmentIcon = new HbIconItem(ATTACHMENT_ICON, this); + HbStyle::setItemName(mAttachmentIcon,"attachmentIcon"); + + int at_size = 0; + TMsgMediaType mediaType = EMsgMediaUnknown; + + + UniEditorGenUtils* genUtils = q_check_ptr(new UniEditorGenUtils); + + TRAP_IGNORE(genUtils->getFileInfoL(mPath,at_size, + mMimeType,mediaType)); + TRAP_IGNORE(mMaxSmsSize = genUtils->MaxSmsMsgSizeL()); + delete genUtils; + QFileInfo fileinfo(attachmentpath); + QString filename = fileinfo.fileName(); + mAttachmentName = new HbTextItem(filename,this); + HbStyle::setItemName(mAttachmentName,"attachmentName"); + mAttachmentName->setElideMode(Qt::ElideRight); + + // for sms, pure size should be shown + // for mms, additional mimeheader size must be included + qreal displaySize = mSize; + if(!isMultimediaContent()) + { + displaySize = fileinfo.size(); + } + int sizeInKb = displaySize/BYTES_TO_KBYTES_FACTOR; + QString fileDetails; + // if size exceeds 1kb, then show kb or else only bytes + if(sizeInKb >= 1) + { + fileDetails = QString().append(QString("(%1 Kb)").arg(sizeInKb)); + } + else + { + fileDetails = QString().append(QString("(%1 B)").arg(displaySize)); + } + + mAttachmentDetails = new HbTextItem(fileDetails, this); + HbStyle::setItemName(mAttachmentDetails,"attachmentDetails"); + mAttachmentDetails->setElideMode(Qt::ElideNone); + + HbEffect::add("attachmentWidget", "listviewitem_press", "pressed"); + HbEffect::add("attachmentWidget", "listviewitem_release", "released"); +} + +MsgUnifiedEditorAttachment::~MsgUnifiedEditorAttachment() +{ +} + +const QString& MsgUnifiedEditorAttachment::path() +{ + return mPath; +} + +qreal MsgUnifiedEditorAttachment::size() +{ + return mSize; +} + +const QString& MsgUnifiedEditorAttachment::mimeType() +{ + return mMimeType; +} + +void MsgUnifiedEditorAttachment::handleLongTap(QPointF position) +{ + HbMenu* menu = new HbMenu; + menu->addAction(LOC_OPEN, this, SLOT(handleOpen())); + menu->addAction(LOC_REMOVE, this, SLOT(handleRemove())); + menu->addAction(LOC_DETAILS, this, SLOT(viewDetails())); + menu->setDismissPolicy(HbPopup::TapAnywhere); + menu->setAttribute(Qt::WA_DeleteOnClose, true); + menu->setPreferredPos(position); + menu->show(); +} + +void MsgUnifiedEditorAttachment::handleRemove() +{ + emit deleteMe(this); +} + +void MsgUnifiedEditorAttachment::handleOpen() +{ + this->ungrabGesture(Qt::TapGesture); + + //open corresponding viewer app + + if (!mEditorUtils) + { + mEditorUtils = new MsgUnifiedEditorUtils(this); + } + mEditorUtils->launchContentViewer(mMimeType, mPath); + + //fire timer to regrab gesture after some delay. + QTimer::singleShot(300,this,SLOT(regrabGesture())); +} + +void MsgUnifiedEditorAttachment::viewDetails() +{ + //open details view. +} + +bool MsgUnifiedEditorAttachment::isMultimediaContent() +{ + bool ret = true; + QString vcard = XQConversions::s60Desc8ToQString(KMsgMimeVCard()); + QString vcal = XQConversions::s60Desc8ToQString(KMsgMimeVCal()); + QString ical = XQConversions::s60Desc8ToQString(KMsgMimeICal()); + if( !QString::compare(mMimeType, vcard, Qt::CaseInsensitive) || + !QString::compare(mMimeType, vcal, Qt::CaseInsensitive) || + !QString::compare(mMimeType, ical, Qt::CaseInsensitive) ) + { + QFileInfo fileinfo(mPath); + int fSize = fileinfo.size(); + + // if filesize is within sms size-limit, then + // it is not mm content, else it is mm attachment + if(fSize <= mMaxSmsSize) + { + ret = false; + } + } + return ret; +} + +void MsgUnifiedEditorAttachment::gestureEvent(QGestureEvent *event) +{ + HbTapGesture *tapGesture = qobject_cast (event->gesture(Qt::TapGesture)); + if (tapGesture) { + switch (tapGesture->state()) { + case Qt::GestureStarted: + { + // Trigger haptic feedback. + HbInstantFeedback::play(HbFeedback::Basic); + setPressed(true); + break; + } + case Qt::GestureUpdated: + { + if (HbTapGesture::TapAndHold == tapGesture->tapStyleHint()) { + // Handle longtap. + setPressed(false); + handleLongTap(tapGesture->scenePosition()); + } + break; + } + case Qt::GestureFinished: + { + HbInstantFeedback::play(HbFeedback::Basic); + if (HbTapGesture::Tap == tapGesture->tapStyleHint()) { + // Handle short tap. + setPressed(false); + handleShortTap(); + } + break; + } + case Qt::GestureCanceled: + { + HbInstantFeedback::play(HbFeedback::Basic); + setPressed(false); + break; + } + } + } + else { + HbWidget::gestureEvent(event); + } +} + +void MsgUnifiedEditorAttachment::handleShortTap() +{ + handleOpen(); +} + +void MsgUnifiedEditorAttachment::setPressed(bool pressed) +{ + if (pressed) + { + setProperty("state", "pressed"); + mBackGround->frameDrawer().setFrameGraphicsName(LIST_ITEM_BG_FRAME_PRESSED); + HbEffect::cancel(mBackGround, "released"); + HbEffect::start(mBackGround, "attachmentWidget", "pressed"); + + } + else + { + setProperty("state", "normal"); + mBackGround->frameDrawer().setFrameGraphicsName(LIST_ITEM_BG_FRAME_NORMAL); + HbEffect::cancel(mBackGround, "pressed"); + HbEffect::start(mBackGround, "attachmentWidget", "released"); + } +} + +void MsgUnifiedEditorAttachment::regrabGesture() +{ + this->grabGesture(Qt::TapGesture); +} +// EOF