messagingapp/msgui/conversationview/src/msgconversationviewitem.cpp
changeset 25 84d9eb65b26f
parent 23 238255e8b033
child 27 e4592d119491
child 37 518b245aa84c
--- a/messagingapp/msgui/conversationview/src/msgconversationviewitem.cpp	Fri Apr 16 14:56:15 2010 +0300
+++ b/messagingapp/msgui/conversationview/src/msgconversationviewitem.cpp	Mon May 03 12:29:07 2010 +0300
@@ -21,8 +21,11 @@
 #include <QDateTime>
 #include "debugtraces.h"
 #include <QDir>
+#include <QChar>
 #include <HbTextItem>
 #include <HbIconItem>
+#include <HbIconAnimationManager>
+#include <HbIconAnimator>
 
 // USER INCLUDES
 #include "msgconversationwidget.h"
@@ -32,13 +35,18 @@
 #include "conversationsenginedefines.h"
 
 // LOCAL CONSTANTS
+const QString MSG_OUTBOX_ICON("qtg_small_outbox");
+const QString MSG_FAIL_ICON("qtg_small_fail");
+const QString ANIMATION_FILE(":/qtg_anim_loading.axml");
+const QString ANIMATION_ICON_NAME("qtg_anim_loading");
+const QString VCARD_ICON("qtg_large_mycard");
 
-const QString MSG_FAIL_ICON(":/icons/qtg_small_fail.png");
-
+// LOCALIZATION
 #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")
+#define LOC_CALENDAR_EVENT hbTrId("txt_messaging_list_calendar_event")
+#define LOC_UNSUPPORTED_MSG_TYPE hbTrId("txt_messaging_list_listview_unsupported_message_type")
+#define LOC_RESEND_AT hbTrId("Resend at ")
 
 //---------------------------------------------------------------
 // MsgConversationViewItem::MsgConversationViewItem
@@ -86,15 +94,32 @@
             << index.data(ConvergedMsgId).toInt();
 #endif
 
+    // Create items common to each type of message
+
+    QString bodyText = index.data(BodyText).toString();
+    int messageType = index.data(MessageType).toInt();
+    int messageSubType = index.data(MessageSubType).toInt();
+
     // Set message properties common to SMS/MMS/IM etc..
 
     int direction = index.data(Direction).toInt();
 
-    if ( (direction == ConvergedMessage::Incoming) ||
-            (direction == ConvergedMessage::Missed))
+    if ( direction == ConvergedMessage::Incoming)
     {
         setIncoming(true);
         mConversation->setIncoming(true);
+        
+        if(messageType == ConvergedMessage::MmsNotification)
+        {
+            mConversation->setMMSNotification(true);
+            int notificationState = index.data(NotificationStatus).toInt();
+            mConversation->setNotificationState(notificationState);
+            setNotificationStateIcon(notificationState);
+        }
+        else
+        {
+            mMessageStateIconItem->setVisible(false);
+        }
     }
     else if (direction == ConvergedMessage::Outgoing)
     {
@@ -114,39 +139,35 @@
 
     QDateTime dateTime;
     dateTime.setTime_t(index.data(TimeStamp).toUInt());
+    QString resendStateNote((index.data(SendingState).toInt() == ConvergedMessage::Resend)? LOC_RESEND_AT : "");
     if (dateTime.date() == QDateTime::currentDateTime().date())
     {
-        mConversation->setTimeStamp(dateTime.toString(TIME_FORMAT));
+
+        mConversation->setTimeStamp(resendStateNote + dateTime.toString(TIME_FORMAT));
     }
     else
     {
-        mConversation->setTimeStamp(dateTime.toString(DATE_FORMAT));
+        mConversation->setTimeStamp(resendStateNote + 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);
+        bodyText.replace(QChar::ParagraphSeparator, QChar::LineSeparator);
+        bodyText.replace('\r', QChar::LineSeparator);
         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;
+            & ConvergedMessage::Attachment) ? true : false;
 
         if (hasAttachments)
         {
@@ -192,37 +213,64 @@
         int priority = index.data(MessagePriority).toInt();
         mConversation->setPriority(priority);
         mConversation->setSubject(subject);
-        mConversation->setBodyText(bodyText);
-
+        mConversation->setBodyText(bodyText);        
     } // END of ConvergedMessage::Mms
-    else if (messageType == ConvergedMessage::RingingTone)
+    else if (messageType == ConvergedMessage::BioMsg)
     {
-        QDEBUG_WRITE("MsgConversationViewItem::updateChildItems Ringing Tone block")
-        mConversation->setMMS(true);
-        mConversation->setImage(false);
-        mConversation->setAudio(true);
-        mConversation->displayAudioIcon();
-        mConversation->setSubject(LOC_RINGING_TONE); 
+        if (messageSubType == ConvergedMessage::RingingTone)
+        {
+            mConversation->setMMS(true);
+            mConversation->setImage(false);
+            mConversation->setAudio(true);
+            mConversation->displayAudioIcon();
+            mConversation->setSubject(LOC_RINGING_TONE);
+        }
+        else if (messageSubType == ConvergedMessage::VCard)
+        {
+            mConversation->setMMS(true);
+            mConversation->setImage(false);
+            mConversation->setAudio(true);
+            mConversation->displayAudioIcon(VCARD_ICON);
+            mConversation->setSubject(LOC_BUSINESS_CARD);
+            mConversation->setBodyText(bodyText);
+        }
+        else
+        {
+            mConversation->setMMS(false);
+            mConversation->setBodyText(LOC_UNSUPPORTED_MSG_TYPE);
+        }
     }
-	/// for all the biotype messages
-    else if (messageType == ConvergedMessage::VCard)  
+    else if (messageType == ConvergedMessage::BT)
     {
-        mConversation->setMMS(false);
-        mConversation->setBodyText(LOC_BUSINESS_CARD);
+        mConversation->setMMS(true);
+        QString deviceName = index.data(ConversationAddress).toString();
+        mConversation->setSubject(deviceName);
+        QString blueToothBody;
+        if (messageSubType == ConvergedMessage::VCard)
+        {
+            mConversation->setImage(false);
+            mConversation->setAudio(true);
+            mConversation->displayAudioIcon(VCARD_ICON);
+            blueToothBody.append(LOC_BUSINESS_CARD);
+            blueToothBody.append(QChar::LineSeparator);
+            blueToothBody.append(bodyText);
+        }        
+        else
+        {
+            blueToothBody.append(bodyText);
+        }
+        mConversation->setBodyText(blueToothBody);
     }
-	/// for all the biotype messages
-    else if (messageType == ConvergedMessage::VCal)  
+    else if(messageType == ConvergedMessage::MmsNotification)
     {
-        mConversation->setMMS(false);
-        mConversation->setBodyText(LOC_CALENDER_EVENT);
+        mConversation->setMMS(true);
+        
+        QString subject = index.data(Subject).toString();
+        int priority = index.data(MessagePriority).toInt();
+        mConversation->setPriority(priority);
+        mConversation->setSubject(subject);
+        mConversation->setBodyText(bodyText);
     }
-	/// 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: "
@@ -261,34 +309,104 @@
 }
 
 //---------------------------------------------------------------
