messagingapp/msgui/unifiededitor/src/msgunieditorattachment.cpp
changeset 31 ebfee66fde93
child 34 84197e66a4bd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/unifiededitor/src/msgunieditorattachment.cpp	Fri Jun 04 10:25:39 2010 +0100
@@ -0,0 +1,241 @@
+/*
+ * 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 <HbGestureSceneFilter>
+//#include <HbGesture>
+#include <QGraphicsSceneMouseEvent>
+#include <HbWidgetFeedback>
+
+// USER INCLUDES
+#include "msgunieditorattachment.h"
+#include "unieditorgenutils.h"
+#include "s60qconversions.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),
+//mGestureFilter(0),
+mMaxSmsSize(KFirstNormalSmsLength)
+{
+        //back ground
+        HbFrameItem* backGround = new HbFrameItem(this);
+        backGround->frameDrawer().setFrameGraphicsName(LIST_ITEM_BG_FRAME_NORMAL);
+        backGround->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
+        this->setBackgroundItem(backGround);        
+
+        mAttachmentIcon = new HbIconItem(ATTACHMENT_ICON, this);
+        HbStyle::setItemName(mAttachmentIcon,"attachmentIcon");
+
+        int at_size = 0;
+        TMsgMediaType mediaType = EMsgMediaUnknown;
+        UniEditorGenUtils* genUtils = 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);
+        
+        initGesture();
+}
+
+MsgUnifiedEditorAttachment::~MsgUnifiedEditorAttachment()
+{
+  /*  if(mGestureFilter)
+        {
+        removeSceneEventFilter(mGestureFilter);
+        }*/
+}
+
+const QString& MsgUnifiedEditorAttachment::path()
+{
+    return mPath;
+}
+
+qreal MsgUnifiedEditorAttachment::size()
+{
+    return mSize;
+}
+
+const QString& MsgUnifiedEditorAttachment::mimeType()
+{
+    return mMimeType;
+}
+
+void MsgUnifiedEditorAttachment::longPressed(QPointF position)
+{
+    HbMenu* menu = new HbMenu;
+    menu->addAction(LOC_OPEN, this, SLOT(openAttachment()));
+    menu->addAction(LOC_REMOVE, this, SLOT(removeAttachment()));
+    menu->addAction(LOC_DETAILS, this, SLOT(viewDetails()));
+    menu->setDismissPolicy(HbPopup::TapAnywhere);
+    menu->setAttribute(Qt::WA_DeleteOnClose, true);
+    menu->setPreferredPos(position);
+    menu->show();
+}
+
+void MsgUnifiedEditorAttachment::removeAttachment()
+{
+    emit deleteMe(this);
+}
+
+void MsgUnifiedEditorAttachment::openAttachment()
+{
+    //open corresponding viewer app.
+}
+
+void MsgUnifiedEditorAttachment::viewDetails()
+{
+    //open details view.
+}
+
+bool MsgUnifiedEditorAttachment::isMultimediaContent()
+{
+    bool ret = true;
+    QString vcard = S60QConversions::s60Desc8ToQString(KMsgMimeVCard());
+    QString vcal = S60QConversions::s60Desc8ToQString(KMsgMimeVCal());
+    QString ical = S60QConversions::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::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{    
+    HbWidgetFeedback::triggered(this, Hb::InstantPressed);
+    
+    HbFrameItem* backGround = new HbFrameItem(this);
+    backGround->frameDrawer().setFrameGraphicsName(LIST_ITEM_BG_FRAME_PRESSED);
+    backGround->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
+    this->setBackgroundItem(backGround); 
+    
+    event->accept();
+}
+
+void MsgUnifiedEditorAttachment::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+    HbFrameItem* backGround = new HbFrameItem(this);
+    backGround->frameDrawer().setFrameGraphicsName(LIST_ITEM_BG_FRAME_NORMAL);
+    backGround->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
+    this->setBackgroundItem(backGround);
+    
+    if(this->rect().contains(event->pos()))
+        {
+        HbWidgetFeedback::triggered(this, Hb::InstantClicked);
+        emit clicked();
+        }
+    
+    event->accept();    
+}
+
+void MsgUnifiedEditorAttachment::initGesture()
+{
+    // Create gesture filter
+ /*   mGestureFilter = new HbGestureSceneFilter( Qt::LeftButton, this );
+    
+    // Add gestures for longpress
+    HbGesture* gestureLongpressed = new HbGesture( HbGesture::longpress,5 );
+    
+    mGestureFilter->addGesture( gestureLongpressed );
+    
+    connect( gestureLongpressed, SIGNAL(longPress(QPointF)),
+             this, SLOT(longPressed(QPointF)) );
+
+    //install gesture filter.
+    this->installSceneEventFilter(mGestureFilter);*/
+}
+
+/*HbFeedback::InstantEffect MsgUnifiedEditorAttachment::overrideFeedback(Hb::InstantInteraction interaction) const
+        {
+        switch(interaction)
+            {
+            case Hb::InstantPressed:
+            case Hb::InstantClicked:
+                return HbFeedback::Basic;
+            default:
+                return HbFeedback::None;
+            }
+        }*/
+
+// EOF