diff -r 4697dfb2d7ad -r 238255e8b033 messagingapp/msgui/conversationview/src/msgconversationviewitem.cpp --- /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 +#include "debugtraces.h" +#include +#include +#include + +// 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