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 } |