1 /* |
1 /* |
2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
2 * Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). |
3 * All rights reserved. |
3 * All rights reserved. |
4 * This component and the accompanying materials are made available |
4 * This component and the accompanying materials are made available |
5 * under the terms of "Eclipse Public License v1.0" |
5 * under the terms of "Eclipse Public License v1.0" |
6 * which accompanies this distribution, and is available |
6 * which accompanies this distribution, and is available |
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
8 * |
8 * |
9 * Initial Contributors: |
9 * Initial Contributors: |
10 * Nokia Corporation - initial contribution. |
10 * Nokia Corporation - initial contribution. |
11 * |
11 * |
12 * Contributors: |
12 * Contributors: |
13 * |
13 * |
14 * |
14 * Description: |
15 */ |
15 * |
|
16 */ |
16 |
17 |
17 #include "nmuiheaders.h" |
18 #include "nmuiheaders.h" |
18 |
19 |
19 /*! |
20 /*! |
20 \class NmMessageListViewItem |
21 \class NmMessageListViewItem |
21 \brief list view item for message list view |
22 \brief List view item for message list view. |
22 */ |
23 */ |
23 |
24 |
24 static const int NmFolderTypeRole = Qt::UserRole+1; |
25 static const int NmFolderTypeRole = Qt::UserRole+1; |
25 |
26 |
26 /*! |
27 /*! |
27 Constructor |
28 Constructor. |
28 */ |
29 */ |
29 NmMessageListViewItem::NmMessageListViewItem(QGraphicsItem *parent): |
30 NmMessageListViewItem::NmMessageListViewItem(QGraphicsItem *parent) |
30 HbTreeViewItem(parent), |
31 : HbTreeViewItem(parent), |
31 mSender(NULL), |
32 mSender(NULL), |
32 mSubject(NULL), |
33 mSubject(NULL), |
33 mTime(NULL), |
34 mTime(NULL), |
34 mDividerTitle(NULL), |
35 mDividerTitle(NULL), |
35 mNewMsgIcon(NULL), |
36 mNewMsgIcon(NULL), |
36 mIcon1(NULL), |
37 mIcon1(NULL), |
37 mIcon2(NULL), |
38 mIcon2(NULL), |
38 mPrimarySize(0), |
39 mPrimarySize(0), |
39 mSecondarySize(0), |
40 mSecondarySize(0) |
40 mTinySize(0) |
41 { |
41 { |
42 } |
42 NM_FUNCTION; |
43 |
43 } |
44 /*! |
44 |
45 Destructor. |
45 /*! |
46 */ |
46 Destruction. |
|
47 */ |
|
48 NmMessageListViewItem::~NmMessageListViewItem() |
47 NmMessageListViewItem::~NmMessageListViewItem() |
49 { |
48 { |
50 NM_FUNCTION; |
49 } |
51 } |
50 |
52 |
51 /*! |
53 /*! |
52 Create item. |
54 */ |
53 */ |
55 HbTreeViewItem *NmMessageListViewItem::createItem() |
54 HbTreeViewItem *NmMessageListViewItem::createItem() |
56 { |
55 { |
57 NM_FUNCTION; |
|
58 |
|
59 return new NmMessageListViewItem(*this); |
56 return new NmMessageListViewItem(*this); |
60 } |
57 } |
61 |
58 |
62 /*! |
59 /*! |
63 boolean value indicating model index availability. Always true since |
60 Boolean value indicating model index availability. Always true since |
64 this item prototype is used for both divider and message |
61 this item prototype is used for both divider and message. |
65 */ |
62 */ |
66 bool NmMessageListViewItem::canSetModelIndex(const QModelIndex &index) const |
63 bool NmMessageListViewItem::canSetModelIndex(const QModelIndex &index) const |
67 { |
64 { |
68 NM_FUNCTION; |
|
69 |
|
70 Q_UNUSED(index); |
65 Q_UNUSED(index); |
71 // This item class can handle all items in message list |
66 // This item class can handle all items in message list. |
72 return true; |
67 return true; |
73 } |
68 } |
74 |
69 |
75 /*! |
70 /*! |
76 update child items. List calls this function whenever item is needed |
71 Update child items. List calls this function whenever item is needed |
77 to be updated. |
72 to be updated. |
78 */ |
73 */ |
79 void NmMessageListViewItem::updateChildItems() |
74 void NmMessageListViewItem::updateChildItems() |
80 { |
75 { |
81 NM_FUNCTION; |
|
82 |
|
83 // Get model pointer |
76 // Get model pointer |
84 NmMessageListModelItem *msgModelItem = modelIndex().data( |
77 NmMessageListModelItem *msgModelItem = modelIndex().data( |
85 Qt::DisplayRole).value<NmMessageListModelItem*>(); |
78 Qt::DisplayRole).value<NmMessageListModelItem*>(); |
86 // Check whether item is message item or title divider |
79 // Check whether item is message item or title divider |
87 // and set the layout accordingly, dividers not currently used |
80 // and set the layout accordingly. Dividers are not currently used. |
88 if (msgModelItem && msgModelItem->itemType() == |
81 if (msgModelItem && msgModelItem->itemType() == |
89 NmMessageListModelItem::NmMessageItemMessage){ |
82 NmMessageListModelItem::NmMessageItemMessage){ |
90 NmMessageListModel *model = static_cast<NmMessageListModel*>(msgModelItem->model()); |
83 NmMessageListModel *model = static_cast<NmMessageListModel*>(msgModelItem->model()); |
91 if (model){ |
84 if (model){ |
92 // First set item layout |
85 // First set item layout. |
93 createMessageItemLayout(); |
86 createMessageItemLayout(); |
94 // Set content data to item after layout is created |
87 // Set content data to item after layout is created. |
95 setContentsToMessageItem(msgModelItem->envelope(), model->dividersActive()); |
88 setContentsToMessageItem(msgModelItem->envelope(), model->dividersActive()); |
96 } |
89 } |
97 } |
90 } |
98 HbTreeViewItem::updateChildItems(); |
91 HbTreeViewItem::updateChildItems(); |
99 } |
92 } |
100 |
93 |
101 /*! |
94 /*! |
102 Set item layout. |
95 Set item layout. |
103 Function does not take ownership of model or model item |
96 Function does not take ownership of model or model item. |
104 */ |
97 */ |
105 void NmMessageListViewItem::createMessageItemLayout() |
98 void NmMessageListViewItem::createMessageItemLayout() |
106 { |
99 { |
107 NM_FUNCTION; |
|
108 |
|
109 getFontSizes(); |
100 getFontSizes(); |
110 // Create sender label and set name from widgetml |
101 // Create sender label and set name from widgetml. |
111 if (!mSender){ |
102 if (!mSender) { |
112 mSender = new HbTextItem(this); |
103 mSender = new HbTextItem(this); |
113 HbStyle::setItemName(mSender, "sender"); |
104 HbStyle::setItemName(mSender, "sender"); |
114 mSender->setObjectName("ListViewItemMessageSender"); |
105 mSender->setObjectName("ListViewItemMessageSender"); |
115 mSender->setTextWrapping(Hb::TextNoWrap); |
106 } |
116 } |
107 // Create time label and set name from widgetml. |
117 // Create time label and set name from widgetml |
108 if (!mTime) { |
118 if (!mTime){ |
|
119 mTime = new HbTextItem(this); |
109 mTime = new HbTextItem(this); |
120 HbStyle::setItemName(mTime, "time"); |
110 HbStyle::setItemName(mTime, "time"); |
121 mTime->setObjectName("ListViewItemMessageTime"); |
111 mTime->setObjectName("ListViewItemMessageTime"); |
122 } |
112 } |
123 // Create subject label and set name from widgetml |
113 // Create subject label and set name from widgetml. |
124 if (!mSubject){ |
114 if (!mSubject) { |
125 mSubject = new HbTextItem(this); |
115 mSubject = new HbTextItem(this); |
126 HbStyle::setItemName(mSubject, "subject"); |
116 HbStyle::setItemName(mSubject, "subject"); |
127 mSubject->setObjectName("ListViewItemMessageSubject"); |
117 mSubject->setObjectName("ListViewItemMessageSubject"); |
128 mSubject->setTextWrapping(Hb::TextNoWrap); |
118 } |
129 } |
119 // Set new message icon. |
130 // Set new message icon |
|
131 if (!mNewMsgIcon) { |
120 if (!mNewMsgIcon) { |
132 mNewMsgIcon = new HbFrameItem(this); |
121 mNewMsgIcon = new HbFrameItem(this); |
133 } |
122 } |
134 // Create priority icon and set name from widgetml |
123 // Create priority icon and set name from widgetml. |
135 if (!mIcon1){ |
124 if (!mIcon1) { |
136 mIcon1 = new HbIconItem(this); |
125 mIcon1 = new HbIconItem(this); |
137 HbStyle::setItemName(mIcon1, "icon1"); |
126 HbStyle::setItemName(mIcon1, "icon1"); |
138 // According to layout guide, icon alignment is always right |
127 } |
139 mIcon1->setAlignment(Qt::AlignRight); |
128 // Create attachment icon and set name from widgetml. |
140 } |
129 if (!mIcon2) { |
141 // Create attachment icon and set name from widgetml |
|
142 if (!mIcon2){ |
|
143 mIcon2 = new HbIconItem(this); |
130 mIcon2 = new HbIconItem(this); |
144 HbStyle::setItemName(mIcon2, "icon2"); |
131 HbStyle::setItemName(mIcon2, "icon2"); |
145 // According to layout guide, icon alignment is always right |
|
146 mIcon2->setAlignment(Qt::AlignRight); |
|
147 } |
132 } |
148 setObjectName("ListViewItemMessage"); |
133 setObjectName("ListViewItemMessage"); |
149 } |
134 } |
150 |
135 |
151 /*! |
136 /*! |
152 set item text label contents, icons, etc. |
137 Set item text label contents, icons, etc. |
153 Function does not take ownership of model or model item |
138 Function does not take ownership of model or model item. |
154 */ |
139 */ |
155 void NmMessageListViewItem::setContentsToMessageItem(const NmMessageEnvelope &envelope, |
140 void NmMessageListViewItem::setContentsToMessageItem(const NmMessageEnvelope &envelope, |
156 bool dividersActive) |
141 bool dividersActive) |
157 { |
142 { |
158 NM_FUNCTION; |
143 // Member variables are created in previous function. |
159 |
144 // Sender. |
160 // member variables are created in previous function |
|
161 // sender |
|
162 mSender->setText(senderFieldText(envelope)); |
145 mSender->setText(senderFieldText(envelope)); |
163 // time |
146 // Time. |
164 HbExtendedLocale locale = HbExtendedLocale::system(); |
147 HbExtendedLocale locale = HbExtendedLocale::system(); |
165 QDateTime localTime = envelope.sentTime().addSecs(locale.universalTimeOffset()); |
148 QDateTime localTime = envelope.sentTime().addSecs(locale.universalTimeOffset()); |
166 QDate sentLocalDate = localTime.date(); |
149 QDate sentLocalDate = localTime.date(); |
167 QDate currentdate = QDate::currentDate(); |
150 QDate currentdate = QDate::currentDate(); |
168 if (dividersActive || sentLocalDate == currentdate) { |
151 if (dividersActive || sentLocalDate == currentdate) { |
199 break; |
182 break; |
200 case NmMessagePriorityNormal: |
183 case NmMessagePriorityNormal: |
201 default: |
184 default: |
202 break; |
185 break; |
203 } |
186 } |
204 // attachments |
187 // Attachments. |
205 HbIconItem *attaIcon = (priorityIs ? mIcon2 : mIcon1); |
188 HbIconItem *attaIcon = (priorityIs ? mIcon2 : mIcon1); |
206 if (envelope.hasAttachments()) { |
189 if (envelope.hasAttachments()) { |
207 HbIcon &icon = NmIcons::getIcon(NmIcons::NmIconAttachment); |
190 HbIcon &icon = NmIcons::getIcon(NmIcons::NmIconAttachment); |
208 attaIcon->setIcon(icon); |
191 attaIcon->setIcon(icon); |
209 attaIcon->setObjectName("ListViewItemMessageIconAttachment"); |
192 attaIcon->setObjectName("ListViewItemMessageIconAttachment"); |
210 attaIcon->show(); |
193 attaIcon->show(); |
211 } |
194 } |
212 // message read status |
195 // Message read status. |
213 bool msgReadStatus(envelope.isRead()); |
196 bool msgReadStatus(envelope.isRead()); |
214 HbFrameDrawer *drawer(NULL); |
197 HbFrameDrawer *drawer(NULL); |
215 HbStyle::setItemName(mNewMsgIcon, "msgicon"); |
198 HbStyle::setItemName(mNewMsgIcon, "msgicon"); |
216 if (!msgReadStatus) { |
199 if (!msgReadStatus) { |
217 |
|
218 setFontsUnread(); |
200 setFontsUnread(); |
219 mNewMsgIcon->setObjectName("ListViewItemMessageIconUnread"); |
201 mNewMsgIcon->setObjectName("ListViewItemMessageIconUnread"); |
220 drawer = new HbFrameDrawer("qtg_fr_list_new_item", |
202 drawer = new HbFrameDrawer("qtg_fr_list_new_item", |
221 HbFrameDrawer::ThreePiecesVertical); |
203 HbFrameDrawer::ThreePiecesVertical); |
222 drawer->setFillWholeRect(false); |
204 drawer->setFillWholeRect(false); |
223 // Set drawer. Takes ownership of the drawer and deletes previous drawer. |
205 // Set drawer. Takes ownership of the drawer and deletes previous drawer. |
224 mNewMsgIcon->setFrameDrawer(drawer); |
206 mNewMsgIcon->setFrameDrawer(drawer); |
225 mNewMsgIcon->show(); |
207 mNewMsgIcon->show(); |
226 } else { |
208 } else { |
227 |
|
228 setFontsRead(); |
209 setFontsRead(); |
229 mNewMsgIcon->setObjectName("ListViewItemMessageIconRead"); |
210 mNewMsgIcon->setObjectName("ListViewItemMessageIconRead"); |
230 drawer = new HbFrameDrawer(); // Create empty drawer |
211 drawer = new HbFrameDrawer(); // Create empty drawer. |
231 drawer->setFillWholeRect(false); |
212 drawer->setFillWholeRect(false); |
232 // Set drawer. Takes ownership of the drawer and deletes previous drawer. |
213 // Set drawer. Takes ownership of the drawer and deletes previous drawer. |
233 mNewMsgIcon->setFrameDrawer(drawer); |
214 mNewMsgIcon->setFrameDrawer(drawer); |
234 mNewMsgIcon->hide(); |
215 mNewMsgIcon->hide(); |
235 } |
216 } |
236 } |
217 } |
237 |
218 |
238 /*! |
219 /*! |
239 setFontsUnread |
220 Set fonts unread. |
240 */ |
221 */ |
241 void NmMessageListViewItem::setFontsUnread() |
222 void NmMessageListViewItem::setFontsUnread() |
242 { |
223 { |
243 NM_FUNCTION; |
|
244 |
|
245 static QColor colorRole = HbColorScheme::color("qtc_list_item_title_normal"); |
224 static QColor colorRole = HbColorScheme::color("qtc_list_item_title_normal"); |
246 HbFontSpec fontSpec(HbFontSpec::Primary); |
225 HbFontSpec fontSpec(HbFontSpec::Primary); |
247 setFonts(colorRole, fontSpec); |
226 setFonts(colorRole, fontSpec); |
248 } |
227 } |
249 |
228 |
250 /*! |
229 /*! |
251 setFontsRead |
230 Set fonts read. |
252 */ |
231 */ |
253 void NmMessageListViewItem::setFontsRead() |
232 void NmMessageListViewItem::setFontsRead() |
254 { |
233 { |
255 NM_FUNCTION; |
|
256 |
|
257 static QColor colorRole = HbColorScheme::color("qtc_list_item_content_normal"); |
234 static QColor colorRole = HbColorScheme::color("qtc_list_item_content_normal"); |
258 HbFontSpec fontSpec(HbFontSpec::Secondary); |
235 HbFontSpec fontSpec(HbFontSpec::Secondary); |
259 setFonts(colorRole, fontSpec); |
236 setFonts(colorRole, fontSpec); |
260 } |
237 } |
261 |
238 |
262 /*! |
239 /*! |
263 getFontSizes. |
240 Get font sizes. |
264 */ |
241 */ |
265 void NmMessageListViewItem::getFontSizes() |
242 void NmMessageListViewItem::getFontSizes() |
266 { |
243 { |
267 NM_FUNCTION; |
244 // Get font sizes from style. |
268 |
|
269 // Get font sizes from style |
|
270 qreal currentSize; |
245 qreal currentSize; |
271 bool found = style()->parameter(QString("hb-param-text-height-primary"), currentSize ); |
246 bool found = style()->parameter(QString("hb-param-text-height-primary"), currentSize ); |
272 if (found) { |
247 if (found) { |
273 mPrimarySize = currentSize; |
248 mPrimarySize = currentSize; |
274 } |
249 } |
275 found = style()->parameter(QString("hb-param-text-height-secondary"), currentSize ); |
250 found = style()->parameter(QString("hb-param-text-height-secondary"), currentSize ); |
276 if (found) { |
251 if (found) { |
277 mSecondarySize = currentSize; |
252 mSecondarySize = currentSize; |
278 } |
253 } |
279 found = style()->parameter(QString("hb-param-text-height-tiny"), currentSize ); |
254 } |
280 if (found) { |
255 |
281 mTinySize = currentSize; |
256 /*! |
282 } |
257 Set fonts. |
283 } |
258 */ |
284 |
|
285 /*! |
|
286 setFonts. |
|
287 */ |
|
288 void NmMessageListViewItem::setFonts(const QColor &colorRole, |
259 void NmMessageListViewItem::setFonts(const QColor &colorRole, |
289 HbFontSpec &fontSpec) |
260 HbFontSpec &fontSpec) |
290 { |
261 { |
291 NM_FUNCTION; |
|
292 |
|
293 // Change sizes explicitly since css is overwritten in polish now. |
262 // Change sizes explicitly since css is overwritten in polish now. |
294 if (mSender && mSubject && mTime) { |
263 if (mSender && mSubject && mTime) { |
295 |
|
296 if (mPrimarySize) { |
264 if (mPrimarySize) { |
297 fontSpec.setTextHeight(mPrimarySize); |
265 fontSpec.setTextHeight(mPrimarySize); |
298 } |
266 } |
299 mSender->setFontSpec(fontSpec); |
267 mSender->setFontSpec(fontSpec); |
300 mSender->setTextColor(colorRole); |
268 mSender->setTextColor(colorRole); |
301 |
|
302 if (mSecondarySize) { |
269 if (mSecondarySize) { |
303 fontSpec.setTextHeight(mSecondarySize); |
270 fontSpec.setTextHeight(mSecondarySize); |
304 } |
271 } |
305 mSubject->setFontSpec(fontSpec); |
272 mSubject->setFontSpec(fontSpec); |
306 mSubject->setTextColor(colorRole); |
273 mSubject->setTextColor(colorRole); |
307 |
|
308 if (mTinySize) { |
|
309 fontSpec.setTextHeight(mTinySize); |
|
310 } |
|
311 mTime->setFontSpec(fontSpec); |
274 mTime->setFontSpec(fontSpec); |
312 mTime->setTextColor(colorRole); |
275 mTime->setTextColor(colorRole); |
313 } |
276 } |
314 } |
277 } |
315 |
278 |
316 /*! |
279 /*! |
317 senderFieldText. Function returns sender field text from |
280 Get sender field text. Function returns sender field text from |
318 envelope based on currently used function |
281 envelope based on currently used function. |
319 */ |
282 */ |
320 QString NmMessageListViewItem::senderFieldText(const NmMessageEnvelope &envelope) |
283 QString NmMessageListViewItem::senderFieldText(const NmMessageEnvelope &envelope) |
321 { |
284 { |
322 NM_FUNCTION; |
|
323 |
|
324 QString ret; |
285 QString ret; |
325 QVariant folderType = modelIndex().data( |
286 QVariant folderType = modelIndex().data( |
326 NmFolderTypeRole).value<QVariant>(); |
287 NmFolderTypeRole).value<QVariant>(); |
327 switch (folderType.toInt()) { |
288 switch (folderType.toInt()) { |
328 // Outbox, drafts and sent folder, sender name is |
289 // Outbox, drafts and sent folder, sender name is |
329 // replaced with first recipient from to/cc list |
290 // replaced with first recipient from to/cc list. |
330 case NmFolderOutbox: |
291 case NmFolderOutbox: |
331 case NmFolderDrafts: |
292 case NmFolderDrafts: |
332 case NmFolderSent: |
293 case NmFolderSent: |
333 { |
294 { |
334 QList<NmAddress>& toRecipients = envelope.toRecipients(); |
295 QList<NmAddress>& toRecipients = envelope.toRecipients(); |