emailuis/nmhswidget/src/nmhswidgetlistmodel.cpp
changeset 76 38bf5461e270
parent 68 83cc6bae1de8
equal deleted inserted replaced
74:6c59112cfd31 76:38bf5461e270
    64         qVariant = QVariant::fromValue(mailbox);
    64         qVariant = QVariant::fromValue(mailbox);
    65     }
    65     }
    66     return qVariant;
    66     return qVariant;
    67 }
    67 }
    68 
    68 
    69 /*!
       
    70     This refreshes the data of the model.
       
    71     NOTE: safe guard any call to this function with try-catch.
       
    72  */
       
    73 void NmHsWidgetListModel::refresh(
       
    74         QList<NmMessageEnvelope*> &envelopeList)
       
    75 {
       
    76     NM_FUNCTION;
       
    77     
       
    78     clear();
       
    79     foreach(NmMessageEnvelope *env, envelopeList){
       
    80        NmHsWidgetListModelItem *item = createMessageListModelItem(env);
       
    81        appendRow(item);
       
    82     }
       
    83 }
       
    84 
       
    85 
    69 
    86 /*!
    70 /*!
    87     Create mailbox item
    71     Create mailbox item
    88     \param mailbox
    72     \param mailbox
    89  */
    73  */
    95     NmHsWidgetListModelItem *item = new NmHsWidgetListModelItem();
    79     NmHsWidgetListModelItem *item = new NmHsWidgetListModelItem();
    96     item->setItemMetaData(newMeta);
    80     item->setItemMetaData(newMeta);
    97     item->setData(Hb::StandardItem, Hb::ItemTypeRole);
    81     item->setData(Hb::StandardItem, Hb::ItemTypeRole);
    98     return item;
    82     return item;
    99 }
    83 }
       
    84 
       
    85 
       
    86 /*!
       
    87     Function determines model index in which the new message should be inserted.
       
    88 */
       
    89 int NmHsWidgetListModel::getInsertionIndex(
       
    90     const NmMessageEnvelope &envelope) const
       
    91 {
       
    92     NM_FUNCTION;
       
    93    
       
    94    int ret(NmNotFoundError);
       
    95    
       
    96    // Date+descending sort mode based comparison.
       
    97    // Go through model and compare sent times with QDateTime >= comparison operation.
       
    98    QList<QStandardItem*> items = findItems("*", Qt::MatchWildcard | Qt::MatchRecursive);
       
    99    int count(items.count());
       
   100    bool found(false);
       
   101    int i(0);
       
   102    while (i < count && !found) {
       
   103        QModelIndex index = items[i]->index();
       
   104        NmHsWidgetListModelItem *item = static_cast<NmHsWidgetListModelItem*>(itemFromIndex(index));
       
   105        found = envelope.sentTime() >= item->itemMetaData()->sentTime();
       
   106        if (found) {
       
   107            ret = i;
       
   108        }
       
   109        i++;
       
   110     }
       
   111    if (0 == count) {
       
   112        ret = NmNoError;
       
   113    }
       
   114    items.clear();
       
   115    return ret;
       
   116 }
       
   117 
       
   118 
       
   119 /*!
       
   120     Inserts given messages into the model
       
   121 */
       
   122 void NmHsWidgetListModel::addMessages(const QList<NmMessageEnvelope*> &messageEnvs)
       
   123 {
       
   124     NM_FUNCTION;
       
   125     int orig_count = rowCount();
       
   126     foreach(NmMessageEnvelope* env, messageEnvs){
       
   127         int insertionIndex = getInsertionIndex(*env);
       
   128         NmHsWidgetListModelItem *newItem = createMessageListModelItem(env);
       
   129         insertRow(insertionIndex, newItem);
       
   130     }
       
   131 
       
   132     if( !messageEnvs.isEmpty() ){
       
   133         if (orig_count == 0){
       
   134             emit modelIsEmpty(false);
       
   135         }
       
   136         emit messagesAddedToModel(); //emit messages added to model 
       
   137     }
       
   138 }
       
   139 
       
   140 /*!
       
   141     This refreshes the data of the model.
       
   142     NOTE: safe guard any call to this function with try-catch.
       
   143  */
       
   144 void NmHsWidgetListModel::refresh(const QList<NmMessageEnvelope*> &envelopeList)
       
   145 {
       
   146     NM_FUNCTION;
       
   147     
       
   148     clear();
       
   149     foreach(NmMessageEnvelope *env, envelopeList){
       
   150        NmHsWidgetListModelItem *item = createMessageListModelItem(env);
       
   151        appendRow(item);
       
   152     }
       
   153     
       
   154     //As we refresh all data, emit signal in any case
       
   155     if( rowCount() == 0 ){
       
   156         emit modelIsEmpty(true);
       
   157     }else{
       
   158         emit modelIsEmpty(false);
       
   159     }
       
   160 }
       
   161 
       
   162 /*!
       
   163     Updates existing messages in model with given envelopes
       
   164 */
       
   165 void NmHsWidgetListModel::updateMessages(const QList<NmMessageEnvelope*> &messageEnvs)
       
   166 {
       
   167     NM_FUNCTION; 
       
   168     QList<QStandardItem*> modelItemList = findItems("*", Qt::MatchWildcard | Qt::MatchRecursive);
       
   169     foreach(NmMessageEnvelope *env, messageEnvs){
       
   170         foreach (QStandardItem *it, modelItemList){
       
   171             QModelIndex index = it->index();
       
   172             NmHsWidgetListModelItem *item = static_cast<NmHsWidgetListModelItem*>(itemFromIndex(index));
       
   173             if (env->messageId() == item->itemMetaData()->messageId()) {
       
   174                 item->setItemMetaData(env);
       
   175                 break;
       
   176             }
       
   177         }
       
   178     }
       
   179 }
       
   180 
       
   181 
       
   182 /*!
       
   183     Removes the given messages from the model
       
   184 */
       
   185 void NmHsWidgetListModel::removeMessages(const QList<NmId> &messageIds)
       
   186 {
       
   187     NM_FUNCTION; 
       
   188     foreach(NmId msgId, messageIds){
       
   189         //lets refresh the item list every time, so that it really is up to date after each iteration 
       
   190         //(and the count stays valid!)
       
   191         QList<QStandardItem*> modelItemList = findItems("*", Qt::MatchWildcard | Qt::MatchRecursive);
       
   192         foreach(QStandardItem *it, modelItemList){
       
   193             QModelIndex index = it->index();
       
   194             NmHsWidgetListModelItem *item = static_cast<NmHsWidgetListModelItem*>(itemFromIndex(index));
       
   195             if (msgId == item->itemMetaData()->messageId()) {
       
   196                 removeRow(index.row());
       
   197                 break;
       
   198             }
       
   199         }
       
   200     }
       
   201     
       
   202     //if model is empty after removing messages, signal it.
       
   203     if( rowCount() == 0 ){
       
   204         emit modelIsEmpty(true);  
       
   205     }
       
   206     
       
   207 }
       
   208 
       
   209 /*!
       
   210     Clears the model and emits modelIsEmpty signal
       
   211 */
       
   212 void  NmHsWidgetListModel::removeAllMessages()
       
   213 {
       
   214     clear();
       
   215     emit modelIsEmpty(true);
       
   216 }