messagingapp/msgui/msgapp/src/msglistviewitem.cpp
branchRCL_3
changeset 57 ebe688cedc25
equal deleted inserted replaced
54:fa1df4b99609 57:ebe688cedc25
       
     1 /*
       
     2  * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3  * All rights reserved.
       
     4  * This component and the accompanying materials are made available
       
     5  * under the terms of "Eclipse Public License v1.0"
       
     6  * which accompanies this distribution, and is available
       
     7  * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8  *
       
     9  * Initial Contributors:
       
    10  * Nokia Corporation - initial contribution.
       
    11  *
       
    12  * Contributors:
       
    13  *
       
    14  * Description:  Item decorator of the message list view.
       
    15  *
       
    16  */
       
    17 
       
    18 // SYSTEM INCLUDES
       
    19 #include "msglistviewitem.h"
       
    20 
       
    21 #include <QDateTime>
       
    22 #include <QFileInfo>
       
    23 #include <hbframeitem.h>
       
    24 #include <hbframedrawer.h>
       
    25 #include <HbTextItem>
       
    26 #include <HbFrameItem>
       
    27 #include <HbIconItem>
       
    28 #include <QCoreApplication>
       
    29 #include <QStringBuilder>
       
    30 #include <HbEvent>
       
    31 #include <HbInstance>
       
    32 #include <HbExtendedLocale>
       
    33 
       
    34 #include "msgcommondefines.h"
       
    35 #include "conversationsengine.h"
       
    36 #include "conversationsenginedefines.h"
       
    37 #include "msgutils.h"
       
    38 #include "convergedmessage.h"
       
    39 #include "debugtraces.h"
       
    40 
       
    41 #define LOC_RINGING_TONE hbTrId("txt_messaging_dpopinfo_ringing_tone")
       
    42 #define LOC_MSG_SEND_FAILED hbTrId("txt_messaging_list_message_sending_failed")
       
    43 #define LOC_MSG_OUTGOING hbTrId("txt_messaging_list_outgoing_message")
       
    44 #define LOC_MSG_RESEND_AT hbTrId("txt_messaging_list_listview_resend_at_time")
       
    45 #define LOC_BUSINESS_CARD hbTrId("txt_messaging_list_business_card")
       
    46 #define LOC_CALENDAR_EVENT hbTrId("txt_messaging_list_calendar_event")
       
    47 #define LOC_UNSUPPORTED_MSG_TYPE hbTrId("txt_messaging_list_unsupported_message_type")
       
    48 #define LOC_RECEIVED_FILES hbTrId("txt_messaging_list_received_files")
       
    49 #define LOC_MULTIMEDIA_MSG hbTrId("txt_messaging_list_multimedia_message")
       
    50 
       
    51 const QString NEW_ITEM_FRAME("qtg_fr_list_new_item");
       
    52 const QString BT_ICON("qtg_large_bluetooth");
       
    53 const QString MSG_OUTGOING_ICON("qtg_mono_outbox");
       
    54 const QString MSG_FAILED_ICON("qtg_mono_failed");
       
    55 
       
    56 // @see hbi18ndef.h
       
    57 static const char DATE_FORMAT[] = r_qtn_date_short_with_zero;
       
    58 static const char TIME_FORMAT[] = r_qtn_time_usual_with_zero;
       
    59 
       
    60 //---------------------------------------------------------------
       
    61 // MsgListViewItem::MsgListViewItem
       
    62 // Constructor
       
    63 //---------------------------------------------------------------
       
    64 MsgListViewItem::MsgListViewItem(QGraphicsItem* parent) :
       
    65     HbListViewItem(parent),
       
    66     mUnReadMsg(false),
       
    67     mNewMsgIndicatorItem(NULL),
       
    68     mAddressLabelItem(NULL),
       
    69     mTimestampItem(NULL),
       
    70     mPreviewLabelItem(NULL),
       
    71     mUnreadCountItem(NULL),
       
    72     mMsgCommonIndicatorItem(NULL)
       
    73 {
       
    74 }
       
    75 
       
    76 //---------------------------------------------------------------
       
    77 // HbAbstractViewItem::createItem
       
    78 // @see header
       
    79 //---------------------------------------------------------------
       
    80 HbAbstractViewItem* MsgListViewItem::createItem()
       
    81 {
       
    82     return new MsgListViewItem(*this);
       
    83 }
       
    84 
       
    85 //---------------------------------------------------------------
       
    86 // MsgListViewItem::updateChildItems
       
    87 // @see header
       
    88 //---------------------------------------------------------------
       
    89 void MsgListViewItem::updateChildItems()
       
    90 {
       
    91     initItems();
       
    92 
       
    93     setTimestampAndPreviewText();
       
    94 
       
    95     // Address label
       
    96     QString contactName;
       
    97     int messageType = modelIndex().data(MessageType).toInt();
       
    98     if(messageType == ConvergedMessage::BT)
       
    99     {
       
   100         contactName = LOC_RECEIVED_FILES;
       
   101     }
       
   102     else
       
   103     {
       
   104         QString displayName = modelIndex().data(DisplayName).toString();
       
   105         QString contactAddress = modelIndex().data(ConversationAddress).toString();
       
   106         contactName.append(displayName);
       
   107     }
       
   108     mAddressLabelItem->setText(contactName);
       
   109 
       
   110     HbListViewItem::updateChildItems();
       
   111 }
       
   112 
       
   113 //---------------------------------------------------------------
       
   114 // MsgListViewItem::initItems
       
   115 // @see header
       
   116 //---------------------------------------------------------------
       
   117 void MsgListViewItem::initItems()
       
   118 {
       
   119     if (!mAddressLabelItem) {
       
   120         mAddressLabelItem = new HbTextItem(this);
       
   121         HbStyle::setItemName(mAddressLabelItem, "addressLabel");
       
   122     }
       
   123     if (!mTimestampItem) {
       
   124         mTimestampItem = new HbTextItem(this);
       
   125         HbStyle::setItemName(mTimestampItem, "timeLabel");
       
   126     }
       
   127     if (!mPreviewLabelItem) {
       
   128         mPreviewLabelItem = new HbTextItem(this);
       
   129         mPreviewLabelItem->setTextWrapping(Hb::TextWordWrap);
       
   130         HbStyle::setItemName(mPreviewLabelItem, "previewLabel");
       
   131     }
       
   132     if (!mUnreadCountItem) {
       
   133        mUnreadCountItem = new HbTextItem(this);
       
   134        HbStyle::setItemName(mUnreadCountItem, "unreadCount");
       
   135     }
       
   136     if (!mNewMsgIndicatorItem) {
       
   137         mNewMsgIndicatorItem = new HbFrameItem(this);
       
   138         HbStyle::setItemName(mNewMsgIndicatorItem, "newMsgIndicator");
       
   139 
       
   140         mNewMsgIndicatorItem->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesVertical);
       
   141     }
       
   142     if (!mMsgCommonIndicatorItem) {
       
   143         mMsgCommonIndicatorItem = new HbIconItem(this);
       
   144         HbStyle::setItemName(mMsgCommonIndicatorItem, "msgCommonIndicator");
       
   145     }
       
   146     mUnreadCountItem->hide();
       
   147     mMsgCommonIndicatorItem->hide();
       
   148     
       
   149     HbMainWindow *mainWindow = hbInstance->allMainWindows()[0];
       
   150     
       
   151     connect(mainWindow, SIGNAL(orientationChanged(Qt::Orientation)), this,
       
   152         SLOT(orientationchanged(Qt::Orientation)), Qt::UniqueConnection);
       
   153 }
       
   154 
       
   155 //---------------------------------------------------------------
       
   156 // MsgListViewItem::defaultPreviewText
       
   157 // @see header
       
   158 //---------------------------------------------------------------
       
   159 QString MsgListViewItem::defaultPreviewText(int msgType, int msgSubType)
       
   160 {
       
   161     QString bodyText(modelIndex().data(BodyText).toString());
       
   162     QString previewText;
       
   163     // Set the message text & icons, depending upon the message type
       
   164     if (msgType == ConvergedMessage::BioMsg) {
       
   165 
       
   166         if (msgSubType == ConvergedMessage::RingingTone) {
       
   167             previewText = LOC_RINGING_TONE;
       
   168         }
       
   169         else if (msgSubType == ConvergedMessage::VCard) {
       
   170             previewText = LOC_BUSINESS_CARD;
       
   171             previewText.append(QChar::LineSeparator);
       
   172             previewText.append(bodyText);
       
   173         }
       
   174         else if (msgSubType == ConvergedMessage::Provisioning) {
       
   175             previewText = bodyText;
       
   176         }
       
   177         else if (msgSubType == ConvergedMessage::NokiaService) {
       
   178             previewText = bodyText;
       
   179         }
       
   180         else {
       
   181             previewText = LOC_UNSUPPORTED_MSG_TYPE;
       
   182         }
       
   183     }
       
   184     else if (msgType == ConvergedMessage::BT) {
       
   185 
       
   186         if (msgSubType == ConvergedMessage::VCard) {
       
   187             previewText = LOC_BUSINESS_CARD;
       
   188             previewText.append(QChar::LineSeparator);
       
   189             previewText.append(bodyText);
       
   190         }
       
   191         else {
       
   192             previewText = bodyText;
       
   193         }
       
   194         
       
   195         setCommonIndicator(BT_ICON);
       
   196     }
       
   197     else {
       
   198         // All message types except BIO & BT.
       
   199         previewText = modelIndex().data(BodyText).toString();
       
   200         if (previewText.isEmpty() && ConvergedMessage::Mms == msgType) {
       
   201             previewText = LOC_MULTIMEDIA_MSG;
       
   202         }
       
   203     }
       
   204     return previewText;
       
   205 }
       
   206 
       
   207 
       
   208 //---------------------------------------------------------------
       
   209 // MsgListViewItem::setTimestampAndPreviewText
       
   210 // @see header
       
   211 //---------------------------------------------------------------
       
   212 void MsgListViewItem::setTimestampAndPreviewText()
       
   213 {
       
   214     // Get timestamp
       
   215     QDateTime dateTime;
       
   216     dateTime.setTime_t(modelIndex().data(TimeStamp).toUInt());
       
   217 
       
   218     HbExtendedLocale locale = HbExtendedLocale::system();
       
   219     QString dateTimeString;
       
   220     if (dateTime.date() == QDateTime::currentDateTime().date()) {
       
   221         dateTimeString = locale.format(dateTime.time(), TIME_FORMAT);
       
   222     }
       
   223     else {
       
   224         dateTimeString = locale.format(dateTime.date(), DATE_FORMAT);
       
   225     }
       
   226 
       
   227     // Set preview text & time based on direction
       
   228     int msgType = modelIndex().data(MessageType).toInt();
       
   229     int msgSubType = modelIndex().data(MessageSubType).toInt();
       
   230     int sendState = modelIndex().data(SendingState).toInt();
       
   231     int msgDirection = modelIndex().data(Direction).toInt();
       
   232     QString previewText;
       
   233     if (ConvergedMessage::Incoming == msgDirection) {
       
   234         if( ConvergedMessage::BT != msgType)            
       
   235             {
       
   236             setUnreadCountStatus();
       
   237             }
       
   238         previewText = defaultPreviewText(msgType, msgSubType);        
       
   239     }
       
   240     else if (msgDirection == ConvergedMessage::Outgoing) {
       
   241         
       
   242         setUnreadCountStatus();
       
   243         
       
   244         switch (sendState) {
       
   245         case ConvergedMessage::Resend:
       
   246         {
       
   247             previewText = LOC_MSG_RESEND_AT + dateTimeString;
       
   248             dateTimeString = QString();            
       
   249             setCommonIndicator(MSG_OUTGOING_ICON);
       
   250             break;
       
   251         }
       
   252         case ConvergedMessage::Sending:
       
   253         case ConvergedMessage::Suspended:
       
   254         case ConvergedMessage::Scheduled:
       
   255         case ConvergedMessage::Waiting:
       
   256         {
       
   257             previewText = QString(LOC_MSG_OUTGOING);            
       
   258             setCommonIndicator(MSG_OUTGOING_ICON);
       
   259             break;
       
   260         }
       
   261         case ConvergedMessage::Failed:
       
   262         {
       
   263             previewText = QString(LOC_MSG_SEND_FAILED);
       
   264             setCommonIndicator(MSG_FAILED_ICON);
       
   265             break;
       
   266         }
       
   267         default:
       
   268         {
       
   269         // Successful case
       
   270         if( ConvergedMessage::BT != msgType)
       
   271             {
       
   272             setUnreadCountStatus();
       
   273             }
       
   274             
       
   275             previewText = defaultPreviewText(msgType, msgSubType);
       
   276             break;
       
   277         }
       
   278         }
       
   279     }
       
   280     previewText.replace(QChar::ParagraphSeparator, QChar::LineSeparator);
       
   281     previewText.replace('\r', QChar::LineSeparator);
       
   282     mPreviewLabelItem->setText(previewText);
       
   283     mTimestampItem->setText(dateTimeString);
       
   284 }
       
   285 
       
   286 //---------------------------------------------------------------
       
   287 // MsgListViewItem::paint.
       
   288 // @see header
       
   289 //---------------------------------------------------------------
       
   290 /*void MsgListViewItem::paint(QPainter *painter,
       
   291  const QStyleOptionGraphicsItem *option,
       
   292  QWidget *widget)
       
   293  {
       
   294 
       
   295  }
       
   296  */
       
   297 
       
   298 //---------------------------------------------------------------
       
   299 // MsgListViewItem::setWidgetContent
       
   300 // @see header file
       
   301 //---------------------------------------------------------------
       
   302 void MsgListViewItem::setHasUnReadMsg(bool unread)
       
   303 {
       
   304     mUnReadMsg = unread;
       
   305 }
       
   306 
       
   307 //---------------------------------------------------------------
       
   308 // MsgListViewItem::setWidgetContent
       
   309 // @see header file
       
   310 //---------------------------------------------------------------
       
   311 bool MsgListViewItem::hasUnReadMsg()
       
   312 {
       
   313     return mUnReadMsg;
       
   314 }
       
   315 
       
   316 //---------------------------------------------------------------
       
   317 // MsgListViewItem::setUnreadCountStatus
       
   318 // @see header file
       
   319 //---------------------------------------------------------------
       
   320 void MsgListViewItem::setUnreadCountStatus()
       
   321     {
       
   322     // Unread message count
       
   323     int unreadCount = modelIndex().data(UnreadCount).toInt();
       
   324 
       
   325     if (unreadCount > 0)
       
   326         {
       
   327         QString unRead(tr("(%n)", "", unreadCount));
       
   328       
       
   329         mMsgCommonIndicatorItem->hide();
       
   330         mUnreadCountItem->setText(unRead);
       
   331         mUnreadCountItem->show();
       
   332                 
       
   333         if (!mUnReadMsg)
       
   334             {
       
   335             mUnReadMsg = true;
       
   336             mNewMsgIndicatorItem->frameDrawer().setFrameGraphicsName(
       
   337                     NEW_ITEM_FRAME);
       
   338             repolish();
       
   339             // Needed for colour group changes to be visible
       
   340             QCoreApplication::postEvent(this, new HbEvent(
       
   341                     HbEvent::ThemeChanged));
       
   342             }
       
   343         }
       
   344     else
       
   345         {
       
   346         if (mUnReadMsg)
       
   347             {
       
   348             mUnReadMsg = false;
       
   349             mNewMsgIndicatorItem->frameDrawer().setFrameGraphicsName(
       
   350                     QString());
       
   351             repolish();
       
   352             // Needed for colour group changes to be visible
       
   353             QCoreApplication::postEvent(this, new HbEvent(
       
   354                     HbEvent::ThemeChanged));
       
   355             }
       
   356         }
       
   357     }
       
   358 
       
   359 //---------------------------------------------------------------
       
   360 // MsgListViewItem::setCommonIndicator
       
   361 // @see header file
       
   362 //---------------------------------------------------------------
       
   363 void MsgListViewItem::setCommonIndicator(const QString& string)
       
   364     {
       
   365         mUnreadCountItem->hide();
       
   366         mMsgCommonIndicatorItem->setIconName(string);
       
   367         mMsgCommonIndicatorItem->show();
       
   368     }
       
   369 
       
   370 //---------------------------------------------------------------
       
   371 // MsgListViewItem::orientationchanged
       
   372 // @see header file
       
   373 //---------------------------------------------------------------
       
   374 void MsgListViewItem::orientationchanged(Qt::Orientation orientation)
       
   375 {
       
   376     Q_UNUSED(orientation)
       
   377     repolish();
       
   378 }
       
   379 
       
   380 //EOF