-// MsgConversationViewItem::setIncoming
+// MsgConversationViewItem::setMessageStateIcon
 // @see header file
 //---------------------------------------------------------------
 void MsgConversationViewItem::setMessageStateIcon(int messageState)
 {
+    HbIconAnimator& iconAnimator = mMessageStateIconItem->animator();
+    HbIconAnimationManager* iconAnimationManager = HbIconAnimationManager::global();
     switch (messageState)
     {
+
+        case ConvergedMessage::Waiting:
+        case ConvergedMessage::Scheduled:
+        case ConvergedMessage::Sending:
+        { 
+ 	        bool defined = iconAnimationManager->addDefinitionFile(ANIMATION_FILE);
+     	    HbIcon animIcon;
+            animIcon.setIconName(ANIMATION_ICON_NAME);
+            QSizeF size = mMessageStateIconItem->size();
+            mMessageStateIconItem->setIcon(animIcon);
+            mMessageStateIconItem->setVisible(true);
+            iconAnimator.startAnimation();
+            repolish();
+            break;
+        }     
         case ConvergedMessage::Suspended:
+        {
+           iconAnimator.stopAnimation();
+           mMessageStateIconItem->setIcon(MSG_OUTBOX_ICON);
+           mMessageStateIconItem->setVisible(true);
+           break;
+        
+        }
         case ConvergedMessage::Resend:
         {
-            //TODO: Temp icon until official icons are received
-            mMessageStateIconItem->setIcon(MSG_FAIL_ICON);
+            iconAnimator.stopAnimation();
+            mMessageStateIconItem->setIcon(MSG_OUTBOX_ICON);
             mMessageStateIconItem->setVisible(true);
             break;
         }
         case ConvergedMessage::Failed:
         {
-            //TODO: Temp icon until official icons are received
+            iconAnimator.stopAnimation();
             mMessageStateIconItem->setIcon(MSG_FAIL_ICON);
             mMessageStateIconItem->setVisible(true);
             break;
-        }        
+        }   
+        case ConvergedMessage::Unknown:
         default:
         {
+            iconAnimator.stopAnimation();
             mMessageStateIconItem->setVisible(false);
             break;
         }
     }
 }
 
+//---------------------------------------------------------------
+// MsgConversationViewItem::setNotificationStateIcon
+// @see header file
+//---------------------------------------------------------------
+
+void MsgConversationViewItem::setNotificationStateIcon(int notificationState)
+{
+    HbIconAnimator& iconAnimator = mMessageStateIconItem->animator();
+    HbIconAnimationManager* iconAnimationManager = HbIconAnimationManager::global();
+    switch (notificationState)
+    {
+
+        case ConvergedMessage::NotifRetrieving:
+        case ConvergedMessage::NotifWaiting:
+        { 
+            //TODO: Temp icon until official icons are received
+            bool defined = iconAnimationManager->addDefinitionFile(ANIMATION_FILE);
+            HbIcon animIcon;
+            animIcon.setIconName(ANIMATION_ICON_NAME);
+            QSizeF size = mMessageStateIconItem->size();
+            mMessageStateIconItem->setIcon(animIcon);
+            mMessageStateIconItem->setVisible(true);
+            iconAnimator.startAnimation();
+            repolish();
+            break;
+        }     
+        default:
+        {
+            iconAnimator.stopAnimation();
+            mMessageStateIconItem->setVisible(false);
+            break;
+        }
+    }
+}
+
+//---------------------------------------------------------------
+// MsgConversationViewItem::pressStateChanged
+// @see header file
+//---------------------------------------------------------------
+void MsgConversationViewItem::pressStateChanged (bool pressed, bool animate)
+{
+    mConversation->pressStateChanged(pressed, animate);
+}
+
 // EOF