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