|
1 /* |
|
2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 #include "cnteditviewitembuilder.h" |
|
18 #include "cnteditviewlistmodel.h" |
|
19 #include "cnteditviewdetailitem.h" |
|
20 #include "cntviewparams.h" |
|
21 #include "cntstringmapper.h" |
|
22 |
|
23 CntEditViewItemBuilder::CntEditViewItemBuilder() : |
|
24 mMap( new CntStringMapper() ) |
|
25 { |
|
26 } |
|
27 |
|
28 CntEditViewItemBuilder::~CntEditViewItemBuilder() |
|
29 { |
|
30 delete mMap; |
|
31 } |
|
32 |
|
33 QList<CntEditViewItem*> CntEditViewItemBuilder::phoneNumberItems(QContact& aContact) |
|
34 { |
|
35 QList<CntEditViewItem*> list; |
|
36 QList<QContactPhoneNumber> numbers = aContact.details<QContactPhoneNumber>(); |
|
37 // template for editor launcher |
|
38 if ( numbers.isEmpty() ) |
|
39 { |
|
40 QContactPhoneNumber number; |
|
41 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
42 number, |
|
43 QContactPhoneNumber::FieldNumber, |
|
44 phoneNumberEditorView ); |
|
45 detailItem->addText( hbTrId("txt_phob_list_add_phone_number") ); |
|
46 detailItem->addIcon( HbIcon(mMap->getMappedIcon(QContactPhoneNumber::DefinitionName)) ); |
|
47 list.append( detailItem ); |
|
48 } |
|
49 // existing phonenumber(s) |
|
50 else |
|
51 { |
|
52 foreach ( QContactPhoneNumber number, numbers ) |
|
53 { |
|
54 if ( !number.subTypes().isEmpty() ) |
|
55 { |
|
56 QString context = number.contexts().isEmpty() ? "" : number.contexts().first(); |
|
57 QString subtype = number.subTypes().first(); |
|
58 |
|
59 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
60 number, |
|
61 QContactPhoneNumber::FieldNumber, |
|
62 phoneNumberEditorView); |
|
63 |
|
64 detailItem->addIcon( mMap->getMappedIcon(subtype) ); |
|
65 detailItem->addText( mMap->getLocString(subtype, context) ); |
|
66 detailItem->addText( number.number() ); |
|
67 list.append( detailItem ); |
|
68 } |
|
69 } |
|
70 } |
|
71 |
|
72 QList<QContactOnlineAccount> urls = aContact.details<QContactOnlineAccount>(); |
|
73 // template for editor launcher |
|
74 if ( !urls.isEmpty() ) |
|
75 { |
|
76 foreach ( QContactOnlineAccount number, urls ) |
|
77 { |
|
78 if ( !number.subTypes().isEmpty() ) |
|
79 { |
|
80 QString context = number.contexts().isEmpty() ? "" : number.contexts().first(); |
|
81 QString subtype = number.subTypes().first(); |
|
82 |
|
83 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
84 number, |
|
85 QContactOnlineAccount::FieldAccountUri, |
|
86 phoneNumberEditorView); |
|
87 detailItem->addIcon( mMap->getMappedIcon(subtype) ); |
|
88 |
|
89 if ( subtype == QContactOnlineAccount::SubTypeSip ) |
|
90 { |
|
91 detailItem->addText( hbTrId("txt_phob_formlabel_val_sip") ); |
|
92 } |
|
93 else |
|
94 { |
|
95 if ( context == QContactOnlineAccount::ContextHome ) |
|
96 detailItem->addText( hbTrId("txt_phob_dblist_internet_telephone_home") ); |
|
97 else if ( context == QContactOnlineAccount::ContextWork ) |
|
98 detailItem->addText( hbTrId("txt_phob_dblist_internet_telephone_work") ); |
|
99 else |
|
100 detailItem->addText( hbTrId("txt_phob_dblist_internet_telephone") ); |
|
101 } |
|
102 detailItem->addText( number.accountUri() ); |
|
103 list.append( detailItem ); |
|
104 } |
|
105 } |
|
106 } |
|
107 |
|
108 return list; |
|
109 } |
|
110 |
|
111 QList<CntEditViewItem*> CntEditViewItemBuilder::emailAddressItems(QContact& aContact) |
|
112 { |
|
113 QList<CntEditViewItem*> list; |
|
114 QList<QContactEmailAddress> emails = aContact.details<QContactEmailAddress>(); |
|
115 // template for editor launcher |
|
116 if ( emails.isEmpty() ) |
|
117 { |
|
118 QContactEmailAddress email; |
|
119 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
120 email, |
|
121 QContactEmailAddress::FieldEmailAddress, |
|
122 emailEditorView); |
|
123 detailItem->addText( hbTrId("txt_phob_list_add_email_address") ); |
|
124 detailItem->addIcon( HbIcon(mMap->getMappedIcon(QContactEmailAddress::DefinitionName)) ); |
|
125 list.append( detailItem ); |
|
126 } |
|
127 // existing email(s) |
|
128 else |
|
129 { |
|
130 foreach ( QContactEmailAddress address, emails ) |
|
131 { |
|
132 QString context = address.contexts().isEmpty() ? "" : address.contexts().first(); |
|
133 |
|
134 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
135 address, |
|
136 QContactEmailAddress::FieldEmailAddress, |
|
137 emailEditorView); |
|
138 detailItem->addIcon( mMap->getMappedIcon(QContactEmailAddress::DefinitionName) ); |
|
139 |
|
140 if ( context == QContactEmailAddress::ContextHome ) |
|
141 detailItem->addText(hbTrId("txt_phob_formlabel_email_home")); |
|
142 else if ( context == QContactEmailAddress::ContextWork ) |
|
143 detailItem->addText(hbTrId("txt_phob_formlabel_email_work")); |
|
144 else |
|
145 detailItem->addText( hbTrId("txt_phob_list_email") ); |
|
146 |
|
147 detailItem->addText( address.emailAddress() ); |
|
148 list.append( detailItem ); |
|
149 } |
|
150 } |
|
151 return list; |
|
152 } |
|
153 |
|
154 QList<CntEditViewItem*> CntEditViewItemBuilder::addressItems(QContact& aContact) |
|
155 { |
|
156 QList<CntEditViewItem*> list; |
|
157 QList<QContactAddress> addresses = aContact.details<QContactAddress>(); |
|
158 |
|
159 if ( addresses.isEmpty() ) |
|
160 { |
|
161 QStringList fieldList; |
|
162 fieldList << QContactAddress::FieldStreet << QContactAddress::FieldPostcode << QContactAddress::FieldPostOfficeBox; |
|
163 fieldList << QContactAddress::FieldLocality << QContactAddress::FieldRegion << QContactAddress::FieldCountry; |
|
164 |
|
165 QContactAddress addr; |
|
166 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
167 addr, |
|
168 fieldList, |
|
169 addressEditorView); |
|
170 detailItem->addText( hbTrId("txt_phob_list_add_address") ); |
|
171 detailItem->addIcon( HbIcon(mMap->getMappedIcon(QContactAddress::DefinitionName)) ); |
|
172 list.append( detailItem ); |
|
173 } |
|
174 return list; |
|
175 } |
|
176 |
|
177 QList<CntEditViewItem*> CntEditViewItemBuilder::urlItems(QContact& aContact) |
|
178 { |
|
179 QList<CntEditViewItem*> list; |
|
180 QList<QContactUrl> urls = aContact.details<QContactUrl>(); |
|
181 // template for editor launcher |
|
182 if ( urls.isEmpty() ) |
|
183 { |
|
184 QContactUrl url; |
|
185 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
186 url, |
|
187 QContactUrl::FieldUrl, |
|
188 urlEditorView ); |
|
189 detailItem->addText( hbTrId("txt_phob_list_add_url_address") ); |
|
190 detailItem->addIcon( HbIcon(mMap->getMappedIcon(QContactUrl::DefinitionName)) ); |
|
191 list.append( detailItem ); |
|
192 } |
|
193 // existing url(s) |
|
194 else |
|
195 { |
|
196 foreach ( QContactUrl url, urls ) |
|
197 { |
|
198 QString context = url.contexts().isEmpty() ? "" : url.contexts().first(); |
|
199 |
|
200 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
201 url, |
|
202 QContactUrl::FieldUrl, |
|
203 urlEditorView ); |
|
204 detailItem->addIcon( mMap->getMappedIcon(QContactUrl::DefinitionName) ); |
|
205 |
|
206 if ( context == QContactUrl::ContextHome ) |
|
207 detailItem->addText( hbTrId("txt_phob_dblist_url_home") ); |
|
208 else if ( context == QContactUrl::ContextWork ) |
|
209 detailItem->addText( hbTrId("txt_phob_dblist_url_work") ); |
|
210 else |
|
211 detailItem->addText( hbTrId("txt_phob_list_url") ); |
|
212 |
|
213 detailItem->addText( url.url() ); |
|
214 list.append( detailItem ); |
|
215 } |
|
216 } |
|
217 return list; |
|
218 } |
|
219 |
|
220 QList<CntEditViewItem*> CntEditViewItemBuilder::addressDetails(QContact& aContact) |
|
221 { |
|
222 QList<CntEditViewItem*> list; |
|
223 // Address |
|
224 foreach( QContactAddress addr, aContact.details<QContactAddress>() ) |
|
225 { |
|
226 QStringList fieldList; |
|
227 fieldList << QContactAddress::FieldStreet << QContactAddress::FieldPostcode << QContactAddress::FieldPostOfficeBox; |
|
228 fieldList << QContactAddress::FieldLocality << QContactAddress::FieldRegion << QContactAddress::FieldCountry; |
|
229 |
|
230 QStringList valueList; |
|
231 foreach ( QString str, fieldList ) |
|
232 { |
|
233 valueList << addr.value( str ); |
|
234 } |
|
235 |
|
236 QString address = valueList.join(" ").trimmed(); |
|
237 if ( !address.isEmpty() ) |
|
238 { |
|
239 QString context = addr.contexts().isEmpty() ? "" : mMap->getMappedDetail(addr.contexts().first() ); |
|
240 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
241 addr, |
|
242 fieldList, |
|
243 addressEditorView); |
|
244 |
|
245 if ( context == QContactAddress::ContextHome ) |
|
246 detailItem->addText(hbTrId("txt_phob_dblist_url_home")); |
|
247 else if ( context == QContactAddress::ContextWork ) |
|
248 detailItem->addText(hbTrId("txt_phob_dblist_url_work")); |
|
249 else |
|
250 detailItem->addText(hbTrId("txt_phob_list_address")); |
|
251 |
|
252 detailItem->addText( address ); |
|
253 list.append( detailItem ); |
|
254 } |
|
255 } |
|
256 return list; |
|
257 } |
|
258 |
|
259 QList<CntEditViewItem*> CntEditViewItemBuilder::companyDetails(QContact& aContact) |
|
260 { |
|
261 QList<CntEditViewItem*> list; |
|
262 // Company |
|
263 QContactOrganization org = aContact.detail<QContactOrganization>(); |
|
264 QStringList detailList; |
|
265 detailList << org.title(); |
|
266 detailList << org.name(); |
|
267 detailList << org.department().join(" ").trimmed(); |
|
268 |
|
269 QString company = detailList.join(" ").trimmed(); |
|
270 if ( !company.isEmpty() ) |
|
271 { |
|
272 QStringList fields; |
|
273 fields << QContactOrganization::FieldTitle; |
|
274 fields << QContactOrganization::FieldName; |
|
275 fields << QContactOrganization::FieldDepartment; |
|
276 |
|
277 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
278 org, |
|
279 fields, |
|
280 companyEditorView); |
|
281 detailItem->addText( hbTrId("txt_phob_list_company_details") ); |
|
282 detailItem->addText( company ); |
|
283 list.append( detailItem ); |
|
284 } |
|
285 |
|
286 // Assistant |
|
287 QString assistant = org.assistantName(); |
|
288 if ( !assistant.isEmpty() ) |
|
289 { |
|
290 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
291 org, |
|
292 QContactOrganization::FieldAssistantName, |
|
293 companyEditorView); |
|
294 detailItem->addText( hbTrId("txt_phob_formlabel_assistant") ); |
|
295 detailItem->addText( assistant ); |
|
296 list.append( detailItem ); |
|
297 } |
|
298 return list; |
|
299 } |
|
300 |
|
301 QList<CntEditViewItem*> CntEditViewItemBuilder::dateDetails(QContact& aContact) |
|
302 { |
|
303 QList<CntEditViewItem*> list; |
|
304 // Birthday |
|
305 QContactBirthday bd = aContact.detail<QContactBirthday>(); |
|
306 if ( bd.date().isValid() ) |
|
307 { |
|
308 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
309 bd, |
|
310 QContactBirthday::FieldBirthday, |
|
311 dateEditorView); |
|
312 detailItem->addText( hbTrId("txt_phob_formlabel_birthday") ); |
|
313 detailItem->addText(QLocale::system().toString( bd.date() )); |
|
314 list.append( detailItem ); |
|
315 } |
|
316 |
|
317 // Anniversary |
|
318 QContactAnniversary anniversary = aContact.detail<QContactAnniversary>(); |
|
319 if ( anniversary.originalDate().isValid() ) |
|
320 { |
|
321 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
322 anniversary, |
|
323 QContactAnniversary::FieldOriginalDate, |
|
324 dateEditorView); |
|
325 detailItem->addText( hbTrId("txt_phob_formlabel_anniversary") ); |
|
326 detailItem->addText( QLocale::system().toString( anniversary.originalDate() )); |
|
327 list.append( detailItem ); |
|
328 } |
|
329 return list; |
|
330 } |
|
331 |
|
332 QList<CntEditViewItem*> CntEditViewItemBuilder::noteDetails(QContact& aContact) |
|
333 { |
|
334 QList<CntEditViewItem*> list; |
|
335 // Note |
|
336 foreach ( QContactNote note, aContact.details<QContactNote>()) |
|
337 { |
|
338 QString text = note.note(); |
|
339 if ( !text.isEmpty() ) |
|
340 { |
|
341 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
342 note, |
|
343 QContactNote::FieldNote, |
|
344 noteEditorView); |
|
345 detailItem->addText( hbTrId("txt_phob_list_note") ); |
|
346 detailItem->addText( text ); |
|
347 list.append( detailItem ); |
|
348 } |
|
349 } |
|
350 return list; |
|
351 } |
|
352 |
|
353 QList<CntEditViewItem*> CntEditViewItemBuilder::familyDetails(QContact& aContact) |
|
354 { |
|
355 QList<CntEditViewItem*> list; |
|
356 // Spouse |
|
357 QContactFamily family = aContact.detail<QContactFamily>(); |
|
358 QString spouse = family.spouse(); |
|
359 if ( !spouse.isEmpty() ) |
|
360 { |
|
361 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
362 family, |
|
363 QContactFamily::FieldSpouse, |
|
364 familyDetailEditorView); |
|
365 detailItem->addText( hbTrId("txt_phob_formlabel_spouse") ); |
|
366 detailItem->addText( spouse ); |
|
367 list.append( detailItem ); |
|
368 } |
|
369 |
|
370 // Children |
|
371 QString children = family.children().join(", "); |
|
372 if ( !children.isEmpty() ) |
|
373 { |
|
374 CntEditViewDetailItem* detailItem = new CntEditViewDetailItem( |
|
375 family, |
|
376 QContactFamily::FieldChildren, |
|
377 familyDetailEditorView); |
|
378 detailItem->addText( hbTrId("txt_phob_formlabel_children") ); |
|
379 detailItem->addText( children ); |
|
380 list.append( detailItem ); |
|
381 } |
|
382 return list; |
|
383 } |
|
384 |
|
385 bool CntEditViewItemBuilder::isTemplateItem( const QString& aDefinition ) |
|
386 { |
|
387 QStringList templateItems; |
|
388 templateItems << QContactPhoneNumber::DefinitionName; |
|
389 templateItems << QContactEmailAddress::DefinitionName; |
|
390 templateItems << QContactAddress::DefinitionName; |
|
391 templateItems << QContactUrl::DefinitionName; |
|
392 |
|
393 return templateItems.contains( aDefinition ); |
|
394 } |
|
395 |
|
396 void CntEditViewItemBuilder::removeDetail( QContact& aContact, QContactDetail& aDetail, QStringList aFields ) |
|
397 { |
|
398 if ( aDetail.definitionName() == QContactOrganization::DefinitionName ) |
|
399 { |
|
400 QContactOrganization org = aContact.detail<QContactOrganization>(); |
|
401 if ( aFields.contains(QContactOrganization::FieldAssistantName) ) |
|
402 { |
|
403 org.setAssistantName(QString()); // empty |
|
404 } |
|
405 else |
|
406 { |
|
407 org.setTitle( QString() ); |
|
408 org.setName( QString() ); |
|
409 org.setDepartment( QStringList() ); |
|
410 } |
|
411 |
|
412 if ( org.assistantName().isEmpty() && |
|
413 org.title().isEmpty() && |
|
414 org.name().isEmpty() && |
|
415 org.department().isEmpty() ) |
|
416 aContact.removeDetail(&org); |
|
417 else |
|
418 aContact.saveDetail(&org); |
|
419 } |
|
420 |
|
421 else if ( aDetail.definitionName() == QContactFamily::DefinitionName ) |
|
422 { |
|
423 QContactFamily family = aContact.detail<QContactFamily>(); |
|
424 if ( aFields.contains(QContactFamily::FieldSpouse) ) |
|
425 { |
|
426 family.setSpouse( QString() ); |
|
427 } |
|
428 else |
|
429 { |
|
430 family.setChildren( QStringList() ); |
|
431 } |
|
432 |
|
433 if ( family.spouse().isEmpty() && family.children().isEmpty() ) |
|
434 aContact.removeDetail( &family ); |
|
435 else |
|
436 aContact.saveDetail( &family ); |
|
437 } |
|
438 else |
|
439 { |
|
440 aContact.removeDetail( &aDetail ); |
|
441 } |
|
442 } |
|
443 // End of File |