messagingapp/msgui/msgapp/src/msglistviewitem.cpp
changeset 52 12db4185673b
parent 44 36f374c67aa8
child 70 a15d9966050f
equal deleted inserted replaced
44:36f374c67aa8 52:12db4185673b
    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>
    28 #include <QCoreApplication>
       
    29 #include <QStringBuilder>
    29 #include <HbEvent>
    30 #include <HbEvent>
       
    31 #include <HbInstance>
       
    32 #include <HbExtendedLocale>
    30 
    33 
    31 #include "msgcommondefines.h"
    34 #include "msgcommondefines.h"
    32 #include "conversationsengine.h"
    35 #include "conversationsengine.h"
    33 #include "conversationsenginedefines.h"
    36 #include "conversationsenginedefines.h"
    34 #include "msgutils.h"
    37 #include "msgutils.h"
    36 #include "debugtraces.h"
    39 #include "debugtraces.h"
    37 
    40 
    38 #define LOC_RINGING_TONE hbTrId("txt_messaging_dpopinfo_ringing_tone")
    41 #define LOC_RINGING_TONE hbTrId("txt_messaging_dpopinfo_ringing_tone")
    39 #define LOC_MSG_SEND_FAILED hbTrId("txt_messaging_list_message_sending_failed")
    42 #define LOC_MSG_SEND_FAILED hbTrId("txt_messaging_list_message_sending_failed")
    40 #define LOC_MSG_OUTGOING hbTrId("txt_messaging_list_outgoing_message")
    43 #define LOC_MSG_OUTGOING hbTrId("txt_messaging_list_outgoing_message")
    41 #define LOC_MSG_RESEND_AT hbTrId("Resend at ")
    44 #define LOC_MSG_RESEND_AT hbTrId("txt_messaging_list_listview_resend_at_time")
    42 #define LOC_BUSINESS_CARD hbTrId("txt_messaging_list_business_card")
    45 #define LOC_BUSINESS_CARD hbTrId("txt_messaging_list_business_card")
    43 #define LOC_CALENDAR_EVENT hbTrId("txt_messaging_list_calendar_event")
    46 #define LOC_CALENDAR_EVENT hbTrId("txt_messaging_list_calendar_event")
    44 #define LOC_UNSUPPORTED_MSG_TYPE hbTrId("txt_messaging_list_unsupported_message_type")
    47 #define LOC_UNSUPPORTED_MSG_TYPE hbTrId("txt_messaging_list_unsupported_message_type")
    45 #define LOC_RECEIVED_FILES hbTrId("txt_messaging_list_received_files")
    48 #define LOC_RECEIVED_FILES hbTrId("txt_messaging_list_received_files")
       
    49 #define LOC_MULTIMEDIA_MSG hbTrId("txt_messaging_list_multimedia_message")
    46 
    50 
    47 const QString NEW_ITEM_FRAME("qtg_fr_list_new_item");
    51 const QString NEW_ITEM_FRAME("qtg_fr_list_new_item");
    48 const QString BT_ICON("qtg_large_bluetooth");
    52 const QString BT_ICON("qtg_large_bluetooth");
    49 const QString MSG_OUTGOING_ICON("qtg_mono_outbox");
    53 const QString MSG_OUTGOING_ICON("qtg_mono_outbox");
    50 const QString MSG_FAILED_ICON("qtg_mono_failed");
    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;
    51 
    59 
    52 //---------------------------------------------------------------
    60 //---------------------------------------------------------------
    53 // MsgListViewItem::MsgListViewItem
    61 // MsgListViewItem::MsgListViewItem
    54 // Constructor
    62 // Constructor
    55 //---------------------------------------------------------------
    63 //---------------------------------------------------------------
    59     mNewMsgIndicatorItem(NULL),
    67     mNewMsgIndicatorItem(NULL),
    60     mAddressLabelItem(NULL),
    68     mAddressLabelItem(NULL),
    61     mTimestampItem(NULL),
    69     mTimestampItem(NULL),
    62     mPreviewLabelItem(NULL),
    70     mPreviewLabelItem(NULL),
    63     mUnreadCountItem(NULL),
    71     mUnreadCountItem(NULL),
    64     mPresenceIndicatorItem(NULL)
    72     mMsgCommonIndicatorItem(NULL)
    65 {
    73 {
    66 }
    74 }
    67 
    75 
    68 //---------------------------------------------------------------
    76 //---------------------------------------------------------------
    69 // HbAbstractViewItem::createItem
    77 // HbAbstractViewItem::createItem
    97         QString contactAddress = modelIndex().data(ConversationAddress).toString();
   105         QString contactAddress = modelIndex().data(ConversationAddress).toString();
    98         contactName.append(displayName);
   106         contactName.append(displayName);
    99     }
   107     }
   100     mAddressLabelItem->setText(contactName);
   108     mAddressLabelItem->setText(contactName);
   101 
   109 
   102     // Unread message count
       
   103     int unreadCount = modelIndex().data(UnreadCount).toInt();
       
   104 
       
   105     if (unreadCount > 0)
       
   106     {
       
   107         QString unRead(tr("(%n)", "", unreadCount));
       
   108         mUnreadCountItem->setText(unRead);
       
   109         if(!mUnReadMsg)
       
   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         }       
       
   117     }
       
   118     else
       
   119     {
       
   120         mUnreadCountItem->setText(QString());        
       
   121         if(mUnReadMsg)
       
   122         {
       
   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         }
       
   129     }
       
   130 
       
   131     HbListViewItem::updateChildItems();
   110     HbListViewItem::updateChildItems();
   132 }
   111 }
   133 
   112 
   134 //---------------------------------------------------------------
   113 //---------------------------------------------------------------
   135 // MsgListViewItem::initItems
   114 // MsgListViewItem::initItems
   149         mPreviewLabelItem = new HbTextItem(this);
   128         mPreviewLabelItem = new HbTextItem(this);
   150         mPreviewLabelItem->setTextWrapping(Hb::TextWordWrap);
   129         mPreviewLabelItem->setTextWrapping(Hb::TextWordWrap);
   151         HbStyle::setItemName(mPreviewLabelItem, "previewLabel");
   130         HbStyle::setItemName(mPreviewLabelItem, "previewLabel");
   152     }
   131     }
   153     if (!mUnreadCountItem) {
   132     if (!mUnreadCountItem) {
   154         mUnreadCountItem = new HbTextItem(this);
   133        mUnreadCountItem = new HbTextItem(this);
   155         HbStyle::setItemName(mUnreadCountItem, "unreadCount");
   134        HbStyle::setItemName(mUnreadCountItem, "unreadCount");
   156     }
   135     }
   157     if (!mNewMsgIndicatorItem) {
   136     if (!mNewMsgIndicatorItem) {
   158         mNewMsgIndicatorItem = new HbFrameItem(this);
   137         mNewMsgIndicatorItem = new HbFrameItem(this);
   159         HbStyle::setItemName(mNewMsgIndicatorItem, "newMsgIndicator");
   138         HbStyle::setItemName(mNewMsgIndicatorItem, "newMsgIndicator");
   160 
   139 
   161         mNewMsgIndicatorItem->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesVertical);
   140         mNewMsgIndicatorItem->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesVertical);
   162     }
   141     }
   163     if (!mPresenceIndicatorItem) {
   142     if (!mMsgCommonIndicatorItem) {
   164         mPresenceIndicatorItem = new HbIconItem(this);
   143         mMsgCommonIndicatorItem = new HbIconItem(this);
   165         HbStyle::setItemName(mPresenceIndicatorItem, "presenceIndicator");
   144         HbStyle::setItemName(mMsgCommonIndicatorItem, "msgCommonIndicator");
   166     }
   145     }
   167 }
   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 
   168 //---------------------------------------------------------------
   155 //---------------------------------------------------------------
   169 // MsgListViewItem::defaultPreviewText
   156 // MsgListViewItem::defaultPreviewText
   170 // @see header
   157 // @see header
   171 //---------------------------------------------------------------
   158 //---------------------------------------------------------------
   172 QString MsgListViewItem::defaultPreviewText(int msgType, int msgSubType)
   159 QString MsgListViewItem::defaultPreviewText(int msgType, int msgSubType)
   191             previewText = bodyText;
   178             previewText = bodyText;
   192         }
   179         }
   193         else {
   180         else {
   194             previewText = LOC_UNSUPPORTED_MSG_TYPE;
   181             previewText = LOC_UNSUPPORTED_MSG_TYPE;
   195         }
   182         }
   196 
       
   197         mPresenceIndicatorItem->setVisible(false);
       
   198     }
   183     }
   199     else if (msgType == ConvergedMessage::BT) {
   184     else if (msgType == ConvergedMessage::BT) {
   200 
   185 
   201         if (msgSubType == ConvergedMessage::VCard) {
   186         if (msgSubType == ConvergedMessage::VCard) {
   202             previewText = LOC_BUSINESS_CARD;
   187             previewText = LOC_BUSINESS_CARD;
   204             previewText.append(bodyText);
   189             previewText.append(bodyText);
   205         }
   190         }
   206         else {
   191         else {
   207             previewText = bodyText;
   192             previewText = bodyText;
   208         }
   193         }
   209 
   194         
   210         mPresenceIndicatorItem->setIconName(BT_ICON);
   195         setCommonIndicator(BT_ICON);
   211         mPresenceIndicatorItem->setVisible(true);
       
   212     }
   196     }
   213     else {
   197     else {
   214         // All message types except BIO & BT.
   198         // All message types except BIO & BT.
   215         previewText = modelIndex().data(BodyText).toString();
   199         previewText = modelIndex().data(BodyText).toString();
   216         mPresenceIndicatorItem->setVisible(false);
   200         if (previewText.isEmpty() && ConvergedMessage::Mms == msgType) {
       
   201             previewText = LOC_MULTIMEDIA_MSG;
       
   202         }
   217     }
   203     }
   218     return previewText;
   204     return previewText;
   219 }
   205 }
   220 
   206 
   221 
   207 
   226 void MsgListViewItem::setTimestampAndPreviewText()
   212 void MsgListViewItem::setTimestampAndPreviewText()
   227 {
   213 {
   228     // Get timestamp
   214     // Get timestamp
   229     QDateTime dateTime;
   215     QDateTime dateTime;
   230     dateTime.setTime_t(modelIndex().data(TimeStamp).toUInt());
   216     dateTime.setTime_t(modelIndex().data(TimeStamp).toUInt());
   231     QString dateString;
   217 
       
   218     HbExtendedLocale locale = HbExtendedLocale::system();
       
   219     QString dateTimeString;
   232     if (dateTime.date() == QDateTime::currentDateTime().date()) {
   220     if (dateTime.date() == QDateTime::currentDateTime().date()) {
   233         dateString = MsgUtils::dateTimeToString(dateTime, TIME_FORMAT);
   221         dateTimeString = locale.format(dateTime.time(), TIME_FORMAT);
   234     }
   222     }
   235     else {
   223     else {
   236         dateString = MsgUtils::dateTimeToString(dateTime, DATE_FORMAT);
   224         dateTimeString = locale.format(dateTime.date(), DATE_FORMAT);
   237     }
   225     }
   238 
   226 
   239     // Set preview text & time based on direction
   227     // Set preview text & time based on direction
   240     int msgType = modelIndex().data(MessageType).toInt();
   228     int msgType = modelIndex().data(MessageType).toInt();
   241     int msgSubType = modelIndex().data(MessageSubType).toInt();
   229     int msgSubType = modelIndex().data(MessageSubType).toInt();
   242     int sendState = modelIndex().data(SendingState).toInt();
   230     int sendState = modelIndex().data(SendingState).toInt();
   243     int msgDirection = modelIndex().data(Direction).toInt();
   231     int msgDirection = modelIndex().data(Direction).toInt();
   244     QString previewText;
   232     QString previewText;
   245     if (ConvergedMessage::Incoming == msgDirection) {
   233     if (ConvergedMessage::Incoming == msgDirection) {
   246         previewText = defaultPreviewText(msgType, msgSubType);
   234         if( ConvergedMessage::BT != msgType)            
       
   235             {
       
   236             setUnreadCountStatus();
       
   237             }
       
   238         previewText = defaultPreviewText(msgType, msgSubType);        
   247     }
   239     }
   248     else if (msgDirection == ConvergedMessage::Outgoing) {
   240     else if (msgDirection == ConvergedMessage::Outgoing) {
   249 
   241         
       
   242         setUnreadCountStatus();
       
   243         
   250         switch (sendState) {
   244         switch (sendState) {
   251         case ConvergedMessage::Resend:
   245         case ConvergedMessage::Resend:
   252         {
   246         {
   253             previewText = LOC_MSG_RESEND_AT + dateString;
   247             previewText = LOC_MSG_RESEND_AT + dateTimeString;
   254             dateString = QString();
   248             dateTimeString = QString();            
   255             mPresenceIndicatorItem->setIconName(MSG_OUTGOING_ICON);
   249             setCommonIndicator(MSG_OUTGOING_ICON);
   256             mPresenceIndicatorItem->setVisible(true);
       
   257             break;
   250             break;
   258         }
   251         }
   259         case ConvergedMessage::Sending:
   252         case ConvergedMessage::Sending:
   260         case ConvergedMessage::Suspended:
   253         case ConvergedMessage::Suspended:
   261         case ConvergedMessage::Scheduled:
   254         case ConvergedMessage::Scheduled:
   262         case ConvergedMessage::Waiting:
   255         case ConvergedMessage::Waiting:
   263         {
   256         {
   264             previewText = QString(LOC_MSG_OUTGOING);
   257             previewText = QString(LOC_MSG_OUTGOING);            
   265             mPresenceIndicatorItem->setIconName(MSG_OUTGOING_ICON);
   258             setCommonIndicator(MSG_OUTGOING_ICON);
   266             mPresenceIndicatorItem->setVisible(true);
       
   267             break;
   259             break;
   268         }
   260         }
   269         case ConvergedMessage::Failed:
   261         case ConvergedMessage::Failed:
   270         {
   262         {
   271             previewText = QString(LOC_MSG_SEND_FAILED);
   263             previewText = QString(LOC_MSG_SEND_FAILED);
   272             mPresenceIndicatorItem->setIconName(MSG_FAILED_ICON);
   264             setCommonIndicator(MSG_FAILED_ICON);
   273             mPresenceIndicatorItem->setVisible(true);
       
   274             break;
   265             break;
   275         }
   266         }
   276         default:
   267         default:
   277         {
   268         {
   278             // Successful case
   269         // Successful case
       
   270         if( ConvergedMessage::BT != msgType)
       
   271             {
       
   272             setUnreadCountStatus();
       
   273             }
       
   274             
   279             previewText = defaultPreviewText(msgType, msgSubType);
   275             previewText = defaultPreviewText(msgType, msgSubType);
   280             break;
   276             break;
   281         }
   277         }
   282         }
   278         }
   283     }
   279     }
   284     previewText.replace(QChar::ParagraphSeparator, QChar::LineSeparator);
   280     previewText.replace(QChar::ParagraphSeparator, QChar::LineSeparator);
   285     previewText.replace('\r', QChar::LineSeparator);
   281     previewText.replace('\r', QChar::LineSeparator);
   286     mPreviewLabelItem->setText(previewText);
   282     mPreviewLabelItem->setText(previewText);
   287     mTimestampItem->setText(dateString);
   283     mTimestampItem->setText(dateTimeString);
   288 }
   284 }
   289 
   285 
   290 //---------------------------------------------------------------
   286 //---------------------------------------------------------------
   291 // MsgListViewItem::paint.
   287 // MsgListViewItem::paint.
   292 // @see header
   288 // @see header
   315 bool MsgListViewItem::hasUnReadMsg()
   311 bool MsgListViewItem::hasUnReadMsg()
   316 {
   312 {
   317     return mUnReadMsg;
   313     return mUnReadMsg;
   318 }
   314 }
   319 
   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 
   320 //EOF
   380 //EOF