messagingapp/msgui/conversationview/src/msgconversationviewitem.cpp
changeset 23 238255e8b033
child 25 84d9eb65b26f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/conversationview/src/msgconversationviewitem.cpp	Fri Apr 16 14:56:15 2010 +0300
@@ -0,0 +1,294 @@
+/*
+ * 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:
+ *
+ */
+
+#include "msgconversationviewitem.h"
+
+// SYSTEM INCLUDES
+#include <QDateTime>
+#include "debugtraces.h"
+#include <QDir>
+#include <HbTextItem>
+#include <HbIconItem>
+
+// USER INCLUDES
+#include "msgconversationwidget.h"
+#include "msgviewdefines.h"
+#include "msgviewutils.h"
+#include "convergedmessage.h"
+#include "conversationsenginedefines.h"
+
+// LOCAL CONSTANTS
+
+const QString MSG_FAIL_ICON(":/icons/qtg_small_fail.png");
+
+#define LOC_RINGING_TONE hbTrId("txt_messaging_dpopinfo_ringing_tone")
+#define LOC_BUSINESS_CARD hbTrId("txt_messaging_list_business_card")
+#define LOC_CALENDER_EVENT hbTrId("txt_messaging_list_calendar_event")
+#define LOC_UNSUPPORTED_MESSAGE hbTrId("txt_messaging_list_listview_unsupported_message_type")
+
+//---------------------------------------------------------------
+// MsgConversationViewItem::MsgConversationViewItem
+// Constructor
+//---------------------------------------------------------------
+MsgConversationViewItem::MsgConversationViewItem(QGraphicsItem* parent) :
+    HbListViewItem(parent), mIncoming(false), mConversation(0),
+            mMessageStateIconItem(0)
+{
+    mConversation = new MsgConversationWidget(this);
+    HbStyle::setItemName(mConversation, "msgconvwidget");
+
+    mMessageStateIconItem = new HbIconItem(this);
+    HbStyle::setItemName(mMessageStateIconItem, "msgStateIcon");
+}
+
+//---------------------------------------------------------------
+// MsgConversationViewItem::MsgConversationViewItem
+// Destructor
+//---------------------------------------------------------------
+MsgConversationViewItem::~MsgConversationViewItem()
+{
+
+}
+
+//---------------------------------------------------------------
+// MsgConversationViewItem::createItem
+// Create a new decorator item.
+//---------------------------------------------------------------
+MsgConversationViewItem* MsgConversationViewItem::createItem()
+{
+    return new MsgConversationViewItem();
+}
+
+//---------------------------------------------------------------
+// MsgConversationViewItem::updateChildItems
+//
+//---------------------------------------------------------------
+void MsgConversationViewItem::updateChildItems()
+{
+    QModelIndex index = modelIndex();
+
+#ifdef _DEBUG_TRACES_
+    qCritical() << "START MsgConversationViewItem::updateChildItems: "
+            << index.data(ConvergedMsgId).toInt();
+#endif
+
+    // Set message properties common to SMS/MMS/IM etc..
+
+    int direction = index.data(Direction).toInt();
+
+    if ( (direction == ConvergedMessage::Incoming) ||
+            (direction == ConvergedMessage::Missed))
+    {
+        setIncoming(true);
+        mConversation->setIncoming(true);
+    }
+    else if (direction == ConvergedMessage::Outgoing)
+    {
+        setIncoming(false);
+        mConversation->setIncoming(false);
+
+        int sendingState = index.data(SendingState).toInt();
+        mConversation->setSendingState(sendingState);
+        setMessageStateIcon(sendingState);
+    }
+
+    bool unreadStatus = index.data(UnReadStatus).toBool();
+    mConversation->setUnread(unreadStatus);
+    // Create items common to SMS/MMS/IM etc...
+    mConversation->drawBubbleFrame();
+    mConversation->drawNewItemFrame();
+
+    QDateTime dateTime;
+    dateTime.setTime_t(index.data(TimeStamp).toUInt());
+    if (dateTime.date() == QDateTime::currentDateTime().date())
+    {
+        mConversation->setTimeStamp(dateTime.toString(TIME_FORMAT));
+    }
+    else
+    {
+        mConversation->setTimeStamp(dateTime.toString(DATE_FORMAT));
+    }
+
+    // Create items common to each type of message
+
+    QString bodyText = index.data(BodyText).toString();
+    int messageType = index.data(MessageType).toInt();
+
+    QDEBUG_WRITE_FORMAT("MsgConversationViewItem::updateChildItems msg type value",messageType)
+    
+    if (messageType == ConvergedMessage::Sms ||
+            messageType == ConvergedMessage::IM)
+    {
+    QDEBUG_WRITE("MsgConversationViewItem::updateChildItems SMS block")
+        mConversation->setMMS(false);
+        mConversation->setBodyText(bodyText);
+    }
+    else if (messageType == ConvergedMessage::Mms)
+    {
+    QDEBUG_WRITE("MsgConversationViewItem::updateChildItems MMS block")
+    
+        mConversation->setMMS(true);
+        QString attachments = index.data(Attachments).toString();
+        QString subject = index.data(Subject).toString();
+
+        bool hasAttachments = (index.data(MessageProperty).toInt()
+                & ConvergedMessage::Attachment) ? true : false;
+
+        if (hasAttachments)
+        {
+            mConversation->setAttachment();
+        }
+        else
+        {
+            mConversation->setAttachment(false);
+        }
+        QStringList mediaFiles = attachments.split('|',
+            QString::SkipEmptyParts);
+        //Can be used for preview icon
+        QStringList imageFiles;
+
+        MsgViewUtils viewUtils;
+
+        for (int i = 0; i < mediaFiles.size(); ++i)
+        {
+            QString type = viewUtils.mimeTypeL(QDir::toNativeSeparators(
+                mediaFiles.at(i)));
+
+            if (type.contains("image"))
+            {
+                imageFiles << mediaFiles.at(i);
+                mConversation->setImage(true);
+            }
+            else if (type.contains("video"))
+            {
+                mConversation->setVideo(false);
+            }
+            else if (type.contains("audio"))
+            {
+                mConversation->setAudio(true);
+            }
+        }
+        // Now set the media contents
+        if (!imageFiles.isEmpty())
+        {
+            mConversation->setPreviewIconPath(imageFiles.at(0));
+        }
+        mConversation->displayAudioIcon();
+
+        int priority = index.data(MessagePriority).toInt();
+        mConversation->setPriority(priority);
+        mConversation->setSubject(subject);
+        mConversation->setBodyText(bodyText);
+
+    } // END of ConvergedMessage::Mms
+    else if (messageType == ConvergedMessage::RingingTone)
+    {
+        QDEBUG_WRITE("MsgConversationViewItem::updateChildItems Ringing Tone block")
+        mConversation->setMMS(true);
+        mConversation->setImage(false);
+        mConversation->setAudio(true);
+        mConversation->displayAudioIcon();
+        mConversation->setSubject(LOC_RINGING_TONE); 
+    }
+	/// for all the biotype messages
+    else if (messageType == ConvergedMessage::VCard)  
+    {
+        mConversation->setMMS(false);
+        mConversation->setBodyText(LOC_BUSINESS_CARD);
+    }
+	/// for all the biotype messages
+    else if (messageType == ConvergedMessage::VCal)  
+    {
+        mConversation->setMMS(false);
+        mConversation->setBodyText(LOC_CALENDER_EVENT);
+    }
+	/// for all the biotype messages
+    else if (messageType == ConvergedMessage::BioMsg)  
+    {
+        mConversation->setMMS(false);
+        mConversation->setBodyText(LOC_UNSUPPORTED_MESSAGE);
+    }
+   
+
+#ifdef _DEBUG_TRACES_
+    qCritical() << "END MsgConversationViewItem::updateChildItems: "
+            << index.data(ConvergedMsgId).toInt();
+#endif
+
+    HbListViewItem::updateChildItems();
+}
+
+//---------------------------------------------------------------
+// MsgConversationViewItem::containsPoint
+//
+//---------------------------------------------------------------
+bool MsgConversationViewItem::containsPoint(const QPointF& point)
+{
+    return mConversation->boundingRect().
+    contains(mConversation->mapFromScene(point));
+}
+
+//---------------------------------------------------------------
+// MsgConversationViewItem::setIncoming
+// @see header file
+//---------------------------------------------------------------
+void MsgConversationViewItem::setIncoming(bool incoming)
+{
+    mIncoming = incoming;
+}
+
+//---------------------------------------------------------------
+// MsgConversationViewItem::isIncoming
+// @see header file
+//---------------------------------------------------------------
+bool MsgConversationViewItem::isIncoming()
+{
+    return mIncoming;
+}
+
+//---------------------------------------------------------------
+// MsgConversationViewItem::setIncoming
+// @see header file
+//---------------------------------------------------------------
+void MsgConversationViewItem::setMessageStateIcon(int messageState)
+{
+    switch (messageState)
+    {
+        case ConvergedMessage::Suspended:
+        case ConvergedMessage::Resend:
+        {
+            //TODO: Temp icon until official icons are received
+            mMessageStateIconItem->setIcon(MSG_FAIL_ICON);
+            mMessageStateIconItem->setVisible(true);
+            break;
+        }
+        case ConvergedMessage::Failed:
+        {
+            //TODO: Temp icon until official icons are received
+            mMessageStateIconItem->setIcon(MSG_FAIL_ICON);
+            mMessageStateIconItem->setVisible(true);
+            break;
+        }        
+        default:
+        {
+            mMessageStateIconItem->setVisible(false);
+            break;
+        }
+    }
+}
+
+// EOF