messagingapp/msgui/unifiededitor/src/msgunieditorattachment.cpp
branchRCL_3
changeset 57 ebe688cedc25
--- /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 <HbTextItem>
+#include <HbIconItem>
+#include <QFileInfo>
+#include <QFont>
+#include <HbFrameDrawer>
+#include <HbMenu>
+#include <MsgMimeTypes.h>
+#include <HbFrameItem>
+#include <HbInstantFeedback>
+#include <HbTapGesture>
+#include <QGraphicsSceneMouseEvent>
+#include <HbWidgetFeedback>
+#include <HbEffect>
+#include <QTimer>
+
+// USER INCLUDES
+#include "msgcontactsutil.h"
+#include "msgunieditorattachment.h"
+#include "UniEditorGenUtils.h"
+#include <xqconversions.h>
+#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<HbTapGesture*> (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