messagingapp/msgui/msgapp/src/msglistviewitem.cpp
branchGCC_SURGE
changeset 47 5b14749788d7
parent 27 e4592d119491
parent 44 36f374c67aa8
equal deleted inserted replaced
35:a32b19fb291e 47:5b14749788d7
    23 #include <hbframeitem.h>
    23 #include <hbframeitem.h>
    24 #include <hbframedrawer.h>
    24 #include <hbframedrawer.h>
    25 #include <HbTextItem>
    25 #include <HbTextItem>
    26 #include <HbFrameItem>
    26 #include <HbFrameItem>
    27 #include <HbIconItem>
    27 #include <HbIconItem>
       
    28 #include <QCoreApplication>
       
    29 #include <HbEvent>
    28 
    30 
    29 #include "msgcommondefines.h"
    31 #include "msgcommondefines.h"
    30 #include "conversationsengine.h"
    32 #include "conversationsengine.h"
    31 #include "conversationsenginedefines.h"
    33 #include "conversationsenginedefines.h"
    32 #include "msgutils.h"
    34 #include "msgutils.h"
    76 // MsgListViewItem::updateChildItems
    78 // MsgListViewItem::updateChildItems
    77 // @see header
    79 // @see header
    78 //---------------------------------------------------------------
    80 //---------------------------------------------------------------
    79 void MsgListViewItem::updateChildItems()
    81 void MsgListViewItem::updateChildItems()
    80 {
    82 {
    81     if (!mAddressLabelItem)
    83     initItems();
    82     {
    84 
    83         mAddressLabelItem = new HbTextItem(this);
    85     setTimestampAndPreviewText();
    84         HbStyle::setItemName(mAddressLabelItem, "addressLabel");
       
    85     }
       
    86     if (!mTimestampItem)
       
    87     {
       
    88         mTimestampItem = new HbTextItem(this);
       
    89         HbStyle::setItemName(mTimestampItem, "timeLabel");
       
    90     }
       
    91     if (!mPreviewLabelItem)
       
    92     {
       
    93         mPreviewLabelItem = new HbTextItem(this);
       
    94         mPreviewLabelItem->setTextWrapping(Hb::TextWordWrap);
       
    95         HbStyle::setItemName(mPreviewLabelItem, "previewLabel");
       
    96     }
       
    97     if (!mUnreadCountItem)
       
    98     {
       
    99         mUnreadCountItem = new HbTextItem(this);
       
   100         HbStyle::setItemName(mUnreadCountItem, "unreadCount");
       
   101     }
       
   102     if (!mNewMsgIndicatorItem)
       
   103     {
       
   104         mNewMsgIndicatorItem = new HbFrameItem(this);
       
   105         HbStyle::setItemName(mNewMsgIndicatorItem, "newMsgIndicator");
       
   106 
       
   107         mNewMsgIndicatorItem->frameDrawer().setFrameType(
       
   108             HbFrameDrawer::ThreePiecesVertical);
       
   109     }
       
   110 
       
   111     // Set the message text depending upon the message type
       
   112     int messageType = modelIndex().data(MessageType).toInt();
       
   113     int messageSubType = modelIndex().data(MessageSubType).toInt();
       
   114     int messageState = modelIndex().data(SendingState).toInt();
       
   115     int messageDirection = modelIndex().data(Direction).toInt();
       
   116     QString prevText;
       
   117     prevText = previewText(messageType, messageSubType, messageState,messageDirection);
       
   118     prevText.replace(QChar::ParagraphSeparator, QChar::LineSeparator);
       
   119     prevText.replace('\r', QChar::LineSeparator);
       
   120     mPreviewLabelItem->setText(prevText);
       
   121 
    86 
   122     // Address label
    87     // Address label
   123     QString contactName;
    88     QString contactName;
       
    89     int messageType = modelIndex().data(MessageType).toInt();
   124     if(messageType == ConvergedMessage::BT)
    90     if(messageType == ConvergedMessage::BT)
   125     {
    91     {
   126         contactName = LOC_RECEIVED_FILES;
    92         contactName = LOC_RECEIVED_FILES;
   127     }
    93     }
   128     else
    94     else
   129     {
    95     {
   130         QString displayName = modelIndex().data(DisplayName).toString();
    96         QString displayName = modelIndex().data(DisplayName).toString();
   131         QString contactAddress = modelIndex().data(ConversationAddress).toString();
    97         QString contactAddress = modelIndex().data(ConversationAddress).toString();
   132 
    98         contactName.append(displayName);
   133         if (displayName.isEmpty())
       
   134         {
       
   135             contactName.append(contactAddress);
       
   136         }
       
   137         else
       
   138         {
       
   139             contactName.append(displayName);
       
   140         }        
       
   141     }
    99     }
   142     mAddressLabelItem->setText(contactName);
   100     mAddressLabelItem->setText(contactName);
   143 
   101 
   144     // Unread message count
   102     // Unread message count
   145     int unreadCount = modelIndex().data(UnreadCount).toInt();
   103     int unreadCount = modelIndex().data(UnreadCount).toInt();
   146 
   104 
   147     if (unreadCount > 0)
   105     if (unreadCount > 0)
   148     {
   106     {
   149         QString unRead(tr("(%n)", "", unreadCount));
   107         QString unRead(tr("(%n)", "", unreadCount));
   150         mUnreadCountItem->setText(unRead);
   108         mUnreadCountItem->setText(unRead);
   151         mUnReadMsg = true;
   109         if(!mUnReadMsg)
   152         mNewMsgIndicatorItem->frameDrawer().setFrameGraphicsName(NEW_ITEM_FRAME);
   110         {
       
   111             mUnReadMsg = true;
       
   112             mNewMsgIndicatorItem->frameDrawer().setFrameGraphicsName(NEW_ITEM_FRAME);
       
   113             repolish();
       
   114             // Needed for colour group changes to be visible
       
   115             QCoreApplication::postEvent(this, new HbEvent(HbEvent::ThemeChanged));  
       
   116         }       
   153     }
   117     }
   154     else
   118     else
   155     {
   119     {
   156         mUnreadCountItem->setText(QString());
   120         mUnreadCountItem->setText(QString());        
   157         mNewMsgIndicatorItem->frameDrawer().setFrameGraphicsName(QString());
   121         if(mUnReadMsg)
   158         mUnReadMsg = false;
   122         {
   159         repolish();
   123             mUnReadMsg = false;  
       
   124             mNewMsgIndicatorItem->frameDrawer().setFrameGraphicsName(QString());
       
   125             repolish();
       
   126             // Needed for colour group changes to be visible
       
   127             QCoreApplication::postEvent(this, new HbEvent(HbEvent::ThemeChanged));  
       
   128         }
   160     }
   129     }
   161 
   130 
   162     HbListViewItem::updateChildItems();
   131     HbListViewItem::updateChildItems();
   163 }
   132 }
   164 
   133 
   165 //---------------------------------------------------------------
   134 //---------------------------------------------------------------
   166 // MsgListViewItem::previewText
   135 // MsgListViewItem::initItems
   167 // @see header
   136 // @see header
   168 //---------------------------------------------------------------
   137 //---------------------------------------------------------------
   169 QString MsgListViewItem::previewText(int msgType, 
   138 void MsgListViewItem::initItems()
   170     int msgSubType, 
   139 {
   171     int msgState,
   140     if (!mAddressLabelItem) {
   172     int msgDirection)
   141         mAddressLabelItem = new HbTextItem(this);
       
   142         HbStyle::setItemName(mAddressLabelItem, "addressLabel");
       
   143     }
       
   144     if (!mTimestampItem) {
       
   145         mTimestampItem = new HbTextItem(this);
       
   146         HbStyle::setItemName(mTimestampItem, "timeLabel");
       
   147     }
       
   148     if (!mPreviewLabelItem) {
       
   149         mPreviewLabelItem = new HbTextItem(this);
       
   150         mPreviewLabelItem->setTextWrapping(Hb::TextWordWrap);
       
   151         HbStyle::setItemName(mPreviewLabelItem, "previewLabel");
       
   152     }
       
   153     if (!mUnreadCountItem) {
       
   154         mUnreadCountItem = new HbTextItem(this);
       
   155         HbStyle::setItemName(mUnreadCountItem, "unreadCount");
       
   156     }
       
   157     if (!mNewMsgIndicatorItem) {
       
   158         mNewMsgIndicatorItem = new HbFrameItem(this);
       
   159         HbStyle::setItemName(mNewMsgIndicatorItem, "newMsgIndicator");
       
   160 
       
   161         mNewMsgIndicatorItem->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesVertical);
       
   162     }
       
   163     if (!mPresenceIndicatorItem) {
       
   164         mPresenceIndicatorItem = new HbIconItem(this);
       
   165         HbStyle::setItemName(mPresenceIndicatorItem, "presenceIndicator");
       
   166     }
       
   167 }
       
   168 //---------------------------------------------------------------
       
   169 // MsgListViewItem::defaultPreviewText
       
   170 // @see header
       
   171 //---------------------------------------------------------------
       
   172 QString MsgListViewItem::defaultPreviewText(int msgType, int msgSubType)
   173 {
   173 {
   174     QString bodyText(modelIndex().data(BodyText).toString());
   174     QString bodyText(modelIndex().data(BodyText).toString());
   175     QString previewText;
   175     QString previewText;
   176     // Set the message text & icons, depending upon the message type
   176     // Set the message text & icons, depending upon the message type
   177     if (msgType == ConvergedMessage::BioMsg) {
   177     if (msgType == ConvergedMessage::BioMsg) {
       
   178 
   178         if (msgSubType == ConvergedMessage::RingingTone) {
   179         if (msgSubType == ConvergedMessage::RingingTone) {
   179             previewText = LOC_RINGING_TONE;
   180             previewText = LOC_RINGING_TONE;
   180         }
   181         }
   181         else if (msgSubType == ConvergedMessage::VCard) {
   182         else if (msgSubType == ConvergedMessage::VCard) {
   182             previewText = LOC_BUSINESS_CARD;
   183             previewText = LOC_BUSINESS_CARD;
   183             previewText.append(QChar::LineSeparator);
   184             previewText.append(QChar::LineSeparator);
   184             previewText.append(bodyText);
   185             previewText.append(bodyText);
   185         }
   186         }
   186         else if (msgSubType == ConvergedMessage::Provisioning) {
   187         else if (msgSubType == ConvergedMessage::Provisioning) {
   187                 previewText = bodyText;
   188             previewText = bodyText;
   188                 }
   189         }
       
   190         else if (msgSubType == ConvergedMessage::NokiaService) {
       
   191             previewText = bodyText;
       
   192         }
   189         else {
   193         else {
   190             previewText = LOC_UNSUPPORTED_MSG_TYPE;
   194             previewText = LOC_UNSUPPORTED_MSG_TYPE;
   191         }
   195         }
       
   196 
       
   197         mPresenceIndicatorItem->setVisible(false);
   192     }
   198     }
   193     else if (msgType == ConvergedMessage::BT) {
   199     else if (msgType == ConvergedMessage::BT) {
   194         
   200 
   195         if (msgSubType == ConvergedMessage::VCard) {
   201         if (msgSubType == ConvergedMessage::VCard) {
   196             previewText = LOC_BUSINESS_CARD;
   202             previewText = LOC_BUSINESS_CARD;
   197             previewText.append(QChar::LineSeparator);
   203             previewText.append(QChar::LineSeparator);
   198             previewText.append(bodyText);
   204             previewText.append(bodyText);
   199         }
   205         }
   200         else {
   206         else {
   201             previewText = bodyText;
   207             previewText = bodyText;
   202         }
   208         }
   203         if (!mPresenceIndicatorItem) {
   209 
   204             mPresenceIndicatorItem = new HbIconItem(this);
   210         mPresenceIndicatorItem->setIconName(BT_ICON);
   205             HbStyle::setItemName(mPresenceIndicatorItem, "presenceIndicator");
   211         mPresenceIndicatorItem->setVisible(true);
   206             mPresenceIndicatorItem->setIconName(BT_ICON);
       
   207         }
       
   208     }
   212     }
   209     else {
   213     else {
   210         previewText = textBySendState(msgState,msgDirection);
   214         // All message types except BIO & BT.
       
   215         previewText = modelIndex().data(BodyText).toString();
       
   216         mPresenceIndicatorItem->setVisible(false);
   211     }
   217     }
   212     return previewText;
   218     return previewText;
   213 }
   219 }
   214 
   220 
   215 
   221 
   216 //---------------------------------------------------------------
   222 //---------------------------------------------------------------
   217 // MsgListViewItem::textBySendState
   223 // MsgListViewItem::setTimestampAndPreviewText
   218 // @see header
   224 // @see header
   219 //---------------------------------------------------------------
   225 //---------------------------------------------------------------
   220 QString MsgListViewItem::textBySendState(int sendState,int msgDirection)
   226 void MsgListViewItem::setTimestampAndPreviewText()
   221 {
   227 {
   222     QString previewText;
   228     // Get timestamp
   223     QDateTime dateTime;
   229     QDateTime dateTime;
   224     dateTime.setTime_t(modelIndex().data(TimeStamp).toUInt());
   230     dateTime.setTime_t(modelIndex().data(TimeStamp).toUInt());
   225     QString dateString;
   231     QString dateString;
   226     if (dateTime.date() == QDateTime::currentDateTime().date()) {
   232     if (dateTime.date() == QDateTime::currentDateTime().date()) {
   227         dateString = MsgUtils::dateTimeToString(dateTime, TIME_FORMAT);
   233         dateString = MsgUtils::dateTimeToString(dateTime, TIME_FORMAT);
   228     }
   234     }
   229     else {
   235     else {
   230         dateString = MsgUtils::dateTimeToString(dateTime, DATE_FORMAT);
   236         dateString = MsgUtils::dateTimeToString(dateTime, DATE_FORMAT);
   231     }
   237     }
   232 
   238 
   233     if (msgDirection == ConvergedMessage::Outgoing)
   239     // Set preview text & time based on direction
   234     {
   240     int msgType = modelIndex().data(MessageType).toInt();
   235         switch (sendState)
   241     int msgSubType = modelIndex().data(MessageSubType).toInt();
   236         {
   242     int sendState = modelIndex().data(SendingState).toInt();
   237             case ConvergedMessage::Resend:
   243     int msgDirection = modelIndex().data(Direction).toInt();
   238             {
   244     QString previewText;
   239 
   245     if (ConvergedMessage::Incoming == msgDirection) {
   240                 QString resendString = LOC_MSG_RESEND_AT + dateString;
   246         previewText = defaultPreviewText(msgType, msgSubType);
   241                 previewText = resendString;
   247     }
   242                 dateString = QString("");
   248     else if (msgDirection == ConvergedMessage::Outgoing) {
   243                 if (!mPresenceIndicatorItem)
   249 
   244                 {
   250         switch (sendState) {
   245                     mPresenceIndicatorItem = new HbIconItem(this);
   251         case ConvergedMessage::Resend:
   246                 }
   252         {
   247                 HbStyle::setItemName(mPresenceIndicatorItem,
   253             previewText = LOC_MSG_RESEND_AT + dateString;
   248                     "presenceIndicator");
   254             dateString = QString();
   249                 mPresenceIndicatorItem->setIconName(MSG_OUTGOING_ICON);
   255             mPresenceIndicatorItem->setIconName(MSG_OUTGOING_ICON);
   250                 mPresenceIndicatorItem->setVisible(true);
   256             mPresenceIndicatorItem->setVisible(true);
   251                 break;
   257             break;
   252             }
   258         }
   253 
   259         case ConvergedMessage::Sending:
   254             case ConvergedMessage::Sending:
   260         case ConvergedMessage::Suspended:
   255             case ConvergedMessage::Suspended:
   261         case ConvergedMessage::Scheduled:
   256             case ConvergedMessage::Scheduled:
   262         case ConvergedMessage::Waiting:
   257             case ConvergedMessage::Waiting:
   263         {
   258             {
   264             previewText = QString(LOC_MSG_OUTGOING);
   259                 previewText = QString(LOC_MSG_OUTGOING);
   265             mPresenceIndicatorItem->setIconName(MSG_OUTGOING_ICON);
   260                 if (!mPresenceIndicatorItem)
   266             mPresenceIndicatorItem->setVisible(true);
   261                 {
   267             break;
   262                     mPresenceIndicatorItem = new HbIconItem(this);
   268         }
   263                 }
   269         case ConvergedMessage::Failed:
   264                 HbStyle::setItemName(mPresenceIndicatorItem,
   270         {
   265                     "presenceIndicator");
   271             previewText = QString(LOC_MSG_SEND_FAILED);
   266                 mPresenceIndicatorItem->setIconName(MSG_OUTGOING_ICON);
   272             mPresenceIndicatorItem->setIconName(MSG_FAILED_ICON);
   267                 mPresenceIndicatorItem->setVisible(true);
   273             mPresenceIndicatorItem->setVisible(true);
   268                 break;
   274             break;
   269             }
   275         }
   270             case ConvergedMessage::Failed:
   276         default:
   271             {
   277         {
   272                 previewText = QString(LOC_MSG_SEND_FAILED);
   278             // Successful case
   273                 if (!mPresenceIndicatorItem)
   279             previewText = defaultPreviewText(msgType, msgSubType);
   274                 {
   280             break;
   275                     mPresenceIndicatorItem = new HbIconItem(this);
   281         }
   276                 }
   282         }
   277                 HbStyle::setItemName(mPresenceIndicatorItem,
   283     }
   278                     "presenceIndicator");
   284     previewText.replace(QChar::ParagraphSeparator, QChar::LineSeparator);
   279                 mPresenceIndicatorItem->setIconName(MSG_FAILED_ICON);
   285     previewText.replace('\r', QChar::LineSeparator);
   280                 mPresenceIndicatorItem->setVisible(true);
   286     mPreviewLabelItem->setText(previewText);
   281                 break;
       
   282             }
       
   283             default:
       
   284                 QString postFix = QString("");
       
   285                 previewText = modelIndex().data(BodyText).toString();
       
   286                 previewText += (QChar(QChar::LineSeparator) + postFix);
       
   287 
       
   288                 if (!mPresenceIndicatorItem)
       
   289                 {
       
   290                     mPresenceIndicatorItem = new HbIconItem(this);
       
   291                 }
       
   292 
       
   293                 HbStyle::setItemName(mPresenceIndicatorItem,
       
   294                     "presenceIndicator");
       
   295                 mPresenceIndicatorItem->setIconName(MSG_FAILED_ICON);
       
   296                 mPresenceIndicatorItem->setVisible(false);
       
   297 
       
   298                 break;
       
   299         }
       
   300     }
       
   301     else
       
   302     {
       
   303         previewText = modelIndex().data(BodyText).toString();
       
   304     }
       
   305     mTimestampItem->setText(dateString);
   287     mTimestampItem->setText(dateString);
   306     return previewText;
       
   307 }
   288 }
   308 
   289 
   309 //---------------------------------------------------------------
   290 //---------------------------------------------------------------
   310 // MsgListViewItem::paint.
   291 // MsgListViewItem::paint.
   311 // @see header
   292 // @see